当前位置:网站首页>三次握手与四次挥手
三次握手与四次挥手
2022-08-11 08:57:00 【学习record】
目录
重要概念
SYN(同步请求信号)
ACK(响应信号)
ACK=1,响应有效
ACK=0,响应无效
ack(确认信号)
seq(序列号)
三次握手

第一次握手:
客户端向服务端发送SYN=1同步请求信号,序列号seq=x;客户端进入SYN_SEND状态(同步请求状态)
第二次握手:
服务端收到客户端的信号后,向客户端发送SYN=1信号,ack=x+1,ACK=1响应,seq=y;服务端状态有LISTEH转为SYN_SEND
第三次握手:
客户端收到信号后,发送SYN=1,seq=x+1,ack=y+1;客户端进入ESTABLISHED状态(连接状态),服务端收到信号后也进入ESTABLISHED状态。
问题1:为什么要三次握手?
答:第一次握手服务端知道客户端有信号发送功能;第二次握手,客户端知道服务端有信号接收和发送能力;第三次握手,服务端自导客户端有信号接收能力。
问题2:为什么是三次握手,不是两次,四次?
答:假设两次握手,客户端向服务端发送同步请求SYN=1,因为信号中断等特殊原因,服务端没有收到信号,一直在LISTEN状态;然后客户端因为网络原因认为数据没有被发送,再次向服务端发送相同的信号,接着服务端收到信号建立连接,但是网络突然恢复,使发送到的第一条信号又发送给服务端,在两次握手后,服务端等待客户端确认,但是客户端认为只发送了一条请求,导致两边的信息不对等,使服务端一直处于等待确认状态。三次握手本质上是解决网络信道不可靠问题。
四次握手则会造成资源浪费,因为三次握手客户端和服务端都可以知道彼此的信号发送和接收能力。
四次挥手

第一次挥手:
客户端向服务端发送FIN信号(结束信号),并且发送一个序列号seq=m ,客户端从ESTABLISHED状态进入FIN_WAIT1状态(等待结束1状态)。
第二次挥手:
服务端收到信号后,向客户端发送响应(ACK=1)、序列号seq=y和确认信号ack=m+1,同时服务端进入CLOSE_WAIT状态(关闭等待状态)。
第三次挥手:
客户端在CLOSE_WAIT(等待关闭状态)时,可以发送数据给客户端。同时服务端向客户端发送结束信号(FIN)、响应(ACK)、序列号(seq=n)和确认信号ack=m+1。服务端进入最后确认状态(LAST_ACK);客户端收到信号后进入FIN_WAIT2(等待结束2状态)
第四次挥手:
客户端收到信号后,向服务端发送响应(ACK),序列号(seq=m+1),确认号(ack=n+1),同时自身进入等待时间(TIME_WAIT),两秒后直接关闭连接;服务端收到信号后关闭连接(CLOSE)。
问题1:为什么客户端需要等待2秒?
答:是为了保证服务端能够收到确认信号。因为假设客户端发送完信号直接关闭连接,一旦信号在传输过程中丢失,则会导致服务端一直在等待关闭状态。但是客户端等待两秒,这是服务端没有收到信号客户端会再次发送信号,保证了信号传输的可靠下性。
边栏推荐
猜你喜欢

pycharm中绘图,显示不了figure窗口的问题

Nuget can't find the package problem

基于 VIVADO 的 AM 调制解调(3)仿真验证

WordpressCMS主题开发01-首页制作

对比学习系列(三)-----SimCLR

基础SQL——DDL

mysql数据查询因为查询的时间跨度过大导致cup爆满应该怎么办

Redis的客户端连接的可视化管理工具

SDUT 2877:angry_birds_again_and_again

What should I do if the mysql data query causes the cup to be full because the query time span is too large
随机推荐
Kotlin算法入门求完全数
Notable NFT development trends in 2022
ImportError: /usr/local/cuda-11.2/lib64/libcublas.so.10: version `libcublas.so.10‘ not found
研发了 5 年的时序数据库,到底要解决什么问题?
What should I do if the mysql data query causes the cup to be full because the query time span is too large
Kotlin算法入门求回文数算法优化一
For the first time, I suspect that there is a bug in selenium4 because the iframe element is not found?
SDUT 2877: angry_birds_again_and_again
RestTemplate工具类
C Primer Plus(6) 中文版 第1章 初识C语言 1.6 语言标准
基于 VIVADO 的 AM 调制解调(1)方案设计
@RequiredArgsConstructor注解
IPQ4019/IPQ4029 support WiFi6 MiniPCIe Module 2T2R 2×2.4GHz 2x5GHz MT7915 MT7975
mindspore如何实现每50个epoch检测一次psnr
专题讲座8 字符串(一) 学习心得
JUC Concurrent Programming
万字长文带你了解多态的底层原理,这一篇就够了
游戏服务器中集群网关的设计
Alibaba Sentinel - Slot chain解析
仙人掌之歌——大规模高速扩张(1)