TCP层分析
传输控制协议,为数据提供可靠的端到端传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方
1. Transmission Control Protocol, Src Port: 52745 (52745), Dst Port: 80 (80), Seq: 1, Ack: 1, Len: 202
总信息,源端口52745, 目的端口80 ( HTTP ) , 序号1, ACK 设置1,长度为202
2. Source Port: 52745 (52745) —— 用来传输数据包的端口
3. Destination Port: http (80) —— 数据包将要被发送到的端口
- 1~1023:标准端口组,特定服务会用到标准端口
- 1024~65535:临时端口组,操作系统会随机地选择一个源端口让某个通信单独使用
- 传输层的复用和分用功能都要通过端口才能实现
4. Stream index: 0
流端口号为0根据src.ip src.port dst.ip dst.port生成的一个索引号 Sequence number: 0
5. TCP Segment Len: 202 ( Next sequence – Sequence ) number
显示(0x50)TCP 携带数据的长度
6. Sequence number: 2186017225 显示为该包序列号的空际值
- Sequence number: 1 (relative sequence number),显示为该包序列号的相对值,这个数字用来表示一个TCP片段。这个域用来保证数据流中的部分没有流失(随机生成)
7. Next sequence number: 2186017427
- Next sequence number: 203 (relative sequence number)
分析同上,下一个序列号(在实际传输中并未有此数据,是Wireshark 提供的,= Sequence number + TCP Segment Len)
8. Acknowledgment number: 1090536281
- Acknowledgment number: 1 (relative ack number)
- 确认号为1: 这个数字式通信中希望从另外一个设备得到的下一个数据包的序号
9. Header Length: 20 bytes
- 数据偏移(即首部长度)显示(0x50)但实际为 (0x50 && 0XF0) / 4 = 20 ,剩下的0x50中的0 用于下面的
Reserverd 和Nonce. 它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远
10. …. 0000 0001 1000 = Flags: 0x018 (PSH, ACK)
很重要,根据括号里的标志值(URG, ACK, PSH. RST, SYN, FIN)判断不同的TCP数据包的类型
Reserved: Not set —— 保留字段——占 6 位,保留为今后使用
Nonce: Not set 设置为0
随机数(Nonce)是任意的或非重复的值,它包括在经过一个协议的数据交换中,通常为保证活跃度以及避免受重复攻击Congestion Window Reduced (CWR): Not set —— 没啥用
ECN-Echo: Not set
Urgent: Not set —— (基本此处无设置)
当 URG=1 时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)Acknowledgment: Set 1
(确认序号有效位)只有当 ACK=1 时确认号字段才有效。当ACK=0 时,确认号无效Push: Set 1 ——(通知接收端立即将数据提交上层,释放内存)
接收 TCP 收到 PSH=1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付Reset: Not set
请求重新建立TCP连接,当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接Syn: Not set
同步 SYN = 1 表示这是一个连接请求或连接接受报文Fin: Not set
请求断开连接,用来释放一个连接。FIN 1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
11. Window size value: 64800