W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
本節(jié)談?wù)摦a(chǎn)生 snull 網(wǎng)絡(luò)接口的設(shè)計(jì)概念. 盡管這個(gè)信息可能看來(lái)是邊緣的使用, 不理解它在你運(yùn)行例子代碼時(shí)可能會(huì)導(dǎo)致問(wèn)題.
首先, 也是最重要的, 設(shè)計(jì)的決定是例子接口應(yīng)該保持獨(dú)立于真實(shí)的硬件, 就像本書使用的大部分例子. 這個(gè)限制導(dǎo)致了一些構(gòu)成環(huán)回接口的東西. snull 不是一個(gè)環(huán)回接口; 但是, 它模擬了與真實(shí)的遠(yuǎn)端主機(jī)間的對(duì)話, 以便更好演示編寫一個(gè)網(wǎng)絡(luò)驅(qū)動(dòng)的任務(wù). Linux 環(huán)回驅(qū)動(dòng)實(shí)際是非常簡(jiǎn)單的; 它可在 drivers/net/lookback.c 找到.
snull 的另一個(gè)特性是它只支持 IP 通訊. 這是接口的內(nèi)部工作的結(jié)果 -- snull 不得不查看里面并且解析報(bào)文來(lái)正確模擬一對(duì)硬件接口. 實(shí)際的接口不依賴于被發(fā)送的協(xié)議, 并且 snull 的這種限制不影響本章展示的代碼片斷.
snull 模塊創(chuàng)建了兩個(gè)接口. 這些接口與一個(gè)簡(jiǎn)單的環(huán)回不同, 因?yàn)闊o(wú)論你通過(guò)其中一個(gè)接口發(fā)送什么都環(huán)回到另外一個(gè), 而不是它自己. 它看起來(lái)好像你有兩個(gè)外部連接, 但實(shí)際上是你的計(jì)算機(jī)在回答它自己.
不幸的是, 這個(gè)效果不能僅僅通過(guò) IP 號(hào)碼分配來(lái)完成, 因?yàn)閮?nèi)核不會(huì)通過(guò)接口 A 發(fā)送一個(gè)報(bào)文給它自己的接口 B, 它會(huì)利用環(huán)回通道而不是通過(guò) snull. 為了能建立一個(gè)通過(guò) snull 接口的通訊, 源和目的地址在實(shí)際傳送中需要修改. 換句話說(shuō), 通過(guò)其中一個(gè)接口發(fā)送的報(bào)文應(yīng)該被另一個(gè)收到, 但是外出報(bào)文的接受者不應(yīng)當(dāng)被認(rèn)做是本地主機(jī). 同樣適用于接收到的報(bào)文的源地址.
為獲得這種"隱藏的環(huán)回", snull 接口翻轉(zhuǎn)源地址和目的地址的第 3 個(gè) octet 的最低有效位; 就是說(shuō), 它改變了 C 類 IP 編號(hào)的網(wǎng)絡(luò)編號(hào)和主機(jī)編號(hào). 網(wǎng)絡(luò)方面的效果是發(fā)給網(wǎng)絡(luò) A( 連接在 sn0 上, 第一個(gè)接口 )的報(bào)文作為屬于網(wǎng)絡(luò) B 的報(bào)文出現(xiàn)在 sn1 接口.
為避免處理太多編號(hào), 我們分配符號(hào)名子給涉及到的 IP 編號(hào):
snullnet0 是連接到 sn0 接口的網(wǎng)絡(luò). 同樣, snullnet1 是連接到 sn1. 這些網(wǎng)絡(luò)的地址應(yīng)當(dāng)僅僅在第 3 個(gè) octet 的最低有效位不同. 這些網(wǎng)絡(luò)必須有 24 位的子網(wǎng)掩碼.
local0 是分配給 sn0 接口的 IP 地址; 它屬于 snullnet0. 陪伴 sn1 的地址是 local1. local0 和 local1 必須在它們的第 3 octet 的最低有效位和第 4 octet 上不同.
remote0 是在 snullnet0 的主機(jī), 并且它的第 4 octet 與 local1 的相同. 任何發(fā)送給 remote0 的報(bào)文到達(dá) local1, 在它的網(wǎng)絡(luò)地址被接口代碼改變之后. 主機(jī) remote1 屬于 snullnet1, 它的第 4 octet 與 local0 相同.
snull 接口的操作在圖 主機(jī)如何看它的接口中描述, 其中每個(gè)接口的關(guān)聯(lián)的主機(jī)名印在接口名的旁邊.
圖?17.1.?主機(jī)如何看它的接口
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: