1. 程式人生 > >兩臺電腦通過網線互相傳遞資料的原理

兩臺電腦通過網線互相傳遞資料的原理

問題1: 為何網路掩碼會自動新增?

因為 192.168.0.1 為C類地址,它的網路掩碼預設就是24位的,配置介面自動填寫24 位掩碼,是為了方便使用者配置,操作介面預設你會用24 位掩碼。

我們可以這樣來寫一個IP地址及它的掩碼:

192.168.0.1 /24

也可以寫成 :

192.168.0.1 255.255.255.0

這裡網路掩碼255.255.255所覆蓋的IP地址的高三個位元組為 192.168.0,192.168.0是網段地址(net),剩下的就是1了,1為主機地址(host)。

所以你看一個IP一般由兩部分組成:net.host = 192.168.0.1

問題2: 第二臺電腦為何只能使用 192.168.0.2-192.168.0.254?

192.168.0.0 這個IP 和網段地址相同,所以作業系統一般不允許電腦使用此IP地址。

192.168.0.255 這個IP保留為 192.168.0.0 這個網段的廣播地址,所以也不允許電腦使用。

192.168.0.1 已經被使用,所以只剩下192.168.0.2-192.168.0.254這些地址可以給第二臺電腦使用。

問題3: 電腦A(192.168.0.1/24)如何與電腦B(192.168.0.2/24)通訊?

舉個簡單例子,在電腦A上 ping 電腦B:

第一步: 在電腦A DOS上輸入命令:ping 192.168.0.2

第二步:A的應用程式PING,將ICMP的頭部以及資料部分填寫好,在Windows OS 下一般為 ICMP Header + ICMP Data = 8 + 32 = 40 byte ,呼叫IP socket 函式,將這40 byte 位元組傳送給核心裡IP程序

第三步:IP程序首先檢查192.168.0.2 和自己位於一個網段,都為192.168.0,通過它們之間直連的網線可以到達對方。但是對方的MAC地址不知道?為何要知道對方MAC地址?因為不知道對方MAC地址,就無法告訴網絡卡將包發到何方,不是嗎?如何知道對方的MAC地址呢?用ARP啊

第四步: 因為ARP destination MAC 用的是FF.FF.FF.FF.FF.FF 廣播地址,所以對方B可以收到並回答其MAC地址。

第五步: A的IP程序有了B的MAC地址,可以填充IP頭了,一共20 byte,加上ICMP 40 byte,一共60 位元組 的資料,呼叫網絡卡傳送函式,並告知destination MAC = B 的MAC

第六步:A的網絡卡加上14 byte的 Ethernet header 以及 4 byte CRC ,一共 78 byte 傳送出去。

第七步:B的網絡卡接收並匹配自己的MAC地址,檢查是否CRC有錯,然後通知IP程序有資料

第八步:IP程序取走資料,檢查是否有誤,於是提交給位於核心的ICMP處理

第九步:ICMP程序改寫相應的包頭,採用類似第二步到第六步的過程完成相反方向的通訊。