当前位置:网站首页>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 状态。
边栏推荐
- Bit rate vs. resolution, which one is more important?
- Difference between MBps and Mbps
- EL定时刷新页面中的皕杰报表实例
- 5.PCIe官方示例
- 蓝牙Mesh系统开发四 ble mesh网关节点管理
- C# const readonly static 关键字区别
- 深度学习:使用nanodet训练自己制作的数据集并测试模型,通俗易懂,适合小白
- Software Testing Interview Questions: What's the Difference Between Manual Testing and Automated Testing?
- ora-01105 ora-03175
- Zombie and orphan processes
猜你喜欢

执掌图表

oracle create user

软件测试技术之最有效的七大性能测试技术

Redis visual management software Redis Desktop Manager2022
![[FreeRTOS] FreeRTOS and stm32 built-in stack occupancy](/img/33/3177b4c3de34d4920d741fed7526ee.png)
[FreeRTOS] FreeRTOS and stm32 built-in stack occupancy

【FreeRTOS】FreeRTOS与stm32内置堆栈的占用情况

If capturable=False, state_steps should not be CUDA tensors

Getting Started with Kubernetes Networking

行业现状?互联网公司为什么宁愿花20k招人,也不愿涨薪留住老员工~

10年测试经验,在35岁的生理年龄面前,一文不值
随机推荐
linux(centOs7)部署mysql(8.0.20)数据库
【TA-霜狼_may-《百人计划》】图形4.3 实时阴影介绍
Pytorch使用和技巧
Activity Recommendation | Kuaishou StreamLake Brand Launch Conference, witness together on August 10!
Software testing interview questions: What stages should a complete set of tests consist of?
[FreeRTOS] FreeRTOS and stm32 built-in stack occupancy
LiveVideoStackCon 2022 Shanghai Station opens tomorrow!
DHCP的工作过程
软件测试面试题:软件测试类型都有哪些?
Software Testing Interview Questions: What aspects should be considered when designing test cases, i.e. what aspects should different test cases test against?
2022 The Third J Question Journey
张驰咨询:揭晓六西格玛管理(6 Sigma)长盛不衰的秘密
深度学习原理学习小结 - Self-Attention/Transformer
leetcode: 269. The Martian Dictionary
The method of freely controlling concurrency in the sync package in GO
Software Testing Interview Questions: Qualifying Criteria for Software Acceptance Testing?
D - I Hate Non-integer Number (count of selected number dp
Opencv——视频跳帧处理
Software testing interview questions: What are the strategies for system testing?
JVM类加载简介