网络基础1——TCP/IP协议 数据包的封装与分用

何为协议?

通俗来讲,协议就是一种约定,在具体实施某一事务前双方做好的约定。在网络中,约定是由机器语言指定好的。
那么,只要通信的两台主机,约定好协议就可以了吗?不可以,由于计算机操作系统、计算机网络硬件设备种类多,所以要约定一个共同的标准,大家都来遵守,这就是网络协议。

协议分层

OSI七层模型把网络分成了应用层、表示层、会话层、传输层、网络层、数据链路层、物理层,它最大的优点是将服务、接口和协议三个概念明确的区分开来,但是它既复杂也不实用,所以我们最常用TCP/IP五层模型(也称四层模型,因为物理层偏硬件,所以考虑较少)
网络基础1——TCP/IP协议 数据包的封装与分用_第1张图片
一般来讲:
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容
对于一台路由器,它实现了从网络层到物理层
对于一台交换机,它实现了从数据链路层到物理层
对于集线器,它只实现了物理层
但是并不绝对!!

数据包的封装

TCP/IP协议族的上层协议是通过封装来使用下层服务的。应用程序数据通过协议栈在发送到物理网络之前,将沿着协议族从上往下依次封装,每层协议都要加上一个自己的数据首部(以太网包括尾部)。
首部信息包括首部有多长、载荷有多长、上层协议是什么等……
下图为封装的过程:
网络基础1——TCP/IP协议 数据包的封装与分用_第2张图片
*经过TCP封装后的数据成为TCP报文段(TCP段)。*TCP协议为通信双方维护一个连接,并且在内核中存储相关数据。这部分数据中的TCP头部信息和TCP内核缓冲区(发送缓冲区或是接收缓冲区)数据一起构成了TCP报文段。当发送端应用程序使用sendto(或write)函数向一个TCP连接写入数据时,内核中的TCP模块首先把这些数据复制到与该连接对应的TCP内核发送缓冲区中,然后TCP模块调用IP模块提供的服务,传递的参数包括TCP头部信息和TCP发送缓冲区中的数据,即TCP报文段。
*经过UDP封装后的数据称为UDP数据报。*UDP对应用程序的封装与TCP类似。不同的是,UDP不需要建立连接,没有确认机制和重传机制,所以不可靠。应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。当一个UDP数据报被成功发送之后,UDP内核缓冲区中的该数据报就被丢弃了(因此UDP没有真正意义上的发送缓冲区,sendto的数据直接交给内核,由内核进行交给网络层)。如果应用程序检测到该数据报未能被接受端正确接收,并打算重新发送这个数据报,则应用程序需要重新从用户空间将该数据拷贝到UDP内核中。
*经过IP封装后的数据称为IP数据报。*IP数据报包括头部信息和数据部分,其中数据部分就是一个TCP报文段、UDP数据报或者ICMP报文。
*经过数据链路层封装的数据称为帧(frame)。*传输媒介不同,帧的类型也不同。比如以太网上传输的是以太网帧,而令牌环网上传输的则是令牌环帧。
至此,封装过程完成。

分用

数据封装成帧后发到传输介质上,到达目的主机后将沿着TCP/IP协议族从下往上每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理,最终将处理后的数据交给目标应用程序。这个过程称为分用。
分用过程如下图:网络基础1——TCP/IP协议 数据包的封装与分用_第3张图片

你可能感兴趣的:(编程)