欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

UDP數(shù)據(jù)包的分割方法和發(fā)送方法與流程

文檔序號:11436593閱讀:4525來源:國知局
UDP數(shù)據(jù)包的分割方法和發(fā)送方法與流程

本發(fā)明涉及通信領(lǐng)域,具體涉及一種udp數(shù)據(jù)包的分割方法和發(fā)送方法。



背景技術(shù):

當(dāng)前存在多種請求協(xié)議(rfc),如rfc43017(ip協(xié)議安全協(xié)議),rfc42916(ipv6地址框架),rfc48613(ipv6鄰居發(fā)現(xiàn)協(xié)議),rfc48624(ipv6無狀態(tài)地址自動配置),rfc24602(ipv6協(xié)議)和rfc44435(internet控制消息協(xié)議),共同實(shí)現(xiàn)ipv6協(xié)議的核心規(guī)范。眾所周知,從ipv4到ipv6的過渡將持續(xù)很長時間,為保證平穩(wěn)過渡,需要特別關(guān)注ipv4和ipv6節(jié)點(diǎn)過渡期間的共存問題。

tunneling(封裝)機(jī)制允許ipv6孤島或單節(jié)點(diǎn)通過ipv4網(wǎng)絡(luò)進(jìn)行通信,其支持兩類通道:配置(人工)通道(rfc4213,2893)和自動通道。目前已有幾種實(shí)現(xiàn)自動通道的方法,如:ipv4compatibleipv6toipv4(rfc3056),ipv6overipv4(rfc2529),isatap,通道代理人(rfc3053)和teredo。

但當(dāng)輸入負(fù)載變大時(大于rfc4213中3.2.1節(jié)規(guī)定的長度為128字節(jié)mtu)所有現(xiàn)有tunneling機(jī)制將出現(xiàn)如下問題;當(dāng)發(fā)送端數(shù)據(jù)過載時,數(shù)據(jù)包會被返還而不能進(jìn)入傳輸通道,造成數(shù)據(jù)包無法發(fā)送,所以必須尋找新的發(fā)送機(jī)制。

此外,由于中國的cernet2是當(dāng)前世界上最大的采用ipv4overipv6(ietf)技術(shù)的ipv6本土骨干網(wǎng),采用了真實(shí)ipv6地址(ietf)且有多個自治系統(tǒng)(as),因此向具有指定mac地址通過rawsocket發(fā)送“cooked”ipv6udppacket也是具有挑戰(zhàn)性的工作。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明旨在至少解決上述技術(shù)問題之一。

為此,本發(fā)明的一個目的在于提出一種在超長數(shù)據(jù)負(fù)載條件下的udp數(shù)據(jù)包分割方法。

為了實(shí)現(xiàn)上述目的,本發(fā)明的實(shí)施例公開了一種在超長數(shù)據(jù)負(fù)載條件下的udp數(shù)據(jù)包分割方法,包括以下步驟:s1:編寫ipproto_fragment函數(shù),根據(jù)發(fā)送的數(shù)據(jù)協(xié)議類型、長度和最大數(shù)據(jù)包長度確定所需以太網(wǎng)幀數(shù)量;s2:編寫ioctl請求,獲取硬件地址;s3:定義數(shù)據(jù)傳輸常量;s4:用ioctl函數(shù)查找接口名,獲取接口mac地址;通過接口名查找接口索引,并存儲在結(jié)構(gòu)體中;s5:指定ipv4源地址、ipv6源地址、目標(biāo)ipv4地址,并獲取目的url或者ipv6地址;s6:將ipv6數(shù)據(jù)包分段并增加分段擴(kuò)展報頭,并在每段放置ipv4報頭;s7:設(shè)置不分段頭標(biāo)和分段頭標(biāo);s8:在緩沖陣列中構(gòu)建分段內(nèi)容;s9:填充分段擴(kuò)展報頭和相應(yīng)數(shù)據(jù)段,并復(fù)制到以太網(wǎng)幀;s10:發(fā)送以太網(wǎng)幀到套接字;s11:接收端從套接字接收,計(jì)算以太網(wǎng)校驗(yàn)和;s12:建立ipv6udp偽包頭,調(diào)用校驗(yàn)函數(shù)進(jìn)行校驗(yàn);s13:對接收數(shù)據(jù)按照分段包頭進(jìn)行組裝。

進(jìn)一步地,使用siocgifhwaddr函數(shù)獲取所述硬件地址。

進(jìn)一步地,所述數(shù)據(jù)傳輸常量包括以太網(wǎng)幀頭長度、ipv4報頭長度、ipv6報頭長度、udp報頭長度、ipv6分段長度和最大分段數(shù)。

進(jìn)一步地,調(diào)用getaddrinfo函數(shù)獲取所述目的url或者ipv6地址。

進(jìn)一步地,pv6數(shù)據(jù)包分段長度為1280字節(jié)。

根據(jù)本發(fā)明實(shí)施例的在超長數(shù)據(jù)負(fù)載條件下的udp數(shù)據(jù)包分割方法,用于鏈路層超長ipv6udp數(shù)據(jù)包(大于1280字節(jié),rfc4213中3.2.1節(jié)規(guī)定的最大傳輸單元),使用雙向算法映射和計(jì)算互聯(lián)網(wǎng)校驗(yàn)(rfc1071),但并不排除沖突。

為此,本發(fā)明的另一個目的在于提出一種向特定mac地址發(fā)送“cooked”udp數(shù)據(jù)包的方法。

為了實(shí)現(xiàn)上述目的,本發(fā)明的實(shí)施例公開了一種向特定mac地址發(fā)送“cooked”udp數(shù)據(jù)包的方法,

進(jìn)一步地,包括以下步驟:a:定義ip_maxpacket,發(fā)起ioctl請求;b:定義ipv6報頭長度和udp報頭長度;c:為不同陣列分配存儲空間;d:獲得發(fā)送包接口,并為套接字描述接口發(fā)送查找請求;e:用ioctl函數(shù)查找接口名,獲得mac地址;f:通過接口名查找接口索引,并存儲在結(jié)構(gòu)體中;g:指定所述接收方的mac地址和ipv6源地址,并獲取所述接收方的url或ipv6地址;h:填充sockaddr_ll.udp數(shù)據(jù);i:將所述sockaddr_ll.udp數(shù)據(jù)發(fā)送到套接字;j:所述接收方從套接字接收,并計(jì)算接口檢驗(yàn)和;k:相鄰兩字節(jié)重復(fù)求和,直到?jīng)]有或僅剩1個字節(jié)為止;l:建立ipv6udp偽包頭,調(diào)用校驗(yàn)函數(shù)進(jìn)行校驗(yàn)。

進(jìn)一步地,調(diào)用getaddrinfo函數(shù)獲取所述接收方的url或ipv6地址。

進(jìn)一步地,所述sockaddr_ll.udp數(shù)據(jù)包括ipv6版本號,流量等級和流標(biāo)簽。

根據(jù)本發(fā)明實(shí)施例的向特定mac地址發(fā)送“cooked”udp數(shù)據(jù)包的方法,通過構(gòu)建ipv6udp偽包頭實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議兼容,并調(diào)用校驗(yàn)和函數(shù)(rfc2460的8.1節(jié))進(jìn)行校驗(yàn)。

本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。

附圖說明

本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對實(shí)施例的描述中將變得明顯和容易理解,其中:

圖1是本發(fā)明實(shí)施例的在超長數(shù)據(jù)負(fù)載條件下的udp數(shù)據(jù)包分割方法的流程圖;

圖2是本發(fā)明實(shí)施例的向特定mac地址發(fā)送cooked的udp數(shù)據(jù)包的方法的流程圖。

具體實(shí)施方式

下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。

參照下面的描述和附圖,將清楚本發(fā)明的實(shí)施例的這些和其他方面。在這些描述和附圖中,具體公開了本發(fā)明的實(shí)施例中的一些特定實(shí)施方式,來表示實(shí)施本發(fā)明的實(shí)施例的原理的一些方式,但是應(yīng)當(dāng)理解,本發(fā)明的實(shí)施例的范圍不受此限制。相反,本發(fā)明的實(shí)施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。

以下結(jié)合附圖描述本發(fā)明。

圖1是本發(fā)明實(shí)施例的在超長數(shù)據(jù)負(fù)載條件下的udp數(shù)據(jù)包分割方法的流程圖。如圖1所示,根據(jù)本發(fā)明實(shí)施例的在超長數(shù)據(jù)負(fù)載條件下的udp數(shù)據(jù)包分割方法,包括以下步驟:

s1:編寫ipproto_fragment函數(shù),根據(jù)發(fā)送的數(shù)據(jù)協(xié)議類型、長度和最大數(shù)據(jù)包長度確定所需以太網(wǎng)幀數(shù)量。

其中,inet_addrstrlen//ipv4協(xié)議數(shù)據(jù)

inet6_addrstrlen//ipv6協(xié)議數(shù)據(jù)

ip_maxpacket//最大數(shù)據(jù)包長度,設(shè)為65535字節(jié)

s2:編寫ioctl請求,獲取硬件地址。

在本發(fā)明的一個實(shí)施例中,使用siocgifhwaddr函數(shù)獲取硬件地址。

s3:定義數(shù)據(jù)傳輸常量。

在本發(fā)明的一個實(shí)施例中,數(shù)據(jù)傳輸常量包括:

自定義函數(shù)聲明。

s4:用ioctl函數(shù)查找接口名,獲取接口mac地址;通過接口名查找接口索引,并存儲在結(jié)構(gòu)體中。

s5:指定ipv4源地址、ipv6源地址、目標(biāo)ipv4地址(作為6to4的任意播(anycast)地址,該地址不改變),并獲取目的url或者ipv6地址。在本發(fā)明的一個實(shí)施例中,調(diào)用getaddrinfo函數(shù)獲取目的url或者ipv6地址。

s6:將ipv6數(shù)據(jù)包分段并增加分段擴(kuò)展報頭,并在每段放置ipv4報頭(按照6to4配置合理設(shè)置),此時數(shù)據(jù)負(fù)載長度為1280-ip4_hdrlen-ip6_hdrlen-frg_hdrlen。

s7:設(shè)置不分段頭標(biāo)和分段頭標(biāo)。其中,設(shè)置下一個頭標(biāo)(8bits):不分段為17(udp在ip報文的協(xié)議號是17);分段為44,否則icmp校驗(yàn)和會出錯。

s8:在緩沖陣列中構(gòu)建分段內(nèi)容。

s9:填充分段擴(kuò)展報頭和相應(yīng)數(shù)據(jù)段,并復(fù)制到以太網(wǎng)幀,此時以太網(wǎng)幀長度=幀頭(mac+mac+以太網(wǎng)類型)+數(shù)據(jù)(ipv4報頭+ipv6報頭+分段報頭+分段數(shù)據(jù))。

s10:發(fā)送以太網(wǎng)幀到套接字。

s11:接收端從套接字接收,計(jì)算以太網(wǎng)校驗(yàn)和(參見rfc1071),不排除沖突。

s12:建立ipv6udp偽包頭,調(diào)用校驗(yàn)函數(shù)進(jìn)行校驗(yàn)參見rfc2460第8.1節(jié));

s13:對接收數(shù)據(jù)按照分段包頭進(jìn)行組裝。

根據(jù)本發(fā)明實(shí)施例的在超長數(shù)據(jù)負(fù)載條件下的udp數(shù)據(jù)包分割方法,用于鏈路層超長ipv6udp數(shù)據(jù)包(大于1280字節(jié),rfc4213中3.2.1節(jié)規(guī)定的最大傳輸單元),使用雙向算法映射和計(jì)算互聯(lián)網(wǎng)校驗(yàn)(rfc1071),但并不排除沖突。

圖2是本發(fā)明實(shí)施例的向特定mac地址發(fā)送cooked的udp數(shù)據(jù)包的方法的流程圖。如圖2所示,根據(jù)本發(fā)明實(shí)施例的向特定mac地址發(fā)送“cooked”udp數(shù)據(jù)包的方法,包括以下步驟:

a:定義ip_maxpacket(為65535),發(fā)起ioctl請求(使用siocgifhwaddr獲取mac地址)。

b:定義ipv6報頭長度和udp報頭長度。其中,

#defineip6_hdrlen40//ipv6報頭長度

#defineudp_hdrlen8//udp報頭長度,不包括數(shù)據(jù)。

自定義函數(shù)聲明。

c:為不同陣列分配存儲空間。

d:獲得發(fā)送包接口,并為套接字描述接口發(fā)送查找請求。

e:用ioctl函數(shù)查找接口名,獲得mac地址;

f:通過接口名查找接口索引,并存儲在結(jié)構(gòu)體中;

g:指定接收方的mac地址和ipv6源地址,并獲取接收方的url或ipv6地址。在本發(fā)明的一個實(shí)施例中,調(diào)用getaddrinfo函數(shù)獲取接收方的url或ipv6地址。

h:填充sockaddr_ll.udp數(shù)據(jù)。在本發(fā)明的一個實(shí)施例中,sockaddr_ll.udp數(shù)據(jù)包括ipv6版本號(4位),流量等級(8位)和流標(biāo)簽(20位)。

i:將sockaddr_ll.udp數(shù)據(jù)發(fā)送到套接字。

j:接收方從套接字接收,并計(jì)算接口檢驗(yàn)和(參考rfc1071),此處的校驗(yàn)并不能排除沖突。

k:相鄰兩字節(jié)重復(fù)求和,直到?jīng)]有或僅剩1個字節(jié)為止;

l:建立ipv6udp偽包頭,調(diào)用校驗(yàn)函數(shù)進(jìn)行校驗(yàn)(參考rfc2460第8.1節(jié))。

本發(fā)明實(shí)施例的向特定mac地址發(fā)送“cooked”udp數(shù)據(jù)包的方法,通過構(gòu)建ipv6udp偽包頭實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議兼容,并調(diào)用校驗(yàn)和函數(shù)(rfc2460的8.1節(jié))進(jìn)行校驗(yàn)。

經(jīng)過測試,本發(fā)明實(shí)施例的在超長數(shù)據(jù)負(fù)載條件下的udp數(shù)據(jù)包分割方法和向特定mac地址發(fā)送“cooked”udp數(shù)據(jù)包的方法,均可與基于ipv6的物聯(lián)網(wǎng),內(nèi)容中心網(wǎng)絡(luò)(ccn),以及信息中心網(wǎng)絡(luò)(icn)很好地兼容。

另外,本發(fā)明實(shí)施例的udp數(shù)據(jù)包的分割方法和發(fā)送方法的其它構(gòu)成以及作用對于本領(lǐng)域的技術(shù)人員而言都是已知的,為了減少冗余,不做贅述。

在本說明書的描述中,參考術(shù)語“一個實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個實(shí)施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個或多個實(shí)施例或示例中以合適的方式結(jié)合。

盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不脫離本發(fā)明的原理和宗旨的情況下可以對這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同限定。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
台江县| 政和县| 柘荣县| 蓬安县| 阳信县| 格尔木市| 临高县| 大名县| 巴里| 双流县| 新乐市| 喜德县| 大竹县| 建阳市| 昭平县| 宜章县| 凉山| 仙桃市| 略阳县| 信阳市| 麻栗坡县| 房山区| 任丘市| 迭部县| 剑川县| 武隆县| 嘉鱼县| 兴化市| 嵊州市| 乾安县| 互助| 闸北区| 山阳县| 湘阴县| 大姚县| 呼和浩特市| 太康县| 阿鲁科尔沁旗| 启东市| 林西县| 海原县|