CN107104911B - Udp数据包的分割方法和发送方法 - Google Patents
Udp数据包的分割方法和发送方法 Download PDFInfo
- Publication number
- CN107104911B CN107104911B CN201710219325.2A CN201710219325A CN107104911B CN 107104911 B CN107104911 B CN 107104911B CN 201710219325 A CN201710219325 A CN 201710219325A CN 107104911 B CN107104911 B CN 107104911B
- Authority
- CN
- China
- Prior art keywords
- udp
- ipv6
- header
- data
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9057—Arrangements for supporting packet reassembly or resequencing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/08—Protocols for interworking; Protocol conversion
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/167—Adaptation for transition between two IP versions, e.g. between IPv4 and IPv6
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种UDP数据包的分割方法和发送方法,该分割方法使用双向算法映射和计算互联网校验,但并不排除冲突;该发送方法通过构建IPv6 UDP伪包头实现网络协议兼容,并调用校验和函数进行校验。本发明具有如下优点:完成对同一用户兼容IPv4和IPv6两种协议的混合通信。
Description
技术领域
本发明涉及通信领域,具体涉及一种UDP数据包的分割方法和发送方法。
背景技术
当前存在多种请求协议(RFC),如RFC43017(IP协议安全协议),RFC42916(IPv6地址框架),RFC48613(IPv6邻居发现协议),RFC48624(IPv6无状态地址自动配置),RFC24602(IPv6协议)和RFC44435(Internet控制消息协议),共同实现IPv6协议的核心规范。众所周知,从IPv4到IPv6的过渡将持续很长时间,为保证平稳过渡,需要特别关注IPv4和IPv6节点过渡期间的共存问题。
Tunneling(封装)机制允许IPv6孤岛或单节点通过IPv4网络进行通信,其支持两类通道:配置(人工)通道(RFC 4213,2893)和自动通道。目前已有几种实现自动通道的方法,如:IPv4compatible IPv6to IPv4(RFC 3056),IPv6over IPv4(RFC2529),ISATAP,通道代理人(RFC3053)和Teredo。
但当输入负载变大时(大于RFC4213中3.2.1节规定的长度为128字节MTU)所有现有tunneling机制将出现如下问题;当发送端数据过载时,数据包会被返还而不能进入传输通道,造成数据包无法发送,所以必须寻找新的发送机制。
此外,由于中国的CERNet2是当前世界上最大的采用IPv4over IPv6(IETF)技术的IPv6本土骨干网,采用了真实IPv6地址(IETF)且有多个自治系统(AS),因此向具有指定MAC地址通过raw socket发送“cooked”IPv6UDP packet也是具有挑战性的工作。
发明内容
本发明旨在至少解决上述技术问题之一。
为此,本发明的一个目的在于提出一种在超长数据负载条件下的UDP数据包分割方法。
为了实现上述目的,本发明的实施例公开了一种在超长数据负载条件下的UDP数据包分割方法,包括以下步骤:S1:编写IPPROTO_FRAGMENT函数,根据发送的数据协议类型、长度和最大数据包长度确定所需以太网帧数量;S2:编写Ioctl请求,获取硬件地址;S3:定义数据传输常量;S4:用Ioctl函数查找接口名,获取接口MAC地址;通过接口名查找接口索引,并存储在结构体中;S5:指定IPv4源地址、IPv6源地址、目标IPv4地址,并获取目的URL或者IPv6地址;S6:将IPv6数据包分段并增加分段扩展报头,并在每段放置IPv4报头;S7:设置不分段头标和分段头标;S8:在缓冲阵列中构建分段内容;S9:填充分段扩展报头和相应数据段,并复制到以太网帧;S10:发送以太网帧到套接字;S11:接收端从套接字接收,计算以太网校验和;S12:建立IPv6UDP伪包头,调用校验函数进行校验;S13:对接收数据按照分段包头进行组装。
进一步地,使用SIOCGIFHWADDR函数获取所述硬件地址。
进一步地,所述数据传输常量包括以太网帧头长度、IPv4报头长度、IPv6报头长度、UDP报头长度、IPv6分段长度和最大分段数。
进一步地,调用getaddrinfo函数获取所述目的URL或者IPv6地址。
进一步地,Pv6数据包分段长度为1280字节。
根据本发明实施例的在超长数据负载条件下的UDP数据包分割方法,用于链路层超长IPv6UDP数据包(大于1280字节,RFC 4213中3.2.1节规定的最大传输单元),使用双向算法映射和计算互联网校验(RFC 1071),但并不排除冲突。
为此,本发明的另一个目的在于提出一种向特定MAC地址发送“cooked”UDP数据包的方法。
为了实现上述目的,本发明的实施例公开了一种向特定MAC地址发送“cooked”UDP数据包的方法,
进一步地,包括以下步骤:A:定义IP_MAXPACKET,发起ioctl请求;B:定义IPv6报头长度和UDP报头长度;C:为不同阵列分配存储空间;D:获得发送包接口,并为套接字描述接口发送查找请求;E:用ioctl函数查找接口名,获得MAC地址;F:通过接口名查找接口索引,并存储在结构体中;G:指定所述接收方的MAC地址和IPv6源地址,并获取所述接收方的URL或IPv6地址;H:填充sockaddr_ll.UDP数据;I:将所述sockaddr_ll.UDP数据发送到套接字;J:所述接收方从套接字接收,并计算接口检验和;K:相邻两字节重复求和,直到没有或仅剩1个字节为止;L:建立IPv6UDP伪包头,调用校验函数进行校验。
进一步地,调用getaddrinfo函数获取所述接收方的URL或IPv6地址。
进一步地,所述sockaddr_ll.UDP数据包括IPv6版本号,流量等级和流标签。
根据本发明实施例的向特定MAC地址发送“cooked”UDP数据包的方法,通过构建IPv6UDP伪包头实现网络协议兼容,并调用校验和函数(RFC2460的8.1节)进行校验。
本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1是本发明实施例的在超长数据负载条件下的UDP数据包分割方法的流程图;
图2是本发明实施例的向特定MAC地址发送cooked的UDP数据包的方法的流程图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
参照下面的描述和附图,将清楚本发明的实施例的这些和其他方面。在这些描述和附图中,具体公开了本发明的实施例中的一些特定实施方式,来表示实施本发明的实施例的原理的一些方式,但是应当理解,本发明的实施例的范围不受此限制。相反,本发明的实施例包括落入所附加权利要求书的精神和内涵范围内的所有变化、修改和等同物。
以下结合附图描述本发明。
图1是本发明实施例的在超长数据负载条件下的UDP数据包分割方法的流程图。如图1所示,根据本发明实施例的在超长数据负载条件下的UDP数据包分割方法,包括以下步骤:
S1:编写IPPROTO_FRAGMENT函数,根据发送的数据协议类型、长度和最大数据包长度确定所需以太网帧数量。
其中,INET_ADDRSTRLEN //IPv4协议数据
INET6_ADDRSTRLEN //IPv6协议数据
IP_MAXPACKET //最大数据包长度,设为65535字节
S2:编写Ioctl请求,获取硬件地址。
在本发明的一个实施例中,使用SIOCGIFHWADDR函数获取硬件地址。
S3:定义数据传输常量。
在本发明的一个实施例中,数据传输常量包括:
自定义函数声明。
S4:用Ioctl函数查找接口名,获取接口MAC地址;通过接口名查找接口索引,并存储在结构体中。
S5:指定IPv4源地址、IPv6源地址、目标IPv4地址(作为6to4的任意播(anycast)地址,该地址不改变),并获取目的URL或者IPv6地址。在本发明的一个实施例中,调用getaddrinfo函数获取目的URL或者IPv6地址。
S6:将IPv6数据包分段并增加分段扩展报头,并在每段放置IPv4报头(按照6to4配置合理设置),此时数据负载长度为1280-IP4_HDRLEN-IP6_HDRLEN-FRG_HDRLEN。
S7:设置不分段头标和分段头标。其中,设置下一个头标(8bits):不分段为17(UDP在IP报文的协议号是17);分段为44,否则ICMP校验和会出错。
S8:在缓冲阵列中构建分段内容。
S9:填充分段扩展报头和相应数据段,并复制到以太网帧,此时以太网帧长度=帧头(MAC+MAC+以太网类型)+数据(IPv4报头+IPv6报头+分段报头+分段数据)。
S10:发送以太网帧到套接字。
S11:接收端从套接字接收,计算以太网校验和(参见RFC1071),不排除冲突。
S12:建立IPv6UDP伪包头,调用校验函数进行校验参见RFC2460第8.1节);
S13:对接收数据按照分段包头进行组装。
根据本发明实施例的在超长数据负载条件下的UDP数据包分割方法,用于链路层超长IPv6UDP数据包(大于1280字节,RFC 4213中3.2.1节规定的最大传输单元),使用双向算法映射和计算互联网校验(RFC 1071),但并不排除冲突。
图2是本发明实施例的向特定MAC地址发送cooked的UDP数据包的方法的流程图。如图2所示,根据本发明实施例的向特定MAC地址发送“cooked”UDP数据包的方法,包括以下步骤:
A:定义IP_MAXPACKET(为65535),发起ioctl请求(使用SIOCGIFHWADDR获取MAC地址)。
B:定义IPv6报头长度和UDP报头长度。其中,
#define IP6_HDRLEN 40 //IPv6报头长度
#define UDP_HDRLEN 8 //UDP报头长度,不包括数据。
自定义函数声明。
C:为不同阵列分配存储空间。
D:获得发送包接口,并为套接字描述接口发送查找请求。
E:用ioctl函数查找接口名,获得MAC地址;
F:通过接口名查找接口索引,并存储在结构体中;
G:指定接收方的MAC地址和IPv6源地址,并获取接收方的URL或IPv6地址。在本发明的一个实施例中,调用getaddrinfo函数获取接收方的URL或IPv6地址。
H:填充sockaddr_ll.UDP数据。在本发明的一个实施例中,sockaddr_ll.UDP数据包括IPv6版本号(4位),流量等级(8位)和流标签(20位)。
I:将sockaddr_ll.UDP数据发送到套接字。
J:接收方从套接字接收,并计算接口检验和(参考RFC1071),此处的校验并不能排除冲突。
K:相邻两字节重复求和,直到没有或仅剩1个字节为止;
L:建立IPv6UDP伪包头,调用校验函数进行校验(参考RFC2460第8.1节)。
本发明实施例的向特定MAC地址发送“cooked”UDP数据包的方法,通过构建IPv6UDP伪包头实现网络协议兼容,并调用校验和函数(RFC2460的8.1节)进行校验。
经过测试,本发明实施例的在超长数据负载条件下的UDP数据包分割方法和向特定MAC地址发送“cooked”UDP数据包的方法,均可与基于IPv6的物联网,内容中心网络(CCN),以及信息中心网络(ICN)很好地兼容。
另外,本发明实施例的UDP数据包的分割方法和发送方法的其它构成以及作用对于本领域的技术人员而言都是已知的,为了减少冗余,不做赘述。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同限定。
Claims (8)
1.一种在超长数据负载条件下的UDP数据包分割方法,其特征在于,包括以下步骤:
S1:编写IPPROTO_FRAGMENT函数,根据发送的数据协议类型、长度和最大数据包长度确定所需以太网帧数量;
S2:编写Ioctl请求,获取硬件地址;
S3:定义数据传输常量;
S4:用Ioctl函数查找接口名,获取接口MAC地址;通过接口名查找接口索引,并存储在结构体中;
S5:指定IPv4源地址、IPv6源地址、目标IPv4地址,并获取目的URL或者IPv6地址;
S6:将IPv6数据包分段并增加分段扩展报头,并在每段放置IPv4报头;
S7:设置不分段头标和分段头标;
S8:在缓冲阵列中构建分段内容;
S9:填充分段扩展报头和相应数据段,并复制到以太网帧;
S10:发送以太网帧到套接字;
S11:接收端从套接字接收,计算以太网校验和;
S12:建立IPv6 UDP伪包头,调用校验函数进行校验;
S13:对接收数据按照分段包头进行组装。
2.根据权利要求1所述的在超长数据负载条件下的UDP数据包分割方法,其特征在于,使用SIOCGIFHWADDR函数获取所述硬件地址。
3.根据权利要求1所述的在超长数据负载条件下的UDP数据包分割方法,其特征在于,所述数据传输常量包括以太网帧头长度、IPv4报头长度、IPv6报头长度、UDP报头长度、IPv6分段长度和最大分段数。
4.根据权利要求1所述的在超长数据负载条件下的UDP数据包分割方法,其特征在于,调用getaddrinfo函数获取所述目的URL或者IPv6地址。
5.根据权利要求1所述的在超长数据负载条件下的UDP数据包分割方法,其特征在于,Pv6数据包分段长度为1280字节。
6.一种向特定MAC地址发送“cooked”UDP数据包的方法,其特征在于,包括以下步骤:
A:定义IP_MAXPACKET,发起ioctl请求;
B:定义IPv6报头长度和UDP报头长度;
C:为不同阵列分配存储空间;
D:获得发送包接口,并为套接字描述接口发送查找请求;
E:用ioctl函数查找接口名,获得MAC地址;
F:通过接口名查找接口索引,并存储在结构体中;
G:指定接收方的MAC地址和IPv6源地址,并获取所述接收方的URL或IPv6地址;
H:填充sockaddr_ll.UDP数据;
I:将所述sockaddr_ll.UDP数据发送到套接字;
J:所述接收方从套接字接收,并计算接口检验和;
K:相邻两字节重复求和,直到没有或仅剩1个字节为止;
L:建立IPv6 UDP伪包头,调用校验函数进行校验。
7.根据权利要求6所述的向特定MAC地址发送“cooked”UDP数据包的方法,其特征在于,调用getaddrinfo函数获取所述接收方的URL或IPv6地址。
8.根据权利要求6所述的向特定MAC地址发送“cooked”UDP数据包的方法,其特征在于,所述sockaddr_ll.UDP数据包括IPv6版本号,流量等级和流标签。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710219325.2A CN107104911B (zh) | 2017-04-06 | 2017-04-06 | Udp数据包的分割方法和发送方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710219325.2A CN107104911B (zh) | 2017-04-06 | 2017-04-06 | Udp数据包的分割方法和发送方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107104911A CN107104911A (zh) | 2017-08-29 |
CN107104911B true CN107104911B (zh) | 2020-02-14 |
Family
ID=59674865
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710219325.2A Expired - Fee Related CN107104911B (zh) | 2017-04-06 | 2017-04-06 | Udp数据包的分割方法和发送方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107104911B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109922057A (zh) * | 2019-02-27 | 2019-06-21 | 智慧海派科技有限公司 | 基于帧序的udp数据重组方法 |
CN111030985A (zh) * | 2019-10-29 | 2020-04-17 | 视联动力信息技术股份有限公司 | 一种数据包发送方法和装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100882353B1 (ko) * | 2006-12-01 | 2009-02-12 | 한국전자통신연구원 | 인터넷 프로토콜 버전 4 네트워크의 서버에서의 터널네트워크인터페이스 구축 및 터널네트워크인터페이스를 이용한 패킷 송/수신 방법 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1254748C (zh) * | 2003-10-31 | 2006-05-03 | 清华大学 | 存储区域网络中分布式虚拟化存储的方法 |
CN100579117C (zh) * | 2005-09-07 | 2010-01-06 | 北京中星微电子有限公司 | 一种udp网络传输音频数据方法 |
US8775817B2 (en) * | 2008-05-12 | 2014-07-08 | Microsoft Corporation | Application-configurable distributed hash table framework |
CN101645823B (zh) * | 2009-09-02 | 2012-01-04 | 杭州华三通信技术有限公司 | 一种6to4隧道的压缩方法及装置 |
-
2017
- 2017-04-06 CN CN201710219325.2A patent/CN107104911B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100882353B1 (ko) * | 2006-12-01 | 2009-02-12 | 한국전자통신연구원 | 인터넷 프로토콜 버전 4 네트워크의 서버에서의 터널네트워크인터페이스 구축 및 터널네트워크인터페이스를 이용한 패킷 송/수신 방법 |
Also Published As
Publication number | Publication date |
---|---|
CN107104911A (zh) | 2017-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7970928B2 (en) | Transparent auto-discovery of network devices logically located between a client and server | |
US6891830B2 (en) | Method and apparatus for automatically determining an appropriate transmission method in a network | |
KR100453056B1 (ko) | 동적 ip 네트워크 상에서의 pmtu 변경 방법 및 그장치 | |
US20050138166A1 (en) | IP network node and middleware for establishing connectivity to both the IPv4 and IPv6 networks | |
US20040205247A1 (en) | Apparatus and method for performing traffic flow template packet filtering according to internet protocol versions in a mobile communication system | |
WO2018010529A1 (en) | Method and apparatus for an information-centric mac layer | |
CN111988266B (zh) | 一种处理报文的方法 | |
WO2017162117A1 (zh) | 一种集群精确限速方法和装置 | |
Sun et al. | The Internet underwater: An IP-compatible protocol stack for commercial undersea modems | |
CN107104911B (zh) | Udp数据包的分割方法和发送方法 | |
Mun et al. | Understanding IPv6 | |
US6963568B2 (en) | Method for transmitting data packets, method for receiving data packets, data packet transmitter device, data packet receiver device and network including such devices | |
US20060107168A1 (en) | Method and apparatus for transmitting/receiving virtual block information for multiple segment recovery in data network using transmission control protocol | |
US20010052025A1 (en) | Router setting method and router setting apparatus | |
Hossain et al. | Performance analysis of three transition mechanisms between IPv6 network and IPv4 network: Dual Stack, Tunneling and Translation | |
Mellor et al. | Bi-directional mapping system as a new IPv4/IPv6 translation mechanism | |
WO2009109128A1 (zh) | 一种完全头部信息报文配置的方法和装置 | |
CN114745456A (zh) | 报文处理方法、装置及网络地址转换设备 | |
KR100624686B1 (ko) | 패킷 투 빅 메시지를 이용하여 아이피브이식스 천이터널에서 패킷 최대전송단위를 설정하는 시스템 및 그 방법 | |
Bilski | Network performance issues in IP transition phase | |
US20240015235A1 (en) | Bluetooth internet protocol packet transmitting device and method | |
JP7008714B2 (ja) | 通信装置 | |
Chauhan et al. | Network optimization of IPv6 networks using tunnel header compression | |
US20150230121A1 (en) | Mtc device, serving node, and various methods for implementing a downlink stack reduction feature | |
Herrero et al. | Network and Transport Layers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200214 Termination date: 20210406 |
|
CF01 | Termination of patent right due to non-payment of annual fee |