【计算机网络】运输层

概述运输层服务

运输层协议为运行在不同主机上的应用程序提供了逻辑通信功能。
运输层协议是在端系统中而不是在路由器中实现的。

  • 运输层和网络层的关系:
    网络层提供主机之间的逻辑通信,而运输层为**运行在不同主机上的应用程序(进程)**提供逻辑通信。
    运输层协议只工作在端系统中!
  1. 因特网运输层概述:
    因特网为应用层提供了两种截然不同的运输层协议:UDP和TCP
  • UDP(用户数据报协议:
    提供不可靠,无连接的服务。
  • TCP(传输控制协议):
    提供可靠,面向连接的服务。
  • 多路复用和多路分解:
    简单来说,将由网络层提供的主机到主机交付服务延伸到为运行在主机上的应用程序提供进程到进程的交付服务就是运输层的多路复用和多路分解。
    将运输层报文段中的数据交付到正确的套接字的工作称为多路分解
    从源主机中接收来自不同进程的数据块,并将报文段传递到网络层,所有这些工作被称为多路复用

无连接运输:UDP

  • DUP报文结构:
    UDP报文结构

  • DUP检验和:
    UDP检验和提供了差错检测功能,发送方的UDP对报文段zh给的所有16比特子的和进行反码运算,求和是遇到的任何溢出都被回卷。
    虽然UDP提供了差错检测,但它对差错回复无能为力!

可靠数据传输原理:

  • rdt1.0:
    rdt1只考虑最简单的情况,即认为底层信道是完全可靠的,发送方发送,接收方接收就完事了
  • rdt2.0:
    底层信道更为实际的模型是分组中的比特可能受损。rdt2.0使用了肯定确认(ACK)和否定确认(NAK),使用了这种机制之后,发送方能够得知那些报文被正确接收,那些没有被正确接收,因此需要重传,基于这样的可可奥数据传输协议称为自动重传请求协议(ARQ)。
    注意在rdt2.0中,当发送方处于等待接收方的ACK或者NAK确认报文的时候,不能从上层获得更多的数据,由于这种行为,rdt2.0被称为停等协议。
  • rdt3.0:
    rdt3.0对报文段上附加了序号,并且在发送方发送数据时,启动了一个定时器,如果定时器超时,则将重传该报文,注意这里由于使用了序号,所以发送方知道它因该发送那个报文段,这就解决了冗余数据分组的问题。由于rdt3.0的序号是0和1交替的,因此rdt3.0有时被称为比特交替协议。
  • 流水线可靠数据传输协议:
    这种协议呢,实际上就是在发送方的排队序列中,可以一次性发送不止一个分组(但这个分组是固定的),当接收到该分段所有的确认报文后,窗口向后移动,发送未发送的分组。
  • 回退N步(GBN)协议:
    回退N步协议也常被称为滑动窗口协议
    就是说,在一个窗口内,接收方必须按序接收分组,如果说,本来应该接收n分组,但是n+1分组到达,接收方则丢弃n+1分组(实际上可能缓存),在发送方回退,从n分组开始重新发送,这就是回退N步协议。
  • 选择重传:
    选择重传优化了回退N步协议,即接收方缺少哪个,发送方就发送哪个,那是怎么实现的呢?
    发送方在每个报文发送时都启动一个定时器,在接收方,按序应该接收n,但是收到了n+1,那么接收方就缓存这个分组,直到n分组在发送方的定时器到时,发送方重新发送n分组,接收方接收到n+1之前的所有分组之后,才向上传输。

面向连接的传输:TCP

MSS:最大报文段长度,注意到MSS是指在报文段里应用层数据的最大长度,而不是只包括首部的TCP报文段的最大长度。
MTU:最大链路层帧长度

  • TCP报文结构:
    TCP报文结构

    • 源端口号和目的端口号用于多路复用/多路分解
    • 序号和确认号:用于可靠传输
    • 首部长度(数据偏移):TCP首部长度,由于选项字段的原因,TCP首部长度可变
    • 选项
    • 标志字段:ACK用于指示确认,RST,SYN,FIN用于连接建立和拆除,PSH只是接收方应将数据交给上层,URG用来指示报文段里存在着被发送端的上层实体指示为“紧急”的数据。
  • 序号和确认号

  • 往返时间估计与超时:
    往返时间估计是实时的,并且与上一个时间相关联,但是当前的更能反应链路中的拥塞情况,所以当前的占更大的权重。

  • 可靠数据传输:
    超时时间加倍:就是说在传输过程中,发送端不是要等待接收端的确认报文嘛,如果说其中有个确认报文没有收到,这可能是因为链路中拥塞而导致的,如果说发送端很快的又发送了一个报文,那将会加重链路上的负担,所以,当没有收到确认报文的时候,发送端重新发送报文,并且将超时时间间隔设置为之前的双倍。

  • 流量控制:
    在TCP连接的两端,都会存在缓存,在接收端,接收到的报文首先存放到缓存中,应用程序按需从缓存中拿数据,而这个速度可快可慢,如果说应用程序从缓存中拿数据的速度很慢,而发送端发送数据的速度很快,那么导致接收端缓存溢出,导致丢弃报文。
    解决:在进行数据传输和发送确认报文的时候,接收端会告知发送端缓存情况,发送端根据这个缓存情况来发送报文。
    那么如果说,接收端的缓存满了,发送端收到这个消息,那么发送端就会停止发送,那何时开始继续发送?实际上,当接收端告知发送端缓存已满时,发送端还会发送一字节的报文,以用来确认缓存区清零,并且开始发送报文。

  • TCP连接管理:
    TCP三次握手

我们来看客户端想要和服务器建立TCP连接的情况:

  1. 首先,客户端发送一个SYS字段设置为1,并且随机序号(x)的SYS报文
  2. 服务器收到该报文后,为该连接分配内存,并且也设置一个序号,然后也设置SYS字段为1,的ACK报文,注意这里ACK序号为x+1,告诉客户端已经收到序号为x的数据
  3. 客户端发送一个确认报文,ACK字段为1,seq = y+1
    由于收到连接请求报文的时候,服务器会分配缓存,这就为攻击者提供了便利,攻击者发送很多请求连接报文,而服务器一直保持这种半连接状态,服务器上的内存总会被分配完的,那么如何有效的避免这种攻击呢?就是服务器生成一个SYS cookie,这个cookie由源地址IP和端口号生成。

TCP拥塞控制

首先,我们来讨论三个问题:

  1. 一个TCP如何限制它向其连接发送流量?
  2. TCP如何知道链路上发生了拥塞?
  3. 如果发生了拥塞,TCP如何降低发送速率?

我们来逐个解决这三个问题:

  1. TCP如何限制它向其连接发送流量?
    发送方的TCP拥塞控制机制追踪一个额外的变量:即拥塞窗口,还记得我们之前讲到过的窗口吗?在一个发送方中,未被确认的数据量不会超过cwnd和rwnd中的最小值,以此限制了发送量。
  2. TCP如何知道其链路上出现了拥塞?
    当出现拥塞的时候,在沿着这条路径上的一台(或多台)路由器的缓存就会溢出,引起一个数据报被丢弃,丢弃的数据报会引起发送方的丢包事件(要么超时要么收到三个冗余ACK,发送方就认为在发送方到接收方的路径上出现了拥塞指示。
  3. 如果发生了拥塞,TCP如何降低其发送速率?
    TCP使用下列指导性的原则回答这个问题:
    • 一个丢失的报文段表意味着拥塞
    • 一个确认报文段指示该网络正在向接收方交付发送方的报文段
    • 带宽检测
  • TCP拥塞控制算法:
    1. 慢启动
      当一条TCP开始连接时,cwnd的只通常初始置为一个MSS的较小值,在慢启动状态,cwnd的值以一个较小的MSS开始并且每当传输的报文段首次被确认,就增加一个MSS,那么慢启动状态何时停止?第一种情况就是:如果存在一个由超时指示的丢包事件(即拥塞),TCP发送方将cwnd设置为1并重新开始慢启动过程。它还将第二个状态变量ssthresh(“慢启动阈值”的速记)设置为cwnd/2,即当检测到拥塞时,将ssthresh置为拥塞窗口值的一半。第二种方式是直接与ssthresh的值相关联,即当cwnd==ssthresh时,慢启动过程结束并且TCP转移到拥塞避免模式。第三种结束慢启动的方式是,如果检测到3个冗余ACK这时TCPzhi’xing’yi’zh给快速重传并进入快速恢复状态。
    2. 拥塞避免
    3. 快速恢复

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「视频编码软件」Media Encoder(Me) 2024 Mac/win中文版下载安装

Adobe Media Encoder(Me) 2024是一款专业的视频编码工具,它可以将各种视频格式进行转换、压缩和编码,以满足不同媒体平台和设备的需求。 以下是 Media Encoder 2023 的主要功能和新增功能: 视频编码和转换:支持将各种视频格式进…

Pytorch网络模型训练

现有网络模型的使用与修改 vgg16_false torchvision.models.vgg16(pretrainedFalse) # 加载一个未预训练的模型 vgg16_true torchvision.models.vgg16(pretrainedTrue) # 把数据分为了1000个类别print(vgg16_true) 以下是vgg16预训练模型的输出 VGG((features): S…

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 带安装教程

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 分享软件,吃瓜视频,或其他资源内容,通过用户付费买会员来变现,用户需要付费,有些人喜欢白嫖,所以会流失一部分用户,所以就写了这个系统…

CSGO饰品价格暴跌的原因分析

CSGO饰品暴跌3个月,盘点6大原因 今天我们来聊一下CSGO饰品市场的情况。大部分装备从3月份开始就一直持续走低,到现在已经是7月份了,还有部分饰品呈阴跌趋势。整个市场沉寂一片,还有些悲观主义者天天在吆喝:市场崩盘了&…

【论文阅读笔记】GLM-130B: AN OPEN BILINGUAL PRE-TRAINEDMODEL

Glm-130b:开放式双语预训练模型 摘要 我们介绍了GLM-130B,一个具有1300亿个参数的双语(英语和汉语)预训练语言模型。这是一个至少与GPT-3(达芬奇)一样好的100b规模模型的开源尝试,并揭示了如何成功地对这种规模的模型进行预训练。在这一过程中&#xff0…

香港金融科技周2023:AIGC重塑金融形态

10月31日,由香港财经事务及库务局与投资推广署主办的“香港金融科技周2023大湾区专场”盛大启幕。中国AI决策领先企业萨摩耶云科技集团创始人、董事长兼 CEO林建明受邀参加圆桌会议,与中国内地、香港以及全球金融科技行业顶尖人才、创新企业、监管机构和…

【C++】特殊类设计

文章目录 一、设计一个类,不能被拷贝二、设计一个类,不能被继承三、设计一个类,只能在栈上创建对象四、设计一个类,只能在堆上创建对象五、设计一个类,只能创建一个对象(单例模式) 在某些特殊的场景下,我们…

“免单优选模式:引爆电商革命,颠覆传统购物体验!“

免单优选模式是一种新型的电商销售模式,其核心理念是通过降低商品售价、设置阶梯式奖励以及利用社交关系链,激发消费者购买欲望,实现销售快速增长。 1、合法合规,不存在多层级奖励。 在免单优选模式中,平台不设置多层…

深度学习_8_对Softmax回归的理解

回归问题,例如之前做房子价格预测的线性回归问题 而softmax回归是一个分类问题,即给定一个图片,从猫狗两种动物类别中选出最可靠的那种答案,这个是两类分类问题,因为狗和猫是两类 上述多个输出可以这样理解,假设一个图…

oracle查询数据库内全部的表名、列明、注释、数据类型、长度、精度等

Oracle查询数据库内全部的表名、列明、注释、数据类型、长度、精度 SELECT a.TABLE_NAME 表名, row_number() over(partition by a.TABLE_NAME order by a.COLUMN_NAME desc) 字段顺序,a.COLUMN_NAME 列名, b.COMMENTS 注释,a.DATA_TYPE 数据类型, a.DATA_LENGTH 长度,DATA_SC…

【后端开发】手写一个简单的线程池

半同步半异步线程池 半同步半异步线程池分为三层: 同步服务层 —— 处理来自上层的任务请求,将它们加入到排队层中等待处理。 同步排队层 —— 实际上是一个“同步队列”,允许多线程添加/取出任务,并保证线程安全。 异步服务层…

R语言657中单色colors颜色索引表---全平台可用

R语言657中单色colors颜色索引表—全平台可用

NLP之LSTM与BiLSTM

文章目录 代码展示代码解读双向LSTM介绍(BiLSTM) 代码展示 import pandas as pd import tensorflow as tf tf.random.set_seed(1) df pd.read_csv("../data/Clothing Reviews.csv") print(df.info())df[Review Text] df[Review Text].astyp…

【计算机网络实验/wireshark】tcp建立和释放

wireshark开始捕获后,浏览器打开xg.swjtu.edu.cn,网页传输完成后,关闭浏览器,然后停止报文捕获。 若捕获不到dns报文,先运行ipconfig/flushdns命令清空dns缓存 DNS报文 设置了筛选条件:dns 查询报文目的…

17、Flink 之Table API: Table API 支持的操作(1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

代码随想录训练营第60天 | 503.下一个更大元素II ● 42. 接雨水● 84.柱状图中的最大矩形

503.下一个更大元素II 题目链接:https://leetcode.com/problems/next-greater-element-ii/ 解法: 由于是循环数组,可以直接把两个数组拼接在一起,然后使用单调栈求下一个最大值。 写法上,可以巧妙一些&#xff0c…

【马蹄集】—— 百度之星 2023

百度之星 2023 目录 BD202301 公园⭐BD202302 蛋糕划分⭐⭐⭐BD202303 第五维度⭐⭐ BD202301 公园⭐ 难度:钻石    时间限制:1秒    占用内存:64M 题目描述 今天是六一节,小度去公园玩,公园一共 N N N 个景点&am…

快速灵敏的 Flink1

一、flink单机安装 1、解压 tar -zxvf ./flink-1.13.2-bin-scala_2.12.tgz -C /opt/soft/ 2、改名字 mv ./flink-1.13.2/ ./flink1132 3、profile配置 #FLINK export FLINK_HOME/opt/soft/flink1132 export PATH$FLINK_HOME/bin:$PATH 4、查看版本 flink --version 5、…

轻量封装WebGPU渲染系统示例<14>- 多线程模型载入(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/ModelLoadTest.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 细节请见:引擎系统设计思路 - 用户态与系统态隔离-CSDN博客 2. 高频调用与低频调用隔离。 …

C语言--判断一个年份是否是闰年(详解)

一.闰年的定义 闰年是指在公历(格里高利历)中,年份可以被4整除但不能被100整除的年份,或者可以被400整除的年份。简单来说,闰年是一个比平年多出一天的年份,即2月有29天。闰年的目的是校准公历与地球公转周…