计算机网络笔记(5)

第5章运输层

5.1运输层协议概述

进程之前的通信

运输层作用:运输层向上面的应用层提供通信服务(从通信和信息处理的角度看)
通信的实体:主机中的进程(两台主机进行通信(端到端通信)就是两台主机中的应用进程相互通信)
运输层的重要功能:复用和分用
运输层与网络层的区别:

  • 网络层:为主机之间提供逻辑通信
  • 运输层:为应用进程之间提供端到端的逻辑通信
    运输层向高层用户屏蔽了下面网络核心的细节(进程间的通信好像在运输层实体间有一条端到端的逻辑通信信道)

运输层的两种不同运输协议:

  1. 面向连接的TCP
    尽管下面的网络是不可靠的,但这种逻辑通信信道相当于一条全双工的可靠信道(存在一层是可靠的即全体可靠)
  2. 无连接的UDP
    这种逻辑通信信道仍然是一条不可靠信道

运输层的两个主要协议

TCP/IP运输层的两个主要协议(均是互联网正式标准):

  • 用户数据报协议UDP
  • 传输控制协议TCP

运输协议数据单元TPDU:两个对等运输实体在通信时传送的数据单位
(根据所使用的协议区分)

  1. TCP报文段(使用TCP协议)
    提供面向连接的服务
    特点:有确认机制、数据单元首部增大很多、占用许多的处理机资源
  2. UDP用户数据报(使用UDP协议)
    传送数据之前不需要先建立连接

运输层的端口

进程标识符:标志计算机中的进程(不同的操作系统标识符格式可能不同)
协议端口号(端口):传输层把端口当做终点传送报文,剩下的工作(最后交付目的报文)由TCP或UDP来完成
需要端口的原因:进程的创建和撤销都是动态的,改变接收报文的进程不用通知所有发送方,所以需要利用目的主机提供的功能(终点)来识别终点,而不需要知道具体实现这个功能的进程是哪一个

软件端口和硬件端口:

  • 软件端口:在协议栈层间的抽象的协议端口,是应用层的各种协议进程与运输实体进行层间交互的一种地址
  • 硬件端口:不同硬件设备进行交互的接口

端口号:

  • 表达:用一个16位端口号来标志一个端口
  • 意义:端口号只有本地意义,标志本计算机应用层中的各个进程在和运输层交互时的层间接口

运输层的端口号分为两(三)大类:

  1. 服务器端使用的端口号:
    两类:熟知端口号(0-1023,标记常规的服务进程)、登记端口号(1024-49151,标记无熟知端口号的非常规服务进程)
  2. 客户端使用的端口号(19152-65535,留给客户进程选择暂时使用的端口号)

5.2用户数据报协议UDP

UDP概述

UDP主要特点:

  1. UDP是无连接的
  2. UDP使用尽最大努力交付
  3. UDP是面向报文的
  4. UDP没有拥塞控制
  5. UDP支持一对一、一对多、多对一、多对多的交互通信
  6. UDP的首部开销小

UDP的首部格式

UDP用户数据报的首部和伪首部:

  • 伪首部:在计算检验和时临时添加,既不上交也不下传,仅仅为了计算检验和

UDP基于端口的分用:

(复用与分用类似,不过数据流方向相反)

5.3传输控制协议TCP概述

TCP最主要的特点

  1. TCP是面向连接的运输层协议
  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点
  3. TCP提供可靠交付的服务
  4. TCP提供全双工通信
  5. 面向字节流(按字节编址)

TCP注意:

  1. 连接是虚连接
  2. 报文段长度:
    不关心应用进程把多长的报文发送到TCP的缓存
    根据对方给的窗口值和当前网络的拥塞程度决定报文段的字节数
  3. 发送长度:
    可以把长数据块划分短些再传送,也可以积累足够多字节再发送

TCP的连接

特点:TCP把连接作为最基本的抽象

套接字(接口):TCP连接的端点,用IP地址拼接上端口号来表示
( 套接字 socket =(IP地址:端口号))

TCP连接:唯一地被通信两端的两个端点(两个套接字)所确定
( TCP连接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)} )

注:socket有多种意思

5.4可靠传输的工作原理

不同层的协议数据单元:运输层的是报文段,网络层的是IP数据报,一般讨论问题时都简称分组

停止等待协议

无差错情况:

出现差错情况:要求重传

  • 重传注意点:
     1)发送分组后要暂留分组的副本(方便重传)
     2)分组和确认分组都要编号
     3)等待重传时间应该稍长于数据在分组传输的平均时间

确认丢失和确认迟到:

可靠通信的实现:

  • 使用确认和重传机制,可在不可靠的传输网络上实现可靠的通信
  • 自动重传请求ARQ:使用确认和重传机制的可靠传输协议,意思是请求是自动进行的

信道利用率:

  • 信道利用率的计算:
    U=TDTD+RTT+TA
  • 停止等待协议的优缺点:
    优点:简单
    缺点:信道利用率低
  • 流水线传输:
    概念:发送方可连续发送多个分组,不必等待对方的确认
    优点:获得很高的信道利用率

连续ARQ协议

发送窗口:

  • 位于发送窗口内的多个分组都可连续发送出去,而不需要等待对方的确认(但超出发送窗口的分组不能发送)
  • 发送方每收到一个确认就把发送窗口向前滑动一个分组的位置

累计确认方式:

  • 概念:只对按序到达的最后一个分组发送确认(表示到这个分组为止的所有分组都已经正确收到了)
  • 优缺点:
    优点:容易实现,即使确认丢失也不必重传
    缺点:不能向发送方反映出接收方已经正确收到的分组的信息
  • Go-back-N(回退N):
    概念:分组丢失时,表示需要再退回来重传已经发送过的N个分组
    影响:当通信线路质量不好时,连续ARQ协议会带来负面的影响

TCP可靠通信的注意点

  1. 每一端都必须设有两个窗口:发送窗口和接收窗口
  2. 字节的序号进行控制:TCP所有的确认都是基于序号的
  3. 两端的窗口常处于动态变化
  4. TCP连接的往返时间RTT不是固定不变的

5.5TCP报文段的首部格式

  • 源端口和目的端口:
    端口是运输层与应用层的服务接口,实现运输层的复用和分用功能
  • 序号:
    报文段所发送的数据的第一个字节的序号(TCP传送的数据流每个字节都有编号)
  • 确认号:
    期望收到对方下一个报文段的数据的第一个字节的序号
  • 数据偏移:
    TCP报文段的数据起始处与TCP报文段的起始处的距离(即首部长度)
  • 保留:
    保留为今后使用
  • URG:加急位(优先级)
  • ACK:确认号是否有效
  • PSH:是否尽快传送(不等待缓存满)
  • RST:复位位(释放连接,重新建立运输连接)
  • SYN:同步位(表示连接请求还是连接接受报文)
  • FIN:终止位(发送完毕,释放连接)
  • 窗口:
    让对方设置发送窗口的依据
  • 检验和:
    包括首部和数据的检验,计算时加上伪首部
  • 紧急指针:
    指出本报文段中紧急数据有多少字节(紧急数据在数据段的最前面)
  • 选项:
    很多选项,包括最大报文段长度MSS(MSS:TCP报文段中数据字段的最大长度)
  • 填充:使整个首部长度是4字节的整数倍

5.6TCP可靠传输的实现

以字节为单位的滑动窗口

前沿和后沿:

  • 后沿:
    不动:没有收到新的确认
    前移:收到了新的确认

  • 前沿:
    不动:收到确认,同时对方通知的窗口缩小了
    前移:收到确认,同时对方通知的窗口不变

  • 各情况例子(各例子按不同的假设进行,上一情况不一定能作为先前条件)
    根据B给出的窗口值,A构造出自己的发送窗口:

    A发送了11个字节的数据:

    A接收到新的确认号,发送窗口向前滑动:

    发送窗口内的序号都属于已发送但未被确认:

TCP的缓存和窗口的关系:

  • 发送缓存暂时存放:
     1)发送应用程序传送给发送方TCP准备发送的数据
     2)TCP已发送但尚未收到确认的数据
  • 接收缓存暂时存放:
     1)按序到达的、但尚未被接收应用程序读取的数据
     2)未按序到达的数据

注意点:

  1. A的发送窗口并不总是和B的接收窗口一样大(有一定的时间滞后)
  2. TCP对不按序到达的数据无规定处理(通常先暂存然后等待其他数据)
  3. 接收方必须有累计确认的功能

超时重传时间的选择

概念:TCP每发一个报文段就重置一次计时器,超时就要重传
运输层时延特点:往返时延方差很大(与下层传输有关)

RRT:报文段的往返时间
加权平均往返时间(平滑的往返时间)RTTS
RTTS=(1α)×(RTTS)+α×(RTT)
α是小于1的系数,第一次时RTTS=RTT

超时重传时间RTO:

  • RTO应略大于RTTS
    RTO=RTTS+4×RTTD
  • RTT的偏差的加权平均值RTTD
    RTTD=(1β)×(RTTD)+β×|RTTSRTT|
    β是小于1的系数)

重传报文段的确认:

  • Karn算法:
    在计算加权平均RTTS时,只要报文段重传了,就忽略其往返时间样本
  • 修正的Karn算法:
    报文段每重传一次就把RTO增大一点
    RTO=γ×(RTO)
    (\gamma 通常为2)

选择确认SACK

内容:接收方接收到了不连续的字节流,先接收已传达的字节块,再把这些信息告诉发送方,让发送方不再重复发送已收到的数据。

边界:每个不连续的字节块都有左右两个边界,分别用指针标记它们

对应的TCP首部内容:

  • 要使用选择确认,首部要有“允许SACK”的选项
  • “确认号字段”用法不变
  • 首部选项中最多只有4个字节块的边界信息((4x2)边界x4字节 < 40字节)

5.7 TCP的流量控制

利用滑动窗口实现

流量控制:让发送方的发送速率不要太快,让接收方来得及接收

利用滑动窗口进行流量控制:

持续计时器:
(TCP为每个连接设有一个持续计时器)

  • 发送方收到零窗口通知就启动计时器
  • 时间到期,发送方发送零窗口探测报文段,对方空闲则在确认报文中给出窗口值
  • 若窗口仍为零则重启计时器,否则打破死锁继续传送

TCP的传输效率

TCP报文段的发送时期:

  1. 第一种机制:
    TCP维护一变量,它等于最大报文长度MSS
    当缓存数据长度为MSS字节时就组装成TCP发送
  2. 第二种机制:
    执行TCP的PUSH操作(推送操作,即发送方应用要求发)
  3. 第三种机制:
    计时器期限到就组装发送

5.8 TCP的拥塞机制

拥塞:

  • 条件:>
  • 特征:许多资源供应不足,网络吞吐量随负荷增大而下降

拥塞控制:

  • 前提:网络能够承受现有的网络负荷
  • 范围:是一个全局性的过程,涉及很多因素
  • 流量控制:
     概念:在给定的发送端和接收端之间的点对点通信量的控制
     任务:抑制发送端发送数据的速度,以便接收端来得及接收
  • 作用:

拥塞控制难的原因:

  1. 拥塞控制是动态的问题
  2. 分组的丢失时网络发生拥塞的征兆而不是原因
  3. 拥塞控制机制本身也可能引起网络性能恶化

两种方法:

  • 开环控制:事先将有关发生拥塞的因素考虑周到(不可能实现)
  • 闭环控制:基于反馈环路概念(可实现)

几种拥塞控制方法

拥塞窗口cwnd:发送方维护一个叫拥塞窗口的状态变量,其大小取决于网络的拥塞程度(动态变化),发送方让自己的发送窗口等于拥塞窗口

慢开始算法:

  • 概念:每经过一个传输轮次,拥塞窗口就加倍
  • 传输轮次:一个传输轮次 = 往返时间RTT

拥塞避免算法(加法增大):每经过一个传输轮次,拥塞窗口就加1(即让拥塞窗口缓慢增大,使网络比较不易出现拥塞)

慢开始门限ssthresh状态变量:

  • cwnd < ssthresh:使用慢开始算法
  • cwnd > ssthresh:使用拥塞避免算法
  • cwnd = ssthresh:可以用慢开始算法,也可以用拥塞避免算法

TCP拥塞窗口在拥塞控制时的变化情况:

  • ssthresh的调整:出现网络拥塞和三报文重传都要调整为ssthresh = cwnd / 2
  • 超时:即判断为网络拥塞,cwnd要降为1
  • 三报文重传(3-ACK):cwnd降为调整后的ssthresh(即cwnd /= 2)

发送方窗口的上限值:Min[rwnd , cwnd]
(rwnd:接受方窗口,cwnd:拥塞窗口)

*随机早期检测RED

RED将路由器的到达队列划分为三个区域:

瞬时队列长度和平均队列长度:平均队列长度的变化平滑于瞬时队列长度的变化

5.9TCP的连接释放

运输连接的三个阶段:连接建立、数据传送和连接释放
(运输连接管理是使连接建立和释放正常运行)

客户服务器方式(C/S方式):

  • TCP连接采用C/S方式
  • 客户:主动发起连接建立的应用进程
  • 服务器:被动等待连接建立的应用进程

TCP的连接建立

TCP连接建立要解决的三个问题:

  • 每一方能确知对方的存在
  • 允许双方协商一些参数
  • 能对运输实体资源进行分配

握手:TCP建立连接的过程
三报文握手建立TCP连接:

  • SYN:同步号有效
  • seq:请求开始的序列号
  • ACK:确认号有效
  • ack:确认号
  • 三报文握手的作用:双方作好数据准备工作,双方协商好初始序列号

*TCP的连接释放

*TCP的有限状态机

posted @   kksk43  阅读(185)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
特效
黑夜
侧边栏隐藏
点击右上角即可分享
微信分享提示