1. 程式人生 > >一個Php菜鳥的TCP/IP協議學習總結(概述)

一個Php菜鳥的TCP/IP協議學習總結(概述)

學習初衷:

前段時間用php socket 做實時聊天,對tcp/ip協議有個簡單瞭解,近來直播貌似很火,於是計劃做一個簡單的直播功能練練手,還有一個原因是想用C語言給自己的php加一個簡單網路通訊的擴充套件,覺得有必要對TCP/IP協議族進行學習,不然一直只停留在寫應用層程式碼階段,沒點技術含量。把自己的學習心得分享給大家,共同進步。寫的有點粗略,先做一個概述,後續會對tcp協議進行深入學習,分享心得。


tcp和UDP都是傳輸層協議,tcp:一般用於用於網路上端到端的資料通訊,tcp提供可靠傳輸。

對比

tcp要先建立會話連線,

UDP不用建立會話, UDP不提供可靠傳輸。可見UDP比tcp效率高,應用場景也不一樣。

舉例:1)訪問網站要先建立會話,由於返回的資料流往往很大,所以要把資料流分割再傳輸,就必須基於tcp進行可靠傳輸避免丟包和進行一系列的包處理。

(2)訪問dns伺服器得到ip地址,通常一個數據包就能解決,udp就很適合,不用先建立會話。

應用服務和tcp一般的計算機應用服務都是基於TCP協議,通訊兩端每一端都有可能有很多基於TCP的服務同時執行,因此為了區分兩端的應用服務,每個服務都對應著TCP的一個埠號,例如web服務通常對應著tcp的80埠,服務執行時會監聽tcp的80埠(為了好理解,可以理解為,有著80埠標誌的tcp協議)。

應用協議和tcp: 例如http協議對應著tcp的80埠,https協議對應著tcp的443埠

http=tcp+80. https=tcp+443。

Tcp/ip協議在osi模型上是四層上三層合併為一層(應用層),資料鏈路層和物理層合併為鏈路層。每一層都為上層服務。

記一次資料傳送:當應用層產生資料互動時,http協議會對資料進行包裝和處理說明,

1.傳輸層:保證端到端的資料能夠正確傳輸(比如PC瀏覽器和伺服器80埠通訊),由於傳輸資料大小有限制,傳輸層會把應用層的資料進行分段、編號、等一系列處理,分多塊傳輸,具有出錯重傳、流量控制功能,到達另一端後會根據編號重組資料,給應用層解析。

2.網路層:傳輸層分割後的資料段給網路層傳輸,網路層把資料段裝成ip資料包並編號進行傳輸,ip包由:首部 +源ip+目標ip+傳輸層資料段,組成。負責把資料包從源ip傳送到目標ip, 不提供可靠傳輸(例如丟包),只具有傳輸功能。網路節點之間的傳輸需要識別MAC地址,同一網段中ARP協議通過廣播方式獲取目標MAC地址或者閘道器的MAC地址。在傳輸的路由上Rip協議可以廣播的方式找到下一步的傳輸路由地址,路由器具有學習功能會把地址加入路由表(也叫動態路由),RARP協議和ARP相反:可根據實體地址得到ip地址。

3.ICMP協議可檢測網路層的狀況,比如ping命令就是基於ICMP協議

4.IGMP協議是 組播-多播,一般用於流媒體例如,客戶端繫結一個多播地址並建立連線,就可以觀看源資訊流。

5.資料鏈路層:都知道:我們一般網路傳輸都是從區域網到乙太網的跨網段傳輸,之間必然是點到點的傳輸,最終到達目標Ip,點到點之間的傳輸需要識別MAC地址,ip包不能直接傳輸,因為ip包沒有MAC地址,所以還需要封裝成資料幀才能正確傳輸,如果ip包過大會先分為資料片並編號,然後再包裝成資料幀傳輸到達目標IP後再重組,資料幀: 幀首部+源MAC地址+目標MAC地址+ip包+FSC(幀效驗:效驗資料幀的完整性)

各層大致如下