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不对头部后面的数据进行检验。计算方法可参考此篇文章(https://www.cnblogs.com/furenjian/p/5022103.html)。

32位源IP地址和目的IP地址:
用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址。

32位选项:
用来定义一些任选项:如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求,这样可以保证IP首部始终是32bit的整数倍(这是首部长度字段所要求的)。

TCP首部

封装TCP数据的IP数据报(途中TCP首部应该为10字节,特此说明)

IP、TCP、UDP首部详解

TCP首部字段图

IP、TCP、UDP首部详解

TCP首部字段详情

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

32位***:
用来标识从TCP发端向TCP收端发送的数据字节流,它表示当前报文段的第一个数据字节占整个字节流的相对位置。序号是32bit的无符号数,序号到达2^32 - 1后又从0开始。

32位确认号:
表示接收端希望接收的数据序号,为上次接收到数据报的序号+1,当ACK标志位为1时才生效。

4位首部长度:
指出首部中32bit字的数目。需要这个值是因为选项字段的长度是可变的。这个字段占4bit,因此TCP最多有60字节的首部,通常情况下没有选项字段,TCP的首部长度是20个字节。

6位标志位:
URG:紧急指针有效,当URG=1时生效。
ACK:确认序号有效,当ACK=1时生效。
PSH:接受方应该尽快将这个报文段交给应用层,而不是等待缓冲区满。
RST:重建链接。
SYN:同步序号,用来发起一个连接。
FIN:发端完成发送任务。

16位窗口大小:
TCP的流量控制由连接的每一端通过声明的窗口大小来控制。它表示接收方可接受数据字节数。窗口大小是一个16bit字段,因而窗口大小最大为65535字节。

16位TCP校验和:
校验和覆盖了整个TCP报文段包括TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。

16位紧急指针:
只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号,用于TCP紧急数据发送。

选项:
最常见的可选字段是最长报文大小,又称为MSS。每个连接方通常在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项。它指明本端所有接收的最大长度的报文段。

数据:
TCP中的数据部分也是可选的。在一个TCP连接的建立和终止时,双发交换的报文段仅有TCP首部。

UDP首部

封装UDP数据报的IP数据报

IP、TCP、UDP首部详解

UDP首部字段图

IP、TCP、UDP首部详解

UDP首部字段详情

16位源端口、目的端口:
用来标识源端和目标端的应用进程。

16位UDP长度:
该字段表示UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送0字节的UDP数据报是OK的)。

16位UDP校验和:
UDP校验和覆盖了UDP首部和UDP数据。UDP的校验和是可选的,而TCP的校验和是必需的。

相关文章: