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

udp通信(一)

udp通信(一)

1、udp包的格式

 public class UdpData{public byte[] SourcePort = new byte[2];public byte[] DestinationPort = new byte[2];public byte[] Length = new byte[2];//=Data.length+8;public byte[] Checksum = new byte[2];public byte[] Data = new byte[1472];//<1472}
第0-15位第16-31位
源端口目标端口
包长度校验和
datadata

2.IPV4包的格式

 public class  IpV4//udp包的IP包格式{//header ***********************public BitArray Version=new (4);//4public BitArray HeaderLength = new BitArray(4);public byte TypeOfService;//8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示,最小延时,最大吞吐量,最高可靠性,最小成本。public byte[] TotalLength = new byte[2];//=Data.length+20+options.length//32bitpublic byte[] FragmentId = new byte[2];//报文分片IDpublic BitArray R = new BitArray(1);        public BitArray DF = new BitArray(1);//1表示禁止分片,0表示分片public BitArray MF = new BitArray(1);//0表示最后一片,1表示前面分片public BitArray FragmentOffset = new BitArray(13);//报文分片偏移//***************************//*传输分片报文时,同一分片ID的报文, offset从0 起,offset+本分片长度=下一报文offset,如果MF=0;表示最后一个分片//32bitpublic byte TimeToLive;//64,包转跳一次,TTL -=1;public byte Protocol;//1:ICMP,2:IGMP,6:TCP,17:UDP;public BitArray HeaderChecksum = new BitArray(16);//32bitpublic byte[] SourceIPAddress=new byte[4];//32bitpublic byte[] DestinationIPAddress = new byte[4];//32bitpublic byte[] Options = new byte[0];//最小0,最大40bytes//假定为0;//header end ****************************public UdpData Data;//n*4 对齐四个字节 }
0-3位4-7位8-15位16-31位
VersionHeaderLengthTypeOfServiceLength
0-15位16位17位18位19-31位
FragmentIDRDFMFFragmentOffset
0-7位8-15位16-31位
TimeToLiveProtocolHeaderChecksum
0-31位
SourceIPAddress
DestinationIPAddress
Options(变长,假定为4字节)
UdpData Package(n*4字节)

3.以太网包格式

 public class EtherNetFrame{public byte[] EthernetFramePreamble = [0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAB];public byte[] SourceMac = new byte[6];public byte[] DestinationMac = new byte[6];public byte[] TypeOrLength = new byte[2];//MTU 的长度:0x0000-0x05dc Ethernet II;0xFFFF: Novell,0xAAAA: Ethernet SNAP, 0x0800:IP,0x0806:ARP, 0x8035:Novell,0x8137:IPX,0x809B: Apple talk//LLC******public Byte DSAP;//destination Service access point;public Byte SSAP;//source Service access point;SAP:0,4,6,AA,FEpublic Byte Control;//0x03//*****************//SNAP****************public byte[] OrgCode = new byte[3];//0public byte[] TypeOfProtocol = new byte[2];//0x8137,SSAP=0xAA;//********************public IpV4 udpMtu;//maxLength=1500;public byte[] FrameChecksum = new byte[4];//FCSpublic byte[] EthernetFrameEndCode = [0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA];}
0-78-1516-2324-31位
0xAA0xAA0xAA0xAA
0xAA0xAA0xAA0xAB
SourceMacSourceMacSourceMacSourceMac
SourceMacSourceMacDestinationMacDestinationMac
DestinationMacDestinationMacDestinationMacDestinationMac
TypeOrLengthTypeOrLengthDSAPSSAP
ControlOrgCodeOrgCodeOrgcode
TypeOfProtocolTypeOfProtocolIPV4IPV4
IPV4IPV4IPV4IPV4
FrameChecksumFrameChecksumFrameChecksumFrameChecksum
0xAA0xAA0xAA0xAA
0xAA0xAA0xAA0xAA

需要注意的是
(1)以太网传输时,低字节在前,高字节在后
(2)不同版本格式不同。
(3)真正编程时,我们关心的是本地IP,Port,远端IP 和Port,基本是从Socket开始的,校验、组包等底层工作,由网络驱动程序来完成,程序员不用关心。
如何编程,待续。。。。


http://www.mrgr.cn/news/96327.html

相关文章:

  • Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)
  • 项目-苍穹外卖(十六) Apache ECharts+数据统计
  • 在 React 中,组件之间传递变量的常见方法
  • apache连接池机制讨论
  • Windows 我的世界 Minecraft 服务器搭建,Fabric 模组搭建教程(内网穿透)
  • 1.2-WAF\CDN\OSS\反向代理\负载均衡
  • 51c嵌入式~MOS~合集1
  • 数据库理论基础
  • 为什么使用Flask + uWSGI + Nginx 部署服务?
  • C笔记20250325
  • EF Core 乐观并发控制(并发令牌)
  • Flask项目部署:Flask + uWSGI + Nginx
  • Numpy用法(二)
  • Python每日一题(7)
  • SpringMVC 拦截器(Interceptor)
  • SpringCloud+Mybatis-Plus+Docker+RabbitMQ+Redis+Elasticsearch黑马商城
  • 大模型微调环境配置
  • Gateway实战(二)、负载均衡
  • 【云服务器】在 Linux(Ubuntu / CentOS 7)上快速搭建我的世界 Minecraft 服务器,并实现远程联机,详细教程
  • Nginx 优化