个人简介

Echo Blog


江湖无名 安心练剑
  • NET 网络专题汇总-06-14-拔掉网线后, 原本的 TCP 连接还存在吗?
    拔掉网线后, 原本的 TCP 连接还存在吗? 今天,聊一个有趣的问题:拔掉网线几秒,再插回去,原本的 TCP 连接还存在吗? 可能有的同学会说,网线都被拔掉了,那说明物理层被断开了,那在上层的传输层理应也会断开,所以原本的 TCP 连接就不会存在的了。 就好像, 我们拨打有线电话的时候,如果某一方的电话线被拔了,那么本次通话就彻底断了。 真的是这样吗? 上面这个逻辑就有问题。问题在...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-13-TCP 连接,一端断电和进程崩溃有什么区别?
    问题 有位读者找我说,他在面试腾讯的时候,遇到了这么个问题: 这个属于 TCP 异常断开连接的场景,这部分内容在我的「图解网络」还没有详细介绍过,这次就乘着这次机会补一补。 这个问题有几个关键词: 没有开启 keepalive; 一直没有数据交互; 进程崩溃; 主机崩溃; 我们先来认识认识什么是...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-12-在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么?
    在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么? 周末跟朋友讨论了一些 TCP 的问题,在查阅《Linux 服务器高性能编程》这本书的时候,发现书上写了这么一句话: 书上说,处于 TIME_WAIT 状态的连接,在收到相同四元组的 SYN 后,会回 RST 报文,对方收到后就会断开连接。 书中作者只是提了这么一句话,没有给予源码或者抓包图的证据。 起初,...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-11-四次挥手中收到乱序的 FIN 包会如何处理?
    问题 因为如果 FIN 报文比数据包先抵达客户端,此时 FIN 报文其实是一个乱序的报文,此时客户端的 TCP 连接并不会从 FIN_WAIT_2 状态转换到 TIME_WAIT 状态。 因此,我们要关注到点是看「在 FIN_WAIT_2 状态下,是如何处理收到的乱序到 FIN 报文,然后 TCP 连接又是什么时候才进入到 TIME_WAIT 状态?」。 我这里先直接说结论: 在...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-10-已建立连接的TCP,收到SYN会发生什么?
    已建立连接的TCP,收到SYN会发生什么? 大概意思是,一个已经建立的 TCP 连接,客户端中途宕机了,而服务端此时也没有数据要发送,一直处于 Established 状态,客户端恢复后,向服务端建立连接,此时服务端会怎么处理? 看过我的图解网络的读者都知道,TCP 连接是由「四元组」唯一确认的。 然后这个场景中,客户端的 IP、服务端 IP、目的端口并没有变化,所以这个问题关键要看客...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-09-SYN 报文什么时候情况下会被丢弃?
    SYN 报文什么时候情况下会被丢弃? 之前有个读者在秋招面试的时候,被问了这么一个问题:SYN 报文什么时候情况下会被丢弃? 好家伙,现在面试都问那么细节了吗? 不过话说回来,这个问题跟工作上也是有关系的,因为我就在工作中碰到这么奇怪的时候,客户端向服务端发起了连接,但是连接并没有建立起来,通过抓包分析发现,服务端是收到 SYN 报文了,但是并没有回复 SYN+ACK(TCP 第二次握...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-08-为什么 TCP 每次建立连接时,初始化序列号都要不一样呢?
    为什么 TCP 每次建立连接时,初始化序列号都要不一样呢? 接下来,我一步一步给大家讲明白,我觉得应该有不少人会有类似的问题,所以今天在肝一篇! 为什么 TCP 每次建立连接时,初始化序列号都要不一样呢? 主要原因是为了防止历史报文被下一个相同四元组的连接接收。 TCP 四次挥手中的 TIME_WAIT 状态不是会持续 2 MSL 时长,历史报文不是早就在网络中消失了吗? 是的,如...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-06-如何优化 TCP?
    如何理解是 TCP 面向字节流协议? 有个读者问我,这么个问题: TCP 是面向字节流的协议,UDP 是面向报文的协议? 这里的「面向字节流」和「面向报文」该如何理解。 如何理解字节流? 之所以会说 TCP 是面向字节流的协议,UDP 是面向报文的协议,是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同,也就是问题原因在发送方。 先来说说为什么 UDP 是面向报文的协议...
    2023-02-22 00:00:00 | Net