欢迎光临散文网 会员登陆 & 注册

日常记录 - 5.4

2023-05-05 09:20 作者:剑离我离  | 我要投稿

什么情况会出现三次挥手?

没有数据要发送」并且「开启了 TCP 延迟确认机制」,那么第二和第三次挥手就会合并传输,这样就出现了三次挥手。

  • 当有响应数据要发送时,ACK 会随着响应数据一起立刻发送给对方

  • 当没有响应数据要发送时,ACK 将会延迟一段时间,以等待是否有响应数据可以一起发送

  • 如果在延迟等待发送 ACK 期间,对方的第二个数据报文又到达了,这时就会立刻发送 ACK

TCP 序列号和确认号是如何变化的?

万能公式:

发送的 TCP 报文:

  • 公式一:序列号 = 上一次发送的序列号 + len(数据长度)。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为 上一次发送的序列号 + 1。

  • 公式二:确认号 = 上一次收到的报文中的序列号 + len(数据长度)。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为上一次收到的报文中的序列号 + 1。

SYN视为 1字节的数据。ACK 则是0 。

如果第三次握手的ACK 丢失了,那么处于SYN_RCVD状态服务端收到客户端第一个TCP  报文会发生什么?

发送的第一个 「TCP 数据报文的序列号和确认号」都是和「第三次握手的 ACK 报文中序列号和确认号」一样的,并且该 TCP 数据报文也有将 ACK 标记位置为 1。

所以,服务端收到这个数据报文,是可以正常完成连接的建立,然后就可以正常接收这个数据包了。


日常记录 - 5.4的评论 (共 条)

分享到微博请遵守国家法律