Chinaunix

标题: 请问如何让 数据包 携带自定义固定的时间戳? [打印本页]

作者: flash78910    时间: 2017-04-19 10:37
标题: 请问如何让 数据包 携带自定义固定的时间戳?
本帖最后由 flash78910 于 2017-04-19 10:42 编辑

时间戳是我自己获取的(struct timeval),在发送端获取时间戳,要在接收端提取出来另作用处。有那么几个想法:

1、sk_buff 中的 tstamp 成员。
     我在发端可以修改,但是根据 sk_buff 时间戳的更新原理,这个成员在收端接收时就会更新。也就是说无法固定,想要在路由或传输过程中不更新这个成员能做到吗?这个貌似是内核通过检查 netstamp_needed 来确定时间戳的更新(参考处:http://cxw06023273.iteye.com/blog/867159)。关于这个成员我还有些疑问,是否在 skb 的传输过程中,tstamp成员不占空间?因为这个成员不属于一个完整数据包的某个字段,例如IP包等。所以说,我用这个成员承载固定的时间戳是否可行?

2、利用IP报头的选项字段。
     本身IP固定报头的话20字节,在选项字段里添加时间戳,然后在收端提取。我也查阅过IP选项时间戳的一些资料,貌似还会记录路径IP,其实我用不了这么复杂,就只添加个发端时间戳就行,而且能在收端提取就行。

对于第二种想法,我不太想改动报头,但只要能实现,其他方法也可以。第一个方法我只是先用netfilter在发端试了下,收端的skb时间戳肯定会更新,这个在验证之前也料到了。我内核模块编程也是入门小白,请大家多多指教,谢谢大家!


作者: flash78910    时间: 2017-04-20 15:04
顶上去,虚心求教谢谢大家!
作者: nswcfd    时间: 2017-04-25 18:06
时间戳不是报文的一部分,只是接收方的meta data。

只能记在报文的payload里面,或者可选的ip option或者tcp opt,如果是局域网的话,还可以使用二层payload。
不过要注意收发两端的时钟不匹配的情况。
作者: jerryhua_cu    时间: 2017-04-28 14:49
RFC 1323 TCP Timestamp option 或者加在自己的payload里面
作者: flash78910    时间: 2017-10-20 11:28
回复 4# jerryhua_cu
感谢您的答复。请问如果我使用skb_put()对payload进行了扩展和插入,在接收端提取出插入的数据后,我想再删除插入数据该怎么操作?没找到关于skb_put()的反向操作资料。难道用memmove和skb_pull()配合实现?请不吝赐教,感谢!


作者: jerryhua_cu    时间: 2018-04-02 17:41
flash78910 发表于 2017-10-20 11:28
回复 4# jerryhua_cu
感谢您的答复。请问如果我使用skb_put()对payload进行了扩展和插入,在接收端提取出 ...

skb_trim()





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2