五、TCP 和 UDP 协议
在 TCP/IP 协议簇中有两个传输协议,即传输控制协议(TCP)和用户数据报协议(UDP)。TCP是面向连接的,而 UDP 是无连接的。
1、TCP服务
(1)TCP 协议提供面向连接的、可靠的传输服务,适用于各种可靠的或不可靠的网络。
(2)TCP 用户送来的是字节流形式的数据,这些数据缓存在 TCP 实体的发送缓冲区中。
(3)TCP 实体自主地决定如何把字节流分段,组成 TPDU 发送出去。在接收端,也是由 TCP 实体决定何时把积累在接收缓冲区中的字节流提交给用户。分段的大小和提交的频度是由具体的实现根据性能和开销权衡决定的, TCP 规范中没有定义。显然,即使两个 TCP 实体的实现不同,也可以互操作。
(4)TCP 也允许用户把字节流分成报文,用推进(PUSH)命令指出报文的界限 。发送 TCP 实体把 PUSH 标志之前的所有未发数据组成 TPDU 立即发送出去,接收端 TCP 实体同样根据 PUSH 标志决定提交的界限。
2、TCP协议
TCP 只有一种类型的PDU,叫作 TCP 段,段头(也叫TCP 头或传输头)的格式如下图所示,其中的字段如下。
(1)源端口(16位):说明源服务访问点。
(2)目标端口(16位):表示目标服务访问点。
(3)发送顺序号(32位):本段中第一个数据字节的顺序号。
(4)接收顺序号(32位):捎带接收的顺序号,指明接收方期望接收的下一个数据字节的顺序号。
(5)偏置值(4位):传输头中 32 位字的个数。因为传输头有任选部分,长度不固定,所以需要偏置值。
(6)保留字段(6位):未用,所有实现必须把这个字段置全 0。
(7)标志字段(6位):表示各种控制信息,其中
- URG:紧急指针有效。
- ACK:接收顺序号有效。
- PSH:推进功能有效。
- RST:连接复位为初始状态,通常用于连接故障后的恢复。
- SYN:对顺序号同步,用于连接的建立。
- FIN:数据发送完,连接可以释放。
(8)窗口(16位):为流控分配的信息量。
(9)校验和(16位):段中所有 16 位字按模2的16次方-1相加的和,然后取1的补码。
(10)紧急指针(16位):从发送顺序号开始的偏置值,指向字节流中的一个位置,此位置之前的数据是紧急数据。
(11)任选项(长度可变):目前只有一个任选项,即建立连接时指定的最大段长。
(12)补丁:补齐 32位字边界。
3、TCP 拥塞控制
(1)重传计时器管理
TCP 实体管理着多种定时器(重传定时器、放弃定时器等),用于确定网络传输时延和监视网络拥塞情况。定时器的时间界限涉及网络的端到端往返时延,静态计时方式不能适应网络通信瞬息万变的情况,所以大多数实现都是通过观察最近一段时间的报文时延来估算当前的往返时间,一种方法是取最近一段时间报文时延的算术平均值来预测未来的往返时间。
(2)慢启动和拥塞控制
TCP 实体使用的发送窗口越大,在得到确认之前发送的报文数就越多,这样就可能造网络的拥塞,特别在 TCP 刚连接建立发送时对网络通信的影响更大。可以采用的一种策略是,发送方实体在接收到确认之前逐步扩展窗口的大小,而不是从一开始就采用很大的窗口,这方法称为慢启动过程。
4、UDP 协议
(1)UDP 也是常用的传输层协议,它对应用层提供无连接的传输服务,虽然这种服务是不可靠的、不保证顺序的提交,但这并没有减少它的使用价值。相反,由于协议开销少而在很多场合相当实用,特别是在网络管理方面,大多使用UDP协议。
(2)UDP 运行在 IP 协议层之上,由于它不提供连接,所以只是在 IP 协议之上加上端口寻址功能,这个功能表现在 UDP 头上。
(3)UDP 头包含源端口号和目标端口号。段长指整个 UDP 段的长度,包括头部和数据部分。校验和与 TCP 相同,但是任选的,如果不使用校验和,则这个字段置0。
(4)由于 IP 的校验和只作用于 IP 头,并不包括数据部分,所以当UDP的校验和字段为0时,实际上对用户数据不进行校验。
5、总结两种协议的特点和差异
(1)连接性
- TCP:是一种面向连接的协议,这意味着通信前必须建立连接,类似于打电话前需要拨号建立连接。
- UDP:无连接协议,不需要建立连接就可以直接通信,适用于需要快速传输的场景。
(2)可靠性
- TCP:提供可靠的数据传输服务,通过序列号、确认应答、重传控制等机制保证数据完整性和顺序。
- UDP: 不保证数据传输的可靠性,可能会出现数据丢失或顺序错乱的情况,适用于对实时性要求高的应用。
(3)传输速度
- TCP:相对较慢,因为需要建立连接、维护状态、进行流量控制和拥塞控制等操作。
- UDP:传输速度较快,因为它无需上述TCP所需的步骤,直接发送数据。
(4)应用场景
- TCP:常用于需要可靠数据传输的场景,如网页浏览(HTTP)、文件传输(FTP)、电子邮件(SMTP)等。
- UDP:通常应用于对实时性要求较高的场景,例如实时视频(VoIP)、在线游戏和域名解析(DNS)等。
(5)头部开销
- TCP:头部开销较大,包含更多的控制信息,如序列号、确认号、窗口大小等。
- UDP:头部开销较小,只包含必要的字段,如源端口、目的端口、长度和校验和。
(6)流量控制
- TCP:具有流量控制和拥塞控制机制,可以动态调整发送速率,防止网络拥塞和丢包。
- UDP:没有这些机制,它只负责将数据报从源端发送到目的端,不关心网络状况和数据传输质量。
(7)通信模式
- TCP:通常用于一对一的通信,即一个TCP连接只能有一个发送方和一个接收方。
- UDP:支持一对多、多对一和多对多的通信模式,可以实现广播和组播功能。