计算机网络开荒3-传输层

news2024/11/15 15:36:09

文章目录

  • 一、传输层概述
    • 1.1 网络层 vs 传输层
  • 二、多路复用 多路分用
  • 三、UDP
    • 3.1 RDT
      • 3.1.1 Rdt
      • 3.1.1.1 Rdt1.0
      • 3.1.1.2 Rdt2.0
      • 3.1.1.3 Rdt2.1
      • 3.1.1.4 Rdt2.2
      • 3.11.5 Rdt 3.0
  • 四、滑动窗口协议
    • 4.1 流水线机制
      • 4.1.2 滑动窗口协议
        • GBN
        • SR
  • 五、TCP
    • 5.1 可靠数据传输
      • 5.1.1 RTT和超时
    • 5.2 流量控制
    • 5.3 连接管理
      • 5.3.1 三次握手建立连接
      • 5.3.2 四次握手释放连接
  • 六、拥塞控制
    • 6.1 TCP拥塞控制
      • 6.1.1 加性增--乘性减 AIMD
      • 6.1.2 TCP慢启动SS

一、传输层概述

  • 为运行在不同host上的进程了一种逻辑通信机制

  • 端系统运行传输层协议

    • 发送方:将应用递交消息分成n个Segment,向下传给网络层
    • 接收方:将segment 组成消息 传给 应用层
  • TCP

  • UDP

1.1 网络层 vs 传输层

网络层 :提供了主机之间的通信机制 HTTP
传输层 :应用进程之间的通信机制 ,由Socket控制 给 不同的进程

二、多路复用 多路分用

多路分用:传输层依据头部信息讲收到的Segment交给正确的Socket,即不同的进程

多路复用:从多个Socket接受数据,为每块数据封装上头部信息,生成Segment,交给网络层

在这里插入图片描述

Socket标识 = IP + Port

DUP用 二元组 来标识(目的IP + 目的Port)

在这里插入图片描述
SP:源port DP:目的port

TCP 用四元组来标识:(源IP 源port 目的IP 目的port)

在这里插入图片描述
可以多线程优化一下:

在这里插入图片描述

三、UDP

User Datagram Protocol

基于IP,添加了 复用/分用、简单的错误检测

丢失
非按序到达

不需要握手
每个UDP段独立于其他段

在这里插入图片描述

3.1 RDT

可靠的数据传输RTP:不错、不丢、不乱
在这里插入图片描述
控制信息时双向流动的
利用状态机FSM 刻画传输协议

3.1.1 Rdt

在计算机网络中,RDT是可靠数据传输(Reliable Data Transfer)的缩写,其作用是保证数据在传输过程中不会出错或丢失。RDT协议可以分为多个版本,其中比较常见的有Rdt1.0、Rdt2.0、Rdt2.1和Rdt3.0。

Rdt1.0是非常简单的RDT协议,它只能在无差错信道上工作(理论上存在),不能保证在出现错误时的可靠传输。

Rdt2.0是对Rdt1.0的改进,它通过校验和技术检测数据报文是否有误,并在发现错误时使用ACK和NAK进行重传,以实现可靠传输。

Rdt2.1在Rdt2.0的基础上增加了超时重传机制,当发送方在一定时间内没有收到确认消息时,将对数据进行重传,从而提高了传输的可靠性。

Rdt3.0是对Rdt2.1的改进,主要针对网络中可能出现的乱序、重复和丢失等问题进行优化,使用了序号和确认号来保证数据的正确性和可靠性。

总之,随着RDT协议版本的不断升级,计算机网络中的可靠数据传输逐渐变得更加健壮和可靠,可以满足更加复杂的传输需求。

3.1.1.1 Rdt1.0

可靠信道上的可靠数据传输

底层信号完全可靠:

  • 不会发生错误
  • 不会丢失分组
    发送方和接收方FSM独立

在这里插入图片描述

3.1.1.2 Rdt2.0

  • 不可靠信道,底层信道可能翻转分组中的位bit
    • 利用校验和检测
  • 恢复正确数据
    • ACK(Acknowledgements)确认机制:接受方 告诉 发送方是否正确接受
    • NAK:接收方 告诉 发送方 分组有错
    • 发送方收到NAK后,重传

基于这种ACK NAK机制的称为ARQ(Automatic Repeat reQuest)协议

3.1.1.3 Rdt2.1

Rdt2.0 如果ACK NAK消息发送错误,那么无法重传
增加序列号Sequence number
在Rdt2.0的基础上 加入了 超时重传

3.1.1.4 Rdt2.2

去掉了NAK
错误后,接收方 重复发送ACK
接收方 接收到 重复的ACK 那么人为NAK

3.11.5 Rdt 3.0

校验和 + 序列号 + Ack + 重传
会导致 中途丢失 ,双方都在等待

需要定时器

在这里插入图片描述

在这里插入图片描述

四、滑动窗口协议

Rdt3.0 性能影响太大

4.1 流水线机制

同时发送 检测 三个分组
在这里插入图片描述
于是 性能就是dbt3 的3倍

  • 需要更大的序列号范围
  • 发送方、接收方需要更大的缓存

4.1.2 滑动窗口协议

想要实现流水线机制 就需要 滑动窗口协议

在这里插入图片描述

GBN

Go Back N
在这里插入图片描述
资源浪费:多发未收到的ACK所有分组
乱序也会丢弃

SR

Selective Report 协议

GBN: 重传太多 资源浪费

SR:单个确认,可以接受乱序到达

原理:接收方也+窗口

五、TCP

  • 点对点
  • 可靠的 按序的字节流
  • 流水线机制
  • 发送方、接受方都有缓存
  • 全双工full duplex
    • 双向的数据流传输
  • 面向连接
    • 发送数据前必须建立连接
    • 连接状态只在连接的两端中维护,在沿途节点不维护
    • TCP连接:主机上的缓存、连接状态、socket等
  • 流量控制机制
    在这里插入图片描述

在这里插入图片描述

5.1 可靠数据传输

5.1.1 RTT和超时

TCP 是 超时重传的,为了确定这个超时的限制
就需要对RTT进行测量

在这里插入图片描述
在这里插入图片描述
sender若收到对同一个数据的3个ACK,那么就假定这个数据丢失,进行重传了

5.2 流量控制

接收方会有buffer,提供给上层
速度太快,buffer就会满了
所以需要流量控制

在这里插入图片描述
通过RevWindow 告诉发送方 buffer还剩多少

5.3 连接管理

5.3.1 三次握手建立连接

需要提前建立连接 三次握手🤝 建立连接

  1. Sever创建传输控制块TCB,Server就进入了Listen监听状态
  2. Client也创建TCB,发送链接请求
    • 发送 SYN = 1给服务器
    • 初试设定的 seq=x 序列号
    • Client进入SYN-Sent(同步发送状态)
    • TCP规定:SYN不能携带数据,但需要消耗一个序列号
  3. Server 收到后若同意连接,则发送确认报文
    • ACK = 1,SYN = 1,ack = x + 1
    • 为自己初始化一个序列号seq=y
    • Server进入SYN-RCVD(同步收到)装填
    • TCP规定,这个报文也不能携带数据,消耗一个序号
  4. Client收到确认后,还需要再向Server给出确认
    • ACK = 1; ack = y + 1;seq = x + 1
    • Client 进入 ESTABLISHED 已经连接状态
    • TCP规定,ACK报文段可以携带data,不携带data就不消耗seq
  5. Server收到Client确认后也进入ESTABLiSHED状态,双方开始通信

在这里插入图片描述

5.3.2 四次握手释放连接

  1. Client发送连接释放报文
    • FIN = 1,seq = u(前面最后一个+1)
    • Client进入FIN-WAIT-1终止等待状态
    • TCP规定:FIN 即使不携带数据,也要消耗一个seq
  2. Server收到FIN请求,发出确认报文
    • ACK =1 ;ack = u+1;seq=v
    • Server进入CLOSE-WAIT关闭等待状态
  3. Client收到确认信息后,
    • Client进入FIN-WAIT2终止等待2状态
    • 等待Server发送最后连接释放报文
  4. Server将最后的data都发送完了后,就会发送连接释放报文
    • FIN = 1;ack = u+1
    • 半关闭状态,Server很可能又发送一些数据,假定此时seq=w
    • Server 进入Last-ACK最后确认状态,等待客户端确认
  5. Client收到连接释放,发出确认
    • ACK = 1;ack = w+1;seq = u+ 1
    • Client进入TimeWAIT 时间等待状态
    • 此时TCP还没释放,必须等2*MSL(最长报文段寿命)的时间后,客户端撤销响应的TCB后,才进入CLOSE状态
  6. Server 收到 确认释放连接后,立即Close
    • 撤销TCB ,TCP连接结束
      在这里插入图片描述

六、拥塞控制

拥塞Congestion:太多Client发送了太多data,网络无法处理
表现:
1.分组丢失(路由器缓存溢出)
2.分组延迟过大(路由器缓存中排队)

端到端拥塞控制

  • 网络层不需要显式提供支持
  • 端系统通过观察loss,delay等网络行为来判断是否发生拥塞
  • TCP就这种

网络辅助的拥塞控制

  • 路由器发送方显示的反馈网络拥塞信息
  • 简单的拥塞指示1bit:SNA、DECbit、TCP/IP ECN ATM

6.1 TCP拥塞控制

Sender限制发送速率
在这里插入图片描述

CongWin:发送窗口

  • 动态调整改变发送速率
  • 感知网络拥塞

6.1.1 加性增–乘性减 AIMD

原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss

在这里插入图片描述

6.1.2 TCP慢启动SS

当连接开始时,指数性增长
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中如何进行图表绘制

Vue中如何进行图表绘制 数据可视化是Web应用中非常重要的一部分,其中图表绘制是其中的重要环节。Vue作为一款流行的前端框架,提供了很多优秀的图表库,以满足不同业务场景下的需求。本文将介绍如何在Vue中进行图表绘制,包括使用Vu…

MM32F3273G8P火龙果开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置

MM32F3273G8P火龙果开发板MindSDK开发教程4 - 滴嗒定时器Systick的配置 1、Systick寄存器 Systick是ARM内核的一个外设,所以在不同芯片的代码上移植比较方便,他总共有4个寄存器, 从Systick定义中可以看到: typedef struct {__I…

一文看懂Java中的锁

阅读本文你可以获得 Synchronized、ReentrantLock、ReentrantReadWriteLock、StampedLock、Condition、Semaphore、CountDownLatch、CyclicBarrier、JMM、Volatile、Happens-Before。 全文共16000字左右(包含示例代码)、欢迎收藏、在看、转发分批食用 一…

基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【MySQL 数据库】11、学习 MySQL 中的【锁】

目录 一、锁的概述与分类二、全局锁(全库数据备份)三、表级锁(1) 表锁(2) 元数据锁(Meta Data Lock)(3) 意向锁 四、行级锁(1) 行锁(2) 间隙锁&临键锁 一、锁的概述与分类 锁是计算机协调多个进程或线程并发访问某一资源的机…

Whistle(基于 Node 实现的跨平台抓包调试工具)的使用

Whistle(基于 Node 实现的跨平台抓包调试工具)的使用 基于Node实现的跨平台抓包调试工具 可以劫持网络请求,并进行请求和响应的修改,来提高我们的开发调试效率 1.一键安装(装包/证书) npm i -g whistle && w2 start --init 证书的问题 安装…

[论文阅读] (31)李沐老师视频学习——4.研究的艺术·理由、论据和担保

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

5.2 清洗数据

5.2 清洗数据 5.2.1 检测与处理重复值1、记录重复 drop_duplicates()2、特征重复 equals() 5.2.2 检测与处理缺失值 isnull()、notnull()1、 删除法 dropna()2、替换法 fillna()3、 插值法 5.2.3 检测与处理异常值1、3σ原则2、箱线图 5.2.4 任务实现(wei&#xff0…

学习HCIP的day.12

目录 MPLS:多协议标签交换 一、协议的解释和意义 二、工作过程 1、控制层面: 2、数据层面: 三、标签号 四、MPLS的次末跳 五、MPLS的配置 六、使用mpls解决BGP的路由黑洞 七、MPLS VPN 八、配置: 1、ISP部分 MPLS&am…

python+pyqt制作的可最小化到托盘的桌面图形应用代码实例

本篇文章主要讲解使用python、pyqt制作的可以最小化到托盘的桌面图形应用实例。 日期:2023年6月11日 作者:任聪聪 效果演示 说明:实现桌面应用显示窗口,关闭窗口缩小到托盘,点击托盘显示窗口,邮件图标显示退出按钮,点击退出按钮即可关闭应用。 动态演示: 实际情况:…

postgresql 服务的启动操作,不再是DBA的专属

专栏内容:postgresql个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 服务架构概述 服务启动流程 前提 流程 集群创建 集群介绍 数据库服务配置 数据…

202317读书笔记|《心寂犹似远山火:斋藤茂吉短歌300》——茫茫心海里,孤帆与谁同

202317读书笔记|《心寂犹似远山火:斋藤茂吉短歌300》——茫茫心海里,孤帆与谁同 很高兴周五这一天,之前很粉俳句的时候订阅的书都在今天都上架了,可以一饱眼福了。短歌是日本和歌一种诗体,是由三十一音节组…

YOLOv5/v7 添加注意力机制,30多种模块分析③,GCN模块,DAN模块

目录 一、注意力机制介绍1、什么是注意力机制?2、注意力机制的分类3、注意力机制的核心 二、GCN 模块1、GCN 模块的原理2、实验结果3、应用示例 三、DAN模块1、DAN模块的原理2、实验结果3、应用示例 大家好,我是哪吒。 🏆本文收录于&#xf…

扫雷——C语言实现

扫雷 文章目录 扫雷实现代码什么是扫雷基本功能实现显示选择菜单定义几个二维数组?确定数组大小初始化数组布置地雷打印展示数组排查地雷记录指定区域周围地雷的个数判断排雷成功排查地雷实现代码 基本功能的实现代码和效果展示 拓展功能简化游戏界面改变字体颜色实…

[创业之路-73] :如何判断一个公司或团队是熵减:凝聚力强、上下一心,还是,熵增:一盘散沙、乌合之众?

目录 前言: 一盘散沙、乌合之众: 凝聚力强、上下一心: 一、股权结构与利益分配 一盘散沙、乌合之众 凝聚力强、上下一心 二、组织架构与岗位职责 一盘散沙、乌合之众 凝聚力强、上下一心 三、战略目标 一盘散沙、乌合之众 凝聚力…

碳排放预测模型 | Python实现基于MLP多层感知机的碳排放预测模型(预测未来发展趋势)

文章目录 效果一览文章概述研究内容环境准备源码设计学习总结参考资料效果一览 ![1](https://img-blog.csdnimg.cn/34c113bde2 文章概述 碳排放预测模型 | Python实现基于MLP多层感知机的碳排放预测模型(预测未来发展趋势) 研究内容 这是数据集的链接:https://github.com/…

【伏羲八卦图】(PythonMatlab实现)

目录 1 与达尔文对话 2 与老子对话 2.1 Python实现 2.2 Matlab实现 1 与达尔文对话 140年前,1858年7月1日,达尔文在英伦岛发表了自己有关自然选择的杰出论文。他提出,生物的发展规律是物竞天择。经过物竞,自然界选择并存留最具…

【CAD】【动态块】CAD设置动态块

文章目录 1 CAD的动态块及应用2 块的相关概念2.1 块的相关命令2.1.1 创建块BLOCK2.1.2 插入块INSERT2.1.3 编辑块BEDIT2.1.4 重命名块RENAME 2.2 CAD组(group)和块(block)的区别2.3 “块”(block)和“写块”…

CMake学习(6): 打印日志信息及宏定义

1. message 打印日志 介绍CMake中的调试打印命令Message, 可以为用户显示一条消息,并在终端上打印显示。假如,我们通过File命令对文件进行了搜索,但是不能确定搜索到的文件就是我们需要的文件。此时,可以利用message将搜索到的变…

PS 套索选区工具(2) 多边形套索工具 磁性套索工具使用技巧

上文PS 套索选区工具(1) 套索工具基础使用带大家了解了套索工具的基本操作 这边 我们右键套索工具 它还有个 多边形套索工具 多边形套索工具是用来画直线的 我们选中它 然后 我们鼠标点击一下 然后 移动到指定位置 从你点的位置开始 到结束的地方 就会形成一个直线的选区 点…