最近有幸做了幾場面試官,基本都會問一下候選人關于主機通信的知識,但基本都答的不好,現在寫寫我自己的了解。
基礎
IP位址:32bit,類似于
1.2.3.4
mac位址(網卡位址):48bit,類似于
ff:ff:ff:ff:ff:ff
區域網路通信
以太網是一種區域網路通信協定,主要特點是帶沖突檢測的載波偵聽多路通路(CSMA/CD),即有所謂的退避算法。同時,它是以mac位址用于通信的基礎。
以主機A(192.168.0.100)向主機B(192.168.0.101)發送資料為例:
- 主機A會查詢本地mac位址-ip位址的緩存表中是否有
的記錄192.168.0.101
- 若沒有,則主機A會向本區域網路發送廣播,IP位址為
,mac位址為192.168.0.101
,即向區域網路内詢問ff:ff:ff:ff:ff:ff
的mac位址是多少?192.168.0.101
- 區域網路内的主機并不響應這個廣播包,隻有主機B收到廣播包後,回複一個單點傳播包
的mac位址為192.168.0.101
01:02:03:04:05:06
- 主機A收到回複包後,更新自己的本地mac位址-ip位址的緩存表,并開始向mac位址為
開始發送資料01:02:03:04:05:06
以上這個簡單的例子就是ARP協定
網絡通信
講到網絡通信,就必須講到路由的封包轉發了。區域網路内的流量隻是網絡的最後一公裡的問題,而更廣大的是廣域網通信。每個區域網路通過路由器連接配接成一個網,通過路由轉發實作區域網路A與區域網路B的通信
封包轉發
路由器将從接口A中接收的封包從接口B中轉發出去,這裡的關鍵操作是如何将協定組織好。
- 将資料鍊路層的幀頭和幀尾移除,解析出IP封包。
- 檢查IP封包的目的IP位址,在路由表中查找最佳路由。
- 如果路由器找到比對下一跳,則将IP封包封裝到新的資料鍊路幀中,并将幀轉發到輸出接口B中,否則路由器會将封包發給自己的預設路由
以主機A(192.168.0.10)向主機B(192.168.4.30)發送資料為例:
- 主機A首先判斷目的位址
是否在自己的區域網路内(子網路遮罩後判斷網絡位址是否一緻),若一緻,則與區域網路通信一緻192.168.4.30
- 若不一緻,則将封包轉發至自己的預設路由
,如何轉發至192.168.0.1
與區域網路通信一緻192.168.0.1
- 路由器R1收到封包後,拆開資料幀後得到目的IP為
,檢視自己的路由表,發現其需要從另外一個出口中轉發,目的位址為192.168.4.30
,是以構造192.168.2.10
的資料幀轉發至路由器R2srcIP=192.168.0.10, srcMac=aa:02,dstIP=192.168.4.30,dstMac=bb:01,
- 路由器R2收到封包後,檢視路由表,發現需要從
的出口轉發,而192.168.4.1
與192.168.4.1
位與同一個區域網路中,是以,直接區域網路通信轉發封包給主機B192.168.4.30
- 主機B收到封包後,發現目的mac位址與自己一緻,并解開目的IP位址也與自己一緻,則将ip封包交由上層處理
總結
上述隻是簡單将主機通信的過程描述了一遍,其中的一些細節(IP位址,網絡位址,子網路遮罩,路由表構成)并沒有深究,大家感興趣可以自行研究。