TCP/IP分层结构
ISO提出的OSI网络模型,只是理论上的模型,在与TCP/IP模型长达十多年竞争中,已处于劣势,从未被计算机和OS系统厂商实现和支持过。而TCP/IP模型是事实上的网络通信标准。
上面两图展示了TCP/IP模型中的分层结构,注意其中的区别(ICMP/IGMP、ARP/RARP的分类):
左图的四层是以功能来划分的:
链路层,实现物理层硬件特性的处理,通常包括设备驱动程序及网卡接口;
网络层,实现路由功能,包括IP、ICMP、IGMP;
传输层,实现数据传输与控制,包括TCP、UDP;
应用层,具体的应用层程序。
右图的四层是以实现来划分的:
在帧头部中,使用类型字段来标识上层协议(IP、ARP、RARP);
在IP的头部中,使用协议号字段来标识上层协议(TCP、UDP、ICMP、IGMP,其中,值1表示为I C M P协议, 2表示为I G M P协议, 6表示为T C P协议, 1 7表示为U D P协议);
TCP/IP对等传输
数据由一端应用程序到对端应用程序的过程。其中,左图为对等系统,中间未经过路由转发;右图,中间经过了路由器(主机叫端系统,路由器叫中间设备);
通常主机并不转发数据包,但主机也具有路由功能,这要求主机配置有多个网卡。如配置有两个网卡,可将一个网卡的网关设置为另一个网卡的IP,即可完成数据包的转发。
封包过程,解包过程是个逆过程。
注意各层协议的头部长度:
TCP头,固定长度20字节,另有可选项,最大长度为60字节;
UDP头,固定长度8字节;
IP头,固定长度20字节,另有可选项,最大长度为60字节;
帧头,固定长度14字节;
TCP/UDP头部中使用端口号字段来标识应用程序;
IP头部中使用协议号字段来标识上层协议(TCP、UDP、ICMP、IGMP);
帧头部中使用类型字段来标识上层协议(IP、ARP、RARP);
数据包在各层中的称呼:
Tcp segment, TCP报文,可分割
Ip datagram/fragment, IP报文,可分割
UDP数据报, 不可分割。
链路层,帧。
另外,注意TCP/IP在同一层级上,是对待协议,即数据在发送端加的包头,需要在接收端的同一层协议中,解去包头。
以太网数据帧(即数据部分,不包括帧头和帧尾)的物理特性是其长度必须在 4 6~1 5 0 0字节之间。另外,wireshark实际抓包中发现,帧最大的大小为1514,可见未包含尾部(其中,以太网帧头14字节,帧数据部分1500字节)。