[计算机网络基础] TCP协议 & 三次握手/四次挥手 及原因

前言

在上一章节. 我们解释了OSI 7层模型. 及数据的处理流程. 今天我们来看TCP协议及其特性约定三次握手和四次挥手.

在本章中, 我们会介绍三次握手四次挥手分别是什么. 并最后总结, 为什么需要3握4挥的这样的一个设计模式.


正文

三次握手

在这里插入图片描述
计算机网络的图是这样. 但是这个图理解起来不是很好.
推荐使用上图进行理解:
首先我们要知道的是TCP协议是一个双向通信的可靠协议. 这里我们把通信的双方认为是A端和B端.

  • 第一次握手(A->B): A端发送协同请求SYNbit=1 (A), 并且带上请求开始队列Seq=x (A). (SYNBit=1 Seq=x) (A)
  • 第二次握手(B->A):
    • B端已经收到A端的建立链接请求. 所以要进行响应.(ACKBit=1 ACKnum=x+1 (响应A))
    • B端也要向A端发送消息链接通道. 所以B端可要发送自己的SYNBit与ACKnum. 即协同请求和协同通道. SYNBit=1 Seq=y (B)
  • 第三次握手(A->B):
    • A端已经收到B端链接响应. 所以A->B的发送通道已经建立. 下一次发送从Seq=x+1发送即可.
    • A端也收到B端的建立链接请求. A端也要准备接收B端的消息. 所以ACKBit=1 ACKnum=y+1 (响应B)
  • B端接收A端的第三次请求. 链接执行完毕. 其中B发送给A时, 可以拆分成2次发送. 即4次握手.

总体上来说发送了3次请求链接和3次接收. 其实个人觉得3次握手这个名字起的并不是很好. 这只能表示一个建立链接的双向流程.

为什么要3次握手?
答: 因为TCP请求是基于链接的稳定传输, 且链接通道是双向的. 在发送请求时, 需要双方都进行链接确认. (确认双方的消息发送和接收能力)

  • 第一次A向B发送链接请求.
  • 第二次 B响应A的链接请求. 并发送自己的链接请求B->A.
  • 第三次 A收到B的响应通知. 并收到B的链接建立请求. 所以需要发送 B的链接请求响应.
  • 第四段 B接收到A的响应通知.

感谢好兄弟. 终于懂了.

  • 书上的解释 (个人感觉这不是原因, 而是可能产生的一个现象)

书上的解释: “为什么A最后还要发送一次确认呢?这主要是为了防止已失效的连接请求报文段突然又传送到了B,因而“产生错误。
所谓“已失效的连接请求报文段”是这样产生的。考虑一种正常情况,A发出连接请求,但因连接请求报文丢失而未收到确认。于是A再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接。A共发送了两个连接请求报文段,其中第一个丢失,第二个到达了B,没有“已失效的连接请求报文段”。
现假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。本来这是一个早已失效的报文段。但B收到此失效的连接请求报文段后,就误认为是A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用报文握手,那么只要B发出确认,新的连接就建立了。”


四次挥手

在这里插入图片描述
在这里插入图片描述
四次挥手在链接断开时发送. 其主要流程如下所示:

  • A->B A端发送链接断开请求.(FINbit=1 Seq=x) (A)
  • B->A:
    • 接收A端链接断开请求. 并发送收到响应.(ACKbit=1, ACKnum=x+1) (响应A)
    • 但是此时. B端之前向A发送端数据流还没结束. 所以还在继续发送数据.
  • B->A
    • B向A发送的数据流已经结束. 发送断开链接请求. (FINBit=1,seq=y) (B)
  • A->B
    • A 收到B发送的断开链接请求. 发送响应(ACKbit=1, ACKnum=y+1)(响应B)
  • B
    • B端收到A发送的响应.

为什么要四次挥手?

  1. 首先还是因为TCP是一个可靠的, 基于链接的双向协议. 链接断开必须要经过双方确认.
  2. 为什么是四次而不是三次? 因为A发送链接断开请求时. B还有数据没有发送完毕. 待B发送完毕后又发送了一遍请求. 所以是四次而不是三次.

Others

  • ACK
    ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。
    在TCP/IP协议中,如果接收方成功的接收到数据,那么会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。
    百度词条-ACK

  • SYN
    SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
    TCP连接的第一个包,非常小的一种数据包。SYN 攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效进行处理。每个机器的欺骗包都要花几秒钟进行尝试方可放弃提供正常响应。
    百度词条-SYN

  • 数据报文
    在这里插入图片描述


Reference

[1]. “三次握手,四次挥手”你真的懂吗?
[2]. [计算机网络-谢希仁]
[3]. TCP 为什么三次握手而不是两次握手(正解版)
[4]. 为什么有三次握手和四次挥手(传统答复 存疑)

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页