当前位置:网站首页>The old saying: The interview must ask "Three handshakes, four waves", so you can't forget it
The old saying: The interview must ask "Three handshakes, four waves", so you can't forget it
2022-08-11 11:30:00 【InfoQ】
三次握手
- 一开始,客户端和服务端都处于 CLOSED 状态.客户端主动打开连接,服务端被动打卡连接,结束CLOSED z状态,开始监听,进入 LISTEN状态.
- 客户端会随机初始化序号(client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把 SYN 标志位置为 1 ,表示 SYN 报文.接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态.
- 服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入 TCP 首部的「序号」字段中,其次把 TCP 首部的「确认应答号」字段填入 client_isn + 1, 接着把 SYN 和 ACK标志位置为 1.最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态.
- 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次「确认应答号」字段填入 server_isn + 1 ,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态.
- 为了防止服务器端开启一些无用的连接增加服务器开销
- 防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误.
四次挥手
- 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态.
- 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态.
- 客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态.等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK状态.
- 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
- 服务器收到了 ACK 应答报文后,就进入了 CLOSED 状态,至此服务端已经完成连接的关闭.
- 客户端在经过 2MSL 一段时间后,自动进入 CLOSED 状态,至此客户端也完成连接的关闭.
- 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据.
- 服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接.
- 如果客户端在 2MSL 内,再次收到了来自服务器端的 FIN 报文,说明服务器端由于各种原因没有接收到客户端发出的 ACK 确认报文.
- 否则客户端在 2MSL 内没有再次收到来自服务器端的 FIN 报文,说明服务器端正常接收了 ACK 确认报文,客户端可以进入 CLOSED 阶段,完成“四次挥手”.
大白话说三次握手
- 老王:老张唉!我是老王,你能听到吗?
- 老张一听,是老王的声音:老王老王,我是老张,我能听到,你能听到吗?
- 老王一听,嗯,没错,是老张:老张,我听到了,我有事要跟你说.
大白话说四次挥手
- 女朋友:臭男人,最近你都不理我,你是不是不爱我了?你是不是外面有别的狗子了?我要和你分手?
- 沙雕博主一愣,怒火攻心:分手就分手,不陪你闹了,等我把东西收拾收拾.
- 哼,蠢女人,我已经收拾完了,我先滚为敬,再见!
- 女朋友:滚,滚得远远的,越远越好,我一辈子都不想再见到你.
边栏推荐
猜你喜欢
如何批量下载hugging face模型和数据集文件
BAT "exclusive" Internet giant Android senior engineer interview questions: 174 questions allow you to do the interview
从零开始配置 vim(11)——插件管理
【翻译】Drafting and Revision: Laplacian Pyramid Network for Fast High-Quality Artistic Style Transfer
『独家』互联网 BAT 大厂 Android高级工程师面试题:174道题目让你做到面试无忧
PerfView project (first) : how to find hot spots function
五分钟教你内网穿透
大疆2022秋招笔试 —— 最小时间差、数组的最小偏移量
安装nodejs
2.MySQL ---- 修改数据库的字符集(日常小技巧)
随机推荐
Neural network visualization has 3 d version of the, the United States to fall!(open source)
darknet 结构体汇总
好的架构是进化来的,不是设计来的
How to explain to my girlfriend what is cache penetration, cache breakdown, cache avalanche?
mysql常用的一些时间函数记录
如何设计一组会出现死锁(Deadlock)的ABAP程序
【毕业设计】远程智能浇花灌溉系统 - stm32 单片机 嵌入式 物联网
全新FIDE 编译简单评测
EXCLUSIVE INTERVIEW | INTELLIGENCE IS SPONTANED, NOT PLANNED: Evolution Fan, Former OpenAI Research Manager and UBC Associate Professor Jeff Clune
C# 调用高德地图API获取经纬度以及定位【万字详解附完整代码】
字符函数和字符串函数的进阶
rem如何使用
图像识别(八)| 还对全连接层迷迷糊糊?背会一首诗就行了
悠漓带你玩转C语言(详解操作符1)
那些不用写代码也能做游戏的工具
自动售货机
Bitmap这个“内存刺客”你也要小心
I got the P8 "top" distributed architecture manual that went viral on Ali's intranet
Are there any foreign application cases for domestic databases?
SDUT数据库 SQL语句练习(MySQL)