午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

數(shù)據(jù)是如何在路由器中通過(guò)的

 ldjsld 2015-11-18

對(duì)于一般人而言只要能使用路由器上網(wǎng)就可以了,但對(duì)于一個(gè)合格的網(wǎng)管來(lái)說(shuō),是必須要知道路由器的工作過(guò)程的,尤其是要知道數(shù)據(jù)是如何在路由器中通過(guò)的。

一、當(dāng)數(shù)據(jù)經(jīng)過(guò)路由器時(shí),在原始套接口上可調(diào)用connect函數(shù), connect函數(shù)僅設(shè)置目的地址。再重申一遍:端口號(hào)對(duì)原始套接口而言沒(méi)有意義。對(duì)于輸出而言,調(diào)用connect之后,由于目的地址已經(jīng)指定,我們可以調(diào)用write或send,而不是sendto了。

二、普通輸出通常通過(guò)sendto或sendmsg并指定目的IP地址來(lái)完成,如果套接口已經(jīng)連接,也可以調(diào)用write、writev或send,如果IP_HDRINCL選項(xiàng)未設(shè)置,則內(nèi)核寫(xiě)的數(shù)據(jù)起始地址是IP頭部之后的第一個(gè)字節(jié)。

因?yàn)檫@種情況下,內(nèi)核將構(gòu)造IP頭部,并將它安在來(lái)自進(jìn)程數(shù)據(jù)之前。內(nèi)核將IPv4頭部的協(xié)議字段設(shè)置成用戶(hù)在調(diào)用socket函數(shù)時(shí)所給的第三個(gè)參數(shù)。

三、如果IP_HDRINCL選項(xiàng)已設(shè)置,則內(nèi)核寫(xiě)的數(shù)據(jù)其實(shí)地址是IP頭部的第一個(gè)字節(jié)。用戶(hù)所提供的數(shù)據(jù)必須包括IP頭部。此時(shí)進(jìn)程構(gòu)造除了以下兩項(xiàng)以外的整個(gè)IP頭部,IPv4標(biāo)示字段可以設(shè)為0,要求內(nèi)核設(shè)置該值。而且僅當(dāng)該字段為0時(shí),內(nèi)核才為其設(shè)置和IPv4頭部校驗(yàn)和由內(nèi)核來(lái)計(jì)算和存儲(chǔ)。

四、如果創(chuàng)建原始套接口時(shí)指定了協(xié)議類(lèi)型,即第三個(gè)參數(shù)protocol,那也并不是說(shuō)只能發(fā)該類(lèi)型的數(shù)據(jù)包。如,即使將protocol指定為IPPROTO_TCP,也可以發(fā)送用戶(hù)自己組裝的UDP報(bào)文,不過(guò)此時(shí)如果IP_HDRINCL選項(xiàng)未設(shè)置,那么內(nèi)核將會(huì)在IP頭的協(xié)議字段指明后面的報(bào)文為T(mén)CP報(bào)文(不過(guò)此時(shí)卻為UDP報(bào)文)。

等數(shù)據(jù)包發(fā)送到對(duì)方TCP層,一般說(shuō)來(lái)會(huì)因?yàn)檎也坏胶线m的TCP套接口接收該數(shù)據(jù)包而被丟棄。不過(guò)該包可以在目標(biāo)主機(jī)的原始套接口上接收到。

五、如果IP_HDRINCL選項(xiàng)已設(shè)置,按照常規(guī),應(yīng)該組建自己的IP頭,但是即使我們沒(méi)有組建IP頭,用sendto或sendmsg并指定目的IP地址來(lái)發(fā)送數(shù)據(jù)是照樣可以完成的。但是這樣的數(shù)據(jù)包在目標(biāo)機(jī)上用原始套接口是接收不到的,因?yàn)樵趇p_rcv()中要對(duì)IP頭進(jìn)行驗(yàn)證,并且要分析校驗(yàn)和,所以該包會(huì)被丟棄,不過(guò)在鏈路層應(yīng)該能夠接收到該數(shù)據(jù)包。

六、如果設(shè)置了IP_HDRINCL選項(xiàng),并且數(shù)據(jù)包超長(zhǎng),那么數(shù)據(jù)會(huì)被丟棄,并會(huì)返回出錯(cuò)碼EMSGSIZE。如果未設(shè)置IP_HDRINCL選項(xiàng),并且數(shù)據(jù)包超長(zhǎng),那么數(shù)據(jù)包會(huì)被分片,要想接收到原始套接口,首先要接收的數(shù)據(jù)包必須有一個(gè)完整的、正確的IP頭,否則不能通過(guò)ip_rcv()中的包頭檢查和檢驗(yàn)和驗(yàn)證。

七、在原始套接口接收的數(shù)據(jù)包過(guò)程中,內(nèi)核會(huì)對(duì)接收的IP包進(jìn)行校驗(yàn)和驗(yàn)證,但不會(huì)對(duì)IP包以后的任何字段進(jìn)行檢測(cè)和驗(yàn)證。如,我們創(chuàng)建原始套接口時(shí),所指定的protocol參數(shù)為IPPROTO_TCP,內(nèi)核也不會(huì)進(jìn)行TCP校驗(yàn)和驗(yàn)證,而是直接把IP頭中協(xié)議字段為T(mén)CP的所有數(shù)據(jù)包都復(fù)制一份,提交給該原始套接口。

八、用原始套接口接收到的TCP包都是進(jìn)行了IP重組以后,TCP排序以前的報(bào)文。如果在創(chuàng)建原始套接口時(shí),所指定的protocol參數(shù)不為零,(socket的第三個(gè)參數(shù)),則接收到的數(shù)據(jù)報(bào)的協(xié)議字段應(yīng)該與之匹配。

否則該數(shù)據(jù)報(bào)不傳遞給該套接口。如果此原始套接口上綁定了一個(gè)本地IP地址,那么接收到的數(shù)據(jù)報(bào)的目的IP地址應(yīng)該與該綁定的IP地址相匹配,否則該數(shù)據(jù)包將不傳遞到該套接口。

如果此原始套接口通過(guò)connect指定了一個(gè)對(duì)方IP地址,那么接收到的數(shù)據(jù)包的源IP地址應(yīng)與該以連接地址相匹配,否則該數(shù)據(jù)包不傳遞給該套接口。

原始套接口接收不到任何的ARP或RARP協(xié)議類(lèi)型的套接口,因?yàn)閚et_rx_action()會(huì)把ARP或RARP協(xié)議類(lèi)型的數(shù)據(jù)包傳遞給ARP的接收函數(shù)類(lèi)處理,不會(huì)傳遞給IP層的接收函數(shù)ip_rcv(),因?yàn)橛行㊣CMP類(lèi)型的數(shù)據(jù)包在傳遞給原始套接口之前已經(jīng)被系統(tǒng)所響應(yīng),并不再向上層傳遞。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多