第五章:运输层

Posted PCC.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五章:运输层相关的知识,希望对你有一定的参考价值。

5.1 运输层协议概述

运输层的主要功能:
1、 运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信);
2、 运输层还要对收到的报文进行差错检测;
3、 运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的UDP;

运输层的两个主要协议:
1、 用户数据报协议 UDP:当运输层采用无连接的 UDP 协议时,这种逻辑通信信道是一条不可靠信道;
2、 传输控制协议 TCP:当运输层采用面向连接的 TCP 协议时,尽管下面的网络是不可靠的(只提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。

TCP 与 UDP
1、 TCP:TCP 传送的数据单位协议是 TCP 报文段。TCP 则提供面向连接的服务。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
2、 UDP:UDP 传送的数据单位协议是 UDP 报文或用户数据报。UDP 在传送数据之前不需要先建立连接。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP是一种最有效的工作方式。

三类端口
1、 熟知端口:数值一般为 0~1023;
2、 登记端口号:数值为 1024~49151,为没有熟知端口号的应用程序使用的。使用这个范围的端口号必须在 IANA 登记,以防止重复;
3、 客户端口号或短暂端口号:数值为 49152~65535,留给客户进程选择暂时使用。当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号。通信结束后,这个端口号可供其他客户进程以后使用。

5.2 用户数据报协议 UDP

UDP 概述:UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。

UDP 的主要特点:
1、 UDP 是无连接的,即发送数据之前不需要建立连接。
2、 UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
3、 UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。
4、 UDP 支持一对一、一对多、多对一和多对多的交互通信。
5、 UDP 的首部开销小,只有 8 个字节。

面向报文的 UDP 工作流程:
1、 发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界;
2、 应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文;
3、 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文;
4、 应用程序必须选择合适大小的报文。

5.3 传输控制协议 TCP

TCP 的概述
1、 TCP 是面向连接的运输层协议;
2、 每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一);
3、 TCP 提供可靠交付的服务;
4、 TCP 提供全双工通信;
5、 面向字节流。

TCP 协议的注意点:
1、 TCP 连接是一条虚连接而不是一条真正的物理连接。
2、 TCP 对应用进程一次把多长的报文发送到 TCP 的缓存中是不关心的。
3、 TCP 根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP 发送的报文长度是应用进程给出的)。
4、 TCP 可把太长的数据块划分短一些再传送。TCP 也可等待积累有足够多的字节后再构成报文段发送出去。

TCP 的连接
1、 每一条 TCP 连接有两个端点;
2、 TCP 连接的端点不是主机,不是主机的 IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字(socket)或插口;
3、 端口号拼接到(contatenatedwith)IP 地址即构成了套接字。

5.4 可靠传输的工作原理

连续 ARQ 协议采用累计确认的方式:即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。

TCP 可靠通信的具体实现
1、 TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口;
2、 TCP 两端的四个窗口经常处于动态变化之中。

5.5TCP 报文段的首部格式

TCP 报文段首部格式

TCP 报文段首部一些重要的字段
1、 确认 ACK——只有当 ACK=1 时确认号字段才有效。当 ACK=0 时,确认号无效。
2、 推送 PSH(PuSH)——接收 TCP 收到 PSH=1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
3、 同步 SYN——同步 SYN=1 表示这是一个连接请求或连接接受报文。
4、 窗口字段——占 2 字节,用来让对方设置发送窗口的依据,单位为字节。
5、 选项字段——长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSS。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。”
6、 终止 FIN(FINis)——用来释放一个连接。FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

5.7TCP 的流量控制

流量控制:流量控制(flowcontrol)就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。

持续计时器
1、 TCP 为每一个连接设有一个持续计时器。
2、 只要 TCP 连接的一方收到对方的零窗口通知,就启动持续计时器。
3、 若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。
4、 若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。
5、 若窗口不是零,则死锁的僵局就可以打破了。

5.8TCP 的拥塞控制

拥塞控制与流量控制
1、 拥塞控制:拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。
2、 流量控制:拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器,以及与降低网络传输性能有关的所有因素。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

拥塞窗口:发送方维持一个叫做拥塞窗口 cwnd(congestionwindow)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。如再考虑到接收方的接收能力,则发送窗口还可能小于拥塞窗口。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

慢开始算法的原理:
1、 在主机刚刚开始发送报文段时可先设置拥塞窗口 cwnd=1,即设置为一个最大报文段 MSS 的数值。
2、 在每收到一个对新的报文段的确认后,将拥塞窗口加 1,即增加一个MSS 的数值。
3、 用这样的方法逐步增大发送端的拥塞窗口 cwnd,可以使分组注入到网络的速率更加合理。

设置慢开始门限状态变量 ssthresh
1、 当 cwnd<ssthresh 时,使用慢开始算法。
2、 当 cwnd>ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
3、 当 cwnd=ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。

当网络出现拥塞时,无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有按时收到确认),就要把慢开始门限 ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于 2)。然后把拥塞窗口cwnd 重新设置为 1,执行慢开始算法。

1、 当 TCP 连接进行初始化时,将拥塞窗口置为 1。图中的窗口单位不使用字节而使用报文段。慢开始门限的初始值设置为 16 个报文段,即ssthresh=16。
2、 发送端的发送窗口不能超过拥塞窗口 cwnd 和接收端窗口 rwnd 中的最小值。我们假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值
3、 在执行慢开始算法时,拥塞窗口 cwnd 的初始值为 1,发送第一个报文段 M0。
4、 发送端每收到一个确认,就把 cwnd 加 1。于是发送端可以接着发送M1 和 M2 两个报文段。
5、 接收端共发回两个确认。发送端每收到一个对新报文段的确认,就把发送端的 cwnd 加 1。现在cwnd 从 2 增大到 4,并可接着发送后面的 4个报文段。
6、 发送端每收到一个对新报文段的确认,就把发送端的拥塞窗口加 1,因此拥塞窗口 cwnd 随着传输轮次按指数规律增长。
7、 当拥塞窗口 cwnd 增长到慢开始门限值 ssthresh 时(即当 cwnd=16时),就改为执行拥塞避免算法,拥塞窗口按线性规律增长。
8、 假定拥塞窗口的数值增长到 24 时,网络出现超时,表明网络拥塞了。
9、 更新后的 ssthresh 值变为 12(即发送窗口数值 24 的一半),拥塞窗口再重新设置为 1,并执行慢开始算法。
10、 当 cwnd=12 时改为执行拥塞避免算法,拥塞窗口按按线性规律增长,每经过一个往返时延就增加一个 MSS 的大小。

乘法减小:“乘法减小“是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值 ssthresh 设置为当前的拥塞窗口值乘以 0.5。

加法增大:“加法增大”是指执行拥塞避免算法后,在收到对所有报文段的确认后(即经过一个往返时间),就把拥塞窗口 cwnd 增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。

快重传:快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。

快恢复:当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh 减半。但接下去不执行慢开始算法。)由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd现在不设置为 1,而是设置为慢开始门限 ssthresh 减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

发送窗口的上限值:发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定:

1、 当 rwnd<cwnd 时,是接收方的接收能力限制发送窗口的最大值。
2、 当 cwnd<rwnd 时,则是网络的拥塞限制发送窗口的最大值。

5.9TCP 的运输连接管理

TCP 连接的建立:三次握手
1、 第一次握手

2、 第二次握手

3、 第三次握手

TCP 连接的释放:四次挥手
1、 第一次挥手

2、 第二次挥手

3、 第三次挥手

4、 第四次挥手

TCP 连接必须经过时间 2MSL 的连接释放后才真正释放掉

1、 第一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。
2、 第二,防止“已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

以上是关于第五章:运输层的主要内容,如果未能解决你的问题,请参考以下文章

计算机网络原理(谢希仁第八版)第五章课后习题答案

计算机网络 第五版阅读笔记之五:运输层

第五章 运输层(UDP和TCP三次握手,四次挥手分析)

计算机网络(谢希仁版)——第五章回顾

计算机网络 华南理工大学期末重点 第五章 传输层 谢希仁

计算机网络 chapter 5 运输层