计算机网络_运输层

5.1运输层概述

如何为运行在不同主机上的应用进程提供直接的通信服务使运输层的任务 ​ 它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道 ​ 因特网的运输层位应用层提供了两种不同的运输协议,即面向连接的TCP和无连接的UDP


5.2运输层端口号、复用与分用的概念

运行在计算机上的进程使用进程标识符PID来标志 ​ 因特网上不同操作系统又使用不同格式的进程标识符

TCP/IP体系的运输层使用端口号来区分应用层的不同应用进程
端口号使用16比特表示,取值范围0~65535

熟知端口号:0~1023,IANA把这些端口号派给了TCP/IP体系中最重要的一些应用协议 ​ 登记端口号:1024~49151,为没有熟知端口号的应用程序使用 ​ 短暂端口号:49152~65535,留给客户进程选择暂时使用

端口号只具有本地意义,不同计算机中的相同端口号使没有联系的

5.3UDP和TCP的对比

用户数据报协议UDP

无连接的UDP ​ UDP支持单播、多播以及广播 ​ UDP使面向应用报文 ​ 提供不可靠传输,不使用流量控制和拥塞控制 ​ 首部开销小,仅8字节

传输控制协议TCP

面向连接TCP ​ TCP仅支持单播 ​ 面向字节流 ​ 提供可靠传输 ​ 首部最少20字节,至多60字节


5.4TCP的流量控制

流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收 ​ 利用滑动窗口机制来实现TCP连接上对发送方的流量控制 ​ 当发送窗口被调控为0且接收方发送的ACK帧丢失了,发送方抑制等待接收方非零窗口的通知,接收方也一直等待发送方发送的数据,这种状态就称为死锁 ​ 发送方可启用持续计时器,当持续计时器超时发送零窗口探测报文,当接收到rwnd!=0时就可打破死锁局面


5.5TCP的拥塞控制

若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞 ​ 若出现拥塞而不进行控制,整个网络的吞吐量将随输入符负荷的增大而下降

拥塞控制算法
慢开始

cwnd呈指数增长 ​ 慢开始指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢 ​ 拥塞避免 ​ cwnd呈线性加1 ​ 当启动重传计时器超时判断网络很可能出现了拥塞 ​ 将ssthresh值更新为发生拥塞时swnd值的一半 ​ 将cwnd值减少为1,并重新开始执行慢开始算法

快重传

可以让发送方尽早知道发生了个别报文段的丢失 ​ 就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传 ​ 要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认 ​ 即使收到了失序的报文段也要立即发出对已收到的报文段的重复确认 ​ 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传

快恢复

就知道现在只是丢失了个别的报文段。于是不启动慢开始算法,而执行快恢复算法 ​ 发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半‘开始执行拥塞避免算法 ​ 也有的快恢复是把快恢复时的拥塞窗口cwnd值再增大一些,即等于新的ssthresh + 3 ​ 发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化 ​ 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少一些 ​ 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发送超时重传) ​ 发送方将拥塞窗口作为发送窗口swnd。即swnd = cwnd ​ 维护一个慢开始门限ssthresh状态变量 ​ 当cwnd < ssthresh时,使用慢开始算法 ​ 当cwnd > ssthresh时,停止使用慢开始算法而改用拥塞避免算法 ​ 当cwnd = ssthresh时,即可使用慢开始算法,也可使用拥塞避免算法


5.6TCP超时重传时间的选择

加权平均往返时间RTTs

$$
RTTs1 = RTT1\\\\ 新的RTTs = (1 -α) * 旧的RTTs + α * 新的RTTs样本\\\\ 0 <= α < 1\\\\ 已成为建议标准的RFC6298推荐的α值为0.125
$$

RTT偏差的加权平均RTTD

$$
RTTD_1 = RTT\frac{1}{2}\\\\ 新的RTTD = (1-β) × 旧的RTTD + β * |RTTs - 新的RTT样本 |\\\\ 0 <= β < 1\\\\ 已成为建议标准的RFC6298推荐的β值为0.25
$$

$$
RTO = RTTs +4 × RTTD
$$

出现超时重传时,新RTO=2倍的旧RTO

5.7TCP可靠传输的实现

TCP基于以字节为单位的滑动窗口来实现可靠传输
发送方的发送窗口并不总是和接收放的窗口一样大

网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的 ​ 发送方还可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸

对于不按序到达的数据应如何处理,TCP并无明确规定

TCP通常对不按序到达的数据先临时存放再接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程

TCP要求接收方必须有累计确认和捎带确认机制

接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传

TCP的通信是全双工通信

5.8TCP的运输连接管理

TCP的连接建立
TCP是面向连接的协议,它基于运输连接来传输TCP报文段
TCP运输连接有以下三个阶段

建立TCP连接 ​ 数据传送 ​ 释放TCP连接

TCP的连接建立要解决三个问题

使TCP双方能够确知对方的存在 ​ 使TCP双方能够协商一些参数(如最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等) ​ 使TCP双方能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配

TCP使用“三报文握手”建立连接
TCP客户端发送同步位SYN=1 序号字段seq = x

SYN=1的数据段不能携带数据

TCP服务器发送SYN=1和确认位ACK=1 序号字段seq = y 确认号字段ack = x +1
TCP客户端发送确认位ACK=1 序号字段seq = x +1 ack = y +1
普通的确认报文段如果不懈怠数据,则不消耗序号
TCP的连接释放
客户TCP向服务器TCP发送进程终止报文段,终止位FIN = 1 , ACK = 1 , seq = u(等于TCP客户进程之前已传送过的数据最后一个字节的序号+1),ack = v(等于TCP客户进程之前已收到过的数据最后一个字节的序号+1)
服务器TCP向客户TCP发送TCP普通确认,该报文段ACK = 1 , seq = v ,ack = u+1
这时服务器TCP还可以向TCP客户发送报文段
服务器TCP向客户TCP发送TCP连续释放,该报文段FIN = 1,ACK = 1 , seq = w ,ack = u+1
客户TCP向服务器TCP发送TCP普通确认,该报文段ACK = 1 , seq = u+1 ,ack = w+1
TCP客户端进入时间等待要等待2MSL后才进入关闭

MSL使最大报文段寿命,RFC793建议位2分钟

TCP服务器进程每收到TCP客户进程的数据, 就重新设置并启动保活计时器(2小时定时)
若保活计时器定时周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器就向TCP客户发送一个探测报文段,若一连10次探测报文段后TCP进程仍无响应,则关闭连接

5.9TCP报文段首部格式

为了实现可靠传输,TCP采用了面向字节流的方式

固定首部(20字节)
源端口(16字节)

用来标识发送该TCP报文段的应用进程

目的端口(16字节)

标识接收该TCP报文段的应用进程

序号(32比特)

指出本TCP报文段数据载荷的第一个字节的序号

确认号(32比特)

指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认

数据偏移(4比特,并以4字节为单位)

指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远,这个字段实际是指出了TCP报文段的首部长度

保留(6比特)保留今后使用,目前应置为0
ACK:取值位1时确认号字段才有效,0为无效
窗口(16比特,以字节为单位)

指出发送本报文段的一方的接收窗口

校验和(16比特)

检查范围包括TCP报文段的首部和数据载荷两部分

同步标志位SYN:在TCP连接建立时同步序号
终止标志位FIN:用来释放TCP连接
复位标志位RST:用来复位TCP连接,当RST=1时,表明TCP连接出现了异常,必须释放连接
推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付
进击标志位URG:取值为1时紧急指针字段有效,0为无效
紧急指针(16比特,以字节为单位)
扩展首部(最大40字节)
选项(长度可变)

最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度

填充

用来确保报文段首部能被4整除

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

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

相关文章

MTK平台-- 无线AP隔离功能

前言: 无线AP上大都有一个选项:启用该功能后,连接到同一AP的无线终端之间不能互相通信,但该功能并不限制无线终端和有线终端之间的通信。 Hostapd参数ap_isolate,用于控制AP隔离,但hostapd本身并不实现这一功能,只是将该参数通过nl80211传递给mac80211,由mac80211来实…

redis:安装部署、升级以及失败回退

安装部署 一、准备工作 1. 检查系统要求 确保你的服务器满足 Redis 的基本要求: 操作系统:支持的 Linux 发行版(如 Ubuntu, CentOS)内存:至少 4GB(根据实际应用需求调整)CPU:单核或多核 CPU磁盘空间:足够的磁盘空间用于数据存储和日志记录2. 更新系统软件包 在开始…

模型 断裂点理论(风险控制)

系列文章 分享模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。设置小损失&#xff0c;防止大风险。 1 断裂点理论的应用 1.1 电路系统中的保险丝应用 背景介绍&#xff1a; 在工程学中&#xff0c;电路系统是现代科技中不可或缺的一部分&#xff0c;广泛应用于各…

通义灵码在跨领域应用拓展之物联网篇

目录 一.引言 二.通义灵码简介 三.通义灵码在物联网领域的设备端应用 1.传感器数据采集 (1).不同类型传感器的数据读取 (2).数据转换与预处理 2.设备控制指令接收和执行 (1).指令解析与处理 (2).设备动作执行 四.通义灵码在物联网领域的云端平台应用 1.数据存储和管…

Win32汇编学习笔记09.SEH和反调试

Win32汇编学习笔记09.SEH和反调试-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net SEH - structed exception handler 结构化异常处理 跟筛选一样都是用来处理异常的,但不同的是 筛选器是整个进程最终处理异常的函数,但无法做到比较精细的去处理异常(例如处理…

详细数据库MySQL查询语句

查询语句 &#xff08;SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] FROM <表名或视图名> [,<表名或视图名>]|(<SELECT 语句>) [AS] <别名> [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式…

解决anaconda prompt找不到的情况

由于打开某个文件夹导致系统卡死了&#xff0c;鼠标使用不了&#xff0c;只能使用快捷键ctrlaltdelete打开&#xff0c;点任务管理器也没什么用&#xff0c;就点了注销选项。 注销&#xff1a;清空缓存空间和注册表信息&#xff0c;向系统发出清除现在登陆的用户的请求。 导致…

计算机网络 (31)运输层协议概念

一、概述 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。运输层的一个核心功能是提供从源端主机到目的端主机的可靠的、与实际使用的网络无关的信息传输。它向高层用…

【C++经典例题】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a; 期待您的关注 题目描述&#xff1a; 原题链接&#xff1a; 求123...n_牛客题霸_牛客网 (nowcoder.com) 解题思路&#xff1a; …

开关不一定是开关灯用 - 命令模式(Command Pattern)

命令模式&#xff08;Command Pattern&#xff09; 命令模式&#xff08;Command Pattern&#xff09;命令设计模式命令设计模式结构图命令设计模式涉及的角色 talk is cheap&#xff0c; show you my code总结 命令模式&#xff08;Command Pattern&#xff09; 命令模式&…

【深度学习量化交易13】继续优化改造基于miniQMT的量化交易软件,增加补充数据功能,优化免费下载数据模块体验!

我是Mr.看海&#xff0c;我在尝试用信号处理的知识积累和思考方式做量化交易&#xff0c;应用深度学习和AI实现股票自动交易&#xff0c;目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 MiniQMT是一种轻量级的量化交易解决方案&#xff0…

Vue进阶(贰幺贰)npm run build多环境编译

文章目录 一、前言二、实施三、总结&#xff1a;需要打包区分不同环境四、拓展阅读 一、前言 项目开发阶段&#xff0c;会涉及打包部署到多个环境应用场景&#xff0c;在不同环境中&#xff0c;需要进行项目层面的区分&#xff0c;做不同的操作&#xff0c;可以利用打包的--mo…

回归预测 | MATLAB实GRU多输入单输出回归预测

回归预测 | MATLAB实GRU多输入单输出回归预测 目录 回归预测 | MATLAB实GRU多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实GRU多输入单输出回归预测。使用GRU作为RNN的一种变体来处理时间序列数据。GRU相比传统的RNN有较好的记…

ARM交叉编译Boost库

Boost下载&#xff1a;点击跳转 编译过程&#xff1a; 生成project-config.jam ./bootstrap.sh --with-librariesfilesystem,thread --with-toolsetgcc 2. 修改project-config.jam&#xff08;位于第12行附近&#xff09; if ! gcc in [ feature.values <toolset> ] …

【.NET】Kafka消息队列介绍,使用Confluent.Kafka集成Kafka消息队列

一、Kafka介绍 kafka是一种高吞吐量、分布式、可扩展的消息中间件系统&#xff0c;最初由LinkedIn公司开发。随着不断的发展&#xff0c;在最新的版本中它定义为分布式的流处理平台&#xff0c;现在在大数据应用中也是十分广泛。 它可以处理大量的实时数据流&#xff0c;被广…

Jenkins内修改allure报告名称

背景&#xff1a; 最近使用Jenkins搭建自动化测试环境时&#xff0c;使用Jenkins的allure插件生成的报告&#xff0c;一直显示默认ALLURE REPORT&#xff0c;想自定义成与项目关联的名称&#xff0c;如图所示&#xff0c;很明显自定义名称显得高大上些&#xff0c;之前…

Elasticsearch学习(1) : 简介、索引库操作、文档操作、RestAPI、RestClient操作

目录 1.elasticsearch简介1.1.了解es1.2.倒排索引正向索引和倒排索引 1.3.es的一些概念:文档和字段&#xff1b;索引和映射&#xff1b;Mysql与ES1.4.安装es、kibana部署单点es部署kibanaIK分词器安装IK分词器与测试扩展与停用词词典总结 部署es集群 2.索引库操作2.1.mapping映…

【Linux】Linux常见指令(上)

个人主页~ 初识Linux 一、Linux基本命令1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令7、rm指令8、man指令9、cp指令10、mv命令 Linux是一个开源的、稳定的、安全的、灵活的操作系统&#xff0c;Linux下的操作都是通过指令来实现的 一、Linux基本命令 先…

【Java项目】基于SpringBoot的【校园交友系统】

【Java项目】基于SpringBoot的【校园交友系统】 技术简介&#xff1a;系统软件架构选择B/S模式、SpringBoot框架、java技术和MySQL数据库等&#xff0c;总体功能模块运用自顶向下的分层思想。 系统简介&#xff1a;系统主要包括管理员和用户。 (a) 管理员的功能主要有首页、个人…

点击底部的 tabBar 属于 wx.switchTab 跳转方式,目标页面的 onLoad 不会触发(除非是第一次加载)

文章目录 1. tabBar 的跳转方式2. tabBar 跳转的特点3. 你的配置分析4. 生命周期触发情况5. 总结 很多人不明白什么是第一次加载&#xff0c;两种情况讨论&#xff0c;第一种情况假设我是开发者&#xff0c;第一次加载就是指点击微信开发者工具上边的编译按钮&#xff0c;每点击…