程序员人生 网站导航

TCP/IP数据包格式详解-包括数据链路层的头部

栏目:互联网时间:2014-11-10 08:24:01

图中括号中的数字代表的是当前域所占的空间大小,单位是bit位。

黄色的是数据链路层的头部,1共14字节

绿色的部份是IP头部,1般是20字节

紫色部份是TCP头部,1般是20字节

最内部的是数据包内容

黄色部份:链路层

目的MAC当前step目的主机的mac地址

MAC当前step的源主机的mac地址

类型:指定网络层所用的协议类型,通常是IP协议,0x0800


绿色部份:网络层,这里用的是IP包头格式

版本:记录数据报属于哪个版本的协议,如IPv4IPv6

首部长度:指明IP头部长度,单位是字,也就是两个字节。该域的值最小为5,就是标准的头部长度;最大为15,表明有扩大部份。

服务类型:用来辨别不同服务的需要

数据报总长:包括IP头部的数据报的总长度。注意,这里不包括链路层的头部,目前最大值是65535字节。

分组ID这个域的作用是当1个大的数据报被拆分时,拆分成的小的数据段的这个域都是1样的。

标记:共3个bit,第1个未使用;第2个DF(Don’t Fragment),设置成1表示这个数据包不能被分割,这个是针对路由器的1条指令;第3个MF(MoreFragment),如果1个数据包被分割了,那末除最后1个分段之外的所有分段都必须设置为1,用来表示后面还有更多的分段没有到达,最后1个设置为0,用来表示分割的段全部到达。

段偏移量:这个域有13bit,也就是每个数据报最多有8192个分段。每个分段的长度必须是8字节的倍数,也就是说8字节是分段的基本单位,固然分组的最后1个段不做限制。这样最大的数据报长度为8*8192=65536字节,比目前限制的最大数据报长度还多1,能够满足对网络中所有数据报传送的需求。

生存时间:这是1个生存期计数器,最大为255s,但是实际上使用的时候用作跳数计数器,当值为0时数据报被抛弃,用来避免1个数据报太久的逗留在网络中。

高层协议:这里和链路层的类型作用相同,用来表示更高层的协议,这个数据报里是TCP

首部校验和:IP头部的校验和

IP地址:数据报来源主机的IP地址

目的IP地址:数据报目的主机的IP地址


紫色部份:传输层,这里用的是TCP协议

源端口号:数据报来源主机的端口号

目的端口号:数据报目的主机的端口号

注意:源IP地址,目的IP地址,源端口号,目的端口号这4个字段唯1的肯定了1个TCP链接。

TCP序号(sq)发送的TCP的序号,从0开始,实际中这个值就是发送的数据报中内容的字节数,比如我发送的第1个报中sq=0,数据报内容20字节,那末下1个数据报的sq就应当是21

捎带的确认(ack)确认收到上1个数据报,然后act的值是指定自己想要收到的下1个数据报的sq,比如我收到1个数据报的sq=0,数据报内容20字节,那末我的ack就应当是21,用来标明我sq=0,内容为20字节的数据报已收到,我接下来期望收到的是sq=21的数据报。

首部长度:IP头部的长度域类似,这个域用来标明TCP头部的长度,单位也是字。

保存:6bit未使用的域

Flag从左到右,[URG|ACK|PSH|RST|SYN|FIN]

ACK设置为1表示前面的确认(ack)是有效的,否则前面的确认应被疏忽。

PSH表示要求对方在接到数据后立即要求递交给利用程序,而不是缓冲起来直到缓冲区收满为止。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐