udp通信(一)

embedded/2025/4/1 5:47:09/

udp_0">udp通信(一)

udp_1">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.ppmy.cn/embedded/177706.html

相关文章

d2025328

一、sql-判断三角形 610. 判断三角形 - 力扣&#xff08;LeetCode&#xff09; 用一下if加上判断条件 select x,y,z,if(xy > z and xz > y and yz > x and x-y < z and x-z < y and y-z < x,Yes,No) as triangle from Triangle 二、按照分类统计薪水 190…

【Python-OpenCV】手势控制贪吃蛇

用手势玩转经典游戏&#xff1a;打造一个手势控制的贪吃蛇 你是否曾经想过&#xff0c;如果能用手势来控制游戏会是什么体验&#xff1f;今天&#xff0c;我要向大家介绍一个有趣的项目——手势控制贪吃蛇游戏。这个项目结合了计算机视觉和经典游戏&#xff0c;让你可以通过简单…

NX二次开发刻字功能——拉伸功能

在这篇NX二次开发刻字功能——打印文本中已经实现了刻字三步中的第一步,接下来就是拉伸功能了。拉伸的功能就是实现为了后续实现布尔求和或者布尔求差。拉伸功能主要分为两部分:第一部分创建拉伸,第二部分编辑拉伸。 1、创建拉伸。首先是判断是创建拉伸还是编辑拉伸,如果已…

为AI聊天工具添加一个知识系统 之153:因果关系和过程 ,AI工具和模型

本文要点 要点 无意识的习惯 和 有意识的想法。 考虑- 因果关系和过程 一、关于因果关系的讨论 和设想 首先&#xff1a; 从皮尔斯1898年的言论到金正日1995年的言论&#xff0c;在这个世纪里&#xff0c;人们对因果关系没有达成共识。然而&#xff0c;人、动物甚至植物都…

从混乱思绪到清晰表达:记录想法如何改变你的学习人生

关键要点 • 记录想法似乎是发现自己想法并将其组织成可传播形式的最佳理由&#xff0c;研究表明写作和教学能增强学习和理解。 • 证据倾向于支持写作有助于澄清思想&#xff0c;而教学通过“教授效应”深化知识。 • 教学和分享被认为是最有效的学习方法&#xff0c;这与记录…

conda环境下解决gitk乱码模糊

关键词 conda、git、gitk、git gui、模糊、linux、乱码 现象 操作系统&#xff1a;ubuntu24.04 conda版本&#xff1a;25.1.1 正常的终端里gitk显示不会模糊 但是在conda创建的python虚拟环境中使用gitk&#xff0c;字体开始变得模糊不清 分析 根据deepseek的原因原因分析…

Go 语言标准库中encoding/json模块详细功能介绍与示例

Go语言的encoding/json模块提供了丰富的JSON编解码方法&#xff0c;以下是对各主要方法及结构体标签的详细说明和示例&#xff1a; 1. json.Marshal 将Go对象转换为JSON字节切片。 type Person struct {Name string json:"name"Age int json:"age" }…

6-项目负责人-创建项目集

项目集是一组相互关联&#xff0c;且被协调管理的项目集合&#xff0c;处于最高层级&#xff0c;属于战略层面的概念。它可以进行多层级的项目管理&#xff0c;帮助管理者站在宏观的视角去制定战略方向和分配资源。同时它支持分层授权&#xff0c;项目集及下面的子项目集、项目…