本文章为对学习《计算机网络:自顶向下方法》第7版后做的一些笔记,方便以后想要回顾时得以查看。同时希望通过对学习的各个章节做下笔记和总结,让自己能更加了解计算机网络的知识网络。文章是通过看书以及网上查找资料后的一些笔记以及理解,由于水平有限,可能出现一些错误,若有阅览者需自行留意,见谅。
文章目录
三、运输层
1.知识脉络
2.概述
1)运输层和网络层的关系
- 运输层协议能够提供的服务尝尝受限于网络层协议的服务模型。例如A要给B送信,如果邮局无法保证信件能在三天内送到B家,那么A必然无法保证信件能在三天内由A发给B
- 但是即使底层网络协议不可靠,运输层协议也可以提供某些服务。如可靠数据传输服务、安全性等
2)因特网运输层概述
- 因特网提供了UDP和TCP两种运输层协议。网络应用必须使用其中一种。
- UDP:提供一种不可靠、无连接的服务。
- TCP:提供一种可靠的、面向连接的服务。还提供了拥塞控制。
3.多路复用与多路分解
- 定义:将主机间交付拓展为进程间交付。
- 多路复用:源主机从不同套接字收集数据块,并为每个数据块封装首部信息生成报文段,将报文段传递到网络层的工作。
- 多路分解:将运输层报文段中的数据定向到正确的套接字并交付的工作。
4.UDP
1)简介
- 提供不可靠数据传输服务、无连接的、不提供不必要服务的运输层协议。
- 由于区别与TCP的特点也有许多应用更适用UDP:
- 关于发送什么数据以及何时发送的应用层控制更为精细。
- 无需建立连接,减少时延。
- 无连接状态,无需维护连接状态。
- 分组首部开销小
2)UDP报文结构
-
检验和:
- 提供了差错检测功能。用于确定UDP报文段从源到达目的地移动时,比特是否发生了改变。
- 原理:
-
报文段中所有16比特字的和进行反码运算,求和时遇到的任何溢出都被回卷(16位相加得32位的数,高16位的数加到低16位中)。取反后的16比特数放入检验和字段。
-
在接收方,将所有16比特字求和的结果与检验和字段的值求和,若结果为1111111111111111则说明没有引入差错。
-
5.可靠数据传输原理
1)构造可靠数据传输协议
-
有限状态机(Finite-State Machine,FSM):是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型。
-
经完全可靠信道的可靠数据传输:rdt1
上层调用,则发送方发送数据。发送方发送了数据,则接收方接收。
-
经具有比特差错信道的可靠数据传输:rdt2.0
-
信道中传输的数据会出现比特差错,但仍然假设分组能按顺序到达。故在出现这种情况的时候需要引入协议功能:差错检测,接收方反馈(回答报文),重传。
-
停等协议:发送状态时发送了报文后就进入等待回应状态,而在等待状态是不可发送报文的。
-
-
rdt2.1
-
考虑到回应报文受损,发送方无法知道接收方是否正确接收了上一个分组的可能性,引入新功能“序号”。
-
-
rdt2.2
-
有比特差错信道上实现无NAK版本的可靠传输协议
-
-
经具有比特差错的丢包信道的可靠数据传输:rdt3.0
-
为检测丢包以及丢包后恢复,引入新的协议机制“定时器”。在发送一个分组后便启动一个定时器,超时则重传。
-
2)流水线可靠数据传输协议
1】概述
- 停等协议发送方利用率非常低。每次只发送一个分组,即发送方大部分时间处于空闲状态导致链路有效吞吐量非常低。
- 需以下条件:
- 必须增加序号范围。
- 发送方和接收方需要设置缓存,如发送方最低限度需要缓存已发送但未确认分组,又如接收方缓存部分已正确接收的分组。
- 序号范围和缓存要求取决于数据传输协议如何处理传输错误(丢失、损坏、延时过大分组)。差错恢复的两种基本方法:回退N步和选择重传,下文也有记录。
2】流水线差错恢复的两种基本方法
1、回退N步
- 在回退N步(GBN)协议中,允许发送方发送多个分组而不需等待,但是同时发送方需要检测一个发送窗口如下图所示。只有要发送的报文序号处于窗口内,才会发送。
- GBN发送方必须响应三种类型事件:
-
上层调用:已经发送但未确认的分组要满足窗口
-
收到ACK:对序号n的分组确认采取累积确认,即序号为n的ACK表明已接收序号为n及n以前的分组
-
超时事件:当超时出现,则重传所有已发送但未被确认的分组,此机制即为回退N步
-
2、选择重传
-
选择重传(SR)可以避免不必要的重传,提高利用率,不会丢掉正确接收的失序分组,改为接收方将失序的分组缓存起来。直到所有丢失分组皆被收到为止,才将一批分组按序交付给上层。
-
发送方与接收方窗口示例图:
-
SR发送方事件动作:
-
SR接收方事件动作:
-
序号范围与窗口范围之间的限制☆:窗口长度的选取必须<=序号空间大小的一半。若窗口长度过大,则会出现二义性,即无法分清下图两种情况。当发送方的窗口可以以两种情况包含同一个序号(如下图中0在前的窗口和0在后的窗口),则无法分辨发来的该序号分组是发送方处于哪一种状态时发来的,此为二义性,故当窗口长度的选取必须<=序号空间大小的一半可避免。
6.TCP
1)简介
-
面向连接的,提供可靠数据传输服务的运输层协议。
-
TCP的连接提供全双工服务。
-
最大报文段长度(Maximum Segment Size,MSS):报文段里应用层数据的最大长度,不包括首部。
-
最大传输单元(Maximum Transmission Unit,MTU):本地发送主机发送的最大链路层帧长度。
-
数据一旦通过套接字就由TCP控制,TCP会先将数据引导到该链接的“发送缓存”内,然后按TCP协议在适当的时候将数据传递到网络层发出。
-
TCP的差错恢复机制也许最好被分类为GBN协议与SR协议的混合体。
2)报文结构
-
16bit接收窗口字段:用于流量控制,下文会详细总结。指示接收方愿意接受的字节数量。
-
5bit标志字段:ACK(指示确认字段中的值是有效的),RST、SYN、FIN(用于连接的建立和拆除),PSH、URG
-
序号:报文段的序号是建立在字节流编号上的,一个报文段序号就是该报文段数据字段首字节的序号。
-
确认号:主机正在等待的数据的下一个字节序号。
3)往返时间的估计与超时
- RTT:连接的往返时间。
- 样本RTT(SampleRTT):从报文段被发出(交给IP)到对该报文段的确认被收到的时间量。
- EstimatedRTT:TCP维持的一个SampleRTT均值。EstimatedRTT = (1-α)EstimatedRTT+αSampleRTT,α推荐值为0.125
- RTT偏差DevRTT:用于估算SampleRTT一般会偏离EstimatedRTT的成都。DevRTT = (1-β)DevRTT+β|SampleRTT-EstimatedRTT|
- 超时间隔TimeoutInterval:TimeoutInterval = EstimatedRTT+4DevRTT,推荐初始值为1s。每当发生一次超时,TimeoutInterval就会加倍,而当遇到ACK或者收到上层数据时则重算TimeoutInterval。
- 快速重传:如果TCP发送方接收到3个冗余ACK,说明在这个已确认过3次的报文段后的报文段已经丢失,则定时器过期之前重传丢失的报文段。
4)流量控制
-
TCP通过让发送方维护一个“接收窗口”的变量来提供流量控制,“接收窗口”用于给发送方指示接收方还有多少可用的缓存空间,避免接收缓存溢出。接收窗口用rwnd表示,当接收缓存满时,接收方会设置rwnd的值为0到发给发送方的报文段里来通知发送方,并且要在清空缓存后发送一个1字节的报文段包含rwnd非0提示发送方缓存空间又有了。
-
LastByteRead:应用程序从接收缓存读出的数据流的最后一个字节编号。
-
LastByteRcvd:从网络中到达的并且已经放入接收缓存的数据流的最后一个字节的编号。
-
LastByteRcvd - LastByteRead <= RcvBuffer
-
rwnd = RcvBuffer -[ LastByteRcvd - LastByteRead ]
5)TCP连接管理
1】三次握手
- Client向Server发送一个不包含数据的报文段,其中首部SYN比特置1,Client随机选择一个初始序号(client_isn)并置于TCP SYN的序号字段中。这个特殊报文段被称为SYN报文段。
- Server收到TCP SYN后,为该TCP连接分配TCP缓存和变量。发送一个不包含数据的数据报,但是包含3个重要信息。SYN置1,确认好置为client_isn + 1,选择Server自己的初始序号(server_isn)置到序号字段中。这个特殊报文段被称为SYNACK报文段。
- Client收到SYNACK报文段后,Client也为该链接分配缓存和变量。发送一个对服务器允许连接报文段的确认报文段,将(server_isn + 1)置到首部的确认字段中,SYN置0。该特殊报文段被称为ACK报文段。
2】四次挥手
- Client发出关闭连接命令,即发送一个特殊TCP报文段FIN比特置1,即FIN报文段。
- Server收到FIN报文段后,发送一个ACK报文段确认。
- Server发送自己的终止报文段,FIN报文段。
- Client收到FIN后也发送ACK报文段确认。
- 经过一段定时等待后,关闭连接。等待的目的是确保Server收到最后一个ACK,如果不定时等待直接关闭连接,若ACK丢失,Server会重发FIN报文段,则Client会在关闭连接后收到一个FIN。
3】连接生命周期
7.拥塞控制
1)原因与代价
- 当分组的到达速率接近链路容量,分组将经历巨大的排队时延。
- 发送方必须执行重传以补偿因为缓存溢出而丢弃的分组。
- 发送方遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组。
- 当一个分组沿一条路径被丢弃时,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉。
2)拥塞控制的方法
- 端到端拥塞控制:网络层没有为运输层用拥塞控制提供显示支持。TCP采用此种方法。
- 网络辅助的拥塞控制:路由器向发送方提供关于网络中拥塞状态的显示反馈信息。
3)TCP的拥塞控制☆
1】指导性原则
- 一个丢失报文段意味着拥塞,因此应当降低TCP发送方速率。
- 一个确认报文段指示网络正在向接收方交付发送方的报文段。此时能够增加发送方速率。
- 宽带探测。根据上面两种事件包含的隐试信息调节发送方速率,探测拥塞开始速率。
2】TCP拥塞控制算法
-
慢启动:
- cwnd(拥塞窗口)的值以1MSS开始,且每当传输报文段首次被确认则增大1MSS,即cwnd会呈指数增长。
- 当存在一个由超时指示的丢包事件(表明拥塞),TCP将cwnd设置为1并重新慢启动。同时将ssthresh(慢启动阈值)设置为cwnd/2
- 当cwnd>=ssthresh时,结束慢启动转移到拥塞避免模式。线性增长。
- 检测到3个冗余ACK时,执行快速重传并进入快速恢复状态。cwnd=cwnd/2+3(3个ACK),且ssthresh=cwnd/2。
-
快速恢复
- 超时事件,则如慢启动中超时操作并进入慢启动状态。
- 重复ACK:cwnd+1MSS
- 正确ACK:cwnd = ssthresh,进入拥塞避免。
-
拥塞避免
- 每过一个RTT将cwnd增加1MSS,即一个确认报文段增加MSS/cwnd个MSS(MSS*MSS/cwnd)。
- 超时事件,则如慢启动中超时操作并进入慢启动状态。
- cwnd=cwnd/2+3(3个ACK),且ssthresh=cwnd/2。
-
加性增乘性减(Additive-Increase,Multipliccative-Decrease,AIMD)拥塞控制方式。
-
忽略慢启动阶段,每过RTT内cwnd线性增加1MSS,出现3冗余ACK时cwnd减半(乘性减)。
-