IP、TCP、UDP首部详解

IP首部 IP首部字段图

IP、TCP、UDP首部详解

文章插图
IP首部字段详情
4位版本:
协议版本号,IPv4是0100,IPv6是0110,目前基本都是IPv4版本 。
4位首部长度:
指首部占32bit字的数目,包括选项区,也就是说单位是4个字节,如图1-1首部是20个字节,那首部字段值为5,即0101,首部最大值是1111,也就是说首部长度字段最大可表示15(1111)*4 = 60字节长度(包含选项段) 。普通IP数据报(没有任何选项),该字段的值是5,即160比特=20字节 。
8位服务类型(TOS):
TOS字段包含一个3bit的优先权字段(现已被忽略),4bit的TOS字段和1bit未用但必须置0 。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用 。4bit中只能置其中1bit,如果所有4bit均为0,表示一般服务 。
16位总长度:
总长度字段是指整个IP数据报的长度,以字节为单位 。通过首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和长度 。由于该字段长16bit,所以IP数据报最长可达65535字节,当数据报被分片时,该字段的值也随着变化 。
16位标识:
标识字段唯一地标识主机发送的每一份数据报 。通常每发送一份报文它的值就会加1 。如果IP数据报要分片,则每个分片之后的IP数据报的标识是一样的 。
3位标志:
3位标志,目前只有2位有意义;最低位为MF,MF=1代表后面还有分片的数据报,MF=0代表当前数据报已是最后的数据报 。次低位为DF,DF=1代表不能分片,DF=0代表可以分片 。
13位偏移:
此字段是和3位标志中的最低位MF配合使用的 。表示某个分片在原始数据中的相对位置 。举个例子,假如发送1473字节的UDP数据报,UDP数据报被分成两份,第一份UDP数据报大小则为1480字节(1472+8字节UDP报头),第一份数据报偏移位为0,第二份UDP数据报偏移位字段值则是1480 。
8位生存时间(TTL):
生存时间字段设置了数据报可以经过的最多路由器数,它指定了数据报的生存时间 。TTL的初始值由源主机设置(通常是32或64),一旦经过一个处理它的路由器,它的值就减去1,当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机 。
8位协议:
指明IP层所封装的上层协议类型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)等 。
16位首部检验和:
首部检验和字段是根据IP首部计算的检验和码,用于验证数据的完整性,它不对首部后面的数据进行计算 。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据的检验和码,而IP不对头部后面的数据进行检验 。计算方法可参考此篇文章() 。
32位源IP地址和目的IP地址:
用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址 。
【IP、TCP、UDP首部详解】32位选项:
用来定义一些任选项:如记录路径、时间戳等 。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项 。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求,这样可以保证IP首部始终是32bit的整数倍(这是首部长度字段所要求的) 。
TCP首部 封装TCP数据的IP数据报(途中TCP首部应该为10字节,特此说明)
IP、TCP、UDP首部详解

文章插图
TCP首部字段图
IP、TCP、UDP首部详解

文章插图
TCP首部字段详情
16位源端口、目的端口:
每个TCP段都包含源端口和目的端端口号,用于寻找发端和收端应用进程 。这两个值加上IP首部中的源端IP地址和目的IP地址就唯一确定一个TCP连接 。