简述
UDP和TCP是TCP/IP体系结构中的运输层中的很重要的两个协议
-
UDP全称是用户数据报协议
-
TCP全称是传输控制协议
接下来,我们从几个方面来谈一下两者的区别
区别
是否面向连接
-
因特网上两台主机,使用UDP协议进行通信,使用UDP协议的通信双方是可以随时进行数据传输
-
因特网上两台主机,如果使用TCP协议进行通信
- 通信双方在数据传输前需要三次握手进行连接
- 通信双方在数据传输后需要四次挥手释放连接
是否支持广播或多播
-
在某个局域网上通过UDP协议进行通信的四台主机,任何一台主机都可以向其他三台主机发送广播,可以向某个多播组发送多播,也可以向某台主机发送单播
-
在某个局域网上通过TCP协议进行通信的四台主机,任何一台主机可以和某一台主机建立“三次握手”连接,进行数据传输,即TCP仅仅支持单播
报文是面向字节流或报文段
UDP
-
应用层将报文交付给UDP,UDP直接给应用层报文添加一个UDP首部,然后直接发送给接收方
-
UDP一次发送一个报文,而且UDP对应用层交下来的报文既不会拆分,也不会合并。换而言之,UDP是面向应用报文的
TCP
- 发送方的TCP把应用进程交付下来的报文数据块仅仅看成是无结构的字节流,发送方TCP会将数据放入“蓄水池”(缓冲区),等到可以发送的时候就发送,不能发送就等着,TCP会根据发送策略发送给接受方,换而言之,TCP是面向字节流的
首部对比
-
UDP数据报首部包括了源端口、目的端口、长度、检验和,首部仅有8个字节构成,首部开销小。
-
TCP的首部从图中可以看到最小长度是20字节,最大长度是60字节,这是因为TCP要实现可靠传输、拥塞控制、流量传输
向上层提供的服务
UDP向其上层提供无连接不可靠传输服务
- 主要体现在发送方给接收方发送用户数据报,传输过程中用户数据报受到干扰而产生误码,接收方UDP可以通过该数据报首部校验和的值检查出误码,但是仅仅丢弃,其他什么都不做
- 或者发送方给接收方发送数据报,该数据报被因特网中的某个路由器丢弃了,发送方UDP不做任何处理
- 它并不关心数据时候被另一端收到
- UDP适用于实时性要求高的场景,比如视频会议、直播等等
- 举一个视频会议的例子,因为用户一般来说可以接受图像稍微模糊一点,声音稍微不清晰一点
- 但是如果在几秒钟以后再出现之前丢失的画面和声音,这恐怕是很难接受的
- 这也说明了不可靠传输,意味着如果数据丢失的话,不会有重传
TCP向其上层提供面向连接可靠传输服务
- 使用TCP协议的收发双方不会出现上面误码,丢失的情况
- TCP的可靠性体现在
- TCP在传递数据前,会有三次握手来建立连接
- 而且在数据传递的时候,有确认、窗口、重传、拥塞控制机制
- 数据传递完之后释放连接以节约资源
- TCP适用于要求可靠传输的应用,文件传输,查看网页
- 当我们想查看网页,希望完整且按顺序查看网页,不丢失任何内容
- 当你下载文件,希望得到的是完整的文件,而不仅仅是文件的一部分
- 应用层HTTP和FTP基于TCP协议
当面试官问你,你应该怎么回答?
首先呢,UDP和TCP是TCP/IP体系结构中的运输层中的很重要的两个协议
UDP全称是用户数据报协议,而TCP全称是传输控制协议
两者的区别主要体现在以下五个方面
第一点
使用UDP协议的通信双方是可以随时进行数据传输,无需建立连接
而TCP提供面向连接服务,在传送数据前需要三次握手建立连接,在传送数据后需要四次挥手释放连接
第二点
UDP提供了广播,多播,单播的服务,而TCP仅仅支持单播
第三点
UDP是面向应用报文,UDP对应用层交下来的报文,既不会拆分,也不会合并
TCP是面向字节流的,发送方的TCP把应用进程交付下来的报文数据块,看成是无结构的字节流
发送方TCP会将数据放入缓冲区,等到可以发送的时候再发送,TCP会根据发送策略,发送给接受方
第四点
UDP首部开销小,只有8字节,TCP的首部,最小长度是20字节,最大长度是60字节
主要原因是TCP要实现可靠传输、拥塞控制、流量传输等等
第五点
UDP向其上层提供无连接不可靠传输服务,数据可能会发生丢失,误码,但是传输效率高
所以常用于实时性要求高的场景,比如视频会议,因为我们可以接受图像稍微模糊一点,声音稍微不清晰一点
TCP向其上层提供面向连接可靠传输服务,主要适用于要求可靠传输的应用
比如文件传输,当我们下载文件,希望得到的是完整的文件,而不仅仅是文件的一部分
以上,就是我对这个问题的理解