计算机网络 CH5
第五章 运输层
5.1 运输层概述
前面的网络层,实现的是不同IP设备之间的通信;但是实际中,更加本质的端到端的通信应当是进程之间的通信(比如说,微信和微信服务器之间的通信),这就是这个部分涉及的内容,如图所示:
本章主要讨论TCP和UDP两种协议,其中前者最重要
(IP提供的是无连接,不可靠的传输服务)
- 端口号:类似于IP和mac地址,但是用于进程之间的通信;(类似于process ID)
相当于,用于统一不同操作系统的processID,是一种进程标识符
需要注意的是,端口号之最用于当前的主机;不同计算机之间即使端口号一样,代表的内容也意义不同 其他一些基本的内容,看ppt 服务器用的是数值比较小的端口,用户用的是数值大的端口
5.2 TCP和UDP协议的对比
也就是,在TCP眼里,看到的是一个一个的字节,传递是面向字节流的
TCP需要确认错误的得到重传,不能乱序,等等 这部分内容总结如下:
5.3.1 TCP报文段的首部格式
首部最重要的三个概念:序号指的是数据段第一个字节的序号;确认号指的是这个序号之前的信息我已经正确收到(比如说,确认号1000指的是0-999字节的数据已经被正确接收到),ACK是0/1,用来表示是否确认号字段有效
比如说这个题,就是将数据依次向后排列,然后得到序号
这个题仔细了解一下意义,了解一下双方互相需要、确认了什么数据
如果中间有一个断了,那么只能确认断掉的这个地方之前的
数据偏移段相当于指出了报文段首部的长度
TCP报文的检验,是对于首部和后面的数据都进行了检验事实上。
紧急标志位&紧急指针:如果紧急标志位有效的话,表示有紧急数据,可以进行“插队”
5.3.2 TCP的运输连接管理
TCP连接分为以下的三个阶段;“三报文握手”总体的逻辑如下:
这里需要注意的是,这里面实际上不会传递有用的实际信息,但是对于序号值,由于占用了序号x,下一个序号应该是x+1;另一方面,在连接建立之后,下一个发送数据开始时的信号依然可以使用x+1(因为上面实际上没有占用)对于各个ack的值,都是之前的+1
关于释放,分为两个阶段:
一开始的时候,到达半关闭状态;(就是一个方向被关闭,另一个方向还可以接收信息)
5.3.3 TCP的流量控制
也就是说,在一定的时候,可能TCP发送报文,但是接收方在忙于别的事情,只能先将数据放入缓存;因此,需要依赖于接收方控制发送方
这里控制的方法是:维护一个接收方窗口大小,由接收方缓存剩余的空间决定;也就是说,发送方传过来的数据有的被接收方(的进程)应用接收;而有的被放入缓存区;之后,接收方需要告知发送方现在新的缓存区大小剩下多少;当缓存区剩余大小为0的时候,会发生死锁,具体原因如下:
想要破局,会通过一个零窗口探查:利用计时器和一个很小的探测数据(1byte)之后通过使得接收方被迫对其响应一个ack,来使得窗口相关信息被更新过来。 具体的流程如下(加上重传计时器)
理解一下这个习题;
相当于,发送窗口大小为4000字节;现在发送了2000字节的数据,接收方接受了一个,那么剩下的1000字节发送的数据会被缓存起来;并且告知了现在缓存区总大小为2000字节。因此,现在可以还可以发送的剩下2000-1000=1000字节
5.3.4 TCP的拥塞控制 & 5.3.5 TCP拥塞控制与网际层拥塞控制的关系
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫作拥塞(congestion)。
与流量控制相比,这里相当于是控制发送资源的大小,使得网络中能够承受现在的负荷;流量控制只与发送、接收方有关,而拥塞控制涉及到整个网络中的性能
发送方窗口大小的限制;因此,在不考虑流量控制,就看cwnd
以及一个慢开始门限 ssthresh(如下);对于慢开始算法,每次接收到几个确认的内容,那么cwnd加多少(所以呈现出大小不断*2的指数级变化);然而当cwnd超过ssthresh的时候,采用拥塞避免算法,每次无论如何,cwnd只会+1 在这个初始的版本中,在发生超时的时候,将cwnd降低为1,ssstresh设置为cwnd/2;但是,超时可能是因为数据发生误码而不是拥塞
为了对这个现象进行改善,有一个新的Reno版本: 快重传算法:
快重传可以避免后面由于超时导致的重传;并且,在快重传之后,可以进行快恢复,将慢开始门限ssthresh的值和拥塞窗口cwnd的值都调整为当前cwnd值的一半,并开始执行拥塞避免算法。整个的流程如下所示:
5.3.6 TCP可靠传输的实现
注意一下这里ack在选择重传和TCP协议中的不同意义! 发送窗口内的数据也会分为如下的两种情况:
为了区分所有这些内容,我们使用三个指针:P1为窗口中的第一个已发送但没有确认的序号,P2为窗口内第一个没发送的序号,P3为第一个不允许发送的序号
5.3.7 TCP超时重传的选择
需要设置适当的超时重传时间;超时重传时间RTO应略大于往返时间RTT(这很合理)但是,不同信息的RTT可能不同,因此,能想到一种比较合理的方法是RTO略大于所有RTT的加权平均值;并且,这应当是一个迭代的过程 
计算出了加权平均RTT之后,用下面的公式进行计算RTO:
以及另一个测量RTT的Karn算法(了解?)如下:
5.3.8 TCP的选择确认
不明所以,后面再看