当前位置:网站首页>tcp中的三次握手与四次挥手
tcp中的三次握手与四次挥手
2022-08-05 00:53:00 【hgswnsa】
三次握手
三次握手是建立连接的过程
图示
在建立连接之前: 服务器处于 LISTEN 状态,客户端处于 CLOSED 状态。
第一次握手: 客户端给服务器发送一个同步报文段 SYN,并指定客户端的初始序列号 ISN,此时客户端处于 SYN_SENT 状态。
首部的同步位 SYN=1(SYN只是一个标志位,0表示不是SYN,1表示是SYN),初始序列号 seq=x 。SYN=1 的报文段不能携带任何的数据,但要指定序号。
第二次握手: 服务器接收到来自客户端的同步报文段 SYN 后,会以自己的 SYN 报文作为应答,并且也指定了自己的初始序列号 ISN,同时会把客户端的 seq+1 作为确认序列号 ack 的值,表示自己已经收到了客户端的同步报文段 SYN,此时服务器处于 SYN_RCVD 的状态。
确认报文段中 SYN=1,ACK=1(ACK也只是一个标志位,0表示不是ACK,1表示是ACK),初始序列号 seq=y ,确认序列号 ack=x+1 ,
第三次握手: 客户端收到来自服务器的同步报文段 SYN 之后,会发送一个确认报文段 ACK,以服务器的 seq+1 作为 ack 的值 ,表明自己已经收到来自服务器的同步报文段 SYN。客户端进入 ESTABLISHED 状态,服务器确认报文段 ACK 之后,也会进入 ESTABLISHED 状态。
确认报文段中 ACK=1,序列号 seq=x+1,确认序列号 ack=y+1,
至此,双方已经建立起连接,可以正常的发送数据。
三次握手为什么是三次?
三次握手才能确认双方都准备好了
第一次握手:客户端什么都不能确认,服务器确认了:对方发送正常,自己接收正常
第二次握手:客户端确认了:自己发送正常接收正常,对方发送正常接收正常;服务器确认了:对方发送正常,自己接收正常
第三次握手:客户端确认了:自己发送正常接收正常,对方发送正常接收正常;服务器确认了:对方发送正常接收正常,自己发送正常接收正常。
四次挥手
四次挥手是断开连接的过程
图示
客户端和服务器都可以主动关闭连接,只有率先请求关闭的一方才会进入TIME_WAIT状态
在断开连接之前: 客户端和服务器都处于 ESTABLISHED 状态,双方都可以主动断开连接,以客户端主动断开连接为优。
第一次挥手:客户端打算断开连接,向服务器发送 FIN 报文,FIN 报文中会指定一个序列号,之后客户端进入 FIN_WAIT_1 状态。
也就是客户端发出连接释放报文段 FIN=1,指定序列号 seq=u,主动关闭TCP连接,等待服务器的确认。
第二次挥手: 服务器收到 FIN 报文后,就向客户端发送 ACK 应答报文,以客户端的 FIN 报文的序列号 seq+1 作为 ACK 应答报文段的确认序列号 ack=u+1,指定序列号 seq=v。
接着服务器进入 CLOSE_WAIT 状态,此时的TCP处于半关闭状态,客户端到服务器的连接释放。客户端收到来自服务器的 ACK 应答报文段后,进入 FIN_WAIT_2 状态。
第三次挥手: 服务器也打算断开连接,向客户端发送 FIN 报文,之后服务器进入 LASK_ACK 状态,等待客户端的确认。
服务器的连接释放报文段中 FIN=1,ACK=1,序列号 seq=w,确认序列号 ack=u+1。
第四次挥手: 客户端收到来自服务器的 FIN 报文段后,会向服务器发送一个 ACK 应答报文段,以 FIN 报文段的确认序号 ack 作为 ACK 应答报文段的序列号 seq,以FIN报文段的序列号 seq+1作为确认序号ack。
之后客户端进入 TIME_WAIT 状态,服务器收到 ACK 应答报文段后,服务器就进入 CLOSED 状态,至此,服务器的连接已经完成关闭。
客户端处于 TIME_WAIT 状态时,此时的 TCP 还未释放掉,需要等待 2MSL 后,客户端才进入 CLOSED 状态。
边栏推荐
- 2022牛客多校训练第二场 L题 Link with Level Editor I
- 数仓4.0(三)------数据仓库系统
- 多线程涉及的其它知识(死锁(等待唤醒机制),内存可见性问题以及定时器)
- 快速批量修改VOC格式数据集标签的文件名,即快速批量修改.xml文件名
- Software Testing Interview Questions: What aspects should be considered when designing test cases, i.e. what aspects should different test cases test against?
- Software Testing Interview Questions: What's the Key to a Good Test Plan?
- Matlab uses plotting method for data simulation and simulation
- QSunSync Qiniu cloud file synchronization tool, batch upload
- 2022牛客多校第三场 J题 Journey
- Software Testing Interview Questions: What is Software Testing?The purpose and principle of software testing?
猜你喜欢
随机推荐
【FreeRTOS】FreeRTOS与stm32内置堆栈的占用情况
(十七)51单片机——AD/DA转换
E - Distance Sequence (prefix and optimized dp
2022 Hangzhou Electric Multi-School 1004 Ball
DHCP的工作过程
MongoDB construction and basic operations
Software test interview questions: BIOS, Fat, IDE, Sata, SCSI, Ntfs windows NT?
B站7月榜单丨飞瓜数据B站UP主排行榜发布!
Software testing interview questions: test life cycle, the test process is divided into several stages, and the meaning of each stage and the method used?
阶段性测试完成后,你进行缺陷分析了么?
ora-01105 ora-03175
CNI(Container Network Plugin)
tensor.nozero(),面具,面具
canvas Gaussian blur effect
torch.autograd.grad finds the second derivative
Software Testing Interview Questions: What is Software Testing?The purpose and principle of software testing?
软件测试面试题:BIOS, Fat, IDE, Sata, SCSI, Ntfs windows NT?
GCC:编译时库路径和运行时库路径
2021年11月网络规划设计师上午题知识点(上)
主库预警日志报错ORA-00270