本章要点:
- 3.1 传输层服务
- 3.2 多路复用和多路分解
- 3.3 无连接传输:UDP
- 3.4 可靠数据传输的原则
- 3.5 面向连接的传输:TCP
- 3.6 拥塞控制的原则
- 3.7 TCP拥塞控制
3.1 传输层服务和协议
运输层为运行在不同主机上的进程彼此之间提供了逻辑通信,而网络层则提供了主机之间的逻辑通信。运输层只工作在端系统。在端系统中,运输层协议将来自应用程序的进程的报文移动到网络边界(网络层)。
传输层和网络层的关系
参考书中邮政服务的案例,邮政公司提供的是家庭之间的逻辑通信,而两家从快递中心取邮件的孩子则提供两家孩子之间的逻辑通信。这里的孩子就相当于传输层,它们提供进程之间的逻辑通信,使用的是下一层的服务(邮政公司——网络层)。
3.2 多路复用和多路分解
考虑之前的例子,Bill从邮递员收到一批信件,将它们交付他的兄弟姐妹时,他执行的就是一个多路分解操作。当Ann从兄弟姐妹们那里收集信件并将它们交给邮递员时,她执行的就是一个多路复用操作。核心在于不同的进程对应不同的套接字,然后统一通过传输层与网络层交互。
多路分解
将运输层报文段中的数据交付到正确的套接字的工作为多路分解。
多路复用
从在源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层的工作称为多路复用。
端口号
16位比特数字,0~65535之间。0~1023范围的端口号称为周知端口号。它们给特殊的应用使用。当开发出新的应用时,必须为其分配一个端口号。
3.3 UDP
为什么要使用不可靠的UDP?
- 应用层能更好地控制要发送的数据和发送时间:没有流量控制。
- 无需连接建立:无需握手。
- 无连接状态:连接状态包括接收和发送缓存、拥塞控制参数、序号与确认号的参数。
- 分组首部开销小:TCP报文段都有20字节的首部开销。而UDP报文首部只有8字节。
UDP报文段结构.png
16位检查和
对应用数据16位求和,结果再求补保存在检查和部分。接收方收到后,将应用数据和检查和求和,结果是全1说明没有差错。
3.4 可靠的数据传输——网络的TOP10问题
如何在不可靠的网络层上提供不可靠的服务?依靠可靠数据传输协议。
- GBN,滑动窗口协议
- SR,选择重传协议
(待完善)
3.5 面向连接的传输:TCP
3.5.1 TCP概述
- 点到点:一个发送端,一个接收端
- 可信,有序的字节流
- 流水线:拥塞控制和流量控制确定窗口大小
- 发送和接收buffer
- 面向连接
- 流量控制:发送速率不会超过接收速率
3.5.2 TCP报文段结构

- 序号和确认号
报文段序号:报文段首字节的字节流编号。
确认号字段:发送端主机希望接收到的一下字节的序号。
3.5.3 往返时延的估计与超时
超时间隔应该大于估计的RTT,否则将造成不必要的重传。
快速重传是指,即使没有到达超时间隔,如果连续收到3个特定报文段的冗余ACK就可作为对后面报文的一个隐式NAK,从而在超时之前触发对该报文段的重传。
3.5.4 可靠数据传输
TCP的可靠传输服务确保一个进程从其接收缓存中读出数据流是非损坏的、连续的、非冗余的和按序的数据流;即读出的字节流与联机的另一端系统发出的字节流是完全一样的。
3.5.5 流量控制
主要是通过报文段中的接收窗口进行控制。注意接收窗口和接收缓存是不一样的,接收窗口会实时的变化,而接收缓存是硬件(固定大小)。
3.5.6 TCP连接管理
连接的过程:3次握手;
关闭连线:任何一方都可以发起。

在TCP连接阶段,服务器收到SYN之后要分配缓存,SYN攻击会耗尽服务器的缓存,进而无法再进行正常的TCP连接,因为这时缓存已用完。
3.6 拥塞控制原理
拥塞发生的地点在路由器,原因是因为拥挤排队。路由器的发送速率低于接收速率,因此不得不把一些报文段放在队列里。因此会造成拥塞。TCP需要对发送的速率进行控制,这就是拥塞控制。(注意和流量控制的区别)
根据网络层是否为运输层拥塞控制提供显示的帮助来区分拥塞控制的方法:
- 端到端拥塞控制:通过对报文段的丢失情况进行观察。如发生拥挤则TCP会减少其窗口的长度。
- 网络辅助的拥塞控制:路由器向发送方提供关于网络中拥塞状态的显示反馈信息。(TCP不借助这个方法)
3.7 TCP拥塞控制:
TCP的拥塞控制没有借助网络层的协助,而是依靠自己。
- 加性增,乘性减(AIMD)
- 慢启动
从一个比较速度开始,但以指数方式(加倍)增加,而不是加性增。这样可以尽快到达它的极限速度。
- 对超时事件最初反应
如果是Timeout,则直接将拥塞窗口设为1MSS,阈值设置为上一个拥塞窗口的一半,超过这个阈值时,开始拥塞窗口开始线性增加(之前是指数增加);
如果收到3个冗余ACK,则直接将拥塞窗口设置为上一个拥塞窗口的一半,拥塞窗口开始线性增加;
这样设置的原因是,TCP认为收到三个冗余ACK时网络还是可以传递报文的,因此速度设置为原来的一半而不是直接设置为1MSS。
(详细请看书,表3-3)
网友评论