一个SOCKET选项导致的UDP通信问题
2013-09-17 19:13
399 查看
场景:两台服务器,在不同路由器下,我们称之为服务器A和B,现在C向A发送UDP包,A可以收到;同样的程序,C向B发送成UDP包,B却只能收到一个包,后面全部没有到达网卡(tcpdump抓包显示)。
然后就是紧张的排查了,尝试用自己写的程序替换C的程序,结果发送到A和B都成功;这时候意识到一个问题,C原来的程序肯定有问题,于是去查看代码,最终发现唯一区别是socket选项,于是我们把那些选项一个个屏蔽,最终找到一个:SO_NO_CHECK
于是百度上google一下:
SO_NO_CHECK,打开或关闭校验和。该操作根据option_value的值,设置sock->sk->sk_no_check。
尼玛,原来是这玩意!阿三写的SDK真坑爹,校验和关闭了,很多路由器收到这个包就会丢掉,服务器能收到才怪。
然后就是紧张的排查了,尝试用自己写的程序替换C的程序,结果发送到A和B都成功;这时候意识到一个问题,C原来的程序肯定有问题,于是去查看代码,最终发现唯一区别是socket选项,于是我们把那些选项一个个屏蔽,最终找到一个:SO_NO_CHECK
于是百度上google一下:
SO_NO_CHECK,打开或关闭校验和。该操作根据option_value的值,设置sock->sk->sk_no_check。
尼玛,原来是这玩意!阿三写的SDK真坑爹,校验和关闭了,很多路由器收到这个包就会丢掉,服务器能收到才怪。
相关文章推荐
- SOCKET客户端与服务端长时间通信后,会连接不上服务端的问题,以及server端UDP丢包的问题
- weblogic 出现 java.net.SocketException 异常可能是一个页面的小问题导致的。
- Java 的 Socket 服务器和客户端通信的例子 存在一个小问题
- 一个简单UDP通信程序的问题
- 有关socket通信包大小的问题总结(UDP传输模式)
- 关于udp socket recvfrom函数的一个易错问题: 如果应用程序指定的接收长度不够怎么办?
- 一个关于UDP socket服务端接收长度不正确的问题
- Java 的 Socket 服务器和客户端通信的例子 存在一个小问题
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)(解决不可连的问题,解决方案在最后面)
- 一个关于UDP通信端口的问题
- 监听socket被子进程继承导致的通信问题
- 有关socket通信包大小的问题总结(UDP传输模式)
- socket编程实现一个简单的多人通信(udp)
- 处理Python中urllib2/mechanize库进行socket通信超时的问题
- 关于Android 的Socket请求导致应用卡的问题
- 记一个TCP通信问题的排查
- 调试一个socket通信bug的心理过程和反思
- Socket UDP通信之 AsyncUdpSocket的使用方法及二次封装
- sql_mode导致初始化mariadb-10.0.6失败的一个问题
- socket通信需要注意的问题