tcp header
一般header有20 bytes,每行4 bytes(32 bits),5行
第一行:Source port + Destination port
Source port:发送方端口号。16bits。
Destination port:接收方端口号。16bits。
因为port占2个字节,所以端口范围是0~65535
第二行:Sequence number
表示发送方的序列号。32bits。tcp是可靠传输,每个byte都有标号,需要追踪每个byte是否传输成功,每个byte的标号就是Sequence number。
初始序列号一般是随机的。
第三行:Acknowledge number
表示接收方的ack序列号。32bits。ack number 和 seq number是配对使用的。只有当ack标志为1时,该序列号有效
第四行:CWR 到 FIN 8个 bit标记位,用来标记当前TCP package的含义。
第五行:Checksum + Urgent pointer
checksum: 做完整性校验,由发送方计算,接收方校验
urgent pointer: 为2个bytes偏移量,加上seq number用于标记某个范围内的bytes特殊用途
ip header
第一行:Version + Header length + Type of service + Total length
version : 版本号。4bits。标志目前采用的ip协议版本号,IPv4(0100),IPv6(0110)
header length:IP包头长度。4bits。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值= IP头部长度(单位为bit)/(8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。IP包头最小长度为20字节。
type of service:服务类型。8bits。
PPP:定义包的优先级,取值越大数据越重要
000 普通 (Routine)
001 优先的 (Priority)
010 立即的发送 (Immediate)
011 闪电式的 (Flash)
100 比闪电还闪电式的 (Flash Override)
101 CRI/TIC/ECP(找不到这个词的翻译)
110 网间控制 (Internetwork Control)
111 网络控制 (Network Control)
D 时延: 0:普通 1:延迟尽量小
T 吞吐量: 0:普通 1:流量尽量大
R 可靠性: 0:普通 1:可靠性尽量大
M 传输成本: 0:普通 1:成本尽量小
0 最后一位被保留,恒定为0
total length:IP包总长。16bits。 以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。
第二行:Identifier + Flags + Fragmented Offset
Identifier:标识符。16bits。该字段与两外2个字段联合使用,对较大的上层数据包进行分段操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
Flags:标记。3bits。
第一位不使用
第二位DF(Don't Fragment)位,1表示路由器不能对该上层数据包分段,
第三位MF(More Fragment)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。
Fragmented Offset:片偏移。13bits。表示该ip包在该组分片包中的位置,接收端靠该字段来还原IP包。
第三行:Time to live(TTL) + Protocol + Header Checksum
Time to live(TTL) :生存时间。8bits。当IP包进行传送时,对该字段赋值,当IP包经过每一个沿途的路由时,TTL减1,如果TTL为0,该IP包丢弃。可以防止由于路由环路IP包在网络中不停被转发。
Protocol:协议。8bits。标志上层使用的协议。
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
Header Checksum:头部校验。16bits。用来做IP Header 正确性检测。因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
第四行:Source Address
起源地址。32bits。
第五行:Destination Address
目标地址。32bits。
除非使用NAT,否则整个传输过程中,这两个地址不会改变。
网友评论