当前位置:网站首页>三次握手四次挥手针对面试总结
三次握手四次挥手针对面试总结
2022-07-29 05:09:00 【小洪正在努力】
文章目录
一:三次握手
内容:
1.什么是三次握手?
第一次握手:客户端将SYN置为1,随机产生一个初始序列号seq=x,发送给服务器,进入SYN-SENT状态;
第二次握手:服务器收到客户端服务器的SYN报文后,将SYN置为1,ACK置为1,随机产生一个初始序列号seq=y,同时告诉客户端下一次传输数据时序号为x+1;
第三次握手:客户端收到服务器的SYN-ACK报文后,将SYN和ACK都置为1,此时发送的序号为x+1的数据,同时告诉服务器下一次传输数据的序号啊为y+1。
2.三次握手的作用?
① 确认双方的接收能力,发送能力是否正常。
② 指定自己的初始化序列号,为后面的可靠传送做准备。
3.第三次握手的作用(TCP建立连接可以两次握手吗?为什么?):
防止已失效的连接请求报文段又传到了服务器。
客户端发送的第一个连接请求报文段没有丢失,而是在某个网络结点长时间滞留,导致延误到连接释放以后的某个时间才到达服务器。本来这是一个早已失效的报文段。但服务器收到失效的连接请求报文段后,误以为是客户端再次发出的一个新的连接请求,于是就向客户端发出确认报文段,同意建立连接。
如果没有第三次握手的话,那么只要服务器做出确认,新的连接就会建立,但客户端实际并没有发出建立连接的请求,因此服务器会一直等待客户端传输数据,服务器的资源就会被浪费。
4.如果已经建立了连接,但是客户端突然出现了故障怎么办?
TCP中设有保活计时器,服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次,若一连发了10个仍没有反应,服务器就认为客户端出现了故障,连接关闭。
二:四次挥手
内容:
1. 什么是四次挥手?
- 第一次挥手:客户端发送FIN报文给服务器,此时客户端发送数据序列号为seq=u,进入FIN-WAIT-1状态;
- 第二次挥手:服务器接收客户端的FIN报文,回应ACK报文,告诉客户端收到他的请求并同意,此时的服务器发送数据序列号为seq=v,并告诉服务器希望收到下一个数据的序列号为ack=u+1,进入CLOSE-WAIT状态;
- 第三次挥手:待服务器数据传输完毕,向客户端发送FIN-ACK请求关闭连接,此时服务器发送的数据系列号为seq=w(w不一定是v+1,w是指数据传送结束后的最后一个字节序列号+1),并且告诉客户端希望收到下一个数据的序列号为ack=u+1,进入TAST-ACK状态;
- 第四次挥手:客户端接收服务器的请求,发送ACK报文给服务器,同意服务器的关闭请求,此时客户端发送的数据序列号为u+1。ack=w+1。进入TIME-WAIT阶段。
2.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
①MLS是“报文最大生存时间”。当第三次挥手服务器发出FIN-ACK包后,客户端需要做出回应,发出ACK包同意服务器的关闭请求,如果在此过程中第四次挥手发出的ACK包丢失,服务器会在超时后重新发送第三次挥手的FIN-ACK包,所以这时的客户端就需要等待服务器是否进行重传操作,而这个等待并不是无限期的,而是等待2MLS后,客户端再没有收到服务器的第三次挥手重传包,那么客户端判定第四次挥手的ACK包被成功接收,TCP连接结束。
② 防止已失效连接请求报文段出现在新的连接中。
在TIME-WAIT状态时,两端的端口不能使用,要等到2ML时间结束后才可以继续使用,当连接处于2MLS等待阶段时,任何迟到的报文段都将被丢弃。
边栏推荐
- 365天挑战LeetCode1000题——Day 040 设计跳表 + 避免洪水泛滥 + 查找大小为 M 的最新分组 + 销售价值减少的颜色球
- JD cloud golden autumn cloud special offer is in progress! Code scanning participation activities
- C language handwritten qq-ai version
- MySQL的基础概念+数据库系统结构+拓展延申+基础命令学习
- 重定向和文件
- 365天挑战LeetCode1000题——Day 035 每日一题 + 二分查找 13
- CryEngine技术
- Custom QML control: imagebutton
- 时间复杂度和空间复杂度
- 365天挑战LeetCode1000题——Day 041 二分查找完结纪念 + 第 N 个神奇数字 + 在线选举
猜你喜欢
365天挑战LeetCode1000题——Day 041 二分查找完结纪念 + 第 N 个神奇数字 + 在线选举
C语言函数实现输出I love you
刷题狂魔—LeetCode之剑指offer58 - II. 左旋转字符串 详解
365 day challenge leetcode 1000 questions - day 040 design jump table + avoid flooding + find the latest grouping with size M + color ball with reduced sales value
Thousands of databases, physical machines all over the country, JD logistics full volume cloud live record | interview with excellent technical team
365天挑战LeetCode1000题——Day 042 数组序号转换 + 相对名次 离散化处理
R & D efficiency | analysis of kubernetes' core technology and Devops' landing experience
重定向和文件
The road to success in R & D efficiency of 1000 person Internet companies
C语言连连看秒杀辅助
随机推荐
Best practices of JD cloud Distributed Link Tracking in financial scenarios
MFC集成qt验证及问题处理
QT系列---安装
Cryengine5 shader debugging
QML定制TabBar
Qml控件:ComboBox
串口通讯部分详解
01-01-osg GL3 环境搭建
Thousands of databases, physical machines all over the country, JD logistics full volume cloud live record | interview with excellent technical team
自定义Qml控件:ImageButton
Qml类型:MouseArea
Unity3D - 物体太远看不见的问题
QtCreator+CMake编译器设置
数千个数据库、遍布全国的物理机,京东物流全量上云实录 | 卓越技术团队访谈录
365 day challenge leetcode1000 question - distance between bus stops on day 038 + time-based key value storage + array closest to the target value after transforming the array and + maximum value at t
Getting started with arfoundation tutorial 10- plane detection and placement
365 day challenge leetcode 1000 questions - day 037 elements and the maximum side length of squares less than or equal to the threshold + the number of subsequences that meet the conditions
平行云CEO 李岩:CloudXR ,开启通往元宇宙的通道
研发效能生态完整图谱&DevOps工具选型必看
QML custom tabbar