對 TCP 協議來講,三次握手也好,重試也好,只要想發出去包,就要有 IP 層和 MAC 層,否則是發不出去的。服務器
所謂的二層設備、三層設備,都是這些設備上跑的程序不一樣而已。一個 HTTP 協議的包通過一個二層設備,二層設備收進去的是整個網絡包。這裏面 HTTP、TCP、 IP、 MAC 都有。什麼叫二層設備呀,就是隻把 MAC 頭摘下來,看看究竟是丟棄、轉發,仍是本身留着。那什麼叫三層設備呢?就是把 MAC 頭摘下來以後,再把 IP 頭摘下來,看看究竟是丟棄、轉發,仍是本身留着。網絡
始終牢記一個原則:只要是在網絡上跑的包,都是完整的。能夠有下層沒上層,絕對不可能有上層沒下層。oop
查看IP的兩種方法:ip addr
和 ifconfig
spa
IPV4 地址分類:
設計
上面的分法不合理,太浪費,因而有了一個折中的方式叫做無類型域間選路,簡稱CIDR。這種方式打破了原來設計的幾類地址的作法,將 32 位的 IP 地址一分爲二,前面是網絡號,後面是主機號。 能夠看到,10.100.122.2/24,這個 IP 地址中有一個斜槓,斜槓後面有個數字 24。這種地址表示形式,就是 CIDR。後面 24 的意思是,32 位中,前 24位是網絡號,後 8 位是主機號。3d
伴隨着 CIDR 存在的,一個是廣播地址,10.100.122.255。若是發送這個地址,全部10.100.122 網絡裏面的機器均可以收到。另外一個是子網掩碼,255.255.255.0。code
在平常的工做中,幾乎不用劃分 A 類、B 類或者 C 類,因此時間長了,不少人就忘記了這個分類,而只記得 CIDR。可是有一點仍是要注意的,就是公有 IP 地址和私有 IP 地址。
平時咱們看到的數據中內心,辦公室、家裏或學校的 IP 地址,通常都是私有 IP 地址段。由於這些地址容許組織內部的 IT 人員本身管理、本身分配,並且能夠重複。所以,你學校的某個私有 IP 地址段和我學校的能夠是同樣的。blog
公有 IP 地址有個組織統一分配,須要購買。接口
表格中的 192.168.0.x 是最經常使用的私有 IP 地址。你家裏有 Wi-Fi,對應就會有一個 IP 地址。通常你家裏地上網設備不會超過 256 個,因此 /24 基本就夠了。隊列
整個網絡裏面的第一個地址 192.168.0.1,每每就是你這個私有網絡的出口地址。 例如,你家裏的電腦鏈接 Wi-Fi,Wi-Fi 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是廣播地址。一旦發送這個地址,整個 192.168.0 網絡裏面的全部機器都能收到。
D 類是組播地址。使用這一類地址,屬於某個組的機器都能收到。這有點相似在公司裏面你們都加入了一個郵件組。發送郵件,加入這個組的都能收到。組播地址在 VXLAN 協議會用到。
在 IP 地址的後面有個 scope,對於 eth0 這張網卡來說,是 global,說明這張網卡是能夠對外的,能夠接收來自各個地方的包。對於 lo 來說,是 host,說明這張網卡僅僅能夠供本機相互通訊。lo 全稱是loopback,又稱環回接口,每每會被分配到 127.0.0.1 這個地址。這個地址用於本機通訊,通過內核處理後直接返回,不會在任何網絡中出現。
在 IP 地址的上一行是 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff,這個被稱爲MAC 地址,是一個網卡的物理地址,用十六進制,6 個 byte 表示。
MAC 地址的通訊範圍比較小,侷限在一個子網裏面。例如,從 192.168.0.2/24 訪問 192.168.0.3/24 是能夠用 MAC 地址的。一旦跨子網,即從 192.168.0.2/24 到192.168.1.2/24,MAC 地址就不行了,須要 IP 地址起做用了,IP地址區分不一樣的子網。
<BROADCAST,MULTICAST,UP,LOWER_UP>
這個叫做net_device flags,網絡設備的狀態標識。
UP 表示網卡處於啓動的狀態;BROADCAST 表示這個網卡有廣播地址,能夠發送廣播包;MULTICAST 表示網卡能夠發送多播包;LOWER_UP 表示 L1 是啓動的,也即網線插着呢。MTU1500 是指什麼意思呢?是哪一層的概念呢?最大傳輸單元 MTU 爲 1500,這是以太網的默認值。
MTU 是二層 MAC 層的概念。MAC 層有 MAC的頭,以太網規定連 MAC 頭帶正文合起來,不容許超過 1500 個字節。正文裏面有 IP 的頭、TCP 的頭、HTTP 的頭。若是放不下,就須要分片來傳輸。
qdisc pfifo_fast,qdisc 全稱是queueing discipline,中文叫排隊規則。內核若是須要經過某個網絡接口發送數據包,它都須要按照爲這個接口配置的 qdisc(排隊規則)把數據包加入隊列。
最簡單的 qdisc 是 pfifo,它不對進入的數據包作任何的處理,數據包採用先入先出的方式經過隊列。pfifo_fast 稍微複雜一些,它的隊列包括三個波段(band)。在每一個波段裏面,使用先進先出規則。三個波段(band)的優先級也不相同。 band 0 的優先級最高,band 2 的最低。若是band 0 裏面有數據包,系統就不會處理 band 1 裏面的數據包, band 1 和 band 2 之間也是同樣。
數據包是按照服務類型(Type of Service,TOS)被分配到三個波段(band)裏面的。TOS 是 IP 頭裏面的一個字段, 表明了當前的包是高優先級的,仍是低優先級的。
使用 net-tools:
sudo ifconfig eth1 10.0.0.1/24 sudo ifconfig eth1 up
使用 iproute2:
sudo ip addr add 10.0.0.1/24 dev eth1 sudo ip link set up eth1
你可能會問了,本身配置這個自由度太大了吧,我是否是配置什麼均可以?若是配置一個和誰都不搭邊的地址呢?例如,旁邊的機器都是 192.168.1.x,我非得配置一個16.158.23.6,會出現什麼現象呢?
不會出現任何現象,就是包發不出去了。
源 IP 地址 16.158.23.6,目標 IP 地址 192.168.1.6,可是包發不出去,這是由於 MAC 層還沒填。
本身的 MAC 地址本身知道。但對於目標MAC地址,Linux 首先會判斷,要去的這個地址和我是一個網段的嗎,或者和個人一個網卡是同一網段的嗎?只有是一個網段的,它纔會發送 ARP 請求,獲取 MAC 地址。 若是這是一個跨網段的調用,它便不會直接將包發送到網絡上,而是企圖將包發送到網關。
若是配置了網關的話,Linux 會獲取網關的 MAC 地址,而後將包發出去。對於192.168.1.6 這臺機器來說,雖然目標 IP 是它,可是 MAC 地址不是它的,因此它的網卡是不會把包收進去的。
若是沒有配置網關呢?那包就發不出去了。
若是將網關配置爲 192.168.1.6 呢?Linux 不會讓你配置成功的,由於網關要和當前的網絡至少一個網卡是同一個網段的,怎麼可能 16.158.23.6 的網關是 192.168.1.6呢?
有了這個協議,只須要配置一段共享的 IP 地址。每一臺新接入的機器都經過 DHCP 協議,來這個共享的 IP 地址裏申請,而後自動配置好就能夠了。等用完了,還回去,這樣其餘的機器也能用。
當一臺機器新加入一個網絡的時候,確定一臉懵,啥狀況都不知道,只知道本身的 MAC 地址。怎麼辦?先吼一句,我來啦,有人嗎?這時候的溝通基本靠「吼」。這一步,咱們稱爲DHCP Discover。新來的機器使用 IP 地址 0.0.0.0 發送了一個廣播包,目的 IP 地址爲 255.255.255.255。廣播包封裝了 UDP,UDP 封裝了 BOOTP。其實 DHCP 是 BOOTP 的加強版,可是若是你去抓包的話,極可能看到的名稱仍是 BOOTP 協議。下圖是 DHCP Discover:
這個時候,咱們能夠體會 MAC 地址惟一的重要性了。當一臺機器帶着本身的 MAC 地址加入一個網絡的時候,MAC 是它惟一的身份,若是連這個都重複了,就沒辦法配置了。只有 MAC 惟一,IP 管理員才能知道這是一個新人,須要租給它一個 IP 地址,這個過程咱們稱爲DHCP Offer。下圖是DHCP Offer:
DHCP Server 仍然使用廣播地址做爲目的地址,由於,此時請求分配 IP 的新人尚未本身的 IP。除此以外,服務器還發送了子網掩碼、網關和 IP 地址租用期等信息。
若是有多個 DHCP Server,這臺新機器會收到多個 IP 地址,它會選擇其中一個 DHCP Offer,通常是最早到達的那個,而且會向網絡發送一個 DHCP Request 廣播數據包,包中包含客戶端的 MAC 地址、接受的租約中的 IP 地址、提供此租約的 DHCP 服務器地址等,並告訴全部 DHCP Server 它將接受哪一臺服務器提供的 IP 地址,告訴其餘 DHCP 服務器請求撤銷它們提供的 IP 地址,以便提供給下一個 IP 租用請求者。
此時,因爲尚未獲得 DHCP Server 的最後確認,客戶端仍然使用 0.0.0.0 爲源 IP 地址、255.255.255.255 爲目標地址進行廣播。在 BOOTP 裏面,接受某個 DHCP Server 的分配的 IP。當 DHCP Server 接收到客戶機的 DHCP request 以後,會廣播返回給客戶機一個 DHCP ACK 消息包,代表已經接受客戶機的選擇,並將這一 IP 地址的合法租用信息和其餘的配置信息都放入該廣播包,發給客戶機。
客戶機會在租期過去 50% 的時候,直接向爲其提供 IP 地址的 DHCP Server 發送 DHCPrequest 消息包。客戶機接收到該服務器迴應的 DHCP ACK 消息包,會根據包中所提供的新的租期以及其餘已經更新的 TCP/IP 參數,更新本身的配置。這樣,IP 租用更新就完成了。