1.数据包首部
每个分层中都会对所发送的数据附加一个首部,其中包含了该层必要的信息,如发送端地址、接收端地址以及协议等相关信息。
2.发送数据包
1)应用程序处理
进行编码处理(相当于表示层功能),管理何时建立通信何时发送数据等功能(相当于会话层功能)。建立连接后将数据发送给下一层的TCP,再做实际的转发处理。
2)TCP模块的处理
TCP根据应用的提示,负责建立连接、发送数据以及断开连接。提供可靠传输。
在数据前端附加一个TCP首部,包括源端口号、目标端口号(用以识别发送主机跟接收主机上的应用)、序号以及校验和(判断数据是否被损坏)。再将数据发送给IP。
3)IP模块的处理
IP在TCP传过来的数据前附加IP首部,包括接收端IP、发送端IP、上层协议等信息。
IP包生成后,参考路由控制表决定接收此IP包的路由或主机。随后将数据发送给连接这些路由器或主机网络接口驱动程序,以实现真正的数据发送。
如果不知道接收端MAC地址,则通过ARP查找。
4)网络接口(以太网驱动)的处理
在接收到的数据前面附加以太网首部进行发送处理。以太网首部中包含接收端MAC地址、发送端MAC地址以及标志以太网类型的以太网数据协议。发送处理中的FCS由硬件计算,添加到包的最后。FCS为了判断数据包在传输过程中是否被破坏。
3.经过数据链路的包
包流动时,从前往后依次被附加了以太网包首部、IP包首部、TCP包首部(或UDP包首部)以及应用自己的包首和数据。而包的最后则被添加了以太网包尾。
每个包首部中至少包含两个信息:一个是发送端和接收端地址,另一个是上一层的协议类型。
经过每个协议分层时,都必须有识别包发送端和接收端的信息。以太网会用MAC地址,IP会用IP地址,而TCP/IP则会用端口号作为识别两端主机的地址。
4.数据包接收处理
包的接收流程是发送流程的逆序过程。
1)网络接口(以太网驱动)的处理
主机接收到以太网包以后,首先从包首部找到MAC地址判断是否为发给自己的包。如果不是则丢弃数据。
如果是发给自己的包,就查找包首部中的类型域,确定传送过来的数据类型,传给相应的子程序进行处理(若是IP类型作为传给IP,若是ARP类型则传给ARP处理),若没有对应的类型,则丢弃数据。
2)IP模块的处理
IP模块收到包以后,做相似处理。如果包首部的IP地址与自己的IP地址匹配,则接收数据并查找上一层协议。如果上一层是TCP就传给TCP处理,如果是UDP则传给UDP处理。对于路由器,往往接收端地址不是自己的地址,此时需要借助路由控制表转发数据。
3)TCP模块的处理
TCP模块首先会计算校验和,判断数据是否被破坏。然后检查是否按照序号接收数据。最后检查端口号,确定具体的应用程序。
数据接收完毕后,接收端会发送一个“确认回执”给发送端。如果该信息一直未到达,那么发送端会认为接收端没有接收数据而一直反复发送。
数据完整地接收以后,会传给由端口号识别的应用程序。
4)应用程序的处理
接收端应用程序会直接接收发送的数据。如果接收正常,会返回“处理正常”的回执,否则会发送相应的错误信息。
——《图解TCP IP》学习笔记