计算机网络笔记(5)
第5章运输层
5.1运输层协议概述
进程之前的通信
运输层作用:运输层向上面的应用层提供通信服务(从通信和信息处理的角度看)
通信的实体:主机中的进程(两台主机进行通信(端到端通信)就是两台主机中的应用进程相互通信)
运输层的重要功能:复用和分用
运输层与网络层的区别:
- 网络层:为主机之间提供逻辑通信
- 运输层:为应用进程之间提供端到端的逻辑通信
运输层向高层用户屏蔽了下面网络核心的细节(进程间的通信好像在运输层实体间有一条端到端的逻辑通信信道)
运输层的两种不同运输协议:
- 面向连接的TCP
尽管下面的网络是不可靠的,但这种逻辑通信信道相当于一条全双工的可靠信道(存在一层是可靠的即全体可靠) - 无连接的UDP
这种逻辑通信信道仍然是一条不可靠信道
运输层的两个主要协议
TCP/IP运输层的两个主要协议(均是互联网正式标准):
- 用户数据报协议UDP
- 传输控制协议TCP
运输协议数据单元TPDU:两个对等运输实体在通信时传送的数据单位
(根据所使用的协议区分)
- TCP报文段(使用TCP协议)
提供面向连接的服务
特点:有确认机制、数据单元首部增大很多、占用许多的处理机资源 - UDP用户数据报(使用UDP协议)
传送数据之前不需要先建立连接
运输层的端口
进程标识符:标志计算机中的进程(不同的操作系统标识符格式可能不同)
协议端口号(端口):传输层把端口当做终点传送报文,剩下的工作(最后交付目的报文)由TCP或UDP来完成
需要端口的原因:进程的创建和撤销都是动态的,改变接收报文的进程不用通知所有发送方,所以需要利用目的主机提供的功能(终点)来识别终点,而不需要知道具体实现这个功能的进程是哪一个
软件端口和硬件端口:
- 软件端口:在协议栈层间的抽象的协议端口,是应用层的各种协议进程与运输实体进行层间交互的一种地址
- 硬件端口:不同硬件设备进行交互的接口
端口号:
- 表达:用一个16位端口号来标志一个端口
- 意义:端口号只有本地意义,标志本计算机应用层中的各个进程在和运输层交互时的层间接口
运输层的端口号分为两(三)大类:
- 服务器端使用的端口号:
两类:熟知端口号(0-1023,标记常规的服务进程)、登记端口号(1024-49151,标记无熟知端口号的非常规服务进程) - 客户端使用的端口号(19152-65535,留给客户进程选择暂时使用的端口号)
5.2用户数据报协议UDP
UDP概述
UDP主要特点:
- UDP是无连接的
- UDP使用尽最大努力交付
- UDP是面向报文的
- UDP没有拥塞控制
- UDP支持一对一、一对多、多对一、多对多的交互通信
- UDP的首部开销小
UDP的首部格式
UDP用户数据报的首部和伪首部:
- 伪首部:在计算检验和时临时添加,既不上交也不下传,仅仅为了计算检验和
UDP基于端口的分用:
(复用与分用类似,不过数据流方向相反)
5.3传输控制协议TCP概述
TCP最主要的特点
- TCP是面向连接的运输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
- TCP提供可靠交付的服务
- TCP提供全双工通信
- 面向字节流(按字节编址)
TCP注意:
- 连接是虚连接
- 报文段长度:
不关心应用进程把多长的报文发送到TCP的缓存
根据对方给的窗口值和当前网络的拥塞程度决定报文段的字节数 - 发送长度:
可以把长数据块划分短些再传送,也可以积累足够多字节再发送
TCP的连接
特点:TCP把连接作为最基本的抽象
套接字(接口):TCP连接的端点,用IP地址拼接上端口号来表示
( 套接字 socket =(IP地址:端口号))
TCP连接:唯一地被通信两端的两个端点(两个套接字)所确定
( TCP连接 ::= {socket1, socket2} = {(IP1: port1), (IP2: port2)} )
注:socket有多种意思
5.4可靠传输的工作原理
不同层的协议数据单元:运输层的是报文段,网络层的是IP数据报,一般讨论问题时都简称分组
停止等待协议
无差错情况:
出现差错情况:要求重传
- 重传注意点:
1)发送分组后要暂留分组的副本(方便重传)
2)分组和确认分组都要编号
3)等待重传时间应该稍长于数据在分组传输的平均时间
确认丢失和确认迟到:
可靠通信的实现:
- 使用确认和重传机制,可在不可靠的传输网络上实现可靠的通信
- 自动重传请求ARQ:使用确认和重传机制的可靠传输协议,意思是请求是自动进行的
信道利用率:
- 信道利用率的计算:
- 停止等待协议的优缺点:
优点:简单
缺点:信道利用率低
- 流水线传输:
概念:发送方可连续发送多个分组,不必等待对方的确认
优点:获得很高的信道利用率
连续ARQ协议
发送窗口:
- 位于发送窗口内的多个分组都可连续发送出去,而不需要等待对方的确认(但超出发送窗口的分组不能发送)
- 发送方每收到一个确认就把发送窗口向前滑动一个分组的位置
累计确认方式:
- 概念:只对按序到达的最后一个分组发送确认(表示到这个分组为止的所有分组都已经正确收到了)
- 优缺点:
优点:容易实现,即使确认丢失也不必重传
缺点:不能向发送方反映出接收方已经正确收到的分组的信息 - Go-back-N(回退N):
概念:分组丢失时,表示需要再退回来重传已经发送过的N个分组
影响:当通信线路质量不好时,连续ARQ协议会带来负面的影响
TCP可靠通信的注意点
- 每一端都必须设有两个窗口:发送窗口和接收窗口
- 用字节的序号进行控制:TCP所有的确认都是基于序号的
- 两端的窗口常处于动态变化中
- 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)未按序到达的数据
注意点:
- A的发送窗口并不总是和B的接收窗口一样大(有一定的时间滞后)
- TCP对不按序到达的数据无规定处理(通常先暂存然后等待其他数据)
- 接收方必须有累计确认的功能
超时重传时间的选择
概念:TCP每发一个报文段就重置一次计时器,超时就要重传
运输层时延特点:往返时延方差很大(与下层传输有关)
RRT:报文段的往返时间
加权平均往返时间(平滑的往返时间):
(是小于1的系数,第一次时)
超时重传时间RTO:
- RTO应略大于:
- RTT的偏差的加权平均值:
(是小于1的系数)
重传报文段的确认:
- Karn算法:
在计算加权平均RTTS时,只要报文段重传了,就忽略其往返时间样本 - 修正的Karn算法:
报文段每重传一次就把RTO增大一点
(\gamma 通常为2)
选择确认SACK
内容:接收方接收到了不连续的字节流,先接收已传达的字节块,再把这些信息告诉发送方,让发送方不再重复发送已收到的数据。
边界:每个不连续的字节块都有左右两个边界,分别用指针标记它们
对应的TCP首部内容:
- 要使用选择确认,首部要有“允许SACK”的选项
- “确认号字段”用法不变
- 首部选项中最多只有4个字节块的边界信息((4x2)边界x4字节 < 40字节)
5.7 TCP的流量控制
利用滑动窗口实现
流量控制:让发送方的发送速率不要太快,让接收方来得及接收
利用滑动窗口进行流量控制:
持续计时器:
(TCP为每个连接设有一个持续计时器)
- 发送方收到零窗口通知就启动计时器
- 时间到期,发送方发送零窗口探测报文段,对方空闲则在确认报文中给出窗口值
- 若窗口仍为零则重启计时器,否则打破死锁继续传送
TCP的传输效率
TCP报文段的发送时期:
- 第一种机制:
TCP维护一变量,它等于最大报文长度MSS
当缓存数据长度为MSS字节时就组装成TCP发送 - 第二种机制:
执行TCP的PUSH操作(推送操作,即发送方应用要求发) - 第三种机制:
计时器期限到就组装发送
5.8 TCP的拥塞机制
拥塞:
- 条件:
- 特征:许多资源供应不足,网络吞吐量随负荷增大而下降
拥塞控制:
- 前提:网络能够承受现有的网络负荷
- 范围:是一个全局性的过程,涉及很多因素
- 流量控制:
概念:在给定的发送端和接收端之间的点对点通信量的控制
任务:抑制发送端发送数据的速度,以便接收端来得及接收 - 作用:
拥塞控制难的原因:
- 拥塞控制是动态的问题
- 分组的丢失时网络发生拥塞的征兆而不是原因
- 拥塞控制机制本身也可能引起网络性能恶化
两种方法:
- 开环控制:事先将有关发生拥塞的因素考虑周到(不可能实现)
- 闭环控制:基于反馈环路概念(可实现)
几种拥塞控制方法
拥塞窗口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:确认号
- 三报文握手的作用:双方作好数据准备工作,双方协商好初始序列号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律