《计算机网络——自顶向下方法》精炼——3.5.1-3.5.4

news2024/11/28 18:41:27

人生像攀登一座山,而找寻出路,却是一种学习的过程,我们应当在这过程中,学习稳定、冷静,学习如何从慌乱中找到生机。——席慕蓉

文章目录

  • TCP
    • TCP协议概述
    • 报文段结构
      • 序号、确认号
    • 超时问题
      • 计算RTT
      • 计算重传时间
    • 可靠数据传输

TCP

TCP协议概述

TCP是面向连接的协议,在数据传输前,需要在发送方和接收方之间建立起专属的TCP连接。
TCP连接提供全双工服务,一旦A和B之间有了连接,那么数据可以从任一方到另一方。TCP是点对点的,也就是说只能有两台主机参与连接。
在连接建立时,客户向服务器发送第一段TCP报文段,服务器响应客户第二段TCP报文段,客户向服务器发送第三段TCP报文段。这个过程称为三次握手
在连接建立后,双方要传输数据:
在这里插入图片描述
TCP连接在主机的运输层上部署了发送缓存和接收缓存。当数据即将被发送出去时,它被存储到发送缓存中。发送方取出缓存中的一些数据。TCP一次取出的数据量受限于最大报文段长度,即在封装上运输层和网络层(TCP/IP)首部后不能大于最大链路层帧长度(最大传输单元)。

报文段结构

在这里插入图片描述

  • 源端口号,目的端口号
  • 序号字段,确认号字段:用于实现可靠数据传输
  • 首部长度字段:顾名思义,指出首部长度
  • 标志字段:包括六个标志。ACK指明该报文是一个ACK报文;RST,SYN,FIN用于建立连接和拆除连接;PSH用于指示接收方立即将数据交给上层;URG指示报文中含有被接收方上层认为“紧急”的数据,这些数据的最后一个字节由16位的紧急数据指针字段。当有紧急数据并存在指向其尾部的指针时, TCP必须通知接收端上层实体
  • 接收窗口字段:用于流量控制
  • 检验和字段
  • 选项字段:用于规定一些额外的其他东西
  • 数据字段

序号、确认号

序号和确认号一起构成了可靠数据传输技术的一部分。TCP协议对待发送数据的每一个字节编号,当主机A发送一个报文时,序号是它发送的数据中第一个字节的编号;与之相对的,确认号是它期望另一方(设是主机B)在给它发送的数据报的序号:
在这里插入图片描述
其中0,1000都是序号。
对于确认号,如果主机A收到来自B的包含序号为0的535个字节数据的,然后因为某些原因(可能是丢包)收到的下一个报文段序号是900,也就是说536-900这段数据是缺失的,为了填补这段空缺,主机A会在下一个发送的报文上设置确认号为536。这种机制称为累计确认机制
另外,当主机A收到序号为536的报文段之前收到序号为900的报文段,即收到失序报文段,那么它有两种选择:丢弃失序报文段或将失序报文段缓存。实践中常采用后者。
另外,这种方式也可以代替ACK报文的功能。如果主机A向B发送了序号为42的报文,那么接下来当主机B向A发送的报文中确认号为42以后的序号,说明这段报文成功被接收;反之,如果确认号仍是42,说明这段报文未被成功接收。

超时问题

计算RTT

TCP也通过维护一个计时器来处理超时问题,但它对超时的时间量(RTT)处理有所不同。
TCP协议通过估计所有报文的RTT(抽调一个报文的样本RTT,即SampleRTT)来确定一个总的RTT(平均RTT,EstimatedRTT),在实践中,TCP每次为一个已发送但未确认的报文段测量SampleRTT。获得了一个新的SampleRTT后,TCP通过下面的加权运算来计算EstimatedRTT:
在这里插入图片描述

其中通过控制α的值来控制旧的EstimatedRTT和新SampleRTT所占权值。α一般取0.125,则公式为:
在这里插入图片描述
由于旧的EstimatedRTT也是通过SampleRTT确定的,因此越旧的SampleRTT的权值会越小。
我们也要计算RTT的变化(DevRTT),它反映了网络拥塞程度的波动。计算公式如下:
在这里插入图片描述
基本思路和EstimateRTT相同,只是将之前的偏差值和现在的偏差值进行了加权运算。

计算重传时间

我们通过计算出的RTT值来确定重传时间,保险起见,当EstimateRTT偏差过大时,就要将重传值设置的大一些。因此,计算重传时间TimeoutInterval的公式如下:
在这里插入图片描述
初始重传时间设置为1秒,当未收到新的EstimateRTT时,每出现一次超时,该时间加倍以避免过早出现超时。当更新EstimateRTT时,重新利用该公式计算重传时间。

可靠数据传输

在上面讲的序号,确认号和重传技术的基础上,我们可以构建可靠数据传输技术。我们先给出可靠传输的阉割版。在这个版本中,TCP协议和重传的有关事件有三个:接收数据,超时事件,收到ACK。

  • 接收数据:TCP接收数据并发送,如果这是第一个未被确认的报文段,则启动计时器。
  • 超时:进行重传并重启计时器。
  • 收到ACK:在TCP中,ACK字段可以随接收到报文的主机发送的带有数据的报文一起回送。由于TCP采用累计确认,收到ACK报文的主机可以直接将SendBase(第一个未被确认的报文的序号),移至ACK字段所指的序号。例如,如果主机A当前的SendBase是100,它收到了主机B带有确认号为300的报文,那么它确定从100到299字节的数据已经成功被接收,将SendBase移至300。

伪代码如下:
在这里插入图片描述
另外,在每次重传后,TCP重启计时器并将重传时间加倍,但发生了超时之外的另两个事件时,重新用公式计算重传时间。
除了超时之外,TCP还可以使用冗余ACK技术检测丢包。由于TCP采用累积确认,因此当3个ACK字段都指向相同的序号时,TCP确认这个序号的报文段发生丢包。例如,如果主机A向B发送了序号为100,200,300的三个报文,但在从主机B回送的报文中超过三个都含有确认号为200的报文,因此可以确定200-299这些字节的报文发生了丢包,于是主机A重传200-299这些字节的报文。这个技术被称为快速重传技术,下面是伪代码:
在这里插入图片描述
从累积确认的角度来看,TCP差错恢复机制类似于一个GBN协议;但从缓存失序报文段的角度来看,它又类似于一个SR协议,因此最好将其当做GBN和SR的混合体。
请添加图片描述
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!

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

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

相关文章

nest笔记十一:一个完整的nestjs示例工程(nestjs_template)

概述 链接:nestjs_template 相关文章列表 nestjs系列笔记 示例工程说明 这个工程是我使用nestjs多个项目后,总结出来的模板。这是一个完整的工程,使用了yaml做为配置,使用了log4js和redis和typeorm,sawgger&#…

Less和sass安装及使用

CSS预处理器 由来 CSS本身不是一种编程语言。你可以用它开发网页样式,但是没法用它编程。换句话说,CSS基本上是设计师的工具,不是程序员的工具。它并不像其它程序语言,比如说JavaScript等,有自己的变量、常量、条件语…

手把手教你验证upd与tcp“端口”开发策略

系列文章目录 文章目录 系列文章目录前言一、问题?二、验证网络策略步骤三、增强验证网络策略总结 前言 这篇文章,本意是让大家了解除了常用的telnet之外,在运维过程中,如果在服务器中未发现相关命令还可以借用像ssh、wget 等命令…

震惊!我的电脑居然中病毒了,快来看看我是如何解决的

打开电脑就自动跳转到http://www.exinariuminix.info/ 问题背景 今天刚打开电脑,然后电脑莫名奇妙就自动跳转到http://www.exinariuminix.info/网页: 联网后加载,它就自动重定向到一个莫名其妙的网站: 问题原因 出于好奇&#…

大数据Doris(二十四):Doris数据Insert Into导入方式介绍

文章目录 Doris数据Insert Into导入方式介绍 一、语法及参数 二、案例 三、注意事项 1、关于插入数据量 2、关于insert操作返回结果 3、关于导入任务超时 4、关于Session变量 5、关于数据导入错误 Doris数据Insert Into导入方式介绍 Doris 提供多种数据导入方案&…

SpringMVC执行原理

目录结构 pom.xml依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- https://mvnrepository.co…

【Java校招面试】实战面经(五)

目录 前言一、讲讲short数据类型&#xff0c;short s1 1; s1 s11;对不对&#xff1f;二、使用final关键字的好处三、如果String中重写equals不重写hashCode会出现什么问题&#xff1f;四、ConcurrentHashMap的get方法是不加锁的&#xff0c;如何保证线程安全&#xff1f;五、…

缓存存在的问题

文章目录 缓存问题缓存穿透引入解决方案 缓存雪崩缓存击穿 缓存问题 使用缓存时常见的问题主要分为三个&#xff1a;缓存穿透 、缓存雪崩、缓存击穿。 下面对其进行一一学习 缓存穿透 引入 定义&#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#…

20230521给coolpi4b开发板刷Android12和串口的使用

20230521给coolpi4b开发板刷Android12和串口的使用 2023/5/21 9:31 所需要的配件&#xff1a; 1、2.0mm转2.54mm的杜邦线母头2条&#xff08;2位一起的一条&#xff09; 2、串口板&#xff1a;CH340&#xff08;WIN7下使用&#xff09; 3、USB的公头-公头线 首先&#xff0c;欢…

微星MSI GE66 10SF-416RU电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板Intel HM470 处理器Intel Core i7-10875H 2.30GHz up to 5.10GHz已驱动 内存Kingston Fury Impact DDR4 2x16Gb 3200mhz已驱动 硬盘NT…

Redis介绍及Linux单机安装

1.Redis介绍 1.1.什么是Redis Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 Redis是完全开源的&#…

OpenCV人脸识别QT上位机(含源码)

OpenCV Releases&#xff1a;4.6.0 开发平台&#xff1a;QT 6.4.0 编译环境&#xff1a;MSVC 2019 64bit 主要功能&#xff1a;1、预处理图片 2、生成CSV文件 3、生成识别器文件等功能。主要用于学习opencv的整个流程和实现一些简单的功能&#xff0c;比如识别指定的人脸并显…

安卓与串口通信-实践篇

前言 在上一篇文章中我们讲解了关于串口的基础知识&#xff0c;没有看过的同学推荐先看一下&#xff0c;否则你可能会不太理解这篇文章所述的某些内容。 这篇文章我们将讲解安卓端的串口通信实践&#xff0c;即如何使用串口通信实现安卓设备与其他设备例如PLC主板之间数据交互…

【计算机网络复习】第五章 数据链路层 1

数据链路层的作用 两台主机&#xff08;端到端&#xff09;之间的通信是依靠相邻的主机/路由器之间的逐步数据传送来实现 数据链路层实现相邻主机/路由器间的可靠的数据传输 网络层&#xff1a;主机-主机通信 数据链路层&#xff1a;点到点通信 数据链路层的主要功能 u 链路…

3R幸福法

3R幸福法 3R幸福法可以帮助我们《建立和谐亲密关系》 模型介绍 3R幸福法体现的是一个人被关注的完整逻辑&#xff1a; Reson-理由&#xff0c;关注缘起。不会让你想表达的感情看起来显得唐突&#xff0c;不会让对方和自己不好意思。Respond-反应&#xff0c;是关注影响。更多…

ROS 工作空间与功能包的创建(三)

执行命令&#xff1a; mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src/catkin_init_workspace echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc 效果&#xff1a; 输入命令查看添加成功了没有 tail ~/.bashrc 编译工程&#xff1a;执行命令 cd ~…

csdn文章markdown格式下载

前言 网上下载CSDN文章的方式多种多样&#xff0c;有的直接下载为pdf格式&#xff0c;有的利用python/java代码将文章下载为md格式&#xff0c;也有的用JavaScript下载文章&#xff0c;但下载的文章仅限于自己写的&#xff08;会介绍&#xff09;&#xff0c;这里也提供一种简单…

关于接口中的一些常用实例以及比较方法的区别

文章目录 &#x1f490;文章导读&#x1f334;Object 类toString() 获取对象信息equals 对象比较方法hashCode 获得对象的具体位置 &#x1f334;接口使用实例Comparable 接口Comparator 接口 &#x1f490;文章导读 在本篇文章中&#xff0c;详解了什么是Object类&#xff0c;…

MyBatis中三级缓存的理解

文章目录 前言1. 环境搭建1.1 依赖引入1.2 mybatis-config.xml配置配置db.properties在mybatis-config.xml引入db.properties 1.3 实体类1.4 mappermapper接口mapper映射文件 1.5 测试 2.缓存2.1 一级缓存mybatis-config.xml 配置日志开启日志配置日志文件logback.xml测试相同m…

深度学习之搭建LSTM模型预测股价

大家好&#xff0c;我是带我去滑雪&#xff01; 本期利用Google股价数据集&#xff0c;该数据集中GOOG_Stock_Price_Train.csv为训练集&#xff0c;GOOG_Stock_Price_Test.csv为测试集&#xff0c;里面有开盘价、最高股价、最低股价、收盘价、调整后的收盘价、成交量&#xff0…