1. 定义:
TCP(Transmission Control Protocol):传输控制协议,是面向连接,可靠的传输层协议。
UDP(User Datagram Protocol):数据报文协议,是无连接,不可靠的传输层协议。
2. 首部格式不同
TCP首部格式
2.1
TCP首部格式包括20个字节的固定首部+任意长度的可变选项(20~40个字节)
在传输层:TCP报文段=TCP首部+TCP数据部分;
在网络层:IP报文段=IP首部+IP数据部分(TCP报文段);
在数据链路层:IP数据报+数据链路层的首部。
TCP首部包括:
源端口:占两个字节,代表发送方;
目的端口:占两个字节,代表接收方;
序号:所发送的数据的第一个字节的序号,代表数据发送的位置,由序号值+该数据的字节大小可得到下一次要发送的数据的序号;
确认号:占四个字节,是指期望收到下一次发送方所要发送的数据的第一个字节的序号;
数据偏移:TCP报文中数据部分距离首部的距离;
保留:占四位;
控制位:占8位,在传输数据过程中,用于传递控制标志位
常用的控制位(可用于三次握手和四次挥手):
SYN(同步控制位),SYN=1时,代表发送一个请求连接
ACK(确认控制位),ACK=1时,代表同意当前发送方发来的确认
FIN(终止标志位),FIN=1时,代表发送一个释放连接的请求
窗口:窗口值可用于接收方根据自身缓存告知发送方"我"可以接受多大的数据包
设置滑动窗口可以有效的避免"流量控制"和"乱序重排",每次接受到来自接收方的确认,才能再次发送数据,发送数据到服务器应答这段时间(RTT)会浪费大量时间,而设置窗口,就可以在不需要接受应答的情况下,发送发方继续发送数据,直到达到窗口值,提高了吞吐量。
检验和:占两个字节,检验的范围包括首部和数据;
紧急指针:表明本报文段中有多少紧急数据。
TCP协议的可靠运输是通过接受确认,超时重传机制实现的;接收端接受到来自发送端发送的数据时,如果接收到了,会发送给发送端一个确认号,如果超过了重传超时的时间间隔,发送端就认为数据丢失,会重新发送,所以它是可靠的。
由于TCP的面向连接,所以它在发送数据之前,需要建立连接,数据传输结束后,需要释放连接,
其可靠性依赖于连接管理,确认应答,重传机制等,所以它会消耗较大内存,一般用于文件传输、发送和接收邮件、远程登录等场景。
由于TCP需要建立连接,确认应答,超时重传这些机制,会产生一个往返时间,所以它不适于即时通信。
UDP首部格式
UDP首部只占8个字节,由四个字段组成,各占2个字节;
包括:源端口,目地端口,长度,检验和;
UDP在传输数据之前不需要建立连接,不提供可靠性服务,接收方在在接受到发送方数据之后,不需要等待接收方的应答,但是可用于即时通信,例如QQ,直播这些场景。
3.其他特点:
TCP:面向连接的协议,在发送数据之前,必须建立连接;
是端对端的的连接,每一条TCP连接只能有两个端点(客户端,服务器端)。
面向字节流;
具备“可靠性传输”、“流量控制”、“拥塞控制”(慢开始、拥塞避免、快重传、快恢复)等功能;
首部开销较大。
UDP:在发送数据之前,不需要建立连接;
允许一对一,一对多,多对一,多对多的交互;(可用于广播,多播)
面向报文;
首部开销较小。