当前位置:网站首页>TCP三次握手与四次挥手
TCP三次握手与四次挥手
2022-08-02 21:56:00 【在下是首席架构师】
TCP三次握手
在后端相关岗位的入职面试中,三次握手的出场频率非常的高。其实在三次握手的过程中,不仅仅是一个握手包的发送 和 TCP 状态的流转。还包含了端口选择,连接队列创建与处理等很多关键技术点。通过今天一篇文章,我们深度去了解了三次握手过程中内核中的这些内部操作。 全文洋洋洒洒上万字字,其实可以用一幅图总结起来。
- 服务器 listen 时,计算了全/半连接队列的长度,还申请了相关内存并初始化。
- 客户端 connect 时,把本地 socket 状态设置成了 TCP_SYN_SENT,选则一个可用的端口,发出 SYN 握手请求并启动重传定时器。
- 服务器响应 ack 时,会判断下接收队列是否满了,满的话可能会丢弃该请求。否则发出 synack,申请 request_sock 添加到半连接队列中,同时启动定时器。
- 客户端响应 synack 时,清除了 connect 时设置的重传定时器,把当前 socket 状态设置为 ESTABLISHED,开启保活计时器后发出第三次握手的 ack 确认。
- 服务器响应 ack 时,把对应半连接对象删除,创建了新的 sock 后加入到全连接队列中,最后将新连接状态设置为 ESTABLISHED。
- accept 从已经建立好的全连接队列中取出一个返回给用户进程。
另外要注意的是,如果握手过程中发生丢包(网络问题,或者是连接队列溢出),内核会等待定时器到期后重试,重试时间间隔在 3.10 版本里分别是 1s 2s 4s ...。在一些老版本里,比如 2.6 里,第一次重试时间是 3 秒。最大重试次数分别由 tcp_syn_retries 和 tcp_synack_retries 控制。 如果你的线上接口正常都是几十毫秒内返回,但偶尔出现了 1 s、或者 3 s 等这种偶发的响应耗时变长的问题,那么你就要去定位一下看看是不是出现了握手包的超时重传了。 以上就是三次握手中一些更详细的内部操作。如果你能在面试官面前讲出来内核的这些底层逻辑,我相信面试官一定会对你刮目相看的! <<内容搬运自公众号:开发内功修炼>>
四次挥手
由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。 (1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。 (2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。 (3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。 (4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。 <<内容引自公众号全栈工程师的自我修养>>
边栏推荐
- 搭建直播平台,使用node生成验证码图片,并进行验证
- 成功解决TypeError: can‘t multiply sequence by non-int of type ‘float‘
- JumpServer open source bastion machine completes Loongson architecture compatibility certification
- 【使用pyside2遇到的问题】This application failed to start because no Qt platform plugin could be initialized.
- 虚拟内存 virualmemory
- 终于明白:有了线程,为什么还要有协程?
- Task 4 Machine Learning Library Scikit-learn
- js function anti-shake and function throttling and other usage scenarios
- GameStop NFT 市场分析
- Auto.js脚本程序打包
猜你喜欢
Ruoyi integrates minio to realize distributed file storage
If the watermark according to how to realize the function
Shunted Self-Attention via Multi-Scale Token Aggregation
【Unity】Unity开发进阶(六)UnityEvent使用与源码解析
CKA、CKAD、CKS、KCNA、CFCD考试
行业 SaaS 微服务稳定性保障实战
万物智联时代,悄然走入生活
The interviewer asked me: delete library, in addition to run do?
Teach you how to kill if else
Towards a General Purpose CNN for Long Range Dependencies in ND
随机推荐
目前为止 DAO靠什么盈利?
同样月薪6K,为什么同事跳槽月薪翻倍,而你只涨了1000?
面试官居然问我:删库后,除了跑路还能干什么?
执子手,到永恒
If the watermark according to how to realize the function
IP Protocol (Internet Protocol)
group of people
win10桌面图标全部变成白色的怎么办
Summary of @Transactional transaction invocation and effective scenarios
go 反射 reflect 包
Flink优化的方方面面
LeetCode 2359. 找到离给定两个节点最近的节点 基环树
最近火爆朋友圈的“广告电商”,核心商业模式是什么,广告收入真实靠谱吗?
JS函数防抖&函数节流及其使用场景
我用这一招让团队的开发效率提升了 100%!
The only way to go from a monthly salary of 10k to 30k: automated testing
Go语言如何操作文件
饥荒联机版Mod开发——制作简单的物品(三)
How many ways do you know the singleton pattern?
【Unity】Unity开发进阶(六)UnityEvent使用与源码解析