第五章 传输层
5.1 传输层提供的服务
5.1.1 传输层的功能
传输层为两台主机提供了应用进程之间的通信,又称为端到端通信。传输层为数据传输提供可靠的服务。
功能
1、提供应用进程间的逻辑通信
2、差错检测
3、提供无连接或面向连接的服务
4、复用和分用
5、连接管理(面向连接服务)
6、流量控制与拥塞控制(面向连接服务)
5.1.2 传输层寻址与端口
端口:传输层服务访问点,用来标识应用层的进程。
硬件端口:不同硬件设备进行交互的接口
软件端口:应用层的各种协议进程与传输实体进行层间交互的一种地址。
端口号:由于同一时刻一台主机上会有大量的网络应用进程在运行,所以需要有大量的端口号来标识不同的进程。
端口号只是为了本计算机应用层中的各进程。
端口用一个16位端口号进行标识,共允许有2^16=65536个端口号。
分类
-
熟知端口(保留端口):数值一般为0~1023。当一个新的应用程序出现时,必须为其指派一个熟知端口,以便其他应用进程和其交互。
-
登记端口:数值为1024~49151。为没有熟知端口号的应用程序使用的,使用这类端口号必须在IANA登记,以防止重复。
-
客户端端口或短暂端口:数值为49152~65535。由于这类端口号仅在客户进程进行时才动态选择,所以称为短暂端口或临时端口。
套接字
通过IP地址和端口号才能唯一确定一个连接的端口。唯一标识了网络中的某台主机上的某个应用进程。即:
套接字 = (机IP地址,端口号)
5.1.3 无连接服务与面向连接服务
无连接服务:采用UDP协议,传输层向上提供的是一条不可靠的逻辑信道。
面向连接服务:采用TCP协议,传输层向上提供的是一条全双工的可靠的逻辑信道。
UDP的主要特点
1、传送数据前无需建立连接,数据到达后也无需确认
2、不可靠交付
3、报文段头部短,传输开销小,时延较短。
TCP的主要特点
1、面向连接,不提供广播或多播服务
2、可靠交付
3、报文段头部长,传输开销大
5.2 UDP
5.2.1 UDP报文段
1、源端口号
占16位。标识源主机的端口或进程,同TCP。
2、目的端口号
占16位。标识要发送个目的主机的哪个端口或进程
3、首部长度
占16位。标识UDP整个数据报的长度(包括首部和数据)。最小值为8(仅有首部)
4、检验和
占16位。检测UDP用户数据报在传输中是否有错,有错就丢掉。检测方式同TCP一样,检验范围也是包括首部和数据。
5.2.2 UDP校验
UDP校验只提供差错检测。在计算校验和时,要在UDP用户数据报之前临时加上12B的伪首部。伪首部只用于计算和验证校验和,其既不向下传送,也不向上递交。
5.3 TCP
5.3.1 TCP报文段
1、源端口号
占16位,标识发送主机的端口或进程,一个TCP报文必须包含源端口号,要让接收主机知道该向哪发送确认报文
2、目的端口号
占16位,标识目的主机的端口或进程
3、序号
占32位,即4个字节。序号范围是0~(2^32-1),当序号增加到2^32-1后,下一个序号又会变成0。因为TCP是面向字节流的,在一个TCP连接中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段则指的是本报文段所发送的数据的第一个字节的序号。
4、确认序号
同样的占4个字节,标识了期望收到对方下一个报文段的第一个数据字节的序号。
注:若确认序号=N,表明到序号N-1为止的所有数据都确认收到
5、首部长度
占4位。这个字段指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。也就是TCP报文段首部的长度。
6、保留
占6位,保留为今后用,目前都置为0
7、六个标志位
URG:紧急标志位。当URG=1时,表明紧急指针字段(后面介绍)有效,它告诉操作系统报文段中有紧急数据应该被尽快传送
ACK:确认标志位。仅当ACK=1时该字段才有效。TCP规定在连接建立后所有传送的报文段都必须把ACK置为1.
PSH:推送标志位。当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。在这种情况下,发送方TCP就可以将PSH字段置
1 ,并立即创建一个报文段发送出去,接收方收到 PSH = 1
的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满后再向上交付。
RST:复位标志位。当RST=1时,表明TCP连接中出现了严重差错必须释放连接,然后在重新建立运输连接。RST置为1还可以用来拒绝一个非法的报文段或拒绝打开一个连接。
SYN:同步标志位。在连接建立时用来同步序号。当SYN=1而ASK=0时表明这是一个连接请求报文段。如果对方同意建立连接,就可以在响应报文段中使用SYN=1和ACK=1。
FIN:终止标志位。用来释放一个连接,当FIN=1时,表明此报文段发送方的数据已经发送完毕,并要求释放连接。
8、窗口
占16位。窗口值是0~(2^16-1)之间的整数。
窗口指的是发送本报文段的一方的接收窗口,也就是自己接受缓冲区的大小。窗口值告诉对方,从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量。窗口值作为接收方让发送方设置其发送窗口的依据。
9、检验和
占16位。和IP数据报不同的是,TCP报文段检验的范围包括首部和数据两部分(IP数据报只检验首部部分),但是检验方法类似。
在发送方,首先把全零放入检验和字段
把伪首部以及TCP数据报看成是由许多16位字的字串连接起来。若TCP报文段的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)
然后按二进制反码计算出这些16位字的和,将结果的二进制反码写入检验和字段并发送
在接受方,把收到的TCP报文连同伪首部一起按二进制反码求出这些16位字德和。当无差错时结果为1,若结果为0,就表示有差错,接收方就丢弃这个报文段
在这里说一下伪首部的概念:伪首部有12个字节,分为5个字段。
第一字段和第二字段分别为源IP地址和目的IP地址。
第三字段是全零
第四字段是IP首部中的协议字段的值
第五字段是TCP数据报的长度
10、紧急指针
占16位。紧急指针只在URG=1时有效,标识了本报文段中紧急数据的字节数,指出来紧急数据末尾在报文段中的位置
注:当窗口为0时,也可以发送紧急数据。
11、选项
也是一个可变长字段最大可达40字节,当没有使用选项时,TCP的首部长度就是20字节。
5.3.2 TCP连接管理
https://www.jianshu.com/p/2bbf2344f949
5.3.3 TCP可靠传输
1、TCP数据编号与确认
2、TCP的重传机制
5.3.4 TCP流量控制
第一种机制:TCP维持一个变量,等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去。
第二种机制:由发送方的应用进程指明要求发送报文段,即TCP支持的推送(push)操作
第三种机制:发送方的一个计时器期限到了,这时就是把当前已有的缓存数据装入报文段发送出去。
5.3.5 TCP拥塞控制的基本概念
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏——产生拥塞(Congestion),整个网络的吞吐量将随输入负荷的增大而下降。
出现资源拥塞的条件:对资源需求的总和 > 可用资源
分类
1、闭环控制:基于反馈环路的概念。
闭环控制措施
1、监测网络系统以便检测到拥塞在何时、何处发生
2、将拥塞发生的信息传送到可采取行动的地方
3、调整网络系统的运行以解决出现的问题
2、开环控制:在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。
5.3.6 拥塞控制的4种算法
接收端窗口rwnd:接收端根据其目前接收缓存大小所许诺的最新的窗口值,反映了接收端的容量。
拥塞窗口cwnd:发送端根据自己估计的网络拥塞程度而设置的窗口值,反映了网络的当前容量。
发送窗口的上限 = Min[rwnd,cwnd]
慢开始算法的原理
1、在主机刚刚开始发送报文段时可先设置拥塞窗口cwnd=1,即设置为一个最大报文段MSS的数值。
2、在每收到一个对新的报文段的确认后,将拥塞窗口加1,即增加一个MSS的数值。
3、用这样的方法逐步增大发送端拥塞窗口cwnd,可以使分组注入到网络的速率更加合理
拥塞避免算法的原理
为防止拥塞窗口cwnd的增长引起网络阻塞,增加一个状态变量——慢开始门限ssthresh,其用法如下:
当cwnd<ssthresh时,使用慢开始算法
当cwnd>ssthresh时,停止使用慢开始算法,改用拥塞避免算法
当cwnd=ssthresh时,既可以使用慢开始算法,也可以使用拥塞避免算法
拥塞避免算法:发送端的拥塞窗口cwnd每经过一个往返时延RTT就增加一个MSS的大小,通常表现为按线性规律增长。
快重传算法
首先要求接收方每收到一个失序的报文段就立即发出重复确认。这样做可以让发送方及早知道有报文段没有到达接收方。发送方只要连续接收到3个重复确认就应当立即重传对方尚未收到的报文段。
快恢复算法
1、当发送端接收连续3个重复的ACK时,就重新设置慢开始门限ssthresh(拥塞窗口的一半)
2、与慢开始的不同之处是拥塞窗口cwnd不是设置为1,而是设置为新的ssthresh
3、若发送窗口值还允许发送报文段,就按拥塞避免算法继续发送报文段