网络知识(二)三次握手、四次挥手

1.三次握手

什么是三次握手

三次握手发生在TCP连接的过程当中。通过TCP的连接,使上层网络的数据传输建立在“无差别的网络上”。
在建立连接时,服务器处于被动状态。
TCP一共有6个标志位,常见的有四个
标志位含义
SYN建立连接
ACK响应确认
FIN(finish)结束
RST重置

三次握手图示

举个例子
(1)客户端:你听的到吗?
(2)服务端:我听得到你,你听得到我吗?
(2)客户端:我也听得到你。
在这里插入图片描述

三次握手过程

第一次握手

客户端发送 SYN 包( syn = j )到服务器,并进入 SYN_SEND 状态,等待服务器确认

第二次握手

服务器确认客户的 SYN 包,同时发送 ACK 包( ack = j + 1 )作为回应;自己也发送一个 SYN 包( syn = k ),
共两个包,此时服务器进入 SYN_RECV 状态;

第三次握手

客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK ( ack = k + 1 ),此包发送完毕,
客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

2.四次挥手

什么是四次挥手

四次挥手发生在TCP client与server断开连接的过程中。在断开时需要客户端和服务端总共发送4个包以确认连接的断开。在 socket 编程中,这一过程由客户端或服务端任一方执行close来触发。

四次握手图示

举个例子:
(1)客户端:我走了,拜拜。
(2)服务器:好的,那你走吧
(3)服务器:那我也走了
(4)客户端:好的,你也走吧。
在这里插入图片描述

四次握手过程

第一次挥手

客户端发送一个 FIN = M,用来关闭客户端到服务器端的数据传送,客户端进入 FIN_WAIT_1状态 。

意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据

第二次挥手(半连接)

服务器端收到 FIN 后,先发送 ack = M + 1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态(半连接状态),继续等待服务器端的FIN报文。

第三次挥手

当服务器端确定数据已发送完成,则向客户端发送 FIN = N 报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。

第四次挥手

客户端收到 FIN = N 报文后,就知道可以关闭连接了。

但是他还是不相信网络,怕服务器端不知道要关闭,所以发送 ack = N + 1后进入TIME_WAIT状态,如果 Server 端没有收到 ACK 则可以重传。服务器端收到ACK后,就知道可以断开连接了。

客户端等待了 2MSL 后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。

3. 2MSL 的作用

假设客户端最后一个确认报文段丢失,如果没有2MSL等待时间,那么服务端一直发送超时重发报文,最终无法进入CLOSED状态

2MSL时长可以使本次连接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接中不会出现旧连接中的报文段

4. 为什么连接要三次握手,断开要四次挥手

客户端发送FIN关闭报文,但是服务端仍在给他发送数据不能马上停止,服务端先给出ACK报文回应(你的请求我收到了,但要等我发完数据才能关闭哦)。当服务端发送完毕后,再发送FIN报文请求关闭,所以这两个报文不能同时发送,故有了四次挥手。

如果把三次握手改为仅需要两次握手,可能发生死锁。

5. 如果已经建立了TCP连接,客户端突然发生故障了怎么办?

TCP 协议有一个保活机制。 这个机制的原理是这样的:

定义⼀个时间段,在这个时间段内,如果没有任何连接相关的活动,TCP 保活机制会开始作⽤,每隔⼀个时间间隔,发送⼀个探测报⽂,该探测报⽂包含的数据⾮常少,如果连续⼏个探测报⽂都没有得到响应,则认为当前的TCP 连接已经死亡,系统内核将错误信息通知给上层应⽤程序。

在 Linux 内核可以有对应的参数可以设置保活时间、保活探测的次数、保活探测的时间间隔。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值