原来游戏中客户端为了获取与服务器之前的网络连接状况,添加了一个ping的模块,这个地方没有仔细看过,一直存在一个问题是从监控日志上可以看到某些时候会突然出现一个很大的值,玩家就是网络再烂应该也不会出现的。最近有空写了一下日志才发现问题所在,简单得不可思议,Bug在于收到ICMP回包之后没有对数据包做校验就取时间戳计算耗时了。
而底层收上来的ICMP包,有可能是路过的ICMP广播,这样就会带来计算错误。
其实在ICMP的协议中本身就预留了标识位用以区分是否是返回给自己的ping包,没有仔细读一下协议呀,罪过罪过!
备忘一下: ICMP协议的rfc
http://www.faqs.org/rfcs/rfc792.html
RFC真的名符其实Request for Comments,除了问题才想起翻翻。