TCP/IP协议 TCP浅析

本文通过Wireshark抓包分析,详细解读TCP连接的三次握手与断开连接的四次挥手过程。从客户端发起连接请求,到服务器确认并建立连接,再到双方中断连接,每个阶段的关键包信息和标志字段如SYN、ACK、FIN等都进行了深入剖析,展示了TCP连接管理的可靠性机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


TCP特点

Transmission Control Protocol

  • 面向连接。重发。
  • 可靠
  • 检验和
  • 序列号
  • 确认应答
  • 重发控制
  • 连接管理
  • 窗口控制

三次握手

使用RT-thread的TCP客户端实验。进行抓包分析。qemu ip地址为下面参数。

	ip address: 192.168.137.28     

主机参数为

	IPv4 地址 . . . . . . . . . . . . : 192.168.1.102

wireshark抓包设置为

	ip.addr == 192.168.137.28 and tcp

wireshark抓到的包

使用IPOP发送与接收到的数据

This is TCP Client from RT-Thread.
zhou
This is TCP Client from RT-Thread.
cheng
This is TCP Client from RT-Thread.
zhu
This is TCP Client from RT-Thread.
q

分析包

noTimeSourceDestinationprotocalLengthinfo
30.000278192.168.137.28192.168.1.102TCP5849155 → 5000 [SYN] Seq=0 Win=8196 Len=0 MSS=1460
40.000408192.168.1.102192.168.137.28TCP585000 → 49155 [SYN, ACK] Seq=0 Ack=1 Win=64240 Len=0 MSS=1460
50.000794192.168.137.28192.168.1.102TCP5449155 → 5000 [ACK] Seq=1 Ack=1 Win=8196 Len=0

首先来看 3 号包。
在info里面有SYN标志,表示这个标志在这个包里置位了。源地址为 192.168.137.28。显然这是一个由QEMU发往192.168.1.102(主机的)的TCP包。
TCP的三次握手由客户端发起。服务端返回。然后客户端再发起一个确认包。表示连接建立。

客户端请求服务端连接的包 3号包

SYN Flag,由客户端到服务端。Seq = 0(其实Seq应该是一个随机数。毕竟随机保密好一点。这里为0是巧合)
MSS = Maximum Segment Size,最大分段长度。TCP建立连接时每一个报文段所能承载的最大数据长度。

服务器收到请求后发送给客户端的包 4号包

SYN Flag,ACK Flag,服务器端到客户端。Seq=0。
这里看到AcK为1。其实是应答3号包的Seq。若是3号包Seq = n;那么4号包
if len==0
AcK = n+1;
else
Ack = n+len;

4号包既是应答3号包又是请求连接包。所以也会有MSS信号。

客户端回应服务端 4号包5号包

AcK = 1 客户端发送给服务端的包
AcK = 1。是因为4号包的Seq = 0。若是4号包Seq = n;那么5号包
if len==0
AcK = n+1;
else
Ack = n+len;

可以看到5号包只有一个ACK Flag。没有SYN Flag。也就是说这里是一个应答包。不是请求连接包。

四次挥手

noTimeSourceDestinationprotocalLengthinfo
2117.399433192.168.137.28192.168.1.102TCP5449155 → 5000 [FIN, ACK] Seq=137 Ack=41 Win=8156 Len=0
2217.399519192.168.1.102192.168.137.28TCP545000 → 49155 [ACK] Seq=41 Ack=138 Win=64104 Len=0
2317.399812192.168.1.102192.168.137.28TCP545000 → 49155 [FIN, ACK] Seq=41 Ack=138 Win=64104 Len=0
2417.404604192.168.137.28192.168.1.102TCP5449155 → 5000 [ACK] Seq=138 Ack=42 Win=8155 Len=0

如上面相同分析 客户端发送中断连接的包 21号包

FIN Flag,ACK Flag。Ack = 41,Seq = 。因为20号包 (len = 3,Seq = 38)。

21号由客户端发起的中断连接请求。并且应答20号包。

服务器应答客户端的中断连接包 22号包

ACK Flag; Ack = 138 = (23号包) Seq+1 ;

服务器发送中断连接包 23号包

FIN Flag; Seq = 41.Ack = 138

客户端应答服务端的中断连接包 24号

ACk Flag;Ack = 42 = (23号包) Seq+1;

总结

TCP 的三次握手以及四次挥手过程大抵是了解了。 但是还需要深入了解每一个字节的作用。这当然是下一章的作用了。

参考资料

https://juejin.im/post/5a069b6d51882509e5432656
https://blog.youkuaiyun.com/lg2lh/article/details/51257751
https://blog.youkuaiyun.com/prsniper/article/details/6762145
https://www.rt-thread.org/document/site/tutorial/qemu-network/tcpclient/tcpclient/#_7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值