《计算机网络(第七版)-谢希仁》-运输层知识点总结
运输层
运输层协议概述
进程间的通信
运输层向它上面的应用层提供服务。运输层提供应用进程间的逻辑通信。(”逻辑通信“是指,从应用层看,只要把应用层的报文交给下面的运输层,运输层就可以把报文送到对方的运输层,好像是沿水平方向直接通信一样。)通信的两端是两个主机的应用进程。
网络层和运输层的区别:网络层为主机之间提供通信服务,运输层在网络层的基础上,为主机的应用进程之间提供通信服务。运输层还要对收到的报文进行差错检测,而网络层只对IP数据报首部进行检测。
当运输层采用面向连接的TCP协议时,这种逻辑信道相当于一条全双工的可靠信道。当运输层采用无连接的UDP协议时,这种逻辑信道仍然是一条不可靠信道。
运输层的两个主要协议
-
用户数据报协议UDP(User Datagram Protocol)
-
传输控制协议TCP(Transmission Control Protocol)
在TCP/IP体系中,根据所使用的的协议是TCP或UDP,分别把传送的数据单位叫做TCP报文断或UDP用户数据报。
UDP在传送数据之前不需要先建立连接,TCP则提供面向连接的服务。
运输层的端口
在用户层和运输层之间的界面上,设置一个特殊的抽象的“门“。应用层中的应用进程要通过运输层就必须经过这个门,而别的主机上的应用进程要寻找本主机上的应用进程也必需通过这个门。我们把应用层和运输层之间的这个”门”,设为通信的抽象终点。这个终点就是协议端口,简称端口。每个端口用一个端口号的整数标志。
协议端口是软件端口。
应用层上的应用进程要发送数据时,就把数据发送到适当的端口,然后运输层从该端口读取数据。当运输层向应用层发送数据时,就把数据发送到适当的端口,然后应用进程就从该端口读取数据。
进程间的通信可以看出两个端口间的通信。
用户数据报协议UDP
UDP在IP数据报上增加了复用和分用的功能以及差错检测的功能。
UDP的特点:无连接的、尽最大努力交付的、面向报文、没有拥塞控制、支持交互通信、首部只有8个字节。
面向报文是指UDP会把应用进程发送来的报文,在添加首部后就直接发送出,应用层给UDP多长的报文,UDP就发送多长的报文,即一次发送一个报文。
UDP报文首部格式:P217
传输控制协议TCP
TCP的特点
面向连接、点对点通信、提供可靠交付服务、全双工通信、面向字节流。
面向字节流的含义是TCP把应用层传下来的数据看成一连串的无结构的字节流,TCP并不知道所传送的字节流的含义。
TCP的连接
TCP只能进行点对点通信,每一条TCP连接有两个端点,这两个端点不是主机,不是主机地址,不是应用进程,也不是协议端口。TCP连接的端点叫套接字或插口。
套接字socket = (IP地址:端口号)
每一条TCP连接唯一的被通信两端的两个端点(即套接字对)所确定。
TCP连接::= {socket1,socket2} = {(IP1,:port1),(IP2:port2)}
可靠传输的工作原理
停止等待协议
停止等待就是发送一个分组后就停止发送,等待对方确认,发送方在收到确认后再发送下一个分组。
一个可靠的传输协议应该这样设计:发送方只要超过一段时间没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送的分组,这叫超时重传。要实现超时重传,就要在发完每个分组后设置超时计时器,在超时计时器到期前收到确认,就认为发送成功。
有三点需要注意:
-
每发送一个分组都要保留已发送分组的副本,即备份。
-
分组和确认分组必须编号
-
超时重传的时间应该比RTT更长一些。
使用上述确认重传机制,可以实现在不可靠的传输网络上实现可靠的通信。
停止等待协议的优点是简单,缺点是信道利用率太低。
信道利用率 U=发送时间/(发送时间+确认时间+RTT)
连续ARQ协议
为提高信道利用率,可以不使用停止等待协议,而是采用流水线传输。
ARQ协议规定,发送发每收到一个确认,就把发送窗口向前滑动一个分组的位置。
接收方采用累计确认的方式,当接收到几个连续的分组后,对最后一个分组发送确认。
TCP报文的首部格式
P225
TCP可靠传输的实现
以字节为单位的滑动窗口机制
一个滑动窗口机制需要三个指针:P1,P2和P3。指针都指向字节的序号。
P1之前的数据是已发送且收到确认的部分。
P3之后的数据是不允许发送的部分。
P3-P1表示整个发送窗口。
P2-P1表示已发送还收到未确认的部分。
P3-P2表示允许发送但尚未发送的部分,又称可用窗口或有效窗口。
超时重传的时间选择
TCP采用了一种自适应算法,来计算RTT的一个加权平均往返时间RTTs,当第一次测量RTTs时,RTTs=RTT
以后每测量到一个新样本时,
RTTs = (1-α)×(旧的RTTs) + α × (新的RTTs) 通常α的值为1/8
超时重传时间RTO = RTTs + 4 × RTTd
规定:在计算RTTs时,只要报文重传了,就不采用其往返时间样本。
选择确认SACK
用来解决接受方收到不连续的数据时,在确认报文中告诉发送方不必再发送已接收的数据,只需发送接收方缺少的数据。
TCP流量控制
所谓流量控制就是让发送发不要发太快,要让接收方来得及接收。
利用滑动窗口实现流量控制
TCP的传输效率
TCP的拥塞控制
拥塞控制的算法有4种:慢开始、拥塞避免、快重传、快恢复。
发送方维持一个拥塞窗口的状态变量,让发送窗口等于拥塞窗口。
原则:只要网络上没有发生拥塞,就可以把拥塞窗口适当增大一些。但只要发生或有可能发生拥塞,就要把拥塞窗口调小。
只要发送发的超时重传计时器启动,就认为网络发生了拥塞。
慢开始
刚开始发送报文段时,把初始拥塞窗口设置为1至2个发送方的最大报文段SMSS的数值。
每收到一个对新的报文段的确认后,就可以把拥塞窗口增加最多一个SMSS的数值。
拥塞窗口cwnd每次增加量 = min(N,SMSS),N为刚收到的确认报文段的字节数。
慢开始并非增长速率慢,而是开始的慢。最开始先试探一下网络的拥塞情况,然后视情况增大cwnd。
拥塞避免
为防止拥塞窗口持续增大导致出现网络拥塞,还需设置一个慢开始门限ssthresh状态变量。ssthresh是慢开始的阈值,
当,cwnd<ssthresh时,使用慢开始算法。
当cwnd>ssthresh时,停止使用慢开始算法,改用拥塞避免算法。
当cwnd=ssthresh时,即可使用慢开始算法,又可使用拥塞避免算法。
拥塞避免算法:每经过一个往返时间RTT,cwnd就增加1,而不是想慢开始那样成倍增长。拥塞避免阶段又称加法增大。
快重传
快恢复