计算机网络——传输层探究
前言
我们知道,在 TCP/IP 五层协议模型中,最上层是应用层,也就是我们的应用程序(例如我们的浏览器,通过应用层http协议收发数据),之后数据通过传输层下发到网络世界(网络层)当中去。而像网络层的设备和协议,例如路由器和IP协议,数据交付是不可靠的,会存在丢包。而本篇的主角——运输层,解决的正是这样一个问题:两个实体怎样才能在一种会丢失或损坏数据的媒体上可靠地通信。
我们知道,在 TCP/IP 五层协议模型中,最上层是应用层,也就是我们的应用程序(例如我们的浏览器,通过应用层http协议收发数据),之后数据通过传输层下发到网络世界(网络层)当中去。而像网络层的设备和协议,例如路由器和IP协议,数据交付是不可靠的,会存在丢包。而本篇的主角——运输层,解决的正是这样一个问题:两个实体怎样才能在一种会丢失或损坏数据的媒体上可靠地通信。
好久没写博客了。感觉最近有点懒了。重新拾起《计算机网络——自顶向下方法》看看,这一篇聊聊网络层。
一个 Web 应用程序,首先接触的应用层协议是 超文本传输协议(HyperText Transfer Protocol,HTTP)。
HTTP由两个程序实现:一个客户端、一个服务器。其连接模型大致为:
一个 web 应用是如何运行的?作为软件开发者,我们必须得有一个完整的层次化的认知。这一篇将从浏览器,到 HTTP,HTML,web server,request handles 等方面切入,聊聊当我们输入一个网址的时候,后台到底发生了什么。
TCP和UDP是OSI模型运输层
中的协议。
TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
前面两篇介绍 Socket 的文章中,简单描述了 Socket 网络编程的过程。这一篇,主要介绍一下 TCP 的工作原理。包含以下六点:
之前在浅谈 Socket 编程一篇中,初步使用 Socket 套接字,在 linux 下用 C 实现了一个客户端/服务器 通信的例子。但是由于C语言比较隐晦难懂,很多自定义的数据结构也偏向于底层,导致我对于 TCP/UDP Socket 的过程理解不深。这一篇,主要站在应用的角度,用实际的例子,补充实践 Socket 通信的过程。一开始为了更好地理解,使用了 Python 语言。2019年1月9日闲来无事,用java重写了一遍,感受对比一下 java 的繁琐和 python 的简洁(真是无趣的家伙)。
京东图书日买了几本专业书籍。其中一本是《计算机网络:自顶向下方法》,算是很知名的一本介绍计算机网络的书了。今天晚上看了第一章,很是过瘾。大二的计算机网络课程,虽然拿了90+的成绩,但说实话,对计算机网络的很多概念(包括七层模型)都是模糊的。希望看完这本书,能补一补大二欠下的计算机网络的知识吧。决定开坑,把这本书的一些知识点归纳到博客里。
计算机程序之间的通信,是进程与进程之间的通信。之前在 Linux 学习中就遇到用管道(PIPE)来让一个进程的输出和另一个进程的输入连接起来,从而利用文件操作API来管理进程间通信。