三次握手与四次挥手

2022-06-27 15:12:29 浏览数 (2)

又到了一年一度的黄金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分了

0 人点赞