以前在數據鏈路層概述裏遺留了一個問題,就是若是主機發送的信息要跨設備傳輸,該如何實現呢?程序員
實際上,在IP協議和網絡層中提出了一個概念,即虛擬互聯網絡,讓計算機都使用IP協議鏈接,這樣的話就不須要關注信息傳遞的時候的細節,只須要把信息發送到一個虛擬的互聯網絡中,這個網絡就能夠實現信息的傳遞緩存
簡單點說,就是隻須要關注邏輯層上信息的傳遞(A發送給B),不須要關注物理層上信息是如何傳遞的(A如何發送到B)網絡
能夠看出,在這個過程當中,IP協議發揮着重要的做用,包括:blog
1.使得複雜的實際網絡變爲一個虛擬互聯的網絡接口
2.使得網絡層能夠屏蔽底層細節,專一網絡層的數據轉發(這一點相似於1,也就是把物理上的問題轉換成邏輯上的)圖片
3.解決了虛擬網絡中的數據報傳輸路徑路由
相似於數據鏈路層中的MAC地址,網絡層中也有地址,即IP地址,爲網絡中每個網絡設備的惟一身份並且不可改變,能夠用來識別不一樣的網絡設備io
但MAC地址是永久不變的,而若是計算機所處的網絡環境發生變化(例如從家到圖書館),則IP地址會發生變化基礎
IP地址通常用點分十進制表示,每一部分範圍爲0-255(如192.168.1.101),最多能夠表示2的32次方(4294961296)個不一樣的IP地址路由器
以前說起,數據鏈路層得到的「幀」數據來自於網絡層的IP數據報
這裏的IP數據報包括IP首部以及IP數據報的數據,而IP首部有一個固定的格式(以下,圖片來自慕課網)
IP協議的版本,佔4位,通訊雙方必須用同樣的版本,目前主流爲IPV4
即IP首部長度,單位爲「32位字」(4個字節),一共佔4位,最大長度爲15
也就是首部最大長度爲4*15=60字節
IP數據報總長度(IP首部+IP數據),佔16位,最大數值爲65535
因爲這個數值比最大存儲單元(MTU)大,因此實際傳輸中,數據鏈路層會把IP數據報分片
主要的功能是標註IP數據報是否能夠分片
用來記錄當前數據幀是第幾個偏移的IP數據,跟分片有關
表示報文在網絡中的壽命,8位,每通過一個設備減一,爲0時必須丟棄該報文
解決了報文在網絡中找不到終點時無限傳輸消耗帶寬的問題
表示IP數據攜帶的具體數據是什麼協議的(TCP、UDP等),8位
不一樣的協議對應不一樣的值
校驗IP首部是否有出錯,16位
發送IP數據報/IP數據報到達的機器的地址
信息在網絡層中傳輸的時候,是用「逐跳」的方式進行的,也就是從一個網絡/設備「跳入」另外一個網絡/設備
路由表中就存儲着目的IP地址和下一跳IP地址的對應關係表,例如目的爲IP1,則下一跳到IP4這樣
計算機和路由器中都有路由表
在網絡層中,轉發流程以下:
1.發送信息的計算機會在其路由表中查詢目的IP地址的下一跳IP地址,而後把數據發給下一跳IP地址的路由器/計算機
2.收到信息的計算機/路由器繼續在其路由表中查找目的IP地址的下一跳IP地址,若是目的IP是和其直接相連的,則發送給目的計算機,不然繼續「跳」
而若是是網絡層和數據鏈路層以及物理層結合,則轉發流程以下:
(發送)
1.源計算機發出IP數據報,經過路由表查找下一跳地址
2.IP數據報被交給數據鏈路層,並被告知目的地址
3.數據鏈路層經過MAC表填充源MAC地址和目的MAC地址
4.數據鏈路層經過物理層發送數據
(接收&下一次發送)
5.目的MAC地址接收數據幀,並把該數據交給網絡層
6.目的計算機/設備查詢路由表,找到下一跳地址
7.數據報被交給數據鏈路層,並經過物理層再次發送
每一跳中,IP數據報的IP地址不變,而MAC地址一直在變化
IP協議的轉發中存在這樣一個問題,IP數據報從網絡層發送到數據鏈路層,可是傳輸時候是如何讓數據鏈路層知道要傳輸的MAC地址呢?這裏用到的就是ARP協議
ARP協議(Address Resolution Protocol),即地址解析協議,用來把網絡層的32位IP地址解析爲數據鏈路層的48位MAC地址
這一解析過程有一個重要的表,即ARP緩存表,把IP地址和MAC地址對應起來,是ARP協議和RARP協議的關鍵
1.若是緩存表中有IP地址和MAC地址信息,則直接解析,並把數據幀發送
2.若是沒有,則ARP協議廣播一個IP的信息,全部設備收到廣播後會看本身的IP是否是這個目標IP,是的話,該廣播的物理設備進入該IP地址以及對應的MAC地址
可是因爲IP地址可隨着設備所處的網絡環境發生變化,所以ARP協議存在有效期
能夠在命令提示符中輸入arp -a查看ARP緩存表
ARP協議數據幀包括了2字節的類型、28字節的內容以及18字節的填充信息
RARP(Reverse Address Resolution Protocol),即逆地址解析協議
和ARP協議相反,該協議用來把數據鏈路層的48位MAC地址解析爲網絡層的32位IP地址
RARP協議數據幀包括了2字節的類型、28字節的內容以及18字節的填充信息
在TCP/IP協議棧裏,ARP協議和RARP協議是最基礎的,而且整個操做過程對程序員是透明的
前面咱們看到,IP地址有32位,可表示上億的不一樣IP地址,而爲了對這上億的IP地址進行區別和管理,咱們對IP地址進行了子網劃分
咱們把IP地址劃分爲網絡號和主機號,並根據網絡號和主機號長度,把IP地址分爲:
A類:網絡號8位(0-127,2的7次方個),主機號24位(2的24次方個),判斷時取前8位,頭位爲0(表示沒達到128)
B類:網絡號16位(128.0-191.255,2的14次方個),主機號16位(2的16次方個),判斷時取前8位,首兩位爲10(表示不到192)
C類:網絡號24位(192.0.0-223.255.255,2的21次方個),主機號8位(2的8次方個),判斷時取前8位,首兩位爲11(表示超過192)
全0:當前網絡段,不可分配特定的主機(如1.0.0.0)
全1:廣播地址,向當前網絡段全部主機發消息(如1.255.255.255)
A類:全0爲特殊網絡,後7位全1爲迴環地址
其中127.0.0.1爲本地迴環地址,不屬於任何一個有類別的地址類,表明本地虛擬接口,能夠理解成一個永遠不會掉的接口
這個接口通常用來檢查本地網絡協議、基本數據接口是否正常
B類:如10000000.00000000(即128.0)也不可用
C類:192.0.0不可用
(未完待續)