Press "Enter" to skip to content

TCP/IP三次握手和四次挥手

Last updated on 2019-12-06

TCP/IP是“transmission Control Protocol/Internet Protocol”的简写,中文译名为传输控制协议/互联网络协议)协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成,是供连接因特网的计算机进行通信的通信协议。其定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准。

TIP/IP协议并不只是单纯的一个协议,它其实是一个完整的协议族。这个协议族里面包含着一系列的协议,就比如我们所熟知的http协议,IP协议,TCP和UDP等等

TCP三次握手

所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。

方案

TCP建立连接为什么是三次握手,而不是两次或四次?

在《计算机网络》一书中其中有提到,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源

举个日常例子,打电话时我们对话如下:

(上图转自知乎)

如果不是三次握手会出现什么情况呢:

假设有A和B两端要进行通信,

  1. 第一次:首先A发送一个(SYN)到B,意思是A要和B建立连接进行通信;
    如果是只有一次握手的话,这样肯定是不行的,A压根都不知道B是不是收到了这个请求。
  2.  第二次:B收到A要建立连接的请求之后,发送一个确认(SYN+ACK)给A,意思是收到A的消息了,B这里也是通的,表示可以建立连接;
    如果只有两次通信的话,这时候B不确定A是否收到了确认消息,有可能这个确认消息由于某些原因丢了。
  3. 第三次:A如果收到了B的确认消息之后,再发出一个确认(ACK)消息,意思是告诉B,这边是通的,然后A和B就可以建立连接相互通信了;
    这个时候经过了三次握手,A和B双方确认了两边都是通的,可以相互通信了,已经可以建立一个可靠的连接,并且可以相互发送数据。
  4. 第四次:这个时候已经不需要B再发送一个确认消息了,两边已经通过前三次建立了一个可靠的连接,如果再发送第四次确认消息的话,就浪费资源了。
    如果第二个报文段B发出的(SYN+ACK)分别发送的话,也是可以理解为四次,但是被优化了,一起发送了。

四次挥手

当客户端和服务器通过三次握手建立了TCP连接以后,当数据传送完毕,肯定是要断开TCP连接的啊。那对于TCP的断开连接,这里就有了神秘的“四次挥手”。

如下图:

为什么要4次挥手?

确保数据能够完整传输,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。

分为以下步骤:

  1. A向B发起请求,表示A没有数据要发送了:A——>B;TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
  2. B向A发送信号,确认A的断开请求请求:B——>A;服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
  3. B向A发送信号,请求断开连接,表示B没有数据要发送了:B——>A;服务器关闭客户端的连接,发送一个FIN给客户端。
  4. A向B发送确认信号,同意断开:A——>B。客户端发回ACK报文确认,并将确认序号设置为收到序号加1
挥手次数比握手多一次,是因为握手过程,通信只需要处理连接。而挥手过程,通信需要处理数据+连接

什么是单工、半双工及全双工通信

  1. 单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信。举例:电视,广播。
  2. 半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息可以实现双向通信。举例:对讲机。
  3. 全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都   有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,举例:电话通信。

Leave a Reply

Your email address will not be published. Required fields are marked *