TCP和UDP的简单对比

参考:计算机网络-湖科大


TCP和UDP的简单对比:

  • UDP(User Datagram Protocol)用户数据报协议TCP(Transmission Control Protocol)

  • UDP和TCP是TCP/IP体系结构运输层中两个重要协议,其使用频率仅次于网际层的IP协议
    各层结构协议举例

  • 运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但TCP协议就相当于在逻辑上建立了一条通信信道,该信道是全双工的可靠信道

  • 当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道

我们从以下几个方面对比UDP和TCP:

  • 注意!以下说的连接逻辑上连接不是物理上的连接。
  1. 在连接方式上:
    连接方式

UDP是无连接的通信方式


TCP是通过著名的**“三次握手”建立连接,“四次挥手”释放连接**。

  1. 在传播方式上:
    传播方式上的区别

UDP由于不建立连接,支持多播和广播


TCP由于每次通信需要建立基于TCP连接的可靠信道,且每次只能建立一条连接,因此只支持单播

  1. 在报文传输处理上:
    报文传输处理上

UDP协议中,对于应用层传输下来的报文不进行处理,保留报文的边界。在给报文加上UDP首部,进行发送。UDP接收方首部接收到UDP数据后,去除其首部,交付给应用层。


可以看出,UDP是针对报文为单位进行处理的,也就是UDP是面向应用报文的


在TCP协议中比较复杂:
在TCP发送方:

TCP协议会把应用进程交付下来的数据块(报文)看作是一连串无结构的字节流(TCP并不知道这些子节含义),将他们编号,并存储在自己的发送缓存中,TCP再根据发送策略,提取一定量的字节,加上TCP首部,构建成TCP报文进行发送。


对于接收方,同时进行两件事:
从所接受到的TCP报文段中,取出数据载荷部分并存储在接收缓存中,同时将接收缓存中的一些字节交付给应用进程


有两个点值得注意:

  1. TCP协议保证接收方收到的字节流和发送方应用进程发出的字节流完全一样
  2. TCP不保证接收方应用进程所收到的数据块与发送方发送的数据块,具有对应大小的关系,例如,发送方应用进程交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块,就把收到的字节流交付给了上层的应用进程。但。就是不会全部将数据交付给上层。


    因此接收方的TCP应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据


    可以看出,TCP对报文的处理是以子节为单位的,也就是TCP是面向字节流的,这正是TCP实现可靠传输、流量控制、以及拥塞控制的基础
  • 图中只画了一个方向的数据流,在实际网络中,基于TCP连接的两端,可以同时进行TCP报文段的发送和接收,也就是全双工通信
  1. 在给上层提供的服务上:
    在这里插入图片描述

UDP提供的是不可靠服务
对于发送的UDP数据报,接收方在检测到其误码后直接丢弃不做其他操作。对于发送方发送过程中出现分组丢失,也不做处理。因此其传输数据是不一定能使接收方全部收到数据,因此是不可靠服务


TCP提供的是可靠服务
由于TCP字传输过程中需要建立连接,通过建立的可靠信道进行传输,因此不会出现传输差错,也就是误码、丢失、乱序、重复。因此可以保证发送端发送什么,接收端接收到什么,是可靠传输

  1. 协议首部的对比:

协议首部对比

扫描二维码关注公众号,回复: 13212850 查看本文章

由于UDP不提供可靠传输的服务,因此其首部只需要在网际层的基础上添加区分端口的子节,其首部比较简单。


在TCP中,需要提供可靠传输、流量控制、拥塞控制等服务,首部比较复杂,字段比较多。

TCP和UDP的对比总结:
对比总结

猜你喜欢

转载自blog.csdn.net/Nimrod__/article/details/113683110