当前位置:网站首页>三次握手与四次挥手
三次握手与四次挥手
2022-07-31 05:09:00 【城南花开了^】
三次握手
1. 第一次握手:客户端发送位码为 SYN = 1(SYN 标志位置位),随机产生初始序列号 Seq = J 的数据包到服务器。服务器由 SYN = 1(置位)知道,客户端要求建立联机。
2. 第二次握手:服务器收到请求后要确认联机信息,向客户端发送确认号Ack = (客户端的Seq +1,J+1),SYN = 1,ACK = 1(SYN,ACK 标志位置位),随机产生的序列号 Seq = K 的数据包。
3. 第三次握手:客户端收到后检查 Ack 是否正确,即第一次发送的 Seq +1(J+1),以及位码ACK是否为1。若正确,客户端会再发送 Ack = (服务器端的Seq+1,K+1),ACK = 1,以及序号Seq为服务器确认号J 的确认包。服务器收到后确认之前发送的 Seq(K+1) 值与 ACK= 1 (ACK置位)则连接建立成功。经过了这三步之后,客户端与服务器端就成功建立起一个 TCP连接。这三个步骤统称为三次握手.
上面Seq表示序列号,Ack表示确认号,SYN和ACK以及FIN等都是标志位。ACK 被设置为 1表示确认号字段是有效的,如果 ACK为 0,则该段不包含确认信息。SYN 被用于建立连接过程,在连接请求中,SYN = 1 和 ACK = 0 表示该段没有捎带确认字段。连接应答会捎带一个确认,所以应答时会有 SYN= 1 和 ACK= 1。另外发送ACK无需任何代价,所以我们会看到一旦一个连接建立起来,ACK标志总是被置为1
四次挥手
1.客户端发送一个FIN Seq = M(FIN置位,序号为M)包,用来关闭客户端到服务器端的数据传送。
2.服务器端收到这个FIN,它发回一个ACK,确认序号Ack 为收到的序号M+1。
3.服务器端关闭与客户端的连接,发送一个FIN Seq = N 给客户端。
4.客户端发回ACK 报文确认,确认序号Ack 为收到的序号N+1。
对于四次挥手,其实仔细看是两次,因为TCP是全双工的,必须双方都关闭才可以,单方会有两次,共有四次。终止的时候,有一方是被动的,所以看上去就成了四次挥手.
边栏推荐
- torch.normal函数用法
- Redis Advanced - Cache Issues: Consistency, Penetration, Penetration, Avalanche, Pollution, etc.
- .NET-9. A mess of theoretical notes (concepts, ideas)
- Duplicate entry ‘XXX‘ for key ‘XXX.PRIMARY‘解决方案。
- tf.keras.utils.get_file()
- What are the advantages and disadvantages of Unity shader forge and the built-in shader graph?
- Input length must be multiple of 8 when decrypting with padded cipher
- MYSQL一站式学习,看完即学完
- Minesweeper game (written in c language)
- numpy和pytorch中的元素拼接操作:stack,concatenat,cat
猜你喜欢
![<urlopen error [Errno 11001] getaddrinfo failed>的解决、isinstance()函数初略介绍](/img/a4/8c75fab6a9858c5ddec25f6a8300fb.png)
<urlopen error [Errno 11001] getaddrinfo failed>的解决、isinstance()函数初略介绍

Centos7 install mysql5.7 steps (graphical version)

如何将项目部署到服务器上(全套教程)

Goodbye to the cumbersome Excel, mastering data analysis and processing technology depends on it

ERP Production Operation Control Kingdee

Tapdata 与 Apache Doris 完成兼容性互认证,共建新一代数据架构

面试Redis 高可靠性|主从模式、哨兵模式、Cluster集群模式

【MySQL8入门到精通】基础篇- Linux系统静默安装MySQL,跨版本升级
![2022-07-30:以下go语言代码输出什么?A:[]byte{} []byte;B:[]byte{} []uint8;C:[]uint8{} []byte;D:[]uin8{} []uint8。](/img/7f/130a9b733855a2bab07d26ffda2c49.png)
2022-07-30:以下go语言代码输出什么?A:[]byte{} []byte;B:[]byte{} []uint8;C:[]uint8{} []byte;D:[]uin8{} []uint8。

面试官:生成订单30分钟未支付,则自动取消,该怎么实现?
随机推荐
Interviewer: If the order is not paid within 30 minutes, it will be automatically canceled. How to do this?
Flink sink ES 写入 ES(带密码)
Shell重油常压塔模拟仿真与控制
Reference code series_1. Hello World in various languages
ES source code API call link source code analysis
SQL statement to range query time field
快速掌握并发编程 --- 基础篇
MySQL database installation (detailed)
1. Get data - requests.get()
MySQL-如何分库分表?一看就懂
Tapdata 与 Apache Doris 完成兼容性互认证,共建新一代数据架构
工作流编排引擎-Temporal
MYSQL一站式学习,看完即学完
Duplicate entry 'XXX' for key 'XXX.PRIMARY' solution.
有了MVC,为什么还要DDD?
C语言如何分辨大小端
分布式事务处理方案大 PK!
STM32——DMA
MySQL optimization slow log query
Doris学习笔记之监控