当前位置: 首页 > news >正文

计算机网络之TCP序号,确认序号和报文传输时间

开篇提示

        本篇适合于了解基础知识,进行扩展提高的使用,附带考研习题以及解析。

TCP序号和确认序号的区别

        TCP首部中有序号和确认序号,他们都是4个字节(4B),且在数据传输中有很重要的意义,那么两者的含义和区别是什么呢?我们先看他们的定义。

        序号指的是本报文段所发送的数据的第一个字节的序号,确认号是期望收到对方下一个报文段的第一个数据字节的序号。在进行“三次握手”和数据传输的时候,序号一般用seq表示,确认号一般用ack表示。

        接下来,我们就从建立TCP连接,到数据传输,再到断开连接整个过程分析客户机和服务器中的TCP序号和确认号的变化。

        我们首先要清楚,不论是客户机还是服务器,他们一般都有序号和确认号,序号是描述自己的情况,确认号是描述对方的情况。序号x代表着“我在传递这次报文的时候,我的报文起始序号是x”,确认号y代表着“在你下次传递报文的时候,我希望你从你的序号y开始发送”

        所以,在一个TCP报文中,序号和确认号没有任何关系。

        好的,现在我们来看建立TCP连接的过程。

        下面是建立TCP连接的示意图:

        建立连接前,客户机和服务器都会获得初始序号,可见,A获得的初始序号为x,B获得的初始序号为y,我们发现,在未进行数据传输,只是进行建立连接的确立的情况下,ack增加了,事实上,确认建立连接SYN和断开连接FIN都会占用一个字节,我们只需要注意seq代表自身情况,ack代表对方情况即可。

        我们举一个中间传输信息的例子。

        如果A序号seq是301(自己这条内容会从301号开始发送),传输100B的有效荷载(实际就是数据),确认号ack是800(正常情况下,希望B从B的800开始发送)

        如果B正常收到,他发送的序号seq会是A的ack确认号,也就是800,它的确认号是A下次发送信息的开始,也就是301+100 = 401 ,他会希望A下次从A的序号401开始,如果B携带了100B的数据发送给了A,此时,A的序号是B的序号401,A的确认号是希望下次B从哪里开始发,800+100=900

        特殊情况一:如果B未携带数据只确认,则A的确认号仍为800

        特殊情况二:现A的序号为401,确认号为900,向B发送了120B的数据,但是,数据丢失

        B的序号为A的确认号(A希望他这么做),但由于B尚未收到A的信息,他会仍然希望A从401号发送数据,而不是521号

        在断开连接时,会进行四次挥手,下面是断开TCP连接的示意图:

与序号和序列号相关的题目一般是给出seq和ack,继续推在传输数据后的seq和ack,只需要记住两者的含义即可。

        下面,我们来几道例题练练手。

习题一

1.SYN与FIN都会使ack+1

本题选A,C,首先A发送自身的序号X,B发送自身的序号Y,ack确认时确认对方的下次开始的序号。

2.seq与ack的关系

A的序号是200,确认字号201,B的序号一定是A的确认号,也就是201,B的确认号是A下次开始发送的开头,也就是200+2

3.seq和ack的关系

4.特殊情况

报文传输时间的计算

建立连接时间需要1.5个RTT

        对于服务器B,最长断开时间需要等待两个RTT+数据传输时间,最短时间是1.5个RTT,实际上,当A发送FIN后,B可以直接发送FIN,等待A确认后,即可直接关闭

        对于客户机A,它最长时间要1个RTT+数据传送时间+2MSL,MSL是最大报文段寿命,这是防止数据传送不到而引发问题,最短时间是1RTT+2MSL。

现在,我们来查看在TCP进行拥塞控制下数据传输所需要的时间。

        我们先提供一些关于拥塞控制的知识点。

1.MSS:最大段长,初始传输数据的速度为1MSS,不论是传输多少B,可以理解为是拥塞控制传输的基本单位

2.cwnd:当前的拥塞窗口,大小是多少倍的MSS来计算

3.ssthresh:门限,慢窗口阶段与拥塞避免阶段的分界点,当cwnd<ssthresh时,慢开始,当cwnd>ssthresh,拥塞避免

4.慢开始(启动)阶段:每次收到确认后,cwnd*2,如果慢开始cwnd*2后超过门限,会使得cwnd=ssthresh

5.拥塞避免阶段:每次收到确认后,cwnd+1

6.超时:时间过长后,超时,cwnd=1MSS,ssthresh变为超时时cwnd的一半

7.快恢复:连续收到3个多余的ACK(重复确认),ssthresh变为cwnd的一半,且cwnd = ssthresh,然后开始拥塞避免

8.如果同时出现接收窗口和拥塞窗口,实际窗口时两者中较小的一个

        现在,我们给出几个例题。

例题二

1.断开TCP连接时间

最短时间,C需要1RTT+2MSL,S需要1.5RTT,情况是当C请求断开时S也准备断开,D

2.慢启动和拥塞避免状态的选择

慢启动增长迅速,最短时间用慢启动,最长时间用拥塞避免,本题目中由于是最长时间,拥塞避免,需要24个RTT,D

3.接收窗口和拥塞窗口

两者都会影响cwnd,是两者中更小的那个决定的。接收缓存实际就是接收窗口的大小,他会随着存入数据而逐渐变小。在本题中,要求最小时间,慢启动状态,经过3RTT变为8KB,过程是1MSS

-2MSS-4MSS,更小的是拥塞窗口,因此,本题中接收窗口不会影响cwnd,B

慢启动门限为2KB,拥塞窗口为4KB,因此,在下个RTT中,拥塞窗口变为5KB,但是接收窗口是2KB,因此,最多发送2KB的数据

4.实例

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 污点Taints和Deployment
  • MySQL键分区分区表
  • 【自动驾驶】控制算法(一)绪论与前期准备
  • 线性数据结构的基本概念(数组,链表,栈,队列)
  • React Hooks 的高级用法
  • 多商户多套部署需修改注意事项
  • 便携式气象监测设备的定义与特点
  • python锁 (lock) 机制+多线程处理共享变量
  • 希尔排序,详细解析(附图解)
  • yolov8旋转框+关键点检测
  • XSS GAME
  • 记录一个变量溢出的bug
  • Hive3:常用查询语句整理
  • gitlab
  • 知识竞赛答题设备及答题方式有哪些
  • [LeetCode] Wiggle Sort
  • CentOS 7 修改主机名
  • Docker入门(二) - Dockerfile
  • React-redux的原理以及使用
  • Vue.js-Day01
  • win10下安装mysql5.7
  • 测试开发系类之接口自动化测试
  • 翻译:Hystrix - How To Use
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 后端_ThinkPHP5
  • 面试总结JavaScript篇
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何利用MongoDB打造TOP榜小程序
  • 实战|智能家居行业移动应用性能分析
  • puppet连载22:define用法
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​【已解决】npm install​卡主不动的情况
  • ​什么是bug?bug的源头在哪里?
  • ​数据链路层——流量控制可靠传输机制 ​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #pragma 指令
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (06)Hive——正则表达式
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (SpringBoot)第二章:Spring创建和使用
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (小白学Java)Java简介和基本配置
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)nsfocus-绿盟科技笔试题目
  • (转)Windows2003安全设置/维护
  • (自适应手机端)行业协会机构网站模板
  • .NET 8.0 发布到 IIS
  • .net MySql
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET学习教程二——.net基础定义+VS常用设置
  • @Resource和@Autowired的区别
  • @SuppressLint(NewApi)和@TargetApi()的区别