一、知识点分布
1、运输层的两个协议?UDP,TCP
2、可靠传输的工作原理?停止等待协议、连续ARQ协议
3、TCP可靠传输的实现?滑动窗口、超时重传、选择确认
4、TCP流量控制
5、TCP拥塞控制
6、TCP的运输连接管理,如建立连接的三次握手和释放链接的四次握手
二、知识点解释
1、为什么需要运输层?
由于IP数据报的首部明确标志了这两台主机的IP地址,而两台主机之间进行通信就是两台主机中的应用进程互相通信,通信的真正端点并不是主机而是主机中的进程,也就是说端到端的通信是应用进程之间的通信。于是,网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
2、运输层的作用
运输层的作用:①向它上面的应用层提供通信服务,提供应用进程间的逻辑通信;②对收到的报文进行差错检测;③分用和复用
运输层向高层用户屏蔽了下面网络核心的细节,使得应用进程看见的就好像是两个运输层实体之有一条端到端的逻辑通信信道。若运输层使用TCP协议进行通信时,这条逻辑通信信道是一条可靠信道,若运输层使用UDP协议进行通信时,这条逻辑通信信道就是一条不可靠信道。
3、复用和分用
复用:指的是在发送方不同的应用进程都可以使用同一个运输层协议传送数据。
分用:指的是接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。
4、运输层的端口
运输层使用端口的工作原理:虽然通信的终点是应用进程,但我们可以把端口想象成是通信的终点,这样我们就只用把要传送的报文提交到目的主机的某一个合适的目的端口,剩下的工作(即交付给目的进程)就交给TCP来完成。
硬件端口:是不同硬件设备进行交互的接口。而软件端口:是应用层的各种协议进程与运输实体进行层间交互的一种地址。
端口号一般是16位,具有本地意义,即在不同的计算机中,相同的端口号是没有影响的。16位端口号可有65535个不同的端口号。
于是,两个计算机中的进程之间要通信,不仅要知道对方的IP地址(为了找到对方的计算机),还需要知道对方的端口号(为了找到对方计算机中的应用进程)。
端口号有以下两大类:
①服务器端使用的端口号,分为熟知端口号(0~1023)和登记端口号(1024~49151)
②客户端使用的端口号(49152~65535),这类端口号仅在客户进程运行时才动态选择,所以又叫短暂端口号
将TCP连接的端点称为插口,或套接字,套接口(即socket)。socket(在网络中必须唯一)=IP地址(32位,区别主机)+端口号(16位,区别进程)
5、用户数据报协议UDP
UDP的特点:
①UDP是无连接的,即发送数据之前无须建立连接,当然也就没有释放链接这一说法了。
②UDP使用尽最大可能努力交付,即不保证可靠交付。
③UDP是面向报文的,即对应用层交下来的报文既不合并也不拆分,保留原有的边界。UDP一次性交付一个完整的报文。
④UDP没有拥塞控制
⑤UDP支持一对一、一对多、多对一、多对多的交互通信。
UDP的首部格式
UDP=首部字段+数据字段。首部字段共4个字段(源端口、目的端口、长度 、检验和),即8个字节,每个字段占2字节,UDP最小长度为8个字节(即仅有首部)。
当要计算检验和时,则要在用户数据报前增加12个字节的伪首部,得到一个临时的用户数据报来计算,这仅仅只是为了计算检验和,伪首部不算在用户数据报长度中。
还记得IP数据报的检验和只检验IP数据报的首部,而UDP的检验和会把首部和数据部分都一起检验了。
6、传输控制协议TCP
TCP的特点:
①TCP是面向连接的运输层协议,即在通信前必须建立连接,通信后必须释放连接。
②每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)。
③TCP提供全双工通信
④TCP提供可靠交付的服务,允许双方的应用进程在任何时候都可以发送数据。
⑤面向字节流。TCP不保证接收方应用程序所接收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系,但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。(即过程拆分,结果组合)
注意:TCP连接是一条虚连接而不是一条真实的物理连接。TCP根据对方给出的窗口值和当前网络的拥塞程度决定一个报文包含多少字节,而UDP发送的报文长度是由应用程序决定的。
TCP连接的端点是套接字(也叫插口)。每一个TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。
同一个IP地址可以有多个不同的TCP连接,同一个端口号也可以出现不同个TCP连接。
7、可靠传输的工作原理
①停止等待协议
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。有无差错情况,就是收到确认再继续发数据,也有出现差错的情况,比如数据包在传输过程丢失了,接收方检测出到数据包是错误的就丢弃但没通知发送方,确认丢失了,确认迟到了等等情况,这时有一个超时重传机制就很牛逼啦,设置一个超时计时器,超过时间没有收到确认或者数据包就重发分组,注意超时计时器的重传时间要比数据在分组传输的平均往返时间更长一些。自动重传请求ARQ意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组,通过确认和重传机制,我们就可以在不可靠的传输网络上进行可靠的通信了。
②流水线传输
为了提高传输效率,发送方不采用停止等待协议,而是采用流水线运输,即发送方可连续发送多个分组,而不必每发完一个分组就停下来等待对方的确认。
③连续ARQ协议
发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方采用累计确认的 方式,即不必对每个分组都确认,而对按序到达的最后一个分组进行确认,这就代表了到这个分组为止之前的分组也都正确收到了。
注意:TCP连接的每一端都必须设有两个窗口——发送窗口和接收窗口,TCP的可靠传输机制是用字节的序号进行控制的,TCP的所有确认都是基于序号而不是基于报文,TCP两端的窗口经常处于动态变化中。
TCP的首部格式
TCP虽然是面向字节流的,但传送的数据单元却是报文段。
TCP的分用也是通过端口实现的。首部中的序号字段指的是本报文段所发送的数据的第一个字节的序号。确认号指的是期望收到对方下一个报文段的第一个数据字节的序号,若确认号为N ,则表示到序号N-1为止的所有数据都已正确收到。数据偏移实际指出了TCP报文段的首部长度,因此数据偏移的最大值为60字节,这也是TCP首部的最大长度。URG=1,表明紧急指针字段有效,即发送应用进程告诉发送方的TCP有紧急数据要传送。ACK=1,表明确认号字段才有效,TCP规定,连接建立后所有传送的报文段都必须把ACK置1。当PUSH=1,接收方则尽快交付报文段到接收应用进程,而不等缓存填满再向上交付。RST=1时,表明TCP连接中出现严重差错,必须释放连接再重新建立连接。
窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口),窗口值作为接收方让发送方设置其发送窗口的依据。收发双方都有发送窗口和接收窗口,发送窗口的大小依据对方给出的窗口值(即接收窗口)确定,接收窗口的大小则依据自己的缓冲大小。
检验和,占2字节,检验的范围包括首部和数据这两部分,在计算检验和时和UDP一样也是在前面加上12字节的伪首部。紧急指针,指出本报文段中的紧急数据的字节数,紧急指针指出了紧急数据的末尾在报文段中的位置,即使窗口为零也可以发送紧急数据。
选项,可变长度,最长可达40字节。其中有个选项为最大报文段长度MSS,MSS是每一个TCP报文段中的数据字段的最大长度,而不是整个TCP报文段的最大长度,默认值是536字节。
8、TCP可靠传输的实现
TCP的滑动窗口是以字节为单位的。如下图可知,窗口越大,发送方就可以在收到对方确认执勤连续发送更多的数据,因而获得更高的传输效率。发送窗口的位置:不动(表示没有收到新的确认),前移(表示收到新的确认)
注意:TCP 要求接收方必须有累积确认的功能,这样可以减小传输开销。
9、超时重传的选择
TCP 每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到但还没有收到确认,就要重传这一报文段。
TCP 采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间 RTT。
10、TCP流量控制
流量控制:就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口机制可以实现TCP连接上的流量控制。
如何控制TCP发送报文段的时机?如下常采用
11、TCP拥塞控制
拥塞控制与流量控制的区别:
①流量控制往往指点对点通信量的控制,是个端到端的问题(接收端控制发送端)。
②流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
出现拥塞的条件:对资源需求的总和>可用资源,于是就会导致网络性能下降
拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。
目的:防止过多的数据注入到网络中,是一个全局性的过程。
拥塞控制的4种算法:①慢开始,②拥塞避免,③快重传,④快恢复
假定:①数据是单方向传送的,对方只传送确认报文。②接收方总有足够大的缓存空间,于是发送窗口的的大小由网络的拥塞程度来决定。(即发送窗口值=min<接受窗口值,拥塞窗口值> )
工作原理:一开始先以拥塞窗口值cwnd为1至2个发送方的最大报文段SMSS作为初始拥塞窗口值开始试探网络情况,一般先设置为1,然后一收到接收方的确认就翻倍得增加拥塞窗口值,等达到慢开始门限ssthresh时就放慢增长,改成+1,因为此时网络不好或许会拥塞所以放慢些尽量避免,达到真正网络拥塞时就瞬间把拥塞窗口值降到1重新开始翻倍增加,之后的ssthresh值则变为网络拥塞那一刻拥塞窗口值的一半,之后继续同样的操作。如下图:
判断网络拥塞的依据是是否出现了超时,超时即代表未收到确认。当网络发生拥塞时,路由器就丢弃分组。
传播轮次:一个传输轮次所经历的时间其实就是往返时间RTT。
注意:拥塞避免并不是指可以完全避免网络拥塞,只是可以使网络较不容易出现拥塞。
当cwnd<ssthresh时,使用慢开始算法
当cwnd>ssthresh时,改用拥塞避免算法
当cwnd=ssthresh时,即可慢开始算法也可拥塞避免算法
快重传和快恢复
工作原理:3-ACK表示发送方一连收到3个对同一个报文段的重复确认。则此时立即执行快重传和快恢复算法。因为发送方只要一连收到3个重复确认,就知道接收方没有接收到报文段,立即重传,这样就不会超时,发送方也就不会误认为网络出现拥塞,之后不启用慢开始算法,而是采用快恢复算法,此时ssthresh=当前的cwnd减半,并且此时的cwnd=ssthresh,然后继续执行拥塞避免算法。使用快重传使得整个网络的吞吐量提高20%。
12、TCP的运输连接管理
运输连接有三个阶段:①连接建立,②数据传送,③释放连接
主动发起建立连接的应用进程叫作客户,被动等待连接建立的应用进程叫作服务器。
建立连接(三次握手) PS:记好过程中的标志位变化
目的:为了防止已失效的连接请求报文突然又传送到了,因而产生错误。
释放连接(四次握手) PS:记好过程中的标志位变化