深度揭秘TCP三次握手四次挥手---计算机网络

一、TCP是什么

英语:Transmission Control Protocol,缩写为TCP

TCP是传输控制协议;是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义

UDP 一样完成第四层传输层所指定的功能与职责

二、TCP的机制

三次握手、四次挥手

具有校验机制、可靠、数据传输稳定

 TCP使用三次握手和四次挥手来建立和终止连接。为什么建立和终止连接还需要这么麻烦呢?TCP设置三次握手和四次挥手是为了确保可靠的连接建立和终止,在网络通信中保护数据的完整性和可靠性。

第一次握手,是客户端向服务器发送了一个SYN请求,也就是客户端在向服务器请求连接。此时客户端处于SYN_SENT状态。
第二次握手,是服务器向客户端发送了一个ACK+SYN的回应,表明服务器收到了客户端的请求,并且同意了客户端的请求建立连接。此时服务器处于SYN_RCVD状态。
第三次握手,也是最后一次握手,是客户端回应服务器一个ACK报文。表明客户端收到服务器的同意建立连接,并告诉服务器我收到了你的确认。同时也会根据此时客户端处于ESTABLISHED状态。

三次握手后连接就一定建立成功了吗 


   答案是不一定。为什么呢?我们看到,第一次握手和第二次握手都有ACK回应。但是第三次握手并没有对应的回应。有没有如下一种可能:前两次握手成功了,到第三次握手发出后,服务端并没有收到响应的报文,也就是丢包了!这时即使三次握手完成,连接也并没有建立成功!

  连接建立成功,必须是服务端和客户端的状态都必须是ESTABLISHED状态。

1.第一次握手


客户端(发起请求(request)的一方),想要与服务器建立连接时,首先要向服务器发送SYN(Synchronize Sequence Numbers)报文段,并指定一个客户端的初始序列号(ISN),这个动作标志着客户端尝试建立连接的起始点,同时也传达了客户端准备接收服务器数据的准备状态(SYN_SENT状态)。

2.第二次握手


服务器在接收到客户端发起的SYN请求后,如果同意建立连接,则会响应(response)一个SYN和ACK报文.其中SYN确认客户端的起始序列号,同时,ACK回应客户端的SYN请求,表明服务器已接收到客户端的SYN,并给出服务器自己的初始序列号。这一步骤既确认了来自客户端的连接请求,也初始化了从服务器到客户端的连接序列号。

3.第三次握手


客户端接收到服务器的SYN/ACK应答后,再向服务器发送一个ACK报文,确认收到了服务器的初始序列号。这一确认完成后,TCP连接正式建立,之后双方就可以开始数据传输了。

eg:

三次握手:
A:是B吗?我要跟你通信,听得到我说话吗?
B:可以通信,你听得到我说话吗?
A:我也听得到。


 三次握手的意义 为什么要进行三次握手?

  1. 三次握手,可以现针对通信路径进行投石问路,初步确认一下通信链路是否畅通(可靠性的前提)
  2. 三次握手也是在验证通信双方 发送能力 接受能力是否正常.
  3.  三次握手的过程中也会协商一些有必要的参数(序列号,窗口大小,最长报文段长度)

两次握手,四次握手可以吗?


为什么不是两次握手?


不足以防止旧连接请求的干扰:如果使用两次握手,那么就可能会出现这样的情况——一个延迟的连接请求被服务器接受,导致错误地建立连接。这种情况在网络延迟较大时尤为常见。三次握手通过确认过程确保了当前的连接请求是新鲜和有效的。
无法确保双方都准备好数据传输:两次握手只能保证一方知道另一方是准备好进行通信的,但无法确信双方都已经准备好发送和接收数据。第三次握手保证了双方都确认了对方的准备状态。


为什么不是四次握手?


实际上,在建立连接时,三次握手已足够满足建立一个可靠连接所需的最小条件:验证双方的接收与发送能力,并防止失效的连接请求导致资源浪费。增加第四次握手将意味着更多的延迟和资源消耗,而没有带来相应的可靠性或性能提升。因此,从效率和必要性的角度考虑,三次即可满足需求。

四次挥手

TCP中的四次挥手是用来关闭连接的。我们平常所写的 close(sock),就是用来关闭连接的。注意:关闭连接是两端的事情,并不是一端的事情

 四次挥手的具体过程如下:

第一次挥手

客户端向服务器发送一个FIN(结束)请求,表示客户端不再发送数据。此时客户端处于FIN_WAIT_1状态。


第二次挥手

服务器收到请求后,回复客户端一个ACK响应确认,但这个响应可能还携带有未传输完的数据。此时服务器处于CLOSE_WAIT状态。注意,在第三次挥手之前,数据还是可以从服务器传送到客户端的。


第三次挥手

服务器完成数据传输后,向客户端发送一个FIN请求,表示服务器也没有数据要发送了。此时服务器状态变为LAST_ACK状态。


第四次挥手

客户端收到服务器的请求后,回复服务器一个ACK响应确认。此时客户端处于TIME_WAIT状态,需要经过一段时间确保服务器收到自己的应答报文后,才会进入CLOSED状态。
  到这里,四次挥手就已经结束了。最后,服务器收到ACK报文后,就关闭连接,也处于CLOSED状态了。

TCP与网络通信


     在互联网体系结构中,TCP协议具备面向连接、可靠传输、面向字节流及全双工等关键特性,为应用层提供了高度可靠的数据传输服务。TCP通过一系列核心技术,包括序列号与确认应答机制确保数据有序完整传输,以及流量控制机制维持数据传输的稳定性和有效性,从而确保信息能在网络中准确无误地送达目标。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃java的羊儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值