其他分享
首页 > 其他分享> > 计算机网络笔记整理5——运输层

计算机网络笔记整理5——运输层

作者:互联网

计算机网络笔记整理5——运输层

参考书籍:《计算机网络》第八版 谢希仁编著

文章目录

运输层、UDP和TCP

运输层

运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层

只有位于网络边缘部分的主机的协议栈才有运输层,网络核心部分中的路由器在转发分组时都只用到下三层的功能。

通信的两端应当是两个主机中的进程。也就是说,端到端的通信时应用进程之间的通信

网络层为主机之间的通信提供服务,而运输层则在网络层的基础上,为应用程序之间的通信提供服务

在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信,这表面运输层有一个很重要的功能——复用和分用
在这里插入图片描述

当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道。

用户数据报协议UDP

UDP只在IP数据报服务之上增加了复用和分用的功能以及差错检测的功能

UDP是面向报文的
在这里插入图片描述

应用程序必须选择合适大小的报文
若报文太长: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缓存中是不关心的
TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节(UDP的报文长度是应用进程给出的)
TCP可把太长的数据块划分短一些再传送
TCP也可等待积累有足够多的字节后再构成报文段发送出去

TCP的连接
每一条TCP连接有两个端点,TCP连接的端点叫做套接字或插口
端口号拼接到IP地址即构成了套接字
套接字socket=(IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点所确定
TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)}

TCP数据报

在这里插入图片描述

TCP发送窗口机制

TCP的滑动窗口是以字节为单位的

在这里插入图片描述
在这里插入图片描述
序号为31的数据没有收到,B发送的确认报文段中的确认号仍热是31(即期望收到的序号)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发送缓存用来暂时存放:
发送应用程序传送给发送方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

在这里插入图片描述
γ的典型值是2

TCP确认机制

选择确认SACK
在这里插入图片描述
在这里插入图片描述

只能指明4个字节块是因为,4个字节快共有8个边界,每个边界用掉4个字节(因为序号有32位,需要使用4个字节表示),因而需要用32个字节,另外还需要两个字节,一个字节用来表明SACK选项,另一个字节指明这个选项要占用多少字节。

TCP连接

运输连接有三个阶段:

TCP连接的建立采用客户服务器方式
主动发起连接建立的应用进程叫做客户
被动等待连接建立的应用进程叫做服务器

TCP的连接建立

TCP建立连接的过程叫做握手
握手需要在客户和服务器之间交换三个TCP报文。称之为三报文握手
在这里插入图片描述
A向B传送的连接请求报文段中的seq = x,表明传送数据时的第一个数据字节的序号是x。
SYN=1的报文段不能携带数据,但要消耗掉一个序号
ACK报文段可以携带数据,如果不携带数据则不消耗序号
CLOSED——关闭状态
LISTEN——收听状态
SYN-SENT——同步已发送状态
SYN-RCVD——同步收到状态
ESTABLISHED——已建立连接状态

TCP的连接释放

数据传输结束后,通信的双方都可以释放连接
TCP连接释放过程是四报文握手
在这里插入图片描述

  1. 第一个报文seq=u,它等于前面以传送过的数据的最后一个字节的序号加1,FIN报文段即使不携带数据,也消耗掉一个序号
  2. B在收到第一个报文后即发出确认,seq=v,它等于B前面已传送过的数据的最后一个字节的序号加1.然后B就进入CLOSE-WAIT状态,此时A到B这个方向的连接就释放了,这时的TCP连接处于半关闭状态,即A无数据发送,但B若发送数据,A仍要接受
  3. 若B没有数据发送了,就通知TCP释放连接,此时seq=w(在半关闭状态,B可能又发送了一些数据),重复上次的ack
  4. A收到B的连接释放报文后,发出确认ack=w+1,seq=u+1(前面发送的FIN报文段要消耗掉一个序号)
  5. A等待2MSL(最长报文段寿命)后才进入CLOSED状态,保证A发送的最后一个报文能够到达B。若这个报文丢失,A能在2MSL时间内收到重传的FIN+ACK报文,接着A重传确认,重启2MSL计时器;同时经过2MSL时间,可以使本连接持续的时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

TCP的拥塞控制

拥塞:某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。最坏结果:系统崩溃

TCP采用基于窗口的方法进行拥塞控制,这种方法属于闭环控制方法。

TCP发送方维持一个拥塞窗口CWND,大小取决于网络的拥塞程度,并且动态地变化,发送窗口大小不仅取决于接收方公告的接收窗口,还取决于网络的拥塞状况
真正的发送窗口值=Min(公告窗口值,拥塞窗口值)

拥塞的判断

TCP拥塞控制算法

慢开始

由小到大逐渐增大拥塞窗口数值
初始拥塞窗口cwnd设置为不超过2至4个SMSS(发送方的最大报文段)的数值
慢开始门限ssthresh(状态变量):防止拥塞窗口cwnd增长过大引起网络拥塞
拥塞窗口cwnd控制方法:在每收到一个对新的报文段的确认后,可以把拥塞窗口增加最多一个SMSS的数值
拥塞窗口cwnd每次的增加量 = min(N,SMSS)
N是原先未被确认的、但现在被刚收到的确认报文段所确认的字节数。

在这里插入图片描述

慢开始门限ssthresh的用法如下
当cwnd<ssthresh时,使用慢开始算法
当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法
当cwnd=ssthresh时,即可使用慢开始,也可使用拥塞避免

拥塞避免算法

让拥塞窗口cwnd缓慢增大,每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。

无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(重传定时器超时):

  1. ssthresh = max(cwnd/2,2)
  2. cwnd = 1
  3. 执行慢开始算法

在这里插入图片描述

快重传算法

快重传FR(Fast Retransmission)算法可以让发送方尽早知道发生了个别报文段的丢失。
发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即“快重传”),这样就不会出现超时,发送方也就不会误认为出现了网络拥塞
在这里插入图片描述

快恢复算法

当接收端收到连续三个重复的确认时,由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是执行快恢复算法

  1. 慢开始门限ssthresh = 当前拥塞窗口 cwnd/2
  2. 新拥塞窗口cwnd = 慢开始门限 ssthresh
  3. 开始执行拥塞避免算法
    在这里插入图片描述

标签:运输,UDP,字节,报文,TCP,计算机网络,拥塞,笔记,连接
来源: https://blog.csdn.net/shn111/article/details/122290776