TCPIP学习笔记7-tcp头部报⽂中时间戳的作⽤
tcpip协议pdf背景
TCP/IP协议是当前⽹络时代的基础,所有的⽹络产品,或者是开发语⾔、开发框架都是基于tcp/ip协议的,所以说,学好tcp/ip对个⼈以后从事互联⽹⾏业会有巨⼤的帮助。
但是这是⼀个基础理论课程,就像操作系统这门课⼀样,学完之后可能不会对你产⽣太⼤的影响,不会让你⽴马拥有能够投⼊⼯作中的技能。但正是因为这是⼀个基础理论课,所有的互联⽹技术都是基于它的。所以如果你了解tcp/ip协议,将会对你未来发展或者在⼯作中排查问题产⽣积极的作⽤。
时间戳
格式
TimeStamp是tcp报⽂头部的⼀个可选项,⼀共占⽤10个字节,格式如下:
kind(1字节)length(1字节)info(8字节)
其中info字段⼜分为下⾯2个部分
timestamp(4字节)timestamp echo(4字节)
tcp的时间戳主要解决了2个问题
计算往返时延RTT
防⽌序列号回绕问题
计算往返时延
⽐如现在a向b发送⼀个报⽂s1,b向a回复ACK报⽂s2,那么:
1. a向b发送报⽂时,timestamp中存放的时间戳就是a主机此时的内核时间ta1
2. b向a回复报⽂时,timestamp中存放的就是b主机此时的时间tb1,timestamp 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头部中时间戳的作⽤。后⾯还有更深⼊、更多使⽤的场景讲解,这个系列的⽂章会很长。
开始下⼀篇吧。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论