之前在《深入理解并行编程》的群里,有个小米的兄弟问了一个问题,服务器A发包给服务器B,Seq是1,但是在未能收到服务器B的报文回复的情况下,发送了rst,但是rst报文中,对应的seq是1461,一堆人都在猜测,为什么seq跳变了,由于当时只看到一半的图片,所以我让他发送完整报文出来之后,我发现其实rst的seq不是1的原因,并不是因为跳变,而是正常的,因为发送给B的报文,长度为1460,但是这个报文没有得到回复,所以在超时之后,应用程序关闭了这条连接,导致内核协议栈发送了一个rst报文,而rst报文选取seq的时候,并不是选取的确定已经发送的seq,而是当前连接已经用掉的seq,也就是当前seq,哪怕这个报文没有收到回复,也会使用。
具体看代码:

其中关注下报文的init过程:

那么传入的seq是多少呢?

注释写得比较清楚,如果窗口没有shrunk,也就是tp->snd_nxt 没有out of window 的话,则取得就是tp->snd_nxt,而这个值,就是报文长度+1了,也就是1461.
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
服务器
+关注
关注
14文章
10438浏览量
91846 -
协议栈
+关注
关注
2文章
147浏览量
34717 -
报文
+关注
关注
0文章
39浏览量
4392
原文标题:干货 | tcp协议栈中rst报文的seq跳变问题
文章出处:【微信号:ZTEdeveloper,微信公众号:中兴开发者社区】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
14-TCP 协议(连接异常与RST)
1. RST 段当 TCP连接出现严重的错误时,必须释放连接。通过将 TCP 首部中的 RST 标志位置 1,就可以通知对端发生错误,以终止
发表于 07-24 10:01
怎么使用stm32的LWIP协议栈进行报文调度算法的开发?
各位朋友好,我的导师要求我设计一个新的报文调度算法,能够实现不同优先级的报文在发送的过程中,实现高优先级报文的低延时和低抖动。要求使用stm32的LWIP
发表于 04-07 04:35
LWIP TCP报文基础知识及其LWIP中TCP协议的实现
LWIP TCP报文基础TCP协议(Transmission Control Protocol)传输控制协议在LWIP
发表于 10-18 14:54
tcp报文格式详解
TCP(Transmission ControProtocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议。TCP报文是
发表于 12-08 11:11
•3.4w次阅读
Microchip TCP/IP协议栈
的开发人员可以很容易找到许多Microchip产品的商业和非商业的TC P/IP实现方案。本应用笔记详细说明了Microchip公司自己免费提供的TC P/IP协议栈。 Microchip TCP/IP
发表于 04-20 16:04
•5次下载
Microchip TCP/IP精简协议栈
本应用笔记描述 Microchip 传输控制协议 / 互联网协议(TCP/IP)精简协议栈库的结构和接口,并提供部分简单的演示应用。实现
发表于 04-01 15:36
•19次下载
Microchip TCP/IP协议栈
。感兴趣的开发人员可以很容易找到许多 Microchip 产品的商业和非商业的TCP/IP 实现方案。本应用笔记详细说明了 Microchip 公司自己免费提供的 TCP/IP 协议栈
发表于 04-02 14:28
•23次下载
Linux网络技术中最核心的部分--TCP/IP协议栈
今天给大家介绍Linux网络技术中最核心的部分--TCP/IP协议栈 。 我们先看一下抽象的网络协议栈模型 再按分层思想看Linux内核
关于tcp协议栈中rst报文的seq跳变问题
评论