网络包出错概率

tcp,udp的校验和很弱,简单点看就是全部加起来取反,连顺序错误的问题都不能防止,位数也不多,16位。岂不是有1/65536的概率出错也检测不出来?

注意以太网那层是crc校验,两个合在一起,出错没检测出来的概率大大降低。

万一出错,应用层可以再做一次校验,如果真的这样,最怕的是协议的每一帧不定长,一旦出错边界完全错乱,错乱中甚至非常小概率请求被错误解读,不过多数情况是数据从此不可用。

这么倒霉,只能重启应用或者重启机器了。

UDP长度,sendto时系统有个限制:

{

socklen_t optlen = sizeof(int);

int optval;

getsockopt(inet_sock, SOL_SOCKET, SO_SNDBUF, (int *)&optval, &optlen);

printf("%d\n", optval);

}

一台机器上跑出来是124928,但这不是唯一限制,另一个限制是udp长度位16位,实际测出来最大是64*1024-29,大于这个数报Message Too long.

udp包长度设小,出错概率更低,因为校验变多了,比如可以设到一个mtu以内。

时间: 2024-10-28 18:17:00

网络包出错概率的相关文章

Openvswitch原理与代码分析(4):网络包的处理过程

? 在上一节提到,Openvswitch的内核模块openvswitch.ko会在网卡上注册一个函数netdev_frame_hook,每当有网络包到达网卡的时候,这个函数就会被调用. ? static struct sk_buff *netdev_frame_hook(struct sk_buff *skb) { ???if (unlikely(skb->pkt_type == PACKET_LOOPBACK)) ??????return skb; ? ???port_receive(skb)

c#网络包的编解码

之前写过一篇关于c#udp分包发送的文章 这篇文章里面介绍的方法是一种实现,但是存在一个缺点就是一个对象序列化后会增大很多,不利于在网络中的传输. 我们在网络中的传输是需要尽可能的减小传送的数据包的大小,于是我参考了网上一些资料和一些开源的项目(http://www.fishlee.net/)这个上面的那个开源的飞鸽传输的框架, 其实也就是把要传送的数据按照某种规定放在一个byte数组中,然后接收到后按照相应的格式把数据解析出来,为了减小数据还使用了GZipStream的压缩,之前出的问题就是在

【原创】使用Fiddler抓取手机网络包

一: 下载安装Fiddler 二: 打开 tools--Telerik Fiddler Options, 进行如下设置 三: 重启Fiddler 四: 查看电脑IP 五: 手机连接到和电脑同一个局域网的Wifi 六: 设置手机Wifi代理 七: 手机浏览器打开 http://192.168.5.125:8010 , 点击 FiddlerRoot certificate 下载并安装证书. 八: 重新连接手机Wifi 在通过手机打开网页,就可以在Fiddler里看到网络包了.

OpenStack neutron vlan 模式下的网络包流向

时间:2015-01-15 18:09:41 1.什么是Neutron? Neutron是OpenStack的network project ,是NaaS(networking-as-a-service)专题,负责网络虚拟化,开始于OpenStack的Folsom版,取名为Quantum,在Havana版本改名为Neutron.Neutron并非提供特定的网络功能,而是为了管理网络,提供网络服务,你可以使用不同厂商开发的插件,在同一个架构中可以同时拥有多种网络模式(vlan.gre.vxlan等

c#基于事件模型的UDP通讯框架(适用于网络包编解码)

之前写过一篇关于c#udp分包发送的文章 这篇文章里面介绍的方法是一种实现,可是存在一个缺点就是一个对象序列化后会增大非常多.不利于在网络中的传输. 我们在网络中的传输是须要尽可能的减小传送的数据包的大小.于是我參考了网上一些资料和一些开源的项目(http://www.fishlee.net/)这个上面的那个开源的飞鸽传输的框架. 事实上也就是把要传送的数据依照某种规定放在一个byte数组中,然后接收到后依照对应的格式把数据解析出来,为了减小数据还使用了GZipStream的压缩,之前出的问题就

使用charles proxy for Mac来抓取手机App的网络包

之前做Web项目的时候,经常会使用Fiddler(Windows下).Charles Proxy(Mac下)来抓包,调试一些东西:现在搞Android App开发,有时候也需要分析手机App的网络请求,包括参数.返回值等.在Mac上也是可以继续使用Charles Proxy来抓Android App发出的网络包的,大概的几个步骤: 1.保证手机和Mac连接的是同一个无线局域网 2.在Mac上打开Charles Proxy,菜单栏操作:Proxy→Proxy Setting,检查端口,一般保持默认

cocos2d-x3.2 NDK10导出Android包出错

1.错误问题 /Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.cpp:94:23: error:    return type of out-of-line definition of 'cocos2d::BundleReader::tell'   differs from that in the declaration ssize_t BundleReader::tell() 2.解决方法,声明Bund

Fiddler抓手机网络包

Fiddler是一个强大的http和https抓包工具,在移动开发中,用Fiddler给手机抓网络包对开发和调试带来极大的好处.下面介绍一下具体用法: 1.第一步设置手机代理,打开手机网络设置,改为手动设置代理,ip地址写上自己电脑的IP,端口号写8888(因为finddler默认监听的端口号是8888,如果电脑8888端口号有冲突可以在fiddler里修改) 2.完成第一步后就可以抓取从手机端的HTTP包了,如果自己的客户端有HTTPS请求,非正式环境可以设置跳过证书校验,如果是正式环境则需要

OceanBase server处理网络包的回调逻辑

OceanBase处理网络包的逻辑还是蛮绕的,这里以UPS为例,作为给自己的备忘. UPS代码的main.cpp中调用ObUpdateServerMain的start启动server.start函数会调用ObUpdateServerMain的do_work函数,此函数调用ObUpdateServer类的start启动UPS. ObUpdateServer继承自如下几个类: 1)common::ObBaseServer,基础的server类,要求派生类实现handlePacket和handleBa