TCP/IP学习笔记7-tcp头部报文中时间戳的作用

背景

TCP/IP协议是当前网络时代的基础,所有的网络产品,或者是开发语言、开发框架都是基于tcp/ip协议的,所以说,学好tcp/ip对个人以后从事互联网行业会有巨大的帮助。

但是这是一个基础理论课程,就像操作系统这门课一样,学完之后可能不会对你产生太大的影响,不会让你立马拥有能够投入工作中的技能。但正是因为这是一个基础理论课,所有的互联网技术都是基于它的。所以如果你了解tcp/ip协议,将会对你未来发展或者在工作中排查问题产生积极的作用。

时间戳

格式
TimeStamptcp报文头部的一个可选项,一共占用10个字节,格式如下:

kind(1字节)length(1字节)info(8字节)

其中info字段又分为下面2个部分

timestamp(4字节)timestamp echo(4字节)

tcp的时间戳主要解决了2个问题

  • 计算往返时延RTT
  • 防止序列号回绕问题

计算往返时延
比如现在ab发送一个报文s1ba回复ACK报文s2,那么:

  1. ab发送报文时,timestamp中存放的时间戳就是a主机此时的内核时间ta1
  2. ba回复报文时,timestamp中存放的就是b主机此时的时间tb1timestamp echo的值为从s1报文解析出来的时间ta1
  3. a收到b回复的s2报文之后,此时a主机的内核时间为ta2,而在s2报文的timestamp echo存放的是ta1

最终:RTT = ta2 - ta1

上面的RTT是从a主机计算出来,但是此时如果a主机再回复一个报文给b主机,那么在b主机一端便可以得到一个tb2 - tb1的值,也能计算出RTT

防止序列号回绕
如果出现了序列号相同的包,那应该怎么办呢?

虽然说序列号seq number占用了32位,可以表达的范围为0~2^32-1,这能用的完吗?但是你别忘了初始化序列号是不一定的,而且如果C-S发送数据的时间够长,那肯定是可以用完的。此时序列号便会出现回绕。

利用timestamp可以很好的解决此问题。因为每次发包时都会将内核的时间记录在报文内部,那么2个包的序列号即使相同,时间戳也不可能相同,这样就可以区分了。

总结

这是tcp/ip系列的第七篇,主要详细介绍了tcp头部中时间戳的作用。后面还有更深入、更多使用的场景讲解,这个系列的文章会很长。
开始下一篇吧。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值