比较这两个,首先我们要比较他们的报文格式,进而分析他们的特点。
TCP首部 :
UDP首部:
如上图,网络层要实现的目的是在两台机器能相互通信的前提下, 定位到是机器上的哪两个程序在进行通信, 而定位机器上的程序的方式是通过端口号实现的(每个端口只能被一个程序占用)。
所以TCP和UDP都添加了源端口号和目的端口号进去。
但是可以看到TCP头的信息要比UDP多得多,那么多出来的这部分信息是用来干嘛的呢?
这个就涉及到丢包, 如果udp丢包, 通信双方是没有感知的, 这就导致udp传输的不可靠。
而tcp通过ACK字段和一系列的规则(比如每发送一个包都需要对方应答一个包,而且应答包要跟之前发送的包相关联, 否则就重新发送之前的那个包。)来保证数据不会丢失。
同样的, TCP 在实现相同目的的情况下比 udp 多做了这么多操作, 而且包头比udp大, 则传输相同数据的情况下, 需要发送的包自然也更多, 传输效率更低。
总结一下主要有以下方面 :
1、连接建立方式
tcp需要三次握手,udp无连接
2、数据发送方式
tcp发送的是基于连接的数据流,udp发送的是一个个独立的数据报
3、数据有序性
tcp因为包头有字段维护顺序, 可以做到有序。udp是无序的
4、可靠性
tcp有重传机制保证对方一定接收到数据,但是udp发完就不管了
5、包大小
tcp包头比udp大