美文网首页网络
【tcp】深入理解TCP的三次握手

【tcp】深入理解TCP的三次握手

作者: Bogon | 来源:发表于2022-06-09 00:03 被阅读0次

相关IT技术面试中,三次握手的出场频率非常的高,甚至说它是必考题也不为过。

一般的答案都是说客户端如何发起 SYN 握手进入 SYN_SENT 状态,服务器响应 SYN 并回复 SYNACK,然后进入 SYN_RECV,...... 诸如此类。

其实三次握手在内核的实现中,并不只是简单的状态的流转,还包括半连接队列、syncookie、全连接队列、重传计时器等关键操作。

如果能深刻理解这些,你对线上把握和理解将更进一步。

基于 TCP 的服务开发中,三次握手的主要流程图如下。

image.png

可以用一幅图总结起来。


image.png
  1. 服务器 listen 时,计算了全/半连接队列的长度,还申请了相关内存并初始化。

  2. 客户端 connect 时,把本地 socket 状态设置成了 TCP_SYN_SENT,选则一个可用的端口,发出 SYN 握手请求并启动重传定时器。

  3. 服务器响应 ack 时,会判断下接收队列是否满了,满的话可能会丢弃该请求。否则发出 synack,申请 request_sock 添加到半连接队列中,同时启动定时器。

  4. 客户端响应 synack 时,清除了 connect 时设置的重传定时器,把当前 socket 状态设置为 ESTABLISHED,开启保活计时器后发出第三次握手的 ack 确认。

  5. 服务器响应 ack 时,把对应半连接对象删除,创建了新的 sock 后加入到全连接队列中,最后将新连接状态设置为 ESTABLISHED。

  6. accept 从已经建立好的全连接队列中取出一个返回给用户进程。

需要注意的是,如果握手过程中发生丢包(网络问题,或者是连接队列溢出),内核会等待定时器到期后重试,重试时间间隔在 3.10 版本里分别是 1s 2s 4s ...。
在一些老版本里,比如 2.6 里,第一次重试时间是 3 秒。
最大重试次数分别由 tcp_syn_retries 和 tcp_synack_retries 控制。

如果你的线上接口正常都是几十毫秒内返回,但偶尔出现了 1 s、或者 3 s 等这种偶发的响应耗时变长的问题,那么你就要去定位一下看看是不是出现了握手包的超时重传了。

以上就是三次握手中一些更详细的内部操作。

如果你能在面试官面前讲出来内核的这些底层逻辑,我相信面试官一定会对你刮目相看!

参考

开发内功修炼
https://github.com/yanfeizhang/coder-kung-fu

能将三次握手理解到这个深度,面试官拍案叫绝
https://mp.weixin.qq.com/s/vlrzGc5bFrPIr9a7HIr2eA

深入解析常见三次握手异常
https://mp.weixin.qq.com/s/7Cum6Y28H_gXLyrRFrthNw

相关文章

  • tcp三次握手四次挥手

    tcp三次握手四次挥手 TCP状态图 TCP状态时序图 tcp三次握手 流程图: TCP握手状态说明: TCP_S...

  • tcp/ip

    TCP/IP--理解TCP三次握手和四次挥手 - 简书

  • 星媛面试-进大厂必备--TCP协议

    1,tcp三次握手 TCP A ...

  • 网络资料总结3

    传输层相关 一 TCP 1.1 TCP状态 TCP连接的建立和终止 理解TCP的三次握手,四次挥手TCP 为什么是...

  • TCP的三次握手和四次挥手

    目录 名词解释 TCP的三次握手TCP建立链接的步骤TCP的三次握手步骤思考:TCP握手为什么不是两次 or 四次...

  • TCP三次握手和四次挥手

    1、TCP三次握手 TCP建立连接需要进行“三次握手”: TCP三次握手过程描述如下: 客户端发送连接请求报文:S...

  • 网络相关面试题

    网络 1. TCP和UDP的区别 2. TCP的三次握手 3. TCP的四次挥手 4. TCP为什么需要三次握手...

  • 知道TCP连接的三次握手,但你知道为什么是三次吗?

    TCP连接的三次握手 了解TCP协议的人都知道,TCP在建立连接的时候需要经过三次交互,俗称「三次握手」: cli...

  • 一些概念

    TCP,三次握手,传递包 TCP与UDP TCP(Transmission Control Protocol,传输...

  • 网络学习三

    关于TCP握手和挥手告别 tcp协议格式 三次握手 在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用...

网友评论

    本文标题:【tcp】深入理解TCP的三次握手

    本文链接:https://www.haomeiwen.com/subject/ffpymrtx.html