首页
学习
活动
专区
工具
TVP
发布

三次握手与四次挥手

又到了一年一度的黄金3月了,作为网络的必问内容, 有必要好好回忆下了.

1

TCP报文格式

其中比较重要的字段有:

(1)序号(sequence number): Seq序号, 占32位, 用来标识从TCP源端向目的端发送的字节流, 发起方发送数据时对此进行标记.

(2)确认号(acknowledgement number): Ack序号, 占32位, 只有ACK标志位为1时, 确认序号字段才有效, Ack=Seq+1.

(3)标志位(Flags): 共6个, 即URG、ACK、PSH、RST、SYN、FIN等. 具体含义如下:

URG: 紧急指针(urgent pointer)有效.

ACK: 确认序号有效.

PSH: 接收方应该尽快将这个报文交给应用层.

RST: 重置连接.

SYN: 发起一个新连接.

FIN: 释放一个连接.

需要注意的是:

不要将确认序号Ack与标志位中的ACK搞混了. 确认方Ack=发起方Seq+1, 两端配对.

2

三次握手

(1)第一次握手: Client将标志位SYN置为1, 随机产生一个值seq=x, 并将该数据包发送给Server, Client进入SYN_SENT状态, 等待Server确认.

(2)第二次握手: Server收到数据包后由标志位SYN=1知道Client请求建立连接, Server将标志位SYN和ACK都置为1, ack=x+1, 随机产生一个值seq=y, 并将该数据包发送给Client以确认连接请求, Server进入SYN_RCVD状态.

(3)第三次握手: Client收到确认后, 检查ack是否为x+1, ACK是否为1, 如果正确则将标志位ACK置为1, ack=y+1, 并将该数据包发送给Server, Server检查ack是否为y+1, ACK是否为1, 如果正确则连接建立成功, Client和Server进入ESTABLISHED状态, 完成三次握手, 随后Client与Server之间可以开始传输数据了.

3

四次挥手

(1)第一次挥手: Client发送一个FIN, 用来关闭Client到Server的数据传送, Client进入FIN_WAIT_1状态 .

(2)第二次挥手: Server收到FIN后 , 发送一个ACK给Client, 确认序号为收到序号+1(与SYN相同, 一个FIN占用一个序号), Server进入CLOSE_WAIT状态 .

(3)第三次挥手: Server发送一个FIN, 用来关闭Server到Client的数据传送, Server进入LAST_ACK状态.

(4)第四次挥手: Client收到FIN后, Client进入TIME_WAIT状态, 时间是2MSL(最大分段生存期, 默认2分钟), 接着发送一个ACK给Server, 确认序号为收到序号+1 ,  Server进入CLOSED状态,  完成四次挥手.

小结

记住这些, 你的网络问答可以拿60分了

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210313A04YLK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券