天天看点

TCP通信相关知识点

最好的学习方式就是学以致用。最近在B站学习计算机网络,发现了一位将计算机网络讲解的非常详细和通俗的老师。我在下面会把链接贴出来(良心推荐)。学习过程中有了输入,但是缺少了输出。为了回顾最近学习的知识点,特地将内容整理出来,供日后学习。

计算机网络课程

TCP是哪一层的协议

国际标准将计算机网络体系架构分为7层:

  • 应用层
  • List item
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

    实际过程中,在教学和应用方面一般将体系架构分为5层:

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层
    TCP通信相关知识点

这也是视频中主要讲解的体系结构。

其中TCP协议位于传输层。

TCP介绍

TCP(Transmission Control Protocol)是面向连接的,可靠的以及基于字节流的传输层控制协议。

上面的介绍,基本概括了TCP的特性。依次介绍上面的几种概念

  • 面向连接的

    很多听过TCP概念的同学,一定都知道TCP“三次握手”的说法。三次握手就是为了让客户端与服务端进行端到端的连接,与UDP传输协议有很大区别。

  • 可靠的

    UDP传输协议,存在的最大问题就是数据是否传输到对方,我们完全不知道,我们只关注发送数据,而不能确保数据一定会发送到服务端。而TCP就能够确保数据一定要发送到服务端,因此数据传输是可靠的。

  • 字节流

    一个字节等于8个比特,这个概念我们都知道。TCP发送的数据都是以字节为最小单位发送。

    TCP通信相关知识点

三次握手的具体步骤

“三次握手”主动方一般是客户端,请求与服务端进行通信。而服务端监听端口,看是否有连接请求。

TCP通信相关知识点

客户端会首先发送一个数据报文段,SYN属于同步位,且等于1时,该报文段不携带数据。

服务端会发送一个确认报文段,同时SY N=1,ACK=1表示是确认报文段。

接着客户端也会发送一个确认报文段,表示接受到服务端发送的报文段。

TCP通信相关知识点

不知道大家会不会对进行三次握手产生疑问,将握手次数变多这个原因我们知道,就是在于浪费网络资源和时间,3次握手已经比较稳定了。

那如果采取“两报文握手”,可能会发生什么情况呢?

TCP通信相关知识点

如上图所示,当客户端第一次发送的TCP连接请求,在网络中发送超时了。因此,TCP又发送了一次TCP连接请求,且服务端也准确接收到了,发送了确认报文段,且进入连接已建立状态。当客户端接收到服务端的确认报文段时,也进入进入连接已建立状态。并且在数据传输完毕后,关闭连接。此时,网络中客户端第一次发送的TCP请求连接,经过堵塞终于到了服务端,此时服务端接收到了请求,将确认报文段发送出去,并进入进入连接已建立状态。但是由于客户端已经关闭,所以对这个报文段不予理会,仍处于关闭状态。此时,我们就会发现服务端一直处于连接状态,但是却没有任何数据会发送过来,那么就会导致资源浪费。

TCP四次挥手

TCP通过四次挥手,来释放连接。

具体的过程其实和TCP三次握手阶段经历的事情差不多,只是标志位不同。这里主要说明为什么断开连接需要4次?

先说结论:为了防止TCP传输确认数据报文时的丢失情况,导致服务器一直请求超时重发(客户端已经关闭)(浪费网络资源)

具体过程如下图所示:

TCP通信相关知识点

这个过程设计客户端发送了FIN=1的数据报文段,表示自己没有数据可以发送了,想关闭连接。此时服务端接收到此报文段,便发送一个确认报文段。但是注意,此时服务端也许还有数据给客户端发送,当服务端也没有数据发送后,也就可以发送FIN=1的数据报文段,表示自己也想关闭连接了。此时,客户端接收到报文后,发送确认报文,如果此时就关闭连接。那么当客户端发送的确认报文在网络中丢失后,此时服务端接收不到确认报文,就会一直超时重发,从而浪费网络资源。

因此当客户端发送确认报文后,不能立即关闭,而是会有个等待时间。