当前位置: 首页 > news >正文

怎么做自动发卡网站推广优化网站排名

怎么做自动发卡网站,推广优化网站排名,开元酒店集团品牌建设,网站开发前端招聘最近在测试Syslog udp发送相关功能,测试环境是centos udp头部的数据长度是2个字节,最大传输长度理论上是65535,除去头部这些字节,可以大概的说是64k。 写了一个超过64k的数据(随便用了一个7w字节的buffer)发送demo,打…

最近在测试Syslog udp发送相关功能,测试环境是centos
udp头部的数据长度是2个字节,最大传输长度理论上是65535,除去头部这些字节,可以大概的说是64k。

写了一个超过64k的数据(随便用了一个7w字节的buffer)发送demo,打印的是:Error: Message too long,sendto返回值是-1。接收端也没有收到

int UDPClient::Send(const char *buffer, int length)66 {67         if (mb_closed) {68                 //HLog(HGET_ERROR<<L"soket was closed.");6970                 return -1;71         }72         int i = sendto(mi_sock_fd, buffer, length, 0,73                 (sockaddr *)&serverAddr, sizeof(serverAddr));7475         fprintf(stderr, "Error: %s\n", strerror(errno));76         return i;77 }

而后又用了一个5w字节的buffer发送,这次发送是正常的
请添加图片描述
接收端开启的是linux自带的rsyslog服务,接收到的日志写入了/var/log/messages,查看文件接收到的数据长度也符合。

请添加图片描述
不过发送端和接收端双端抓包都只抓到一条,且长度不符合发送的长度5w,总共时一个mtu,大概可以知道只是抓到了一个分片,但是后序的包为什么抓不到呢
tcpdump -i ens192 -vvvv -s0 udp port 514
请添加图片描述
而后我们再StackOverflow上发现了:

That’s probably because whatever traffic is going to port 5201 consists of UDP packets that are larger than what would fit in a single link-layer packet, so IP has to fragment them.

That filter, unfortunately, will only capture the first fragment, because the OS filtering mechanism that libpcap uses does filtering on a packet-by-packet basis without maintaining any packet history, and either 1) the first fragment of a fragmented UDP packet will contain the full UDP header, and the others will not have any information to identify them as being additional fragments of that fragmented packet (without packet history, the IP identifier doesn’t help) or 2) the UDP header itself is fragmented, in which case the filter won’t work at all (that will probably never happen in practice, but it’s not ruled out by RFC 791). Additional fragments won’t be captured, so you won’t have the full packet.

意思是:当发送到端口的流量包含大于单个链路层数据包能够承载的UDP数据包时,IP层会将这些数据包进行分片处理。第一个UDP数据包的分片会包含完整的UDP头部,但后续的分片则不包含UDP头部。由于过滤机制是基于单个数据包进行的,且没有维护数据包历史,因此后续的分片在没有额外信息的情况下无法被识别为属于同一个原始UDP数据包的碎片。IP标识符虽然可以用于区分不同的分片是否属于同一个原始IP数据包,但它并不足以在没有额外上下文的情况下确定这些分片是否属于同一个UDP会话。

所以调整下抓包命令,去掉端口参数,发现可以抓到完整的包。
tcpdump -i ens192 -vvvv -s0 udp -w /tmp/20240703.pcap
请添加图片描述
所以:udp发送超过64k(大概的数字,除去ip和udp头部长度),需要开发人员在应用层把消息分片,不然系统的发送接口sendto会报错(message too long),返回-1,发送失败,接收端收不到任何消息。

如果消息长度是64k以内,不需要开发人员在应用层分片,发送不会失败,但是单次最大长度是1500-头部,大概1400多,也就是会分片传多次,接收端会自行会重组数据的,但不会校验,如果在传输过程中有数据包丢失或损坏,接收端可能无法重组出完整的数据。接收端无法重组出完整的数据,那么这个包整个会被放弃,所以udp传输要么全部收到,要么全部收不到,没有收到一半的情况

http://www.15wanjia.com/news/42811.html

相关文章:

  • 帝国系统做网站地图深圳的seo网站排名优化
  • 哪个网站可以做批发玻璃胶培训网络营销的机构
  • 网站建设费用贵不贵网上做推广怎么收费
  • 网站开发中的3p技术百度网站提交了多久收录
  • 重庆市住房和城乡建设厅官方网站百度搜索引擎收录
  • 肇庆市建设企业网站怎么样外贸网络营销
  • 做商城网站建设上海网站排名优化
  • 外贸网站建站费用重庆seo教程
  • 网站建设教程软件企业网站推广方案设计毕业设计
  • 用php做网站教程2021年热门关键词
  • 天猫网站的建设企业网站推广方案策划
  • 个人网站作品欣赏seo课程哪个好
  • 如何看一个网站做的如何免费域名解析网站
  • 专业的网站建设托管国内十大软件测试培训机构
  • 防止做网站的人修改数值手机刷网站排名软件
  • 上海网站建设公司怎么样网站是如何建立的
  • 中文做网站软文营销案例
  • 快速建企业网站怎么快速刷排名
  • 哪个网站可以做身份核验在百度上做广告推广要多少钱
  • 在线电子商务网站开发网络宣传
  • 制作网站价格不一快速推广
  • 室内设计网站哪些号今日小说百度搜索风云榜
  • 怎么把做的页面放到网站上宁波网络推广方法
  • 越秀网站建设推广马鞍山网站seo
  • 有哪些网站是用php做的win7优化大师官方免费下载
  • 建立网站需要分几部进行东莞建设企业网站
  • 怎么在国税网站上做实名认证吗广点通官网
  • 谷歌网站收录提交入口济南疫情最新消息
  • 适合新手模仿的网站关键词列表
  • 做网站的哪里便宜南宁百度seo排名优化软件