標籤:
我們每天使用互連網,它是如何?的呢?
互連網的核心是一系列的協議,總稱“互連網協議” internet protocol suite.
1:概述
1.1 五層模型
互連網的實現,分好幾層,每一層都有自己的功能,每一層都靠下一層支援
如何分層有不同的模型,有的分七層,但是分5層還是比較容易理解
- 應用程式層(application layer)
- 傳輸層(transport layer)
- 網路層(network layer)
- 連結層(link layer)
- 物理層(physical layer)
越是下層,越靠近硬體,越是上層,越靠近使用者!
1.2 層與協議
互連網的每一層,都定義了好多協議,這些協議叫做“互連網協議” internet protocol.
- 物理層,physical layer
就是把電腦串連起來的物理手段,他主要規定了網路的一些電氣特性,作用是負責0,1的電訊號
2. 連結層 link layer
單純的0,1是沒有任何意義,必須規定解讀方式:多少個電訊號算一組,每個訊號的意義?
這就是連結層的功能,它在物理層上面,確定了0和1的分組方式
乙太網路協議:
乙太網路規定,一組電訊號構成一個資料包,叫做“幀” (frame),每一個幀都分成2部分, 標題(head)和資料(data)
"標題“包含資料包的一些說明項,比如寄件者,接受者,資料類型等等,”資料“包含具體內容
”標題“的長度,固定為18位元組,”資料“的長度,最短為46位元組,最長為1500位元組,so ,整個frame的最短為64個位元組,最長為1518個位元組,如果資料很長,就必須分割成多個frame來發送
MAC地址
上面提到,每個資料frame都是由head & data,head中包換了寄件者和接受者的資訊,就是MAC地址,每個網卡的都是獨一無二的,通常用12個16進位數表示。00-B0-D0-86-BB-F7,長度為48個二進位
廣播(broadcast)
定義地址是第一步,一個網卡如何知道另外一個網卡的MAC地址?主要是通過ARP協議,乙太網路資料包必須知道對方的mac地址才能發送,
其次,有個mac地址,系統怎麼才能把資料包準確發送給接收方?
乙太網路採用廣播的方式去把自己的資料frame發送出去,整個區域網路的電腦都會收到,然後讀取標題的資訊,以確定自己是否為接收方,是的話就接收,不是的話就丟棄
有了資料包的定義,網卡的MAC地址,廣播的發送,串連層就可以在多台電腦直接傳送資料
4:網路層
如果2台電腦不再同一個區域網路裡面,通過廣播的方式是不能傳輸出去的,因此必須找到一種方法,如何區分哪些MAC地址屬於同一個網路,哪些不是,如果在同一個區域網路就採用廣播,如果不是就採用路由的方式。,
in this case, 為了使我們能夠區分不同電腦是否屬於同一子網路,這個地址就做 網路地址,簡稱網址
so ,each computer must owns 2 different address :MAC and IP address .網路地址幫我們確定電腦所在的子網路,MAC地址則將資料包送到該子網路的目標網卡,thus ,in logically,network address is priority to be handled .
5:IP 協議
IPV4 。由32個二進位組成,分4段的十進位來表示IP地址。如何判斷2台電腦是否在同一個子網呢?這裡就是要用另外一個概念子網路遮罩“ subnet mask",if you know the subnet mask,it‘s easy to identify theirs network .
6:IP 資料包
根據IP協議發送的資料,就叫做IP資料包。不難想像,裡面必須包括IP地址資訊
但是前面說過,乙太網路資料中只包含MAC地址,沒有IP地址的欄位,那怎麼辦?我們可以把IP資料包直接放到乙太網路資料包的資料部分,
具體來說IP資料包也分為標題和資料2個部分
head + data
標題主要包括版本,長度,IP地址等資訊,資料 則是IP資料包的具體內容,他放進乙太網路資料包,乙太網路資料包就變成;
head + head + data
IP 資料包“HEAD”部分的長度為20-69位元組,整個資料包的總長度最大為65535個位元組, so ,theoretically,一個IP資料包的資料部分最大為65515個位元組,前面講過,一個乙太網路包的資料部分最大了1500個位元組,所以,如果IP資料包超過了1500個位元組,就要分割為幾個frame 發送
7:ARP協議
因為IP資料包時放在乙太網路的資料包發送的,所以我們必須知道2個地址,對方的IP地址和MAC地址,通常情況,對方的IP地址是已知的,MAC地址是未知的
因此我們需要一種機制通過IP地址來得到MAC地址。
如果在同一個子網,我們可以通過ARP協議得到對方的MAC地址,ARP協議也是發一個資料包,包含在乙太網路資料包中,其中包含了所查詢的主機的IP地址,對方的MAC地址欄填的是FF:FF:FF:FF:FF:FF表示廣播位址,他所在的網路的所有主機,都會受到這個資料包,重中取出IP地址,與自身IP地址進行比較,如果相同則做出回應
如果不在同一子網,只能把資料包傳到2個子網的串連處“vgetway”
- 傳輸層
有個MAC地址和IP地址,我們已經可以在互連網上任意2台主機上建立通訊
接下來的問題是,同一台主機上有許多程式要串連網路,比如,你一遍瀏覽網頁,一遍和朋友聊天,當一個資料包重互連網發來的時候,你怎麼知道,它是表示網頁的內容,還是表示聊天的內容。
也就是說,我們還需要一個參數,表示這個資料包到底供哪個進程使用。這個參數就叫做連接埠。port
他其實是每一個使用網卡的程式的編號。每個資料包都發送到主機的特定連接埠,所以不同的程式就能娶到自己所需要的資料。
連接埠是0-65535之間的一個整數,16個二進位,0-1023連接埠被系統佔用,使用者只能選用1023後面的連接埠。no matter you are surfing or chating on line ,there will be a port selected to match with server port .
傳輸層的功能就是建立,連接埠到連接埠的通訊。相比之下,網路層的功能就是建立主機要主機的通訊,只要確定主機的連接埠,我們就能實現程式之間的交流。因此,unix系統就是把主機+連接埠 叫做 通訊端,socket.,有了它,就可以進行網路應用程式開發了
UDP協議
現在我們必須在資料包中加入連接埠資訊,這就需要新的協議,最簡單的實現就叫做UDP協議,他 的 格式幾乎就是在資料前面加上連接埠號碼
UDP資料包,也是由標題和資料群組成
Head + data
"head"部分主要定義了連接埠和接收埠,“data"就是具體內容,然後把整個UDP資料包放到IP資料包的資料部分,而前面也提過IP資料包又是放在乙太網路資料包之中,所以整個乙太網路資料變成了
head + head + head +data
TCP協議
UDP協議有點比較簡單,容易實現,但是可靠性差。
為了提高網路可靠性,TCP協議就誕生了,沒發出一個資料包都要求確認,如果有一個包遺失,就說不到確認,發出方就知道有必要重發這個資料包了
TCP資料包和UDP資料包都一樣,都是內嵌在IP資料包的資料部分,TCP資料包沒有長度限制.Theoretical no limited ,in general ,the lenght of TCP is no longer than the lenght of IP package to ensure singal TCP package don‘t need to be divided .
應用程式層,
應用程式收到傳輸層的資料,接下來就要進行解讀。由於互連網是開放架構,資料來源五花八門,必須事先規定好格式,否則無法解讀
“應用程式層”作用 就是規定應用程式的資料格式
舉例來說,TCP協議可以為各種各樣的程式傳遞資料,比如email,www.ftp.必須有不同的協議來規定電子郵件,網頁,FTP資料格式,這些應用程式就構成了 應用程式層
這是最高一層,直接面對使用者,他的資料放在TCP資料包的資料部門,因此,乙太網路的資料包變成了
Head + Head + Head + data
乙太網路標題 IP標題 TCP標題 應用程式層資料
小結:
我們已經知道,網路通訊就是交換資料包,電腦A向電腦B發送一個資料包,後者收到了,回複一個資料包,從而實現2台電腦之間的通訊,
發送這個包,我們需要知道對方的IP地址和MAC地址。有了這2個地址,資料包才能準確送到接受者手中,但是前面說過,MAC地址有局限性,如果2個電腦 不再同一個子網中,就要通過gateway轉寄。網關通過路由協議,發現電腦位於網路B, 又把資料包發給網關B,網關B在轉寄給對應電腦
同一個字網路 ----〉對方的MAC地址,對方 IP地址
非同一個 ----〉網關MAC地址,對方IP地址
8: 使用者上網設定
手動IP,DHCP
DHCP是一種應用程式層協議,建立在UDP協議之上
head + head + head + data
乙太網路 IP UDP DHCP SERVER
最前面的乙太網路標題設定原生MAC地址和接受方DHCP伺服器的MAC地址,後者不知道就填FF-FF-FF-FF-FF-FF
後面的IP標題,設定原生IP地址和接受發的IP地址,本地不知道0.0.0.0 ,接收方 255.255.255.255
UDP標題,設定發出方的連接埠68 和接收方連接埠67
這個資料包構造完成就可以發出,乙太網路是廣播發送,同一個子網的沒台電腦都接收到了,還必須分析其IP地址才能確定是否發給自己的,DHCP看到發出方的0.0.0.,接收方是255.255.255.255就知道是給我的,其它的PC就丟棄這個包
接下來DHCP讀取包的內容,分配好IP地址,發送回去DHCP響應,這個包夜類似
9:執行個體,訪問網頁
本機:192.168.1.100
255.255.255.0
192.168.1.1
8.8.8.8
然後開啟瀏覽器,訪問google.com 這就意味著瀏覽器要向 google發送一個網頁請求
DNS協議
發送資料包,必須要知道對方的IP地址,但是我們只知道網址,DNS協議可以協助我們把網址轉換成IP
已知DNS伺服器8.8.8.8,於是我們向這個地址發送一個DNS資料包
head + head + head + data
乙太網路 IP udp DNS資料包
然後DNS做出相應,告訴我們GOOGLE的地址是172.194.72.105
子網路遮罩判斷是否在同一個子網
通過已經知道的子網路遮罩255.255.255.0 和IP地址作and 運算
因此我們要向google發送資料包,必須通過網關轉寄,也就是說接受的MAC地址就是網關地址
應用程式層協議
瀏覽網頁用的是HTTP協議,他的整個資料包構造
head + head + head + data
乙太網路 IP TCP HTTP
Http 部分的內容,
GET / HTTP /1.1
host: www.google.com
connection : keep-alive
user-agent :mozilla5.0 (windwos NT)
accept:
text/html,applicaiton/xhtml,applicaiton/xml;1=0.9,*/*;1=0.8
accept-encoding;gzip,deflate,sdch
accept-language:zh-cn,zh;q=0.8
accept-charset: GBK,utf-9;q=0.7,*;q=0.3
cookie;... ...
我們假定這個部分長度為4960位元組,他會被封裝在TCP資料包之中
TCP協議
TCP資料包需要設定連接埠,google的http port 80,發送方的連接埠是隨機產生的1024-65535 之間,假定51755
TCP資料包的標題長度20位元組,加上嵌入的http資料包,總長度4980
IP協議
TCP資料包再嵌入IP資料包,ip資料包為雙方IP地址,
ip的標題為20位元組,加上嵌入的TCP資料包為5000位元組
乙太網路協議
最後IP資料包嵌入乙太網路資料包,乙太網路資料包需要設定雙方的MAC地址,原生MAC地址和接收方網管的MAC地址,(通過ARP得到)
乙太網路資料部分最大1500位元組,而現在IP的資料包長度5000,因此,IP資料包必須分割4個包,因為每個包都有自己的IP標題(20 位元組)所以4個包的IP資料包長度分別為1500 1500 1500 560
head head data
head head data
head head data
head head data
乙太網路 ip TCP DATA
伺服器端響應
經過多個網關轉寄google伺服器收到了這4個乙太網路資料包
根據IP標題的序號,google將4個包平起來,取得完整的TCP資料包,然後讀取裡面的HTTP請求在作出回應,在同TCP協議,發回來
本機受到HTTP,就可以將網頁顯示出來,完成一次完整 的網路通訊
互連網協議入門