计算机网络学习笔记——运输层(b站)

目录

一、 运输层概述

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

三、UDP和TCP的对比

四、TCP的流量控制

五、TCP的拥塞控制

六、TCP超时重传时间的选择

七、TCP可靠传输的实现

八、TCP报文段的首部格式


一、 运输层概述

物理层、数据链路层、网络层实现了主机到主机的通信。
如何为运行在不同主机上的应用进程提供直接的通信服务是运输层的任务,运输层协议又称为端到端协议。

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

发送方的复用和接收方的分用

TCP/IP体系的应用层常用协议所使用的运输层熟知端口号

三、UDP和TCP的对比

这两种协议就是本章要讨论的主要内容

用户数据报协议UDP(User Datagram Protocol)

传输控制协议TCP(Transmission Control Protocol)

UDP

  • 无连接
  • 支持一对一,一对多,多对一和多对多交互通信。
  • 对应用层交付的报文直接打包
  • 尽最大努力交付,也就是不可靠;不使用流量控制和拥塞控制。
  • 首部开销小,仅8字节

TCP

  • 面向连接
  • 每一条TCP连接只能有两个端点EP,只能是一对一通信。
  • 面向字节流
  • 可靠传输,使用流量控制和拥塞控制。
  • 首部最小20字节,最大60字节

四、TCP的流量控制

流量控制:让发送方的发送速率不要太快,要让接收方来得及接收

利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

五、TCP的拥塞控制

拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏的情况
拥塞窗口cwnd:发送方维护的状态变量,其值取决于网络的拥塞程度,并且动态变化。冂

拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但只要网络出现拥塞,拥塞窗口就减少

一些判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(即发生超时重传)
发送方将拥塞窗口作为发送窗口swnd,即swnd=cwnd

维护一个慢开始门限ssthresh状态变量

慢开始”是指一开始向网络注入的报文段少,并不是指拥塞窗口cwnd增长速度慢;
拥塞避免”并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞;

有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞,这将导致发送方超时重传,并误认为网络发生了拥塞,会降低了传输效率。

采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传,

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

发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段。于是执行快恢复算法

发送方将慢开始门限ssthresh值和拥塞窗口cwnd值调整为当前窗口的一半;开始执行拥塞避免算法。

六、TCP超时重传时间的选择

RFC6298建议使用下式计算超时重传时间RTO

针对出现超时重传时无法测准往返时间RTT的问题,Karn提出了一个算法:出现重传时,不重新计算RTTS
这又引起了新的问题。设想出现这样的情况:报文段的时延突然增大了很多,并且之后很长一段时间都会保持这种时延。因此在原来得出的重传时间内,不会收到确认报文段。于是就重传报文段。但根据Karn算法,不考虑重传的报文段的往返时间样本。这样,超时重传时间就无法更新。这会导致报文段反复被重传。


因此,要对Karn算法进行修正。方法是:报文段每重传一次,就把超时重传时间RTO增大一些。

典型的做法是将新RTO的值取为旧RTO值的2倍。

TCP基于以字节为单位的滑动窗口来实现可靠传输

TCP基于以字节为单位的滑动窗口来实现可靠传输。

  • 发送方在未收到接收方的确认时,可将发送窗口内还未发送的数据全部发送出去:
  • 接收方只接收序号落入发送窗口内的数据;

虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大

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

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

  • 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理将会比较简单,但这样做对网络资源的利用不利,因为发送方会重复传送较多的数据。
  • TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程

TCP要求接收方必须有累积确认和捎带确认机制,这样可以减小传输开销。接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。

  • 接收方不应过分推迟发送确认,否则会导致发送方不必要的超时重传,这反而浪费了网络的资源。TCP标准规定,确认推迟的时间不应超过0.5秒,若收到一连串具有最大长度的报文段,则必须每隔一个报文段就发送一个确认[RFC 1122].
  • 捎带确认实际上井不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。

TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段,因此,每一方都有自己的发送窗口和接收窗口。在谈到这些窗口时,-定要弄清楚是哪一方的窗口

七、TCP可靠传输的实现

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

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

TCP使用“三报文握手”建立连接

最后一次握手是否多余?

不多余

这是为了防止已失效的连接请求报文段突然又传送到了TCP服务器,因而导致错误

TCP通过“四报文挥手”来释放连接

(MSL(Maximum Segment Lifetime)意思是最长报文段寿命,RFC793建议为2分钟)

发送方最后一次等待有必要吗?

有必要

客户端出现故障,服务器端如何发现?

TCP服务器进程每收到一次TCP客户进程的数据,就重新设置并启动保活计时器(2小时定时)


若保活计时器定时周期内未收到TCP客户进程发来的数据,则当保活计时器到时后,TCP服务器进程就向TCP客户进程发送一个探测报文段,以后则每隔75秒钟发送一次。若一连发送10个探测报文段后仍无TCP客户进程的响应,TCP服务器进程就认为TCP客户进程所在主机出了故障,接着就关闭这个连接。

八、TCP报文段的首部格式

源端口:占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程

目的端口:占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程

序号:占32比特,取值范围[0,2”1],序号增加到最后一个后,下一个号就又回到0。指出本TCP报文段数据载荷的第一个字节的序号

确认号:占32比特,确认号增加到最后一个后,下一个确认号就又回到0

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

确认标志位ACK:取值为1时确认号字段才有效;取值为0时确认号字段无效(TCP规定,在连接建立后所有传送的TGP报文段都必须把AGK置1。)

数据偏移:占4比特,并以4字节为单位。
用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远这个字段实际上是指出了TGP报文段的首部长度。
首部固定长度为20字节,因此数据偏移字段的最小值为(0101)2
首部最大长度为60字节,因此数据偏移字段的最大值为(1111)2

保留:占6比特,保留为今后使用,但目前应置为0

窗口:占16比特,以字节为单位。指出发送本报文段的一方的接收窗口

校验和:占16比特,检查范围包括TCP报文段的首部和数据载荷两部分,在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。

同步标志位SYN:在TCP连接建立时用来同步序号。

终止标志位FIN:用来释放TCP连接

复位标志位RST:用来复位TCP连接。
当RST=1时,表明TGP连接出现了异常,必须释放连接,然后再重新建立连接RST置1还用来拒绝一个非法的报文段或拒绝打开一个TGP连接

推送标志位PSH:接收方的TCP收到该标志位为1的报文段会尽快上交应用进程而不必等到接收缓存都填满后再向上交付。

紧急标志位URG:取值为1时紧急指针字段有效;取值为0时紧急指针字段无效。
紧急指针:占16比特,以字节为单位,用来指明紧急数据的长度。

填充:由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,也就是首部长度字段,是以4字节为单位的)

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

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

相关文章

使用springdoc-openapi-starter-webmvc-ui后访问swagger-ui/index.html 报错404

按照官网说明,引入 springdoc-openapi-starter-webmvc-ui后应该就可以直接访问swagger-ui.html或者swagger-ui/index.html就可以出现swagger页面了,但是我引入后,访问提示报错404. 在我的项目中,有其他依赖间接引入了org.webjars…

剪映网页版

https://www.capcut.cn/web 免费,免安装,跨平台,视频云合成,简直太好用了!

echarts-事件

echarts部分事件 添加点击事件 添加点击事件: let options {tooltip: {},xAxis: {type: "category",data: ["d1", "d2", "d3", "d4"],},yAxis: {},series: [{type: "line",data: d1,},{type: &qu…

Codeforces Round 948 (Div. 2) E. Tensor(思维题-交互)

题目 n(3<n<100)个点的有向图&#xff0c; 图的边的关系未知&#xff0c;但保证以下两点&#xff1a; 1. 只存在j->i&#xff08;i<j&#xff09;的边 2. 对于任意三个点i、j、k&#xff08;i<j<k&#xff09;&#xff0c;要么k可以到达i&#xff0c;要么…

18 js时间对象

时间对象是一种复杂数据类型&#xff0c;用来存储时间 创建时间对象 内置构造函数创建 语法&#xff1a;var 时间名new Date() var datenew Date()console.log(date) //Wed May 29 2024 16:03:47 GMT0800 (中国标准时间) 创建指定日期 当参数为数字——>在格林威治的时间基…

知识付费小程序源码系统 界面支持万能DIY装修,一站式运营 附带完整的源代码以及搭建教程

系统概述 这是一款功能强大的知识付费小程序源码系统&#xff0c;它为用户提供了一个全面的平台&#xff0c;能够满足各种知识付费场景的需求。其界面支持万能 DIY 装修&#xff0c;让用户可以根据自己的品牌形象和风格进行个性化定制&#xff0c;打造出独具特色的小程序界面。…

解释“this”的工作原理,原型继承如何工作,以及如何实现手写JS继承。还包括Array对象自带的方法列举,以及如何使用闭包。

1:"this"的工作原理: this 关键字指向当前执行上下文的对象,也就是当前函数被调用时所在的对象。this 的值取决于函数的调用方式,不同的调用方式会导致 this 指向不同的对象:作为对象的方法调用,this 指向该对象作为普通函数调用,this 指向全局对象(浏览器中是 wind…

爱问云网课加密视频去除录屏检测翻录工具使用方法

很多伙伴反馈说遇到爱问云的网课&#xff0c;直接打开录屏工具会被检测&#xff0c;并且录出来黑屏。 基于这种情况&#xff0c;可以用我们这个教程翻录为mp4&#xff0c;可以用到我们的工具。 用这个录不会被检测&#xff0c;而且不会黑屏。 提前是必须有授权能正常播放才可…

【云原生】Kubernetes----PersistentVolume(PV)与PersistentVolumeClaim(PVC)详解

目录 引言 一、存储卷 &#xff08;一&#xff09;存储卷定义 &#xff08;二&#xff09;存储卷的作用 1.数据持久化 2.数据共享 3.解耦 4.灵活性 &#xff08;三&#xff09;存储卷的分类 1.emptyDir存储卷 1.1 定义 1.2 特点 1.3 示例 2.hostPath存储卷 2.1 …

Leetcode373.查找和最小的 K 对数字

文章目录 题目描述解题思路代码 题目链接 题目描述 给定两个以 非递减顺序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (…

大模型日报2024-05-29

大模型日报 2024-05-29 大模型资讯 大型语言模型在金融预测中将超越人类分析师 摘要: 新研究表明&#xff0c;大型语言模型如ChatGPT在金融预测方面表现优于人类专家&#xff0c;为交易策略提供了宝贵的见解。这意味着未来这些模型将在金融领域发挥更重要的作用&#xff0c;提升…

使用Keepalived提高吞吐量和负载均衡ip_hash.

一 . Nginx使用Keepalived提高吞吐量案例 Keepalived[表示把连接保持一定长连接数来提高吞吐量] 1.1没有使用keepalived参数 upstream tomcats {server 192.168.28.102:8080; } server {listen 88;server_name www.tomcats.com;location / {proxy_pass http://to…

深入探索JavaScript:精准判断对象间的“真”相等【含代码示例】

深入探索JavaScript&#xff1a;精准判断对象间的“真”相等【含代码示例】 基本概念与作用说明 与 的区别Object.is()深度比较的必要性 实战案例&#xff1a;五种深度比较策略案例一&#xff1a;朴素递归法案例二&#xff1a;JSON.stringify()法&#xff08;谨慎使用&#xf…

postman教程-6-发送delete请求

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了postman发送put请求的方法&#xff0c;本小节我们讲解一下postman发送delete请求的方法。 HTTP DELETE 请求是一种用于删除指定资源的请求方法。在RESTful API 设计中&#xff0c;DELETE 请求…

tensorboard可视化时save_graph报错ERROR: Graphs differed across invocations!的一个解决方法

在使用tensorboard可视化&#xff0c;经常会将模型通过save_graph方法保存下来&#xff0c;方便查看结构。在使用save_graph经常会遇到错误&#xff08;至少我经常遇到&#xff09;&#xff0c;对于我&#xff0c;最常见的一个错误为 Tracing failed sanity checks! ERROR: Gr…

GPT-4o:重塑人机交互的未来

一个愿意伫立在巨人肩膀上的农民...... 一、推出 在人工智能&#xff08;AI&#xff09;领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术一直被视为连接人类与机器的桥梁。近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;NLP领域迎来了前所未有的变革…

ARM-V9 RME(Realm Management Extension)系统架构之系统能力的执行隔离

安全之安全(security)博客目录导读 目录 一、执行隔离 1、安全状态 2、安全模型 本博客探讨 RME 所需的系统能力&#xff0c;以保证 Arm CCA 对于 Realms 的安全性和隔离特性。 一、执行隔离 1、安全状态 RME 系统支持以下安全状态&#xff1a; 非安全 (Non-secure)安全…

Orange Pi Kunpeng Pro测评

#创作灵感# 参加树莓派鲲鹏开发版的测评活动&#xff0c;也想体验一下该开发版&#xff0c;之前有做过树莓派和香橙派的开发&#xff0c;刚好借此机会了解一下鲲鹏&#xff0c;所以就有了这篇测评文章。 #正文# 引言 说是测评&#xff0c;其实也没有多少测评方面的内容&…

前端面试题23-34

23. 说说你对 Promise 的理解 Promise 是 ECMAScript6 引入的一种异步编程解决方案&#xff0c;用于处理异步操作。它表示一个尚未完成但最终会结束的操作&#xff0c;具有三种状态&#xff1a;pending&#xff08;进行中&#xff09;、fulfilled&#xff08;已完成&#xff0…

代码随想录算法训练营Day22|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

二叉搜索树的最近公共祖先 不考虑二叉搜索树这一条件的话&#xff0c;普通的二叉搜索树搜索最近的公共祖先就是昨日的做法&#xff0c;这种做法也能解决二叉搜索树的最近公共祖先。 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, Tr…