0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

再次感受到了TCP的博大精深

小林coding ? 来源:小林coding ? 2023-02-13 16:48 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

我在网站看到一位老哥问了个问题。

4a8136c2-aabf-11ed-bfe3-dac502259ad0.png

简单点说,为什么在 TCP 三次握手过程中,如果客户端收到的 SYN-ACK 报文的确认号不符合预期的话,为什么是回 RST,而不是丢弃呢?

4aa2394e-aabf-11ed-bfe3-dac502259ad0.png

我说回 RST 就回 RST 吗?

当然不是,我也是看 RFC 标准确认过。

4ac7c9d4-aabf-11ed-bfe3-dac502259ad0.png

我来先描述下这个场景吧:

  • 客户端向服务端发送 SYN 报文(seq=100),但是网络中有个不速之客,一个历史的 SYN 报文(seq=90)先抵达服务端;
  • 服务端收到历史的 SYN 报文,就会对此 SYN 报文做了确认,回了 SYN-ACK 报文,确认号为 90+1;
  • 客户端收到 SYN-ACK 报文后,诶发现不对劲,他明明发的是 SYN 报文(seq=100),按道理 SYN-ACK 报文中的确认号是 100+1,可现在收到的确认号为 90+1 的 SYN-ACK 报文,所以礼貌地回了 RST 给服务端;
  • 服务端收到 RST 报文后,服务端就断开处于 SYN_RECEVIED 状态的连接;
  • 最后正常的 SYN 报文(seq=100)终于抵达了服务端,经过三次握手后,双方的 TCP 连接都建立完成。

上面这个过程,就是 TCP 三次握手防止历史连接建立的过程,之所以 TCP 需要三次握手,首要原因是为了防止旧的重复连接初始化造成混乱,其次原因是可靠的同步双方的序列号。

那为什么要设计成,当客户端收到不符合期望的 SYN-ACK 报文,是回 RST,而不是丢弃呢?

现在我们来假设是丢弃处理,看看会发生什么?

4adb1c50-aabf-11ed-bfe3-dac502259ad0.jpg

可以看到,当处于 SYN_SENT 状态连接的客户端收到不符合期望的 SYN-ACK 报文时,如果选择的处理是「丢弃」,那么双方都会触发超时重传,直到达到最大的重传次数才会进入 CLOSE 状态,这个过程需要持续 10-20 秒。

从客户端的角度看,就是迟迟与服务端建立不来连接,因为服务端这边已经存在一个相同四元组的旧连接,如果不把服务端这个连接干掉,那么是无法确认客户端新的连接(SEQ=100),因为非 LISTEN 状态下,如果收到 SYN,都是回 challenge ack,这个 ack 并不是对收到 SYN 报做确认,而是继续回复上一次已发送 ACK。

是不是有种服务端的旧连接(SEQ=90)占着茅坑不拉屎的感觉?

所以啊,干掉服务端的旧连接的工作,就交给了客户端来做了。

当处于 SYN_SENT 状态连接的客户端,在收到不符合期望的 SYN-ACK 报文时,就直接 RST 给服务端,干掉服务端的旧连接,这样客户端的新连接才能快速建立。

怎么样,TCP 处处是细节啊!

再次感受到了 TCP 的博大精深

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1409

    浏览量

    81533
  • RFC
    RFC
    +关注

    关注

    0

    文章

    16

    浏览量

    10230
  • 服务端
    +关注

    关注

    0

    文章

    68

    浏览量

    7268

原文标题:这也能考虑到?TCP 有点牛逼

文章出处:【微信号:小林coding,微信公众号:小林coding】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    中国5G基站总量占全球60%,你感受到了吗?

    城区、超过98%的县城城区和80%的乡镇镇区。截至2021年底,5G移动电话用户达3.55亿户。 ? 然而,你感受到了吗? ? 可以看到,现在很多人已经用上5G,然而,感觉怎么样呢? ? 首先,与4G相比,5G网络的速度确实更快,时延更低。而且,与2020年及以前相比,2021年之后,随
    的头像 发表于 02-10 07:56 ?4346次阅读

    学raw os 以来的真实感受之小见

    以前自己一直都是学ucos 的,公司里也是盗用这个,我也没觉的什么不妥,但是接触了作者后,发现这样子是可耻的。中国必须要有自己优秀的操作系统,最好是开源的。raw os 的内核让我感受到了什么叫速度
    发表于 02-27 14:18

    为什么步进电机能感受到在转动,但是看不到转动?

    步进电机能感受到在转动,但是看不到转动,是什么原因啊!电机型号是 28BYJ-48 5vDC.求大家帮忙分析一下,非常感谢啊!
    发表于 06-27 04:35

    最新可穿戴技术可助聋哑人通过皮肤感受到立体声

    据外媒报道,一项名为Music:Not Impossible的新兴技术设备出现,可以帮助聋哑人通过皮肤感受到立体声。据悉,该技术的创意来源于前好莱坞制片人Mick Ebeling。Mick
    发表于 07-19 04:20

    Linux那些事儿之我是U盘

    Linux的usb驱动开发博大精深,USB这一块的驱动开发详解
    发表于 11-03 17:31 ?20次下载

    可以感受到瓢虫腿儿运动的“人造皮肤”

    斯坦福大学的鲍哲南团队通过将人造皮肤的概念推上了新高度给电子元件的发展奠定了基础,他们不但展示了可以感受到瓢虫腿儿的精密可拉伸电子元件,并且展示了能够大规模制造这种元件的工艺。人类可以通过多种方式
    发表于 04-10 03:02 ?1751次阅读

    雷霆世纪猎空C504评测 感受到了满满的诚意

    现在很多朋友,一有时间就喜欢打几把游戏来放松放松,最近也正是到了寒假期间,相比会有很多同学在家里都以游戏来度日吧?但是很多人又发愁用什么样的设备来玩游戏呢?小编还是推荐用台式机,因为在小小的笔记本上
    的头像 发表于 10-13 09:21 ?4114次阅读

    机器人进行新闻播报 使人类感受到了前所未有的压力

    如今,人工智能技术的出现,为很多各行各业都带来了便利,未来在我们的日常生活中肯定离不开人工智能,同时也使人类前所未有的感受到了压力,“人工智能将取代哪些行业的人员?”这成为近些年来的热点话题。
    发表于 12-05 17:19 ?3662次阅读

    传感器技术用于文物保护,将迎来新的机遇和挑战

    近日,故宫博物院院长提出,在紫禁建成600周年之际,故宫博物院将陆续推出许多精品文物,其中,就包括著名的古画——清明上河图等。文物重现人间可以让人们更好的感受到传统文化的博大精深,但是,在著作展出之际,文物的保护工作也要格外注意。
    发表于 03-17 09:22 ?1882次阅读

    感受到了零售的改革吗

    新零售的提出,让线上线下联动的模式被广泛关注,
    发表于 06-01 09:05 ?889次阅读

    Apple推出VR手套专利 可以使用户感受到VR或AR显示的对象

    Apple推出了VR手套专利,该专利可以使用户感受到虚拟现实或增强现实显示的对象。新专利表明,Apple将继续为尖端的VR和AR投入大量的研发工作。
    发表于 11-21 15:40 ?920次阅读

    Apple VR手套专利技术可以让您感受到虚拟纹理

    Apple推出了VR手套专利,该专利可以使用户感受到虚拟现实或增强现实显示的对象。新专利表明,Apple将继续为尖端的VR和AR投入大量的研发工作。
    发表于 11-22 09:55 ?919次阅读

    Apple VR手套专利可让我们感受到虚拟纹理

    Apple推出了VR手套专利,该专利可以使用户感受到虚拟现实或增强现实显示的对象。
    发表于 03-11 10:04 ?750次阅读

    电路已经感受到纳米技术的影响

    电路已经感受到纳米技术的影响
    的头像 发表于 01-04 11:17 ?1085次阅读

    感受到空气质量变化的开源设计

    电子发烧友网站提供《能感受到空气质量变化的开源设计.zip》资料免费下载
    发表于 06-16 15:21 ?0次下载
    能<b class='flag-5'>感受到</b>空气质量变化的开源设计