九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
(原創(chuàng))如何利用UDP協(xié)議封裝一個(gè)數(shù)據(jù)包

(原創(chuàng))如何利用UDP協(xié)議封裝一個(gè)數(shù)據(jù)包

作者:yingfang18 | 出處:博客園 | 2011/10/27 5:35:34 | 閱讀13

  在如何封裝一個(gè)數(shù)據(jù)包上,是一個(gè)非常細(xì)致的問題,而利用UDP協(xié)議來封裝的話,是比較簡(jiǎn)單,讓我們一步步來分析典型的TCP/IP協(xié)議。一般來說一個(gè)典型的一個(gè)數(shù)據(jù)包,包括以太網(wǎng)MAC頭+網(wǎng)絡(luò)層IP數(shù)據(jù)頭+傳輸層UDP頭+要傳輸?shù)臄?shù)據(jù)。讓我們一層層來看看這些數(shù)據(jù)頭是如何構(gòu)成的。

  

1、以太網(wǎng)MAC頭

  一般情況下,以太網(wǎng)MAC頭由14個(gè)字節(jié)構(gòu)成,12個(gè)自己的MAC地址+上層協(xié)議的標(biāo)識(shí)符。舉個(gè)例子

  如果你要發(fā)送的目標(biāo)MAC位00:1d:09:10:d1:9c,而你的MAC地址為01:60:6e:11:02:0f,上層一般都是網(wǎng)絡(luò)層,即為IP層,IP層的標(biāo)識(shí)符為0x8000,那么你的以太網(wǎng)MAC頭就為

  00 1d 09 10 d1 9c 01 60 6e 11 02 0f 80 00.

  下面是更詳細(xì)的解釋,引用http://blog.csdn.net/louiswang2009/archive/2010/05/04/5554524.aspx這片博客

  8字節(jié)的前導(dǎo)用于幀同步,CRC域用于幀校驗(yàn)。這些用戶不必關(guān)心其由網(wǎng)卡芯片自動(dòng)添加。目的地址和源地址是指網(wǎng)卡的物理地址,即MAC地址,具有唯一性。幀類型或協(xié)議類型是指數(shù)據(jù)包的高級(jí)協(xié)議,如 0x0806表示ARP協(xié)議,0x0800表示IP協(xié)議等?! ?/p>

2、網(wǎng)絡(luò)層IP頭

  0x45, 0x00, IPlenght_h, IPlenght_l,

  0x00, 0x00, 0x00, 0x00, 0x80, 0x11,

  IPchecksum4, IPchecksum5,

   IPsource_1, IPsource_2, IPsource_3, IPsource_4,IPdestination_1, IPdestination_2, IPdestination_3, IPdestination_4

  上面是一個(gè)簡(jiǎn)單的ip頭的例子,下面一個(gè)個(gè)的來解釋啊!

  0x45,其中的高位0x4,表示的是版本號(hào),ipv4的意思,而后面低字節(jié)5表示的是指明IPv4協(xié)議包頭長(zhǎng)度的字節(jié)數(shù)包含多少個(gè)32位,這里是5,也就是說協(xié)議頭是5*4=20個(gè)字節(jié)的大小。

  0x00定義IP封包在傳送過程中要求的服務(wù)類型,如果所有4bit均為0,那么就意味著是一般服務(wù),具體如下:

    ◆000..... (Routine): 過程字段,占3位?設(shè)置了數(shù)據(jù)包的重要性,取值越大數(shù)據(jù)越重要,取值范圍為:0(正常)~ 7(網(wǎng)絡(luò)控制)

    ◆...0....(Delay):延遲字段 ,占1位,取值:0(正常)?1(期特低的延遲) 

    ◆....0...(Throughput):流量字段,占1位?取值:0(正常)?1(期特高的流量) 

    ◆.....0..(Reliability) :可靠性字段,占1位?取值:0(正常)?1(期特高的可靠性)

    ◆…..0.(ECN-Capable Transport):顯式擁塞指示傳輸字段,占1位?由源端設(shè)置,以顯示源端節(jié)點(diǎn)的傳輸協(xié)議是支持ECN(Explicit Cogestion Notifica tion,顯式擁塞指示)的?取值:0(不支持ECN)?1(支持ECN)

    ◆.......0(Congestion Experienced):擁塞預(yù)警字段,占1位?取值:0(正常,不擁塞)?1(擁塞)

  IPlenght_h, IPlenght_l,表示的是包總長(zhǎng)度=IP頭長(zhǎng)度+UDP頭長(zhǎng)度+數(shù)據(jù)長(zhǎng)度,最后講長(zhǎng)度分為高8位和低8位。

  0x00, 0x00,是上面的標(biāo)志位,16個(gè)字節(jié)。每一個(gè)IP封包都有一個(gè)16位的唯一識(shí)別碼?當(dāng)程序產(chǎn)生的數(shù)據(jù)要通過網(wǎng)絡(luò)傳送時(shí)都會(huì)被拆散成封包形式發(fā)送,當(dāng)封包要進(jìn)行重組的時(shí)候這個(gè)ID就是依據(jù)了。

  0x00, 0x00這16位是由兩部分組成,包括3bit的標(biāo)記位和13bit的分段偏移量。

    這是當(dāng)封包在傳輸過程中進(jìn)行最佳組合時(shí)使用的3個(gè)bit的識(shí)別記號(hào)?占3位?

    ◆000(Reserved Fragment):保留分段?當(dāng)此值為0的時(shí)候表示目前未被使用?

    ◆.0.(Don't Fragment):不分段?當(dāng)此值為0的時(shí)候表示封包可以被分段,如果為1則不能被分割? 

    ◆..0( More Fragment):更多分段?當(dāng)上一個(gè)值為0時(shí),此值為0就示該封包是最後一個(gè)封包,如果為1則表示其後還有被分割的封包?

    IP協(xié)議頭格式規(guī)定當(dāng)封包被分段之后,由于網(wǎng)路情況或其它因素影響其抵達(dá)順序不會(huì)和當(dāng)初切割順序一至,所以當(dāng)封包進(jìn)行分段的時(shí)候會(huì)為各片段做好定位記錄,以便在重組的時(shí)候就能夠

    對(duì)號(hào)入座?值為多少個(gè)字節(jié),如果封包并沒有被分段,則FO值為“0"? 占13位? 

  0x80表示生存時(shí)間。生存時(shí)間字段設(shè)置了數(shù)據(jù)報(bào)可以經(jīng)過的最多路由器數(shù),表示數(shù)據(jù)包在網(wǎng)絡(luò)上生存多久?TTL的初始值由源主機(jī)設(shè)置(通常為32或64),一旦經(jīng)過一個(gè)處理它的路由器,它的值就減去1?當(dāng)該字段的值為0時(shí),數(shù)據(jù)報(bào)就被丟棄,并發(fā)送ICMP消息通知源主機(jī)?這樣當(dāng)封包在傳遞過程中由於某些原因而未能抵達(dá)目的地的時(shí)候就可以避免其一直充斥在網(wǎng)路上面?占8位?

  0x11表示的是傳輸層的協(xié)議。如下表所示:

  IPchecksum4, IPchecksum5這兩個(gè)是頭校驗(yàn)和的高8位和低8位。

  指IPv4數(shù)據(jù)報(bào)包頭的校驗(yàn)和?這個(gè)數(shù)值用來檢錯(cuò)用的,用以確保封包被正確無誤的接收到?當(dāng)封包開始進(jìn)行傳送后,接收端主機(jī)會(huì)利用這個(gè)檢驗(yàn)值會(huì)來檢驗(yàn)余下的封包,如果一切無誤就會(huì)發(fā)出確認(rèn)信息表示接收正常?與UDP和TCP協(xié)議包頭中的校驗(yàn)和作用是一樣的?占16位?

  首部檢驗(yàn)和字段是根據(jù)IP首部計(jì)算的檢驗(yàn)和碼,不對(duì)首部后面的數(shù)據(jù)進(jìn)行計(jì)算?ICMP?IGMP?UDP和TCP協(xié)議在它們各自的首部中均含有同時(shí)覆蓋首部和數(shù)據(jù)檢驗(yàn)和碼?

  IP協(xié)議頭格式規(guī)定了:計(jì)算一份數(shù)據(jù)報(bào)的IP檢驗(yàn)和,首先把檢驗(yàn)和字段置為0?然后,對(duì)首部中每個(gè)16位進(jìn)行二進(jìn)制反碼求和(整個(gè)首部看成是由一串16位的字組成),結(jié)果存在檢驗(yàn)和字段中?當(dāng)接收端收到一份IP數(shù)據(jù)報(bào)后,同樣對(duì)首部中每個(gè)16 位進(jìn)行二進(jìn)制反碼的求和?由于接收方在計(jì)算過程中包含了發(fā)送方存在首部中的檢驗(yàn)和,因此,如果首部在傳輸過程中沒有發(fā)生任何差錯(cuò),那么接收方計(jì)算的結(jié)果應(yīng)該為全1?如果結(jié)果不是全1(即檢驗(yàn)和錯(cuò)誤),那么IP就丟棄收到的數(shù)據(jù)報(bào)?但是不生成差錯(cuò)消息,由上層去發(fā)現(xiàn)丟失的數(shù)據(jù)報(bào)并進(jìn)行重傳?

  ICMP?IGMP?UDP和TCP都采用相同的檢驗(yàn)和算法,盡管TCP和UDP除了本身的首部和數(shù)據(jù)外,在IP首部中還包含不同的字段?由于路由器經(jīng)常只修改TTL字段(減1),因此當(dāng)路由器轉(zhuǎn)發(fā)一份消息時(shí)可以增加它的檢驗(yàn)和,而不需要對(duì)IP整個(gè)首部進(jìn)行重新計(jì)算?

   IPsource_1, IPsource_2, IPsource_3, IPsource_4,IPdestination_1, IPdestination_2, IPdestination_3, IPdestination_4這兩個(gè)就表示了源IP和目標(biāo)IP。

3、UDP數(shù)據(jù)頭

0x04, 0x00,0x04, 0x00, lenght_h, lenght_l, 0x00, 0x00  

 

  0x04, 0x00表示的是UDP的源端口,這里為1024;

  0x04, 0x00表示的是UDP的目標(biāo)端口,這里為1024;

  lenght_h, lenght_l,為整個(gè)數(shù)據(jù)包的長(zhǎng)度,包括MAC頭+ip頭+UDP頭+校驗(yàn)位。

  0x00, 0x00這些是UDP協(xié)議的選項(xiàng)和填充位。

  這兩個(gè)選項(xiàng)較少使用,只有某些特殊的封包需要特定的控制才會(huì)利用到?這些選項(xiàng)通常包括:

  ◆安全和處理限制:用于軍事領(lǐng)域

  ◆記錄路徑:讓每個(gè)路由器都記下它的IP地址

  ◆時(shí)間戳:讓每個(gè)路由器都記下它的IP地址和時(shí)間

  ◆寬松的源站選路:為數(shù)據(jù)報(bào)指定一系列必須經(jīng)過的IP地址

  ◆嚴(yán)格的源站選路:與寬松的源站選路類似,但是要求只能經(jīng)過指定的這些地址,不能經(jīng)過其他的地址?

  以上這些選項(xiàng)很少被使用,而且并非所有的主機(jī)和路由器都支持這些選項(xiàng)?

 總結(jié)

  上面是對(duì)一個(gè)UDP封裝數(shù)據(jù)的總結(jié),便于以后更好的記憶。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
DIY_DE2之DM9000A網(wǎng)卡調(diào)試系列例程(二)——DM9000A測(cè)試、自收發(fā)、實(shí)現(xiàn)UDP 一
為什么UDP需要有長(zhǎng)度字段,而TCP不需要長(zhǎng)度字段呢?
TCP/IP Illustrated 筆記 UDP Checksum
網(wǎng)絡(luò)傳輸層工作原理
網(wǎng)絡(luò)基礎(chǔ)知識(shí)講座之八:初步理解IP協(xié)議
TCP和UDP數(shù)據(jù)包結(jié)構(gòu)
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服