本文主要分析运输层的两种协议TCP和UDP,重点在于TCP如何实现可靠传输,并且进行流量控制,以及TCP的三次握手和四次挥手的详细过程。最后对TCP和TDP的两种协议进行了比较。

主要内容:

  1. 运输层的认识
  2. UDP的认识
  3. TCP认识
  4. UDP和TCP的区别
1、运输层的认识

运输层就是位于应用层和网络层之间的,为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务。 物理层、数据链路层以及网络层他们共同解决了将主机通过异构网络互连起来所面临的问题,实现了主机到主机的通信,而通信的真正实体是位于通信两端主机中的进程。

因特网的运输层为应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP UDP是无连接的,不可靠的运输协议,TCP是面向连接的,可靠的运输协议

运输层在网络通信中的作用:

tcp和udp区别和联系(TCP和UDP的认识和区别)(1)

运输层在网络通信中作用过程:

tcp和udp区别和联系(TCP和UDP的认识和区别)(2)

  1. 进程Ap1与Ap4之间进行基于网络的通信,进程Ap2与Ap3之间进行基于网络的通信
  2. 在运输层使用不同的端口,来对应不同的应用进程
  3. 然后通过网络层及其下层来传输应用层报文
  4. 接收方的运输层通过不同的端口,将收到的应用层报文,交付给应用层中相应的应用进程

注:这里所说的主机和主机之间的通信其实是主机进程之间的通信

C 音视频开发学习资料:点击领取→音视频开发(资料文档 视频教程 面试题)(FFmpeg WebRTC RTMP RTSP HLS RTP)

2、用户数据报协议UDP

2.1 介绍

用户数据报协议(User Datagram Protocol),是TCP/IP体系结构运输层中的一个重要协议,这种逻辑通信信道是一条不可靠信道。 特点:

2.2 运输过程

tcp和udp区别和联系(TCP和UDP的认识和区别)(3)

说明:

3、传输控制协议TCP

3.1 介绍

TCP 是TCP/IP体系结构运输层中的重要协议,当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。 TCP 传送的数据单位协议是 TCP 报文段(segment)

特点:

TCP传输过程

tcp和udp区别和联系(TCP和UDP的认识和区别)(4)

说明: 发送方:

接收方:

C 音视频开发学习资料:点击领取→音视频开发(资料文档 视频教程 面试题)(FFmpeg WebRTC RTMP RTSP HLS RTP)

3.2 超时重传

3.2.1 介绍

在TCP传输中为了实现可靠传输和流量控制都需要涉及超时重传,超时重传中最为重要的是计算超时重传的时间。 RTO是超时重传时间,RTT是往返时间。

超时重传时间不能远大于往返时间,会浪费资源

tcp和udp区别和联系(TCP和UDP的认识和区别)(5)

超时重传时间不能小于往返时间,会造成不必要的重传

tcp和udp区别和联系(TCP和UDP的认识和区别)(6)

超时重传时间应当略大于往返时间,为了避免误差,应当选用一段时间内的加权的往返时间

tcp和udp区别和联系(TCP和UDP的认识和区别)(7)

总结: 1、如果超时重传时间RTO的值设置得比RTT的值小很多,这会引起报文段不必要的重传,使网络负荷增大 2、如果超时重传时间RTO的值设置得远大于RTT0的值,这会使重传时间推迟的太长,使网络的空闲时间增大,降低传输效率 3、因此需要将超时重传时间设置的略大于一次往返时间。

3.2.3 超时重传时间RTO的计算 超时重传时间的要略大于一次往返时间,但一次往返时间是不固定的,因此超时重传时间的计算是基于加权平均往返时间

tcp和udp区别和联系(TCP和UDP的认识和区别)(8)

说明:

3.2.4 往返时间RTT的测量 往返时间RTT的测量不能简单的进行一次往返时间的计算,有如下问题需要处理

问题1:如果报文丢失或确认报文的迟到,都会导致重传报文。这样两次的报文发送使得无法准确计算一次往返时间。

tcp和udp区别和联系(TCP和UDP的认识和区别)(9)

解决1:Karn算法

问题2: 对于问题1的解决会引入新问题

解决2:

总结3.3 流量控制

3.3.1 介绍 利用滑动窗口机制来实现流量控制,重点有两个,一个是接收方通过对已接收的数据进行累计确认,并调整窗口大小,来对发送方进行流控,第二个就是启动持续计时器来探知是否要发送零窗口探测报文,通过这两个就可以让接收方对发送方进行窗口大小的调控,以此做到了流量控制。

3.3.2 为什么要提出流量控制 一般来说,我们总是希望数据传输的更快一些,但是如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失。所以就需要进行流量控制, 流量控制简单说就是让发送方的发送速率不要太快,要让接收方来得及接收

3.3.3 流量控制 我们利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制 重点在于接收方根据自己的存储空间来决定自己的接收空间的大小,以此来限制发送方发送窗口的大小

过程:

tcp和udp区别和联系(TCP和UDP的认识和区别)(10)

说明:

3.3.4 打破死锁

接收方给发送方发送的确认报文丢失后会形成A和B主机的相互等待,这样就造成了死锁,需要通过一个持续计时器,当计时器为0时发送零窗口探测报文询问以此让接收方再次发送确认报文。这样就打破了死锁

3.3.4.1 死锁的形成

tcp和udp区别和联系(TCP和UDP的认识和区别)(11)

3.3.4.2 解锁的解决

tcp和udp区别和联系(TCP和UDP的认识和区别)(12)

说明:

3.3.4.3 一些疑问 零窗口探测报文丢失后,是否仍然会死锁?

零窗口探测报文发送到主机B时,主机B的接收窗口为0,还能接收零窗口探测报文吗

3.3.5 总结3.4 可靠传输3.4.1 介绍

可靠传输是通过确认机制来实现的,接收方给发送方发送的确认报文带有的字段决定了发送方是否要重传,是否要滑动窗口的操作,以此做到了可靠传输

tcp和udp区别和联系(TCP和UDP的认识和区别)(13)

tcp和udp区别和联系(TCP和UDP的认识和区别)(14)

说明:

C 音视频开发学习资料:点击领取→音视频开发(资料文档 视频教程 面试题)(FFmpeg WebRTC RTMP RTSP HLS RTP)

3.5 运输连接管理3.5.1 介绍

TCP是面向连接的协议,它基于运输连接来传送TCP报文段,TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的部分。 TCP的运输连接管理就是使运输连接的建立和释放都能正常的进行。 共有三个阶段

  1. 建立TCP连接(三次握手)
  2. 数据传输
  3. 释放TCP连接(四次挥手)

3.5.2 三次握手过程

过程示意图:

tcp和udp区别和联系(TCP和UDP的认识和区别)(15)

说明:

  1. 第一次握手是客户端向服务器端发送TCP连接请求 SYN=1表示的报文段不能携带数据,但会消耗掉一个序号 seq=x表示序号位 此时进入同步已发送状态
  2. 第二次握手是服务器端向客户端发送针对TCP连接请求的确认 ACK表示确认报文段 seq=y表示序号位,作为服务器进程所选择的初始序号 ack=x 1为确认序号字段,这是对客户进程所选择的初始序号的确认 SYN=1,不能传输数据 进入同步已接收状态
  3. 第三次握手是客户端向服务器端发送针对TCP连接请求的确认的确认 这是一个普通的TCP确认报文段 客户端发送后进入连接已建立状态,服务器端接收到后也进入连接已建立状态 可以携带数据,SYN不等于1

为什么必须要三次握手,不能两次握手?

tcp和udp区别和联系(TCP和UDP的认识和区别)(16)

采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了TCK服务器端,导致服务器端无效浪费资源。

  • 一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。
  • 本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出连接确认报文,表示同意建立连接。
  • 如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。
  • 3.5.3 四次挥手过程3.5.3.1 四次挥手过程

    tcp和udp区别和联系(TCP和UDP的认识和区别)(17)

  • TCP客户进程的应用进程通知其主动关闭TCP连接,TCP客户进程会发送TCP连接释放报文段,并进入终止等待1状态
  • TCP服务器进程收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并进入关闭等待状态
  • TCP服务器进程通知高层应用进程,TCP客户进程要断开与自己的TCP连接,此时,从TCP客户进程到TCP服务器进程这个方向的连接就释放了,这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了
  • 但如果TCP服务器进程还有数据要发送,TCP客户进程仍要接收,也就是说从TCP服务器进程到TCP客户进程这个方向的连接并未关闭
  • TCP客户进程收到TCP确认报文段后就进入终止等待2状态,等待TCP服务器进程发出的TCP连接释放报文段
  • 若使用TCP服务器进程的应用进程已经没有数据要发送了,应用进程就通知其TCP服务器进程释放连接
  • TCP服务器进程发送TCP连接释放报文段并进入最后确认状态
  • TCP客户进程收到TCP连接释放报文段后,必须针对该报文段发送普通的TCP确认报文段,之后进入时间等待状态
  • TCP服务器进程收到该报文段后就进入关闭状态,而TCP客户进程还要经过时间后才能进入关闭状态
  • 3.5.3.2 为什么需要四次挥手?

    3.5.3.3 TCP客户进程在发送完最后一个确认报文后,为什么不直接进入关闭状态?而是要进入时间等待状态?

    tcp和udp区别和联系(TCP和UDP的认识和区别)(18)

    3.5.4 一台主机如何知道另一台主机出现了故障

    TCP双方已经建立了连接,后来,TCP客户进程所在的主机突然出现了故障,TCP服务器进程以后就不能再收到TCP客户进程发来的数据,因此,应当有措施使TCP服务器进程不要再白白等待下去

    tcp和udp区别和联系(TCP和UDP的认识和区别)(19)

    4、TCP与UDP的对比

    tcp和udp区别和联系(TCP和UDP的认识和区别)(20)

    ,