04 - TCP和UDP的认识和区别

2021-12-15  本文已影响0人  iOS之文一

计算机网络系列文章汇总

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

主要内容:

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

TCP的拥塞控制已在另一篇博客拥塞控制的基本方法说明,本文不再赘述.

1、运输层的认识

运输层就是位于应用层和网络层之间的,为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务。

物理层、数据链路层以及网络层他们共同解决了将主机通过异构网络互连起来所面临的问题,实现了主机到主机的通信,而通信的真正实体是位于通信两端主机中的进程。

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

UDP是无连接的,不可靠的运输协议,TCP是面向连接的,可靠的运输协议

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

运输层所在的位置.png

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

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

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

2、用户数据报协议UDP

2.1 介绍

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

特点:

2.2 运输过程

传输过程.png

说明:

3、传输控制协议TCP

3.1 介绍

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

特点:

TCP传输过程

TCP传输过程.png

说明:
发送方:

接收方:

3.2 超时重传

3.2.1 介绍

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

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

RTO太大.png

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

RTO太小.png

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

合理的超时重传过程.png

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

3.2.3 超时重传时间RTO的计算

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


RTO的计算.png

说明:

3.2.4 往返时间RTT的测量

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

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

问题1.png

解决1:Karn算法

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

解决2:

总结

3.3 流量控制

3.3.1 介绍

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

3.3.2 为什么要提出流量控制

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

3.3.3 流量控制

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

过程:

流量控制过程.png

说明:

3.3.4 打破死锁

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

3.3.4.1 死锁的形成
死锁的形成.png
3.3.4.2 解锁的解决
打破死锁.png

说明:

3.3.4.3 一些疑问

零窗口探测报文丢失后,是否仍然会死锁?

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

3.3.5 总结

3.4 可靠传输

3.4.1 介绍

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

滑动窗口的描述.png 发送过程.png

说明:

3.5 运输连接管理

3.5.1 介绍

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

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

3.5.2 三次握手过程

过程示意图:

三次握手过程.png

说明:

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

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

两次握手的问题.png

3.5.3 四次挥手过程

3.5.3.1 四次挥手过程
四次挥手.png
3.5.3.2 为什么需要四次挥手?
3.5.3.3 TCP客户进程在发送完最后一个确认报文后,为什么不直接进入关闭状态?而是要进入时间等待状态?
时间等待.png

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

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

解决.png

3.6 总结

4、TCP与UDP的对比

对比.png
上一篇 下一篇

猜你喜欢

热点阅读