前端网络---三次握手四次挥手

三次握手

指建立tcp链接时,需要客户端和服务器总共发送三个包,主要作用是确认双方接受和发放能力是否正常,初始化 客户端处于Closed状态,服务端处于 Listen 状态

在三次握手开始之前,先对字段有所了解

1、seq 序列号 随机数 seq = x 每次连接都会携带一个自己的随机序列号

2、ack 确认号 ack = seq + 1 确认上一次收到了序列号 除了第一次连接都会携带

3、ACK 确认收到序列号 ACK = 1 除了第一次连接都会携带

4、SYN 发起一个新连接 SYN = 1

5、FIN 释放一个连接 FIN = 1

第一次握手🤝  客户端给服务器发送一个TCP报文

1、SYN = 1建立一个新的链接

2、seq = x 随机序列号

此时客户端处于SYN-SEND状态

第二次握手🤝   服务器收到SYN报文后,回复浏览器

1、SYN = 1同意建立一个新的链接

2、ACK = 1确认收到序列号

3、ack = x + 1确认收到序列号是x

4、seq = y 随机序列号

服务端进入SYN-REVD阶段

第三次握手🤝    浏览器收到报文后回复服务器

1、ACK = 1确认收到序列号

2、ack = y + 1确认收到序列号是y

3、seq = x+1 上一次浏览器发送的 seq = x 基础上 + 1

服务器和浏览器同时进入 ESTABLISHED 状态

关于三次握手可能问到的面试题

三次握手的作用

1、确认服务器和客户端的接受和发送能力正常

2、指定自己的初始化序列号,为后面的可靠传输做准备

什么是半连接队列

1、服务器第一次收到客户端的SYN后,处于SYN-REVD状态,此时双方还没有建立连接,服务器会把此时情况下的连接放到队列里,我们把这种队列称为半连接队列

什么是全连接队列

1、当双方已经完成三次握手,此时的请求连接会放到全连接对列里,如果队列满了会出现丢包的情况

四次挥手

1、客户端和服务器要断开连接时进行的四次挥手

2、刚开始双方都处于 ESTABLISHED 状态

第一次挥手🙋   客户端发起断开连接

1、FIN = 1 关闭连接

2、seq = q 随机序列号

客户端处于FIN-WAIT-1状态

第二次挥手🙋   服务器收到客户端的断开请求,开始处理内部处理操作

1、ACK = 1 确认收到序列号

2、ack = q + 1 确认收到序列号q

3、seq = w 随机序列号

服务器进入 COLSE-WAIT 处理阶段

客户端进入 FIN-WAIT-2 阶段 等待服务器处理

第三次挥手🙋   服务器处理完毕,回复客户端

1、ACK = 1 确认收到序列号

2、ack = q + 1 确认收到序列号q

3、seq = v 随机序列号

4、FIN = 1 关闭连接

服务器进入 LAST-ACK 阶段 等待浏览器确认收到

第四次挥手🙋   客户端收到服务器报文,回复服务器

1、ACK = 1 确认收到序列号

2、ack = v + 1 确认收到序列号v

3、seq = q + 1 

浏览器进入 TIME-WAIT 阶段,此时TCP未释放掉,等待 2MSL(毫秒),等待服务器收到自己的报文,然后进入 COLSE 阶段

为什么是四次 挥手

客户端发送FIN报文后,表示客户端当前没有数据需要处理,而不代表服务端没有数据需要处理。此时需要服务端回复ACK确认收到报文后,开始处理内部数据。当内部数据处理完后,再回复FIN可以关闭连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值