互聯網協議

互聯網分爲若干層,上層結構更改影響不了下層結構。 互聯網的每一層,都定義了不少協議。這些協議的總稱,就叫作 "互聯網協議"(Internet Protocol Suite) 服務器

1、實體層 用物理手段(光纜、電纜)將電腦鏈接起來,負責傳遞 0 和 1 的電信號。網絡

2、連接層 負責解析電信號,確認 0 和 1 的分組。socket

2.1 以太網協議 以太網協議來規定電信號的分組方式,一組電信號構成一個數據包,叫作 "幀"(Frame)。每一幀分紅兩個部分:標頭(Head)和數據(Data)。ui

"標頭" 包含數據包的一些說明項,好比發送者、接受者、數據類型等等;"數據" 則是數據包的具體內容。 "標頭" 的長度,固定爲 18 字節。"數據" 的長度,最短爲 46 字節,最長爲 1500 字節。所以,整個 "幀" 最短爲 64 字節,最長爲 1518 字節。若是數據很長,就必須分割成多個幀進行發送。編碼

2.2 MAC 地址(標識發送者和接受者) 以太網規定每塊網卡出廠都攜帶獨有的 MAC 地址,長度是 48 個二進制位,一般用 12 個十六進制數表示。3d

2.3 廣播的形式 以太網以廣播的形式將數據包在本網絡內向全部計算機發送,讓目標計算機接受讀取數據包「標頭」與自身 MAC 地址相匹配,相同則接受做下一步操做。blog

3、網絡層 互聯網是無數子網絡共同組成的一個巨型網絡。若是兩臺計算機不在同一子網絡下,廣播就起不來做用了,只能採用 "路由" 方式發送。 因而出現了由管理員分配的網絡地址來確認計算機所處的子網絡,MAC 地址則將數據包送到該子網絡中的目標網卡,邏輯上能夠推斷,一定是先處理網絡地址,而後再處理 MAC 地址。 它與 MAC 地址之間沒有任何聯繫,只是隨機組合在一塊兒。進程

3.1 IP 協議(規定網絡地址【由 32 個二進制位組成】的協議) IP 協議的做用主要有兩個,一個是爲每一臺計算機分配 IP 地址,另外一個是肯定哪些地址在同一個子網絡。資源

習慣上,咱們用分紅四段的十進制數表示 IP 地址,從 0.0.0.0 一直到 255.255.255.255。 互聯網上的每一臺計算機,都會分配到一個 IP 地址。這個地址分紅兩個部分,前一部分表明網絡,後一部分表明主機,處於同一子網絡的 IP 地址的網絡部分必然相同,但單從 IP 地址是沒法判斷網絡部分的。路由

3.2 子網編碼 這是須要另外一個參數 "子網掩碼"(subnet mask)來判斷,它是表示子網絡特徵的一個參數,形式上等於 IP 地址,也是 32 位二進制數字,,它的網絡部分所有爲 1,主機部分所有爲 0。好比,IP 地址 172.16.254.1,若是已知網絡部分是前 24 位,主機部分是後 8 位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是 255.255.255.0。

3.3 IP 數據包(由 IP 協議發送的數據,包含 IP 地址信息) 以太網數據包只包含 MAC 地址,IP 數據包無需更改它數據定義或添加新的欄位,而是能夠直接放進它的「數據」部分,這就是互聯網分層結構的好處:上層的變更徹底不涉及下層的結構。

IP 數據包的 "標頭" 部分的長度爲 20 到 60 字節,整個數據包的總長度最大爲 65,535 字節。所以,理論上,一個 IP 數據包的 "數據" 部分,最長爲 65,515 字節。前面說過,以太網數據包的 "數據" 部分,最長只有 1500 字節。所以,若是 IP 數據包超過了 1500 字節,它就須要分割成幾個以太網數據包,分開發送了。

3.4 ARP 協議 IP 數據包是放在以太網數據包裏發送的,因此咱們必須同時知道兩個地址,一個是對方的 MAC 地址,另外一個是對方的 IP 地址。一般狀況下,對方的 IP 地址是已知的,可是咱們不知道它的 MAC 地址,咱們須要一種機制,可以從 IP 地址獲得 MAC 地址。 有兩種狀況,一是若是兩臺主機不在同一子網絡下,那麼沒法獲得對方 MAC 地址,只能將數據包傳送到兩個子網絡鏈接處的 "網關"(gateway),讓網關來處理。 二是如果在同一子網絡下,能夠用 ARP 協議獲得 MAC 地址,廣播出一個攜帶所查詢的 IP 地址的數據包(以太網數據包裏),在對方的 MAC 地址欄填寫 FF:FF:FF:FF:FF:FF,表示是個廣播地址,同子網絡的主機接受後取出其中的 IP 地址與自身的做比較,相同則報告本身的 MAC 地址,不然丟包。

四 傳輸層 功能是創建 "端口到端口" 的通訊。相比之下,"網絡層" 的功能是創建 "主機到主機" 的通訊。只要肯定主機和端口,咱們就能實現程序之間的交流。所以,Unix 系統就把主機 + 端口,叫作 "套接字"(socket)。有了它,就能夠進行網絡應用程序開發了。 同臺主機下運行多個聯網的程序,如何保證數據不走錯地方?咱們須要「端口」來確認該數據包供哪一個程序(進程)使用。

4.1 端口 端口是 0 到 65535 之間的一個整數,正好 16 個二進制位。0 到 1023 的端口被系統佔用,用戶只能選用大於 1023 的端口,每一個應用程序會隨機選用一個端口,而後與服務器的相應端口聯繫。

4.2 UDP 協議(格式是數據前面加端口號) "標頭" 部分(只有 8 個字節,總長度不超過 65,535 字節,正好放進一個 IP 數據包)主要定義了發出端口和接收端口,"數據" 部分就是具體的內容。而後,把整個 UDP 數據包放入 IP 數據包的 "數據" 部分,而前面說過,IP 數據包又是放在以太網數據包之中的,因此整個以太網數據包如今變成了下面這樣:

4.3 TCP 協議(有確認機制的 UDP 協議) UDP 協議的優勢是比較簡單,容易實現,可是缺點是可靠性較差,一旦數據包發出,沒法知道對方是否收到。 而 TCP 協議可以確保數據不會遺失。它的缺點是過程複雜、實現困難、消耗較多的資源。 TCP 數據包和 UDP 數據包同樣,都是內嵌在 IP 數據包的 "數據" 部分。TCP 數據包沒有長度限制,理論上能夠無限長,可是爲了保證網絡的效率,一般 TCP 數據包的長度不會超過 IP 數據包的長度,以確保單個 TCP 數據包沒必要再分割。

五 應用層(規定應用程序的數據格式) TCP 協議能夠爲各類各樣的程序傳遞數據,好比 Email、WWW、FTP 等等。那麼,必須有不一樣協議規定電子郵件、網頁、FTP 數據的格式,這些應用程序協議就構成了 "應用層"。 直接面對用戶,它的數據就放在 TCP 數據包的 "數據" 部分。

相關文章
相關標籤/搜索