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

服务端发送的第三次挥手的序列号和确认号还是和第二次挥手中的序列号和确认号一样 。

  • 序列号设置为 server_isn + 1 。
  • 确认号设置为 client_isn + 12 。
客户端发送的四次挥手的序列号和确认号分别设置为:
  • 序列号设置为 client_isn + 12 。客户端上一次发送的报文是 FIN 报文,该报文的 seq = client_isn + 11 , 根据公式 1(_序列号 = 上一次发送的序列号 + len 。特殊情况,如果收到报文是 SYN 报文或者 FIN 报文 , 则改为 + 1_),可以得出当前的序列号为 client_isn + 11 + 1,也就是 client_isn + 12 。
  • 确认号设置为 server_isn + 2 。客户端上一次收到的报文是服务端发来的 FIN 报文,该报文的 seq = server_isn + 1,根据公式 2(_确认号 = _上一次_收到的序列号 + len , 特殊情况,如果收到报文是 SYN 报文或者 FIN 报文,则改为 + 1_),可以得出当前的确认号为 server_isn + 1 + 1,也就是 server_isn + 2 。
实际抓包图在这里贴一个,实际过程中的抓包图 。
TCP 序列号和确认号是如何变化的?

文章插图
在这里插入图片描述
套入我的万能公式 , 发送的 TCP 报文:
  • 公式一:序列号 = 上一次发送的序列号 + len(数据长度) 。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为 上一次发送的序列号 + 1 。
  • 公式二:确认号 = 上一次收到的报文中的序列号 + len(数据长度) 。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为上一次收到的报文中的序列号 + 1 。
懂了这套公式之后,相信你在看这类的抓包图中序列号和确认号的变化的时候 , 就不会没有逻辑了 。
怎么样,学废了吗,溜啦溜啦!
更多网络文章网络基础篇
  • TCP/IP 网络模型有哪几层?
  • 键入网址到网页显示 , 期间发生了什么?
  • Linux 系统是如何收发网络包的?
HTTP 篇
  • HTTP 常见面试题
  • HTTP/1.1如何优化?
  • HTTPS RSA 握手解析
  • HTTPS ECDHE 握手解析
  • HTTPS 如何优化?
  • HTTP/2 牛逼在哪?
  • HTTP/3 强势来袭
  • 既然有 HTTP 协议,为什么还要有 RPC?
TCP 篇
  • TCP 三次握手与四次挥手面试题
  • TCP 重传、滑动窗口、流量控制、拥塞控制
  • TCP 实战抓包分析
  • TCP 半连接队列和全连接队列
  • 如何优化 TCP?
  • 如何理解是 TCP 面向字节流协议?
  • 为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?
  • SYN 报文什么时候情况下会被丢弃?
  • 四次挥手中收到乱序的 FIN 包会如何处理?
  • 在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么?
  • TCP 连接,一端断电和进程崩溃有什么区别?
  • 拔掉网线后,原本的 TCP 连接还存在吗?
  • tcp_tw_reuse 为什么默认是关闭的?
  • HTTPS 中 TLS 和 TCP 能同时握手吗?
  • TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?
  • TCP 有什么缺陷?
  • 如何基于 UDP 协议实现可靠传输?
  • TCP 和 UDP 可以使用同一个端口吗?
  • 服务端没有 listen,客户端发起连接建立,会发生什么?
  • 没有 accpet,可以建立 TCP 连接吗?
  • 用了 TCP 协议,数据一定不会丢吗?
IP 篇
  • IP 基础知识全家桶
  • ping 的工作原理

推荐阅读