参考书籍:《计算机网络》第八版 谢希仁编著
文章目录
- 点此链接可跳转到:计算机网络笔记整理——目录索引页
- 运输层、UDP和TCP
- 运输层
- 用户数据报协议UDP
- 传输控制协议TCP
- TCP数据报
- TCP发送窗口机制
- 超时重传时间设置
- TCP确认机制
- TCP连接
- TCP的连接建立
- TCP的连接释放
- TCP的拥塞控制
- 拥塞的判断
- TCP拥塞控制算法
- 慢开始
- 拥塞避免算法
- 快重传算法
- 快恢复算法
运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层
只有位于网络边缘部分的主机的协议栈才有运输层,网络核心部分中的路由器在转发分组时都只用到下三层的功能。
通信的两端应当是两个主机中的进程。也就是说,端到端的通信是应用进程之间的通信
网络层为主机之间的通信提供服务,而运输层则在网络层的基础上,为应用程序之间的通信提供服务
当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道。
UDP只在IP数据报服务之上增加了复用和分用的功能以及差错检测的功能
应用程序必须选择合适大小的报文
若报文太长:UDP把它交给IP层后,IP层需要分片,这会降低IP层的效率
若报文太短,交给IP层后,会使IP数据报的首部相对太大,也会降低IP层的效率
UDP的检验和是把首部和数据部分一起都检验
例题
以太网的MTU为1500字节,将IP数据报封装到以太网帧中除去20字节的首部,一次最多只能传输1480字节
UDP数据字段8192字节,首部字段8字节共8200字节
8200/1480=5 8200%1480=800
故应当划分为6个IP数据报片,前五个为数据字段长1480,最后一个数据字段长800
片偏移以8字节为单位,1480/8=185,可得:0,185,370,555,740,925
TCP连接是一条虚连接而不是一条真正的物理连接
TCP对应用进程一次把多长的报文发送到TCP缓存中是不关心的
TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP的报文长度是应用进程给出的)
TCP可把太长的数据块划分短一些再传送
TCP也可等待积累有足够多的字节后再构成报文段发送出去
TCP的连接:
每一条TCP连接有两个端点,TCP连接的端点叫做套接字或插口
端口号拼接到IP地址即构成了套接字
套接字socket=(IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点所确定
TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)}
TCP的滑动窗口是以字节为单位的
发送缓存用来暂时存放:
发送应用程序传送给发送方TCP准备发送的数据
TCP已发送出但尚未收到确认的数据
接受缓存用来暂时存放:
按序到达的、但尚未被接收应用程序读取的数据
不按序到达的数据
TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT。
TCP保留了RTT的一个加权平均往返时间RTTs(又称为平滑的往返时间),第一次测量RTT样本时,RTTs值就取为所测量到的RTT样本值。以后每测量到一个新的RTT样本,就按下式重新计算一次RTTs:
新的RTTs = (1-α) x (旧的RTTs) + α x (新的RTT样本)
注意:0 ≤ α < 1,若接近于零,表示RTT值更新较慢;若接近于1,表示RTT值更新较快。推荐取的α值为1/8,即0.125
超时重传时间RTO应略大于RTTs,建议使用下式计算:
RTO=RTTs+4×RTTD
RTTD是RTT偏差的加权平均值
第一次测量时,RTTD值取为RTT的一半,以后的测量中,使用下式计算
新的RTTD=(1 - β) × (旧的RTTD) + β × | RTTS - 新的RTT样本 |
β是个小于1的系数,推荐值为1/4,即0.25
只能指明4个字节块是因为,4个字节快共有8个边界,每个边界用掉4个字节(因为序号有32位,需要使用4个字节表示),因而需要用32个字节,另外还需要两个字节,一个字节用来表明SACK选项,另一个字节指明这个选项要占用多少字节。
运输连接有三个阶段:
TCP连接的建立采用客户服务器方式
主动发起连接建立的应用进程叫做客户
被动等待连接建立的应用进程叫做服务器
TCP建立连接的过程叫做握手
握手需要在客户和服务器之间交换三个TCP报文。称之为三报文握手
A向B传送的连接请求报文段中的seq = x,表明传送数据时的第一个数据字节的序号是x。
SYN=1的报文段不能携带数据,但要消耗掉一个序号
ACK报文段可以携带数据,如果不携带数据则不消耗序号
CLOSED——关闭状态
LISTEN——收听状态
SYN-SENT——同步已发送状态
SYN-RCVD——同步收到状态
ESTABLISHED——已建立连接状态
数据传输结束后,通信的双方都可以释放连接
TCP连接释放过程是四报文握手
拥塞:某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。最坏结果:系统崩溃
TCP采用基于窗口的方法进行拥塞控制,这种方法属于闭环控制方法。
TCP发送方维持一个拥塞窗口CWND,大小取决于网络的拥塞程度,并且动态地变化,发送窗口大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况
真正的发送窗口值=Min(公告窗口值,拥塞窗口值)
由小到大逐渐增大拥塞窗口数值
初始拥塞窗口cwnd设置为不超过2至4个SMSS(发送方的最大报文段)的数值
慢开始门限ssthresh(状态变量):防止拥塞窗口cwnd增长过大引起网络拥塞
拥塞窗口cwnd控制方法:在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值
拥塞窗口cwnd每次的增加量 = min(N,SMSS)
N是原先未被确认的、但现在被刚收到的确认报文段所确认的字节数。
慢开始门限ssthresh的用法如下:
当cwnd
当cwnd=ssthresh时,即可使用慢开始,也可使用拥塞避免
让拥塞窗口cwnd缓慢增大,每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(重传定时器超时):
- ssthresh = max(cwnd/2,2)
- cwnd = 1
- 执行慢开始算法
快重传FR(Fast Retransmission)算法可以让发送方尽早知道发生了个别报文段的丢失。
发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即“快重传”),这样就不会出现超时,发送方也就不会误认为出现了网络拥塞
当接收端收到连续三个重复的确认时,由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是执行快恢复算法: