【计算机网络】运输层

概述运输层服务

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

  • 运输层和网络层的关系:
    网络层提供主机之间的逻辑通信,而运输层为**运行在不同主机上的应用程序(进程)**提供逻辑通信。
    运输层协议只工作在端系统中!
  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.mfbz.cn/a/116147.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

做读书笔记时的一个高效小技巧

你好,我是 EarlGrey,一名双语学习者,会一点编程,目前已翻译出版《Python 无师自通》、《Python 并行编程手册》等书籍。 在这里,我会持续和大家分享好书、好工具和高效生活、工作技巧,欢迎大家一起提升认知…

【CesiumJS】(1)Hello world

介绍 Cesium 起源于2011年,初衷是航空软件公司(Analytical Graphics, Inc.)的一个团队要制作世界上最准确、性能最高且具有时间动态性的虚拟地球。取名"Cesium"是因为元素铯Cesium让原子钟非常准确(1967年,人们依据铯原子的振动而对…

Android Studio打包AAR

注意 依赖的Android Studio版本为4.2.2 更高的Android Studio版本使用方法可能有所不同,gradle的版本和gradle plugins的版本都会影响使用方式。 基于此,本文只能作为参考,而不能作为唯一答案,如果要完全依赖本文,则…

GPT与人类共生:解析AI助手的兴起

随着GPT模型的崭新应用,如百度的​1​和CSDN的​2​,以及AI助手的普及,人们开始讨论AI对就业市场和互联网公司的潜在影响。本文将探讨GPT和AI助手的共生关系,以及我们如何使用它们,以及使用的平台和动机。 GPT和AI助手…

Linux | 如何保持 SSH 会话处于活动状态

在远程服务器管理和安全数据传输中,SSH(Secure Shell)是不可或缺的工具。然而,它的便利性和安全性有时会因常见的问题而受到损害:冻结 SSH 会话。 此外,session 的突然中断可能会导致工作丢失、项目延迟和无…

LIME低亮度图像增强

LIME低亮度图像增强 main.cpp #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> #include <opencv2/imgproc/imgproc.hpp> #include "lime.h"int main() {cv::Mat img_in cv::imread("…

使用Postman工具做接口测试 —— 环境变量与请求参数格式!

引言 在上一篇笔记我们主要介绍了接口测试的基础知识与基本功能&#xff0c;本章主要介绍如何使用postman做接口测试。 配置环境变量和全局变量 环境变量和全局变量 环境管理中还可以点击“Global”添加全局变量&#xff0c;环境变量只有当选择了该环境时才生效&#xff0c;…

电脑出现emp.dll文件缺失的错误提示怎么办,教你一键解决dll丢失问题

今天&#xff0c;我想和大家分享一下关于emp.dll文件丢失的4个解决方法&#xff0c;希望能对大家有所帮助。 首先&#xff0c;我们要明确emp.dll文件的作用。emp.dll是一个动态链接库文件&#xff0c;这个文件对于许多程序的正常运行至关重要&#xff0c;一旦丢失&#xff0c;…

pytorch笔记 GRUCELL

1 介绍 GRU的一个单元 2 基本使用方法 torch.nn.GRUCell(input_size, hidden_size, biasTrue, deviceNone, dtypeNone) 输入&#xff1a;&#xff08;batch&#xff0c;input_size&#xff09; 输出和隐藏层&#xff1a;&#xff08;batch&#xff0c;hidden_size&#xf…

正点原子嵌入式linux驱动开发——Linux 块设备驱动

经过之前这些笔记的学习&#xff0c;都是字符设备驱动&#xff0c;本章来学习一下块设备驱动框架&#xff0c;块设备驱动是Linux三大驱动类型之一。块设备驱动要远比字符设备驱动复杂得多&#xff0c;不同类型的存储设备又对应不同的驱动子系统&#xff0c;本章重点学习一下块设…

CSP-31补题日记--梯度求解

202309-3-梯度求解 题目链接 http://118.190.20.162/view.page?gpidT173 最近刚刚在上数据结构二叉树 跟这道题真的是强相关 然后在就是涉及到了数学求导 这基本上是我复学两个月做的最久的题了 感觉做完这道题对栈和二叉树理解比以前清晰了很多 不摆了 上代码 ** 题目思路&am…

STM32HAL-完全解耦面向对象思维的架构-时间轮片法使用(timeslice)

目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、代码解释 六、总结 概述 timeslice是一个时间片轮询框架&#xff0c;完全解耦的时间片轮询框架&#xff0c;非常适合裸机单片机引用。接下来将该框架移植到stm32单片机运行&#xff0c;单片机…

Git命令大全

Git命令大全 1、初始化本地仓库 git init <directory><>意思是可选的&#xff0c;如果不指定&#xff0c;将使用当前目录。 2.克隆一个远程仓库 git clone <url>3.添加文件到暂存区 git add <file>要添加当前目录中的所有文件&#xff0c;请使用.…

Http代理与socks5代理有何区别?如何选择?(一)

了解SOCKS和HTTP代理之间的区别对于优化您的在线活动至关重要&#xff0c;无论您是技术娴熟的个人、现代互联网用户还是企业所有者。在使用代理IP时&#xff0c;您需要先了解这两种协议之间的不同。 一、了解HTTP代理 HTTP&#xff08;超文本传输协议&#xff09;代理专门设计…

C语言_动态内存管理

文章目录 一.为什么存在动态内存分配二.动态内存函数的介绍2.1 malloc 和 free2.2 calloc原型如下 2.3 realloc函数模型如下 三.常见的动态内存错误3.1 对NULL的解引用操作3.2对动态开辟空间的越界访问3.3非动态开辟内存使用free释放3.4使用free释放一块动态开辟内存的一部分3.…

数据结构(超详细讲解!!)第二十节 数组

1.定义 1.概念 相同类型的数据元素的集合。 记作&#xff1a;A(A0,A1,…,Am-1) 二维数组可看作是每个数据元素都是相同类型的一维数组的一维数组。多维数组依此类推。 二维数组是数据元素为线性表的线性表。 A(A0&#xff0c;A1&#xff0c;……&#xff0c;An-1) 其中…

JAVA 实现PDF转图片(spire.pdf.free版)

1.引入jar包 导入方法1&#xff1a; 手动引入。将Free Spire.PDF for Java下载到本地&#xff0c;解压&#xff0c;找到lib文件夹下的Spire.PDF.jar文件。在IDEA中打开如下界面&#xff0c;将本地路径中的jar文件引入Java程序&#xff1a; 导入方法2&#xff1a;如果您想通过…

uinapp微信小程序隐私政策授权

&#x1f680; 隐私弹窗效果图&#xff1a; 1、启用隐私相关功能在manifest.json文件中配置 usePrivacyCheck: true "mp-weixin" : {"__usePrivacyCheck__" : true, },2、创建组件 <template><view><!-- 隐私政策弹窗 --><uni-popu…

高德地图撒点组件

一、引入amap地图库 - public/index.html <script type"text/javascript">window._AMapSecurityConfig {securityJsCode: 地图密钥 }</script><scripttype"text/javascript"src"https://webapi.amap.com/maps?v1.4.8&key111111…

回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现MPA-BP海洋捕食者算法优化BP神经网络多变量回归预测&…