下图中就是我们刚才通过wireshark软件抓到的TCP数据报。
图3是259这个数据报的封装格式:
图3-tcp数据报文结构
tcp数据报中首部的各个字段分析:
Transmission Control Protocol, Src Port: 51211, Dst Port: 80, Seq: 0, Len: 0
Source Port: 51211 //源端口,是一个动态的端口
Destination Port: 80 //访问的目的主机的80端口,说明是访问基于http协议的资源
[Stream index: 4] //流索引,如果访问的源IP和源端口,目的IP和目的端口如果始终不变的话,这个索引值一直都是0,只要有其中一个变,这个索引值就会变,但是TCP数据报格式中是没有这个字段的
[TCP Segment Len: 0] //tcp报文段的长度为0,说明我们还没有开始传输数据,这是一个tcp连接请求报文,并没有携带数据
Sequence number: 0 (relative sequence number) //序号分为相对序号和绝对序号,relative是相对的意思,这里说的是相对序号
Acknowledgment number: 0 //确认号为0
1000 .... = Header Length: 32 bytes (8) //首部长度字段为32字节,说明可选字段长度为12字节,首部长度为20字节
Flags: 0x002 (SYN) //说明这是一个tcp请求连接
000. .... .... = Reserved: Not set //保留位没有用到,以0填充
...0 .... .... = Nonce: Not set //这个标志位是为了防止SYN洪泛攻击而设计的,未来可能会用到
.... 0... .... = Congestion Window Reduced (CWR): Not set
.... .0.. .... = ECN-Echo: Not set
.... ..0. .... = Urgent: Not set //紧急指针
.... ...0 .... = Acknowledgment: Not set //确认号
.... .... 0... = Push: Not set //推送
.... .... .0.. = Reset: Not set //复位
.... .... ..1. = Syn: Set //同步,synbit位被置1,说明这是一个tcp请求连接
.... .... ...0 = Fin: Not set //终止
[TCP Flags: ··········S·]
Window size value: 8192 //windows系统下的窗口大小为8k ,告诉目的设备发送的数据在8192字节以内都是可以接收的
[Calculated window size: 8192] //windows系统下的计算窗口大小为8k,这个由抓包软件计算的,在tcp数据段报文中只有窗口字段
Checksum: 0xfe5e [correct] //校验和,用于校验首部和数据部分,correct说明校验没有问题
[Checksum Status: Good] //Good表示校验和正确,bad表示校验和错误
[Calculated Checksum: 0xfe5e] //计算的校验和
Urgent pointer: 0 //紧急指针
Options: (12 bytes) //可选字段
TCP Option - Maximum segment size: 1440 bytes //表示传输的数据最大是1440字节,需要注意,这里并不包括IP首部和tcp首部
TCP Option - No-Operation (NOP)
TCP Option - Window scale: 2 (multiply by 4)
TCP Option - No-Operation (NOP)
TCP Option - No-Operation (NOP)
TCP Option - SACK permitted
关于tcp首部中各个字段在前面两篇中已经说过,这里就不再赘述了。