运输层
3.1 概述和运输层服务
3.1.1 运输层和网络层的关系
- 运输层为运行在不同主机上的进程之间提供了逻辑通信
- 网络层提供了主机之间的逻辑通信
- 运输层协议所能提供的服务也受到了底层网络层协议的服务模型的限制
3.1.2 因特网运输层概述
- 因特网是一个TCP/IP网络,为应用层提供了两种截然不同的运输协议
- 一种是UDP(用户数据报协议),它为用户调用它的应用程序提供了一种不可靠的、无连接的服务
- 另一种是TCP(传输控制协议),它为调用它的应用程序提供了一种可靠的、面向连接的服务
- 因特网网络层协议有一个名字叫IP,全称是网际协议,IP主机之间提供了逻辑通信
- IP的服务模型是尽力而为交付,但却是不可靠服务
- UDP/TCP可以通过在其报文段的首部中添加差错检测字段而提供完整性检查
- 进程间数据交付和差错检测是两种最低限度的运输层服务,也是UDP所能提供的仅有的两种服务
3.2 多路复用与多路分解
- 多路分解:将运输层报文段中的数据交付到正确的套接字的工作
- 多路复用:从源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层的工作
- 运输层多路复用的要求
- 套接字有唯一标识符
- 每个报文段有特殊字段来指示该报文段所要交付的套接字
无连接的多路复用与多路分解
-
应用程序的客户机端让运输层自动地(并且透明地)分配端口号,而服务器则分配一个特定的端口号
-
一个UDP套接字是由一个包含目的IP地址和目的端口号的二元组来全面标识
面向连接的多路复用与多路分解
- TCP套接字是由一个四元组(源IP地址,源端口号,目的IP地址,目的端口号)来标识的
- 服务器主机可同时支持很多TCP套接字,每个套接字与一个进程相联系
Web服务器与TCP
- 连接套接字与进程之间并非总是有着一一对应的关系
- 当今的高性能web服务器通常只使用一个进程,但是为每个新的客户机连接创建一个具有新连接套接字的新线程
- 线程可以看作是一个轻量级的子进程
3.3 无连接运输
- UDP优点
- 无须执行任何与运行在目的端系统中的UDP实体之间的握手
- 应用层能更好地控制要发送的数据和发送时间
- 无连接状态
- 分组首部开销小
- UDP缺点:UDP中缺乏拥塞控制能够导致UDP发送方和接收方之间的高丢包率,并挤垮TCPP会话
- 使用UDP的应用是可以通过应用程序自身建立可靠性机制来实现可靠数据传输的
3.3.1 UDP报文段结构
- UDP首部只有4个字段,每个字段由两个字节组成
- 通过端口号可以使目的主机将应用数据交给运行在目的端系统中的相应进程(即执行多路分解功能)
- 接收主机使用检验和来检查报文段中是否存在差错
3.3.2 UDP检验和
- 发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷
- 是一个在系统设计中值得被赞扬的端到端原则
3.4 可靠数据传输的原理
3.4.1 构造可靠数据传输协议
-
1.完全可靠信道上的可靠数据传输:rdt1.0
- 接收方不需要提供任何反馈信息给发送方,因为不会发生任何差错
- 接收方接收数据的速率和发送方发送数据的速率一样快
-
2.具有比特差错信道上的可靠数据传输:rdt2.0
- 更现实的底层信道模型是分组中的比特可能受损
- 基于重传机制的可靠数据传输协议称为自动重传请求(ARQ)
- ARQ协议中还需要另外三种协议
- 差错检测
- 接收方反馈
- 肯定确认(ACK)
- 否定确认(NAK)
- 重传
- 致命缺陷:没有考虑到ACK或者NAK分组受损的可能性
-
3.具有比特差错的丢包信道上的可靠数据传输:rdt3.0
- 除了比特受损外,底层信道还会丢包
- 问题:怎么检测丢包以及发生丢包后该做些什么
- 从发送方的观点来看,重传是一种万能灵药
- 为了实现基于时间的重传机制,需要一个倒计数定时器
- 在一个给定的时间过期后,可中断发送方
- 发送方要做到
- 每次发送一个分组,便启动一个定时器
- 响应定时器中断
- 终止定时器
3.4.2 流水线可靠数据传输协议
- rdt3.0性能问题的核心在于它是一个停等协议
- 解决方法:不使用停等方式运行,允许发送方发送多个分组而无需等待确认,这就是流水线技术
- 流水线技术带来的影响
- 必须增加序号范围
- 协议的发送方和接收方也许必须缓存多个分组
- 所需序号范围和对缓冲的要求取决于数据传输协议处理丢失、损坏及过度延时分组的方式
- 解决流水线差错恢复的基本方法
- 回退N步
- 选择重传
3.4.3 回退N步
- GBN滑动窗口协议
- GBN发送方必须响应的事件
- 上层的调用
- 收到ACK
- 超时事件
- 在GBN协议中,接收方丢弃所有失序分组
3.4.4 选择重传
- GBN本身也存在着性能问题,尤其当窗口长度和带宽时延积都很大
- 选择重传让发送方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传
3.5 面向连接的运输:TCP
3.5.1 TCP连接
- 在应用程序进程可以开始向另一个应用进程发送数据之前,两个进程必须先相互握手
- 即它们必须相互发送某些预备报文段,以建立确保数据传输所需的参数
- 作为TCP连接建立的一部分,连接的双方都将初始化与TCP连接相关的许多TCP状态变量
- TCP连接提供的是全双工服务
- TCP连接也总是点对点的
- 三次握手
- 客户机首先发送一个特殊的TCP报文段
- 服务器用另一个特殊的TCP报文段响应
- 客户机再用第三个特殊报文段作为响应
- 前两个报文段不承载“有效载荷”,也就是不包含应用层数据
- TCP可从缓存中去除并放入报文段中的数据量受限于最大报文段长
- TCP将每块客户及数据加一个TCP首部,从而形成多个TCP报文段
3.5.2 TCP报文段结构
- 由首部字段和一个数据字段组成
- 首部包括源端口号和目的端口号,它用于多路复用/多路分解来自或送至上层应用的数据
- 同UDP一页,TCP首部也包括检验和字段
序号和确认号
- TCP报文段首部最重要的字段是序号字段和确认号字段
- 这两个字段是TCP可靠传输服务的关键部分
- 确认号就是主机期待的数据的下一个字节序号
Talnet
- 一个用于远程登录的流行应用层协议
- 运行在TCP之上,被设计成可在任意一对主机之间工作
3.5.3 往返时延的估计与超时
-
TCP采用超时/重传机制来处理报文段的丢失问题
-
估计往返时延
-
设置和管理重传超时间隔
3.5.4 可靠数据传输
- TCP在IP的不可靠的尽力而为的服务的基础上建立了一种可靠数据传输服务
- 确保一个进程从其接收缓存中读出非损坏的、无间隔的、非冗余的和按序的数据流
- 加倍超时间隔
- 快速重传
- 是回退N步还是选择重传
3.5.5 流量控制
- 以消除发送方使接收方缓存溢出的可能性
- 是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读速率相匹配
- TCP发送方也可能因为IP网络的拥塞而被遏制,这种形式的发送方的控制被称为拥塞控制
- TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制
- 接收窗口用于告诉发送方,该接收方还有多少可用的缓存空间
- UDP并不提供流量控制
3.5.6 TCP连接管理
- TCP连接的建立会显著地增加人们感受到的时延
- 许多常见的网络攻击(包括SYN洪泛攻击)利用了TCP连接管理中的弱点
- 过程
- 1.客户机端的TCP首先向服务器端的TCP发送一个特殊的TCP报文段(SYN报文段)
- 2.一旦包含TCP SYN报文段的IP数据报到达服务器主机,服务器会从该数据报中提取出TCP SYN报文段,为该TCP连接分配TCP缓存和变量,并向客户机TCP发送允许连接的报文段
- 3.在收到SYNACK报文段后,用户及也要给该连接分配缓存和变量。客户及主机还会向服务器发送另外一个报文段,这个报文段对服务器的允许连接的报文段进行了确认
- 一旦以上3步完成,客户机和服务器主机就可以相互发送含有数据的报文段了
- 在以后的每一个报文段中,SYN比特都将被置为0
- 参与TCP连接建立的两个进程中的任何一个都能终止该连接
- SYN洪泛攻击
- 攻击者发送大量的TCP SYN报文段,而不完成三次握手的第三步
- 通过从多个源发送SYN报文段的纷至沓来,服务器不断地为这些半开连接分配资源,结果导致该服务器的连接资源迅速地消耗殆尽
- SYN cookies是对SYN 洪泛的一种有效的防御系统
3.6 拥塞控制原理
3.6.1 拥塞原因与开销
开销
- 当分组到达速率接近链路容量时,分组经历巨大的时延
- 发送方必须执行重传以补偿因为缓存溢出而丢弃的分组
- 发送方在遇到大时延所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组拷贝
- 当一个分组沿一条路径被丢弃时,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了
3.6.2 拥塞控制方法
- 端到端拥塞控制
- 网络层没有为运输层拥塞控制提供显示支持
- 即使在网络中存在拥塞,端系统也必须通过对网络行为的观察来腿短
- TCP必须通过端到端的方法处理拥塞控制,因为IP层不会向端系统提供有关网络拥塞的反馈信息
- TCP报文段的丢失被认为是网络拥塞的一个迹象,TCP会相应地减小其窗口长度
- 网络辅助的拥塞控制
- 网络层组件(即路由器)向发送方提供关于网络中拥塞状态的显示反馈信息
- 拥塞信息从网络反馈到发送方通常有两种方式
- 阻塞分组
- 路由器标记或更新从发送方流向接收方的分组中的某个字段
3.6.3 网络辅助的拥塞控制例子:ATM ABR拥塞控制
- 采用网络辅助方法解决拥塞控制的协议
- 采用面向虚电路(VC)方法来处理分组交换问题
- ABR已被设计成一种弹性数据传输服务
- ABR提供三种机制用于交换机向接收方发送与拥塞相关的信令信息
- EFCI比特
- CI和NI比特
- ER的设置
3.7 TCP拥塞控制
- 必须使用端到端拥塞控制而不是网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈
- TCP采用的方法是让每一个发送方感知从它到目的地之间的路径上没什么拥塞,则该TCP发送方就会增加其发送速率
- 如果发送方感知在该路径上有拥塞,则该发送方就会降低其发送速率
- 三个问题
- TCP发送方是如何限制它向其连接发送流量的速率的?
- 一个TCP发送方是如何感知从它到目的地之间的路径上存在拥塞的?
- 当发送方感知端到端的拥塞时,采用什么算法来改变其发送速率?
- TCP拥塞控制算法
- 加性增、乘性减
- 慢启动
- 对超时事件作出反应
- 公平性