思维导图
本文的主要内容是讨论运输层的两大协议,即UDP和TCP。运输层协议的主要功能就是提供对应用层报文的传输,其中UDP协议只实现了最基础的传输功能,TCP协议则更为复杂一些,提供了可靠数据传输服务和拥塞控制服务。
一.引言
对于运输层的功能来讲,其实更准确的描述是运输层协议提供了运行在不同主机之上的进程间的逻辑通信,他是在端系统中而不是在路由器中实现的,他的实现方法则是将应用报文划分为较小的块后加上运输层首部生成运输层报文段进行传输.现有的比较流行的传输协议有两种,UDP和TCP.UDP是一种实现了最低程度功能的传输服务.而TCP协议则可以实现可靠数据传输功能和拥塞控制,后文中将对这个功能的实现进行较为详细的描述.
与运输层协议相比较,网络层的功能就是实现了主机间的逻辑通信.主要的协议就是IP协议.它不提供可靠数据传输服务和拥塞控制,所以,TCP协议的两大功能是在端系统中而不是在路由器中实现的.
1.1多路复用/分解
在上文中讲到,IP协议实现了主机间的逻辑通信,TCP/UDP协议则实现了主机的进程间的逻辑通信.举个例子来说,现有A,B两家人之间需要通过写信交流,A,B两家人(两个主机)都有多个成员(多个端口号).如果A家庭的多个成员都有信需要寄给B家庭,A家庭则会将所有的信价格其中一个成员,然后通过邮局将信寄到B家庭,B家庭的某个成员收到信之后负责将信分发给不同的收件人.在这个例子之中就存在多路复用和多路分解,主要功能就是实现由主机间的交付扩展到进程间的交付.多路分解就是将数据交付到正确的套接字,多路复用则是收集不同套接字的数据封装为报文段,然后传递到网络.
TCP协议和UDP协议的多路复用和分解的方式不太一样,其原理是套接字的标志不同.
1.1.1无连接的多路复用和多路分解.
一个UDP套接字是有一个二元组标志的,包含了一个目的IP地址和一个目的端口号.由于UDP协议只管传输数据,所以这两个字段就够了.具有相同目的IP地址和目的端口号的请求将会被定位到同一个端口号.
1.1.2面向连接的多路复用和多路分解
一个TCP套接字是由一个四元组标志的,包含了源IP地址,源端口号,目的IP地址,目的端口号.因为TCP协议在传输数据之后需要进行确认,所以需要目源IP地址和源端口号.不同于UDP的是,具有不同源IP地址或端口号的请求会被定位到不同的套接字.
注意,套接字和进程之间并非总是一一对应关系,在实际应用主,服务器通常只使用一个进程,但是会为每个新的客户连接创建新的套接字线程.
二.UDP协议
UDP协议只是做了最少的工作,除了多路复用/分解以及少量的差错检测之外,几乎没有对IP协议增加其他的东西.因为在发送数据之前,发送方和接收方之间没有'握手',所以UDP被称为无连接的.
2.1 UDP协议的优点
因为功能简单,所以UDP协议具有TCP协议一些没有的有点:
- 对合适发送数据的控制更精细:因为TCP协议存在拥塞控制机制,即当网络拥塞时会控制TCP的发送发,而UDP协议无此限制.
- 无需建立连接:不会存在建立连接的时延
- 无连接状态:UDP不需要像TCP那样在端系统中建立缓存维护连接的状态
- 分组首部开销小:TCP的首部需要20字节,而UDP只需要8字节
2.2 UDP报文段结构
在除开应用数据即应用层的报文之外,就是报文段的首部,UDP的首部包括四个字段,每个字段两个字节.长度字段知识了UDP报文段的字节数.校验和则用来检查该报文段是否出现了差错.此外,端口号则用于多路复用/分解.