TCP 三次握手 四次挥手

三次握手
剧情回顾

恋爱那会儿给小女朋友打电话是这样的:

client:client 对 server 说 SYN (约么)
server: SYN + ACK (恩恩,好哒,走起)
client: ACK (OK,搞定)

以上就是三次握手,求偶三步曲
当然,如果我只是这样解释的话,估计你心里也会骂我,耽误你如此宝贵的时间,然而我出家人从不打诳语,凡是讲究证据,接下来看图:
https://img-blog.csdnimg.cn/20181223153154866.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvbGVpZ2VxdXNoYXdhbnlpZXI=,size_16,color_FFFFFF,t_70

在具体介绍之前先附上几个相关字段的介绍:

(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
需要注意的是:
不要将确认序号Ack与标志位中的ACK搞混了。
确认方ack=发起方Req+1,两端配对

  • 第一次握手: 客户端发起连接请求,并将标志位置为1(SYN=1), 并随机产生一个 seq= J 的值, 并将该数据包发送给Server, 然后进入到 SYN_SEND 装态
  • 第二次握手: 服务器端接受到客户端请求之后,通过标志位 (SYN=1)来判断这是客户端的请求,Server 将 自己的标志位设为1(SYN = 1),通过将设置 ACK = 1, ack = J+1。 同时随机生成服务器端的 seq = K, 并将改包发给客户端,并进入 SYN_RCVD 状态
  • 第三次握手:客户端收到服务器端的返回后,判断 ACK = 1 和 ack = J + 1 ,如果正确则置 ACK = 1,ack=K+1,并将该数据包发送给Server,Server检查 ack = K+1,ACK = 1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
四次挥手

轰轰烈烈曾经相爱过,卿卿我我变成了传说

分手时和小女朋友打电话是这样的:

client:client 对 server 说 FIN (我们还是分了吧,有点累了)
server: ACK (既然如此,分就分吧)
server:FIN (直接挂断)
client: ACK (被动终止通话)

以上就是四次挥手,挥手四步

思考一下:为啥连接是三步,挥手是四步?
因为恋爱那会儿,是叫一拍即合啊?分手时那叫一拍两散,不多一个才怪

先上图:
https://img-blog.csdnimg.cn/20181223160557495.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvbGVpZ2VxdXNoYXdhbnlpZXI=,size_16,color_FFFFFF,t_70

  • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号 M+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号 K+1,Server进入CLOSED状态,完成四次挥手。
结束语

关于三次挥手和四次握手就讲解到这里,希望对各位看官有帮助,不喜勿喷,得饶人处—自有多福

其它前端性能优化:

前端技术架构体系(没有链接的后续跟进):

其它相关

欢迎各位看官的批评和指正,共同学习和成长
希望该文章对您有帮助,你的 支持和鼓励会是我持续的动力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值