1.3 协议层报文间的封装与拆封

本书的后面章节会对TCP/IP协议栈中的每层协议进行分析和讲解。在这里,我们以图1-2简单解释一下在数据的发送和接收过程中,TCP/IP都做了什么。

图1-2 TCP/IP协议栈各层的报文封装与拆封

当用户发送数据时,将数据向下交给传输层,这是应用层中的操作,应用层可以通过调用传输层的接口来编写特定的应用程序。而TCP/IP一般也会包含一些简单的应用程序,如Telnet远程登录、FTP文件传输、SMTP邮件传输等。传输层会在数据前面加上传输层首部(此处以TCP为例,图1-2所示的传输层首部为TCP首部,也可以是UDP首部),然后向下交给网络层。同样地,网络层会在数据前面加上网络层首部(IP首部),然后将数据向下交给数据链路层,数据链路层会对数据进行最后一次封装,即在数据前面加上数据链路层首部(此处使用以太网接口为例),然后将数据交给网卡。最后,网卡将数据转换成物理链路上的电平信号,数据就这样被发送到了网络中。数据的发送过程可以概括为TCP/IP的各层协议对数据进行封装的过程,如图1-2所示。

当设备的网卡接收到某个数据包后,它会将其放置在网卡的接收缓存中,并告知TCP/IP内核,然后TCP/IP内核就开始工作了,它会将数据包从接收缓存中取出,并逐层解析数据包中的协议首部信息,并最终将数据交给某个应用程序。数据的接收过程与发送过程正好相反,可以概括为TCP/IP的各层协议对数据进行解析的过程。