计算机网络笔记分享(第五章 运输层)

server/2024/10/21 5:51:09/

文章目录

  • 五、运输层
    • 5.1 运输层协议概述
    • 5.2 UDP 用户数据报协议
    • 5.3 TCP 传输控制协议概述
    • 5.4 可靠传输的工作原理
    • 5.5 TCP报文段的首部格式
    • 5.6 TCP可靠传输的实现(重点)
      • 以字节为单位的滑动窗口
      • 超时重传时间的选择
      • 选择确认SACK
    • 5.7 TCP的流量控制
    • 5.8 TCP的拥塞控制
    • 5.9 TCP的运输连接管理

介绍
学习网络>计算机网络的过程中,我整理了一些比较关键的、考试可能会考的点,有些具体的点可能没涉及到。后面会持续更新,希望对大家有所帮助!

五、运输层

5.1 运输层协议概述

网络层为主机之间的通信提供服务

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

5.2 UDP 用户数据报协议

  • 无连接:UDP是无连接的协议,不需要建立连接即可发送数据包。
  • 不保证可靠性:UDP不保证数据包的交付顺序和完整性,没有重传机制和确认机制。
  • 低延迟:由于没有连接建立和维护的开销,UDP传输延迟较低,适合实时性要求高的应用。
  • 轻量级:UDP的头部开销小,仅包含基本的源端口、目的端口、长度和校验和字段。

5.3 TCP 传输控制协议概述

  • 连接导向:TCP是面向连接的协议,在发送数据之前需要建立一个连接(三次握手)。
  • 可靠传输:TCP提供可靠的数据传输,通过确认(ACK)、重传机制和序列号确保数据包按顺序且无误地到达接收方。
  • 流量控制:TCP使用滑动窗口机制来控制发送方的数据发送速率,以防止接收方被数据淹没。
  • 拥塞控制:TCP具有拥塞控制机制,如慢启动、拥塞避免、快速重传和快速恢复,以应对网络拥塞。
  • 双向通信:TCP支持全双工通信,即数据可以在同一连接中同时进行发送和接收。

5.4 可靠传输的工作原理

(1)首先,采用三次握手来建立TCP连接,四次挥手来释放TCP连接,从而保证建立的传输信道是可靠的。

(2)其次,相比停止等待协议,换成流水线传输。TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。(回退N帧协议Plus版?)

(3)最后,TCP使用慢开始、拥塞避免、快重传和快恢复来进行拥塞控制,避免网络拥塞。

5.5 TCP报文段的首部格式

端口号:0-65535 ( 2 16 2^{16} 216次方,所以要16位)

在这里插入图片描述

5.6 TCP可靠传输的实现(重点)

以字节为单位的滑动窗口

已发送并确认 P1 已发送未确认 P2 允许发送但尚未发送 P3 不允许发送

P3 - P1 = 发送窗口大小

P3 - P2 = 可用窗口(有效窗口)

超时重传时间的选择

RTTS

采用自适应算法,在记录报文段的往返时间RTT的基础上,保留加权平均往返时间RTTs(平滑的往返时间)

新 R T T s = ( 1 − α ) × ( 旧 R T T s ) + α × ( 新 R T T ) 新RTTs = (1-\alpha) \times (旧RTTs) + \alpha \times (新RTT) RTTs=(1α)×(RTTs)+α×(RTT)

α \alpha α 接近于0, 变化不大,RTT更新慢; 接近1,变化接近于新RTT,更新快

超时重传时间RTO

略 > RTTs

R T O = R T T s + 4 × R T T D RTO = RTTs + 4 \times RTT_D RTO=RTTs+4×RTTD RTTD是RTT的偏差的加权平均值

如何判定此确认报文段是对原来的报文段1的确认, 还是对重传的报文段2的确认?

Karn 算法

在计算平均往返时间RTT时,只要报文段重传了, 就不采用其往返时间样本。

这样得出的加权平均平均往返时间 RTTs 和超时重传时间 RTO 就较准确。 但是,这又引起新的问题。当报文段的时延突然增大了很多时,在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据 Karn算法,不考虑重传的报文段的往返时间样本。这样, 超时重传时间就无法更新。

报文段每重传一次,就把 RTO增大一些:

新 R T O = γ × 旧 R T O 新RTO = \gamma \times 旧RTO RTO=γ×RTO

系数γ的典型值是2 。 当不再发生报文段的重传时,才根据报文段的往返时延更新平均往返时延 RTTs 和超时重传时间 RTO 的数值。

选择确认SACK

SACK允许接收方在单个确认中指示已成功接收的非连续数据段,而不仅仅是下一个期望的序列号。

SACK选项包含一个或多个SACK块,每个SACK块指定了一个已成功接收的非连续数据段的起始和结束序列号。格式如下:

KindLengthLeftRight
51810002000
30004000
  • Kind:1字节,表示SACK选项的类型,值为5。

  • Length:1字节,表示SACK选项的总长度,包括Kind和Length字段。

    这里为18字节 = 2个SACK块占用 2*8 = 16 字节 + 2字节的Kind和Length字段。

  • Left Edge:4字节,表示一个SACK块的起始序列号。

  • Right Edge:4字节,表示一个SACK块的结束序列号。

5.7 TCP的流量控制

点到点之间的问题

让发送方慢点,使接收方来得及接收

  1. 利用滑动窗口实现流量控制
  2. 考虑传输效率(最大报文段长度MSS,只要达到MSS就发送报文)

5.8 TCP的拥塞控制

全局性的问题

  1. 慢开始:由小到大逐渐增大拥塞窗口数值(指数增长,得寸进尺)

  2. 拥塞避免:拥塞窗口cwnd按线性规律缓慢增长

在这里插入图片描述

其中,如果检测到拥塞,则减到1,同时更新ssthresh值 = 拥塞窗口的一半
一个cwnd = 一个报文段 = 一个最大报文段长度MSS
一个传输轮次就是一批数据,比如当前传输轮次的cwnd=8,说明该轮次能发送8个报文段(类似窗口大小)

  1. 快重传:接收方每收到一个失序报文段后立即发出重复确认(当前累计最大ack),连续收到三个重复确认时,立即重传(不用等超时再来重传,提高速度)

  2. 快恢复:当发送方连续收到三个重复确认时,把慢开始门限减半,预防网络拥塞。然后把cwnd值设为慢开始门限减半后的值,然后执行拥塞避免算法。

在这里插入图片描述

5.9 TCP的运输连接管理

就是三次握手 + 四次挥手(网上一堆讲解,所以我没整理哈)

下面是TCP有限状态机图:

在这里插入图片描述


http://www.ppmy.cn/server/55885.html

相关文章

分子AI预测赛Task1笔记

实践步骤:跑通baseline → 尝试个人idea→尝试进阶baseline 一、跑通baseline 根据官方操作文档:https://datawhaler.feishu.cn/wiki/Ue7swBbiJiBhsdk5SupcqfL7nLX#VAwHduw0woxtZIxuCRnchAZ5nef运行结果如下 # python环境官方自带# 下载需求库 # pip i…

Flask框架下图像的base64编码接收和解码流程

一、Flask简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或We…

深入刨析Redis存储技术设计艺术(二)

三、Redis主存储 3.1、存储相关结构体 redisServer:服务器 server.h struct redisServer { /* General */ pid_t pid; /* Main process pid. */ pthread_t main_thread_id; /* Main thread id */ char *configfile; /* Absolut…

SwinTransformer的相对位置索引的原理以及源码分析

文章目录 1. 理论分析2. 完整代码 引用:参考博客链接 1. 理论分析 根据论文中提供的公式可知是在 Q Q Q和 K K K进行匹配并除以 d \sqrt d d ​ 后加上了相对位置偏执 B B B。 A t t e n t i o n ( Q , K , V ) S o f t m a x ( Q K T d B ) V \begin{aligned} &…

TQ15EG开发板教程:MPSOC创建fmcomms8工程

链接:https://pan.baidu.com/s/1jbuYs9alP2SaqnV5fpNgyg 提取码:r00c 本例程需要实现在hdl加no-OS系统中,通过修改fmcomms8/zcu102项目,实现在MPSOC两个fmc口上运行fmcomms8项目。 目录 1 下载文件与切换版本 2 编译fmcomms8项…

软考中级数据库系统工程师备考经验分享

前几天软考成绩出了,赶紧查询了一下发现自己顺利通过啦(上午63,下午67,开心),因此本文记录一下我的备考经验分享给大家。因为工作中项目管理类的知识没有系统学习过,本来想直接报名软考高级证书…

python读取写入txt文本文件

读取 txt 文件 def read_txt_file(file_path):"""读取文本文件的内容:param file_path: 文本文件的路径:return: 文件内容"""try:with open(file_path, r, encodingutf-8) as file:content file.read()return contentexcept FileNotFoundError…

机器学习原理之 -- XGboost原理详解

XGBoost(eXtreme Gradient Boosting)是近年来在数据科学和机器学习领域中广受欢迎的集成学习算法。它在多个数据科学竞赛中表现出色,被广泛应用于各种机器学习任务。本文将详细介绍XGBoost的由来、基本原理、算法细节、优缺点及应用场景。 X…