重学TCP协议(7) Timestamps 选项

1.Timestamps 选项的组成部分

image.png
时间戳选项占10个字节= kind(1字节) + length(1字节) + info (8字节),其中kind=8,length=10,info由timestamp(TS value)和timestamp echo(TS Echo Reply)两个值组成,各4个字节的长度。

2. Timestamps 选项工作原理

以一次抓包为例:
image.png

  1. 发送方发送数据时,将一个发送时间戳 1590508660 放在发送方时间戳TSval中
  2. 接收方收到数据包以后,将收到的时间戳 1590508660 原封不动的返回给发送方,放在TSecr字段中,同时把自己的时间戳 1499872733 放在TSval中

3. Timestamps 选项的作用

时间戳选项主要的功能有两个

3.1 用来计算往返时间RTT

发送方在发送报文段时把当前时钟的时间值放入时间戳字段,接收方在确认该报文段时把时间戳字段值复制到时间戳回送回答字段。因此,发送方在收到确认报文后,可以准确计算出RTT。时间戳是一个单调增长的值,接收方只需要回显收到的内容,因此是不需要关注时间戳的单元是什么,也不需要连接双发的时钟同步。

image.png
例如:主机a向主机b发送一个报文s1,在发送时将内核时刻ta1记录到报文s1的选项字段时间戳timestamp区域;主机b接收到报文s1后,从s1的时间戳timestamp区域将ta1取出来,复制到应答报文s2的时间戳timestampecho区域。如此一来,主机a收到s2时,此时的内核时刻是ta2,那么RTT = ta2 - ta1。这在一定程度上就能反映网络的拥堵情况了。

为什么需要用Timestamps计算RTT

TCP 在发送一个包时,会记录这个包的发送的时间 t1,用收到这个包的确认包时 t2 减去 t1 就可以得到这次的 RTT。这里有一个问题,如果发出的包出现重传,计算就变得复杂起来。无法得知收到的确认 ACK 是对第一次包还是重传包的的确认

image.png

3.2 PAWS:防止回绕的序号

我们知道序列号只有32位,而每增加2^32个序列号后就会重复使用原来用过的序列号。假设我们有一条高速网络,通信的主机双方有足够大的带宽用来快速的传输数据。例如1Gb/s(TCP 的窗口经过窗口缩放可以最高到 1GB(2^30))的速率发送报文段,则不到35秒钟数据字节的序列号就会重复。这样对TCP传输带来混乱的情况。这种情况之出现在高速链路上。而采用时间戳选项,可以很容易的分辨出相同序列号的数据报,哪个是最近发送,哪个是以前发送的。

4. Timestamps 选项在三次握手中造成的RST

三次握手中的第二步,如果服务端回复 SYN+ACK 包中的 TSecr 不等于握手第一步客户端发送 SYN 包中的 TSval,客户端在对 SYN+ACK 回复 RST。示例包如下所示。

image.png

5.使用Timestamps 选项的注意事项

  • Timestamps是双向的,必须双方都开启才有效
  • Timestamps也会溢出回绕
  • timestamps 值是一个单调递增的值,但是两端 timestamps 值增加的间隔也可能步调不一致

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

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

相关文章

sudoku代码_首席执行官可以编码吗? 在星期六晚上坐在酒吧时,从头开始观看Netlify首席执行官的Sudoku应用程序代码

sudoku代码Netlify CEO Matt Biilmann live-codes a Sudoku app using Netlify in this tutorial video. Matt shows how simple and quick it can be to create a working app using the JAMstack.在本教程视频中,Netlify CEO Matt Biilmann使用Netlify对Sudoku应用…

c++ 时间序列工具包_我的时间序列工具包

c 时间序列工具包When it comes to time series forecasting, I’m a great believer that the simpler the model, the better.关于时间序列预测,我坚信模型越简单越好。 However, not all time series are created equal. Some time series have a strongly defi…

bash 的相关配置

bash 参数自动补全 请安装 bash-completion bash 提示符 说明:参考文档 1. 简洁风格 if [[ ${EUID} 0 ]] ; then PS1\[\033[01;32m\][\[\033[01;35m\]\u\[\033[01;37m\] \w\[\033[01;32m\]]\$\[\033[00m\] else PS1\[\033[01;32m\][\u\[\033[01;37m\] \w\[\033[01;…

LINUX系统安装和管理

目录 一.应用程序 对比应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包装类型 二.RPM软件包管理 1.RPM是什么? 2.RPM命令的格式 查看已安装的软件包格式 查看未安装的软件包 3.RPM安装包从哪里来? 4.挂载的定义 挂载命令moun…

sql基础教程亚马逊_针对Amazon,Apple,Google的常见SQL面试问题

sql基础教程亚马逊SQL is used in a wide variety of programming jobs. Its important to be familiar with SQL if you are going to be interviewing soon for a software position. This is especially true if you are going to interview at a top tech company such as …

leetcode 1720. 解码异或后的数组(位运算)

未知 整数数组 arr 由 n 个非负整数组成。 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] arr[i] XOR arr[i 1] 。例如,arr [1,0,2,1] 经编码后得到 encoded [1,2,3] 。 给你编码后的数组 encoded 和原数组 arr 的第一个元…

adobe 书签怎么设置_让我们设置一些规则…没有Adobe Analytics处理规则

adobe 书签怎么设置Originally published at Analyst Admin.最初发布于Analyst Admin 。 In my experience working with Adobe Analytics, I’ve found that Processing Rules help in some cases, but oftentimes they create more work. I try to avoid using Processing R…

详解linux下安装python3环境

1、下载python3.5源码包首先去python官网下载python3的源码包,网址:https://www.python.org/ 进去之后点击导航栏的Downloads,也可以鼠标放到Downloads上弹出菜单选择Source code,表示源码包,这里选择最新版本3.5.2&am…

详解spl_autoload_register()函数

http://blog.csdn.net/panpan639944806/article/details/23192267 转载于:https://www.cnblogs.com/maidongdong/p/7647163.html

上海区块链会议演讲ppt_所以您想参加会议演讲吗? 这是我的建议。

上海区块链会议演讲pptYou’ve attended a few conferences, watched a lot of presentations, and decided it’s time to give a talk of your own! As someone who has both given talks at conferences, and sat on the proposal review board for others, I’m here to te…

重学TCP协议(8) TCP的11种状态

TCP的11种状态 为了逻辑更加清晰,假设主动打开连接和关闭连接皆为客户端,被动打开连接和关闭连接皆为服务端 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 &…

肯尼亚第三方支付_肯尼亚的COVID-19病例正在Swift增加,我们不知道为什么。

肯尼亚第三方支付COVID-19 cases in Kenya are accelerating rapidly. New cases have increased 300% month-over-month since April of this year while global and regional media have reported on the economic toll of stringent lock-down measures and heavy-handed go…

JVM命令

1、jps 查看所有虚拟机进程 -v 虚拟机启动时JVM参数 -l 执行主类全名 2、jstat 显示本地或远程类装载、内存、垃圾回收、JIT编译等运行数据(性能问题定位工具首选) 格式:jstat [-option] vmid ms count (示例&a…

Java 集合 List Arrays.asList

2019独角兽企业重金招聘Python工程师标准>>> 参考链接:阿里巴巴Java开发手册终极版v1.3.0 【强制】使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方 法,它的 add/remove/clear 方法会抛出 UnsupportedO…

重学TCP协议(9) 半连接队列、全连接队列

1. 半连接队列、全连接队列基本概念 三次握手中,在第一步server收到client的syn后,把相关信息放到半连接队列中,同时回复synack给client(第二步),同时开启一个定时器,如果超时还未收到 ACK 会进…

分类预测回归预测_我们应该如何汇总分类预测?

分类预测回归预测If you are reading this, then you probably tried to predict who will survive the Titanic shipwreck. This Kaggle competition is a canonical example of machine learning, and a right of passage for any aspiring data scientist. What if instead …

【CZY选讲·Yjq的棺材】

题目描述 Yjq想要将一个长为宽为的矩形棺材(棺材表面绝对光滑,所以棺材可以任意的滑动)拖过一个L型墓道。 如图所示,L型墓道两个走廊的宽度分别是和,呈90,并且走廊的长度远大于。 现在Hja想知道对于给…

“机器换人”之潮涌向珠三角,蓝领工人将何去何从

企业表示很无奈,由于生产需要,并非刻意换人。 随着传统产业向更加现代化、自动化的新产业转型,“机器换人”似乎是历史上不可逆转的潮流。 据报道,珠三角经济圈所在的广东省要从传统的制造大省向制造强省转变,企业转型…

slack通知本地服务器_通过构建自己的Slack App学习无服务器

slack通知本地服务器Serverless architecture is the industrys latest buzzword and many of the largest tech companies have begun to embrace it. 无服务器架构是业界最新的流行语,许多大型科技公司已开始采用它。 In this article, well learn what it is an…

深入理解InnoDB(6)—独立表空间

InnoDB的表空间 表空间可以看做是InnoDB存储引擎逻辑结构的最高层 ,所有的数据都是存放在表空间中。 1. Extent 对于16KB的页来说,连续的64个页就是一个区,也就是说一个区默认占用1MB空间大小。 每256个区被划分成一组,第一组的前3个页面是…