5.1 运输层协议概述
5.1.1 进程之间的通信
1、从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。
2、只有位于网络边缘部分的主机的协议栈才有运输层。
3、网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
5.1.2 运输层的两个主要协议
1、用户数据报协议UDP(User,Datagram Protocol);传输控制协议TCP(Transmission Control Protocol)
2、UDP和TCP的区别
3、UDP和TCP的应用
5.1.3 运输层的端口
1、应用层所有的应用进程都可以通过运输层再传送到IP层,这就是复用;运输层从IP层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程,这就是分用。
2、运输层使用协议端口号,该端口为软件端口,与路由器和交换机上的硬件端口是不同的概念。硬件端口是不同硬件设备进行交互的接口,软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
3、两个计算机中的进程要互相通信,不仅必须知道对方的IP地址,还需要知道对方的端口号。
4、运输层的端口号分类:(1)服务器端口使用的端口号:1)熟知端口号,数值0-1023,2)登记端口号,数值1024-49151;(2)客户端使用的端口号:短暂端口号,数值49152-65535.
5.2 用户数据报协议UDP
5.2.1 UDP概述
1、UDP的主要特点:(1)无连接;(2)尽最大努力交付;(3)面向报文,对应用层叫下来的报文,既不合并,也不拆分,而是保留这些报文的边界,UDP一次交付一个完整的报文;(4)UDP没有拥塞控制,适合多媒体通信的要求;(5)支持一对一、一对多、多对一和多对多的交互通信;(6)首部开销小。
5.2.2 UDP的首部格式
1、UDP有两个字段:(1)数据字段;(2)首部字段。
2、首部字段有四个字段:(1)源端口;(2)目的端口;(3)长度;(4)检验和。
3、UDP之间的通信要用到其端口号,但由于UDP的通信是无连接的,因此不需要使用套接字来建立连接。
5.3 传输控制协议TCP概述
5.3.1 TCP最主要的特点
1、TCP的特点:(1)面向连接的传输层协议;(2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的;(3)可靠交付;(4)全双工通信;(5)面向字节流,虽然应用程序和TCP的交互是一次一个数据块,但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流,流指的是流入到进程或从进程流出的字节序列。
5.3.2 TCP的连接
1、TCP连接的端点叫做套接字(socket)或插口,端口号拼接到IP地址即构成了套接字。
2、套接字的表示方法:在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。如IP地址是192.3.4.5,而端口号是80,那么套接字就是192.3.4.5:80 套接字socket=(IP地址:端口号)
3、每一条TCP连接唯一地被通信两端的两个端点所确定
5.4 可靠传输的工作原理
5.4.1 停止等待协议
1、停止等待就是每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。
2、确认和重传机制,可以在不可靠的传输网络上实现可靠的通信,可靠传输协议常称为自动重传请求ARQ
3、停止等待协议优点简单,缺点信道利用率太低。
4、为了提高传输效率,发送方可以不适用停止等待协议,而是采用流水线传输,即发送发可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认,此时需要使用的协议有连续ARQ协议和滑动窗口协议。
5.4.2 连续ARQ协议
1、连续ARQ协议和停止等待协议的异同
2、接收方一般采用累积确认方式,优点:容易实现,即使确认丢失也不必重传,缺点:不能像发送方反映出接收方已经正确收到的所有分组信息。
5.5 TCP报文段的首部格式
1、首部固定部分各字段的意义:
(1)源端口和目的端口。TCP的分用功能是通过端口实现的。
(2)序号。TCP连接中传送的数据流中的每一个字节都编上一个序号,序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
(3)确认号。期望收到对方下一个报文段的第一个数据字节的序号。
(4)数据偏移。指出TCP报文段的数据起始处距离TCP报文段的起始处有多远
(5)保留。后有6个控制位。
(6)紧急URG。URG=1时,表明紧急指针字段有效。
(7)确认ACK。ACK=1时,确认号字段才有效。
(8)推送PSH。接受TCP收到PSH=1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
(9)复位RST。当RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后重新建立运输连接。
(10)同步SYN。同步SYN=1表示这是一个连接请求或连接接受报文。
(11)终止FIN。用来释放一个连接,FIN=1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
(12)窗口。用来让对方设置发送窗口的依据。
(13)检验和。检验和字段检验的范围包括首部和数据这两部分。
(14)紧急指针。当URG=1时才有效,指出本报文段中的紧急数据的字节数。
(15)选项。长度可变。
5.6 TCP可靠传输的实现
5.6.1 以字节为单位的滑动窗口
1、TCP的滑动窗口是以字节为单位的。
2、窗口越大,发送方就可以在收到对方确认之前连续发送更多的数据,因而可能获得更高的传输效率。
3、发送缓存用来存放:(1)发送应用程序传送给发送方TCP准备发送的数据;(2)TCP已发送出但尚未收到确认的数据。
4、接收缓存用来暂时存放:(1)按序到达的、但尚未被接收应用程序读取的数据;(2)未按序到达的数据。
5.6.2 超时重传时间的选择
1、TCP的发送方在规定的时间内没有收到确认就要重传已发送的报文段。
2、TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。
5.6.3 选择确认SACK
1、如果要使用选择确认SACK,那么在建立TCP连接时,就要在TCP首部的选项中加上“允许SACK”的选项,而双方必须都实现商定好。
2、大多数的实现还是重传所有未被确认的数据块。
5.7 TCP的流量控制
5.7.1 利用滑动窗口实现流量控制
1、流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
2、TCP的窗口单位是字节,不是报文段。
5.7.2 TCP的传输效率
1、控制TCP报文段发送时机的不同机制:
(1)第一种机制是TCP维持一个变量,它等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去。
(2)第二种机制是由发送方的应用进程指明要求发送报文段,即TCP支持的推送(push)操作。
(3)第三种机制是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但长度不能超过MSS)发送出去。
2、糊涂窗口综合症
3、Nagle算法原理
5.8 TCP的拥塞控制
5.8.1 拥塞控制的一般原理
1、网络资源:包括链路容量(即带宽)、交换结点中的缓存和处理机等。
2、拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就是拥塞。即对资源的需求>可用资源。
3、网络拥塞的主要原因:(1)当某个结点缓存的容量太小时,到达该结点的分组因无存储空间暂存而不得不被丢弃;(2)链路的容量不足;(3)处理机处理的速率太慢;(4)如果一个路由器没有足够的缓存空间,它就会丢弃一些新到的分组,导致重传。
4、拥塞控制:就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载;而流量控制指点对点通信量的控制,是个端到端的问题。
5.8.2 TCP的拥塞控制方法
1、TCP拥塞控制算法种类:(1)慢开始;(2)拥塞避免;(3)快重传;(4)快恢复。
2、如何判断网络出现拥塞?如今通信线路的传输质量一般都很好,因传输出差错而丢弃分组的概率很小,因此判断网络拥塞的依据就是出现了超时。
3、慢开始算法:当主机开始发送数据时,由于并不清楚网络的负荷情况,所以如果立即把大量数据字节注入到网络,那么就可能引起网络发生拥塞,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,由小到大逐渐增大拥塞窗口数值。
4、拥塞避免算法:让拥塞控制窗口缓慢增大,即每经过一个往返时间就把发送方的拥塞窗口加1,而不是像慢开始阶段那样加倍增长,因此在拥塞避免阶段就有加法增大的特点,表明拥塞避免阶段,拥塞窗口按线性规律缓慢增长,比慢开始算法拥塞窗口增长速率缓慢得多。
5、快重传算法可以让发送方尽早知道发生了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认。
快重传算法规定,发送方只要一连收到3个重复确认,就知道接收方确实没有收到报文段M3,因而应当立即进行重传,这样就不会出现超时,发送方也就不会误认为出现了网络拥塞。
6、如果发送方知识丢失了个别的报文段,于是不启动慢开始,而是执行快恢复算法。
5.8.3 主动队列管理AQM
1、网络层的策略对TCP拥塞控制影响最大的就是路由器的分组丢失策略。
2、主动队列管理AQM:主动就是不要等到路由器的队列长度已经达到最大值时才不得不丢弃后面到达的分组,应当在队列长度达到某个值得警惕的数值时,就主动丢弃到达的分组,这样就提醒了发送方放慢发送的速率,因而有可能使网络拥塞的程度减轻,甚至不出现网络拥塞。
5.9 TCP的运输连接管理
1、TCP是面向连接的协议,运输连接是用来传送TCP报文的,TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。
2、运输连接的三个阶段:(1)连接建立;(2)数据传送;(3)连接释放。
3、TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器。
5.9.1 TCP的连接建立
1、TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段。采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。
5.9.2 TCP的连接释放
1、TCP连接释放过程是四报文握手。
2、为什么A必须等待2MSL的时间?
(1)为了保证A发送的最后一个ACK报文段能够到达B;
(2)防止已失效的连接请求报文段出现再本连接。
5.9.3 TCP的有限状态机
1、TCP的有限状态机