UNIX網絡編程——TCP/IP簡介

1、ISO/OSI參考模型網絡

       OSI(open system interconnection)開放系統互聯模型是由ISO(International Organization for Standardization)國際標準化組織定義的網絡分層模型,共七層,以下圖:
加密

                             

       物理層(Physical Layer):物理層定義了全部電子及物理設備的規範,爲上層的傳輸提供了一個物理介質,本層中數據傳輸的單位爲比特(bit)。屬於本層定義的規範有EIA/TIA RS-23二、EIA/TIA RS-44九、V.3五、RJ-45等,實際使用中的設備如網卡等屬於本層。spa


       數據鏈路層(Data Link Layer):對物理層收到的比特流進行數據成幀。提供可靠的數據傳輸服務,實現無差錯數據傳輸。在數據鏈路層中數據的單位爲幀(frame)。屬於本層定義的規範有SDLC、HDLC、PPP、STP、幀中繼等,實際使用中的設備如switch交換機屬於本層。排序


       網絡層(Network Layer):網絡層負責將各個子網之間的數據進行路由選擇,分組與重組。本層中數據傳輸的單位爲數據包(packet)。屬於本層定義的規範有IP、IPX、RIP、OSPF、ICMP、IGMP等。實際使用中的設備如路由器屬於本層。
接口


       傳輸層(Transport Layer):提供可靠的數據傳輸服務,它檢測路由器丟棄的包,而後產生一個重傳請求,可以將亂序收到的數據包從新排序。在傳輸層數據的傳輸單位是段(segment)

進程

       會話層(Session Layer):管理主機之間會話過程,包括會話創建、終止和會話過程當中的管理。

路由

       表示層(Presentation Layer):表示層對網絡傳輸的數據進行變換,使得多個主機之間傳送的信息可以互相理解,包括數據的壓縮、加密、格式轉換等。

同步

       應用層(Application Layer):應用層與應用程序界面溝通,以達至展現給用戶的目的。 在此常見的協定有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等
it


2、TCP/IP協議四層模型io

       TCP/IP網絡協議棧分爲應用層(Application)、傳輸層(Transport)、網絡層(Network)和鏈路層(Link)四層。以下圖所示,若是沒有特別說明,通常引用的圖都出自《TCP/IP詳解》。

                                                       

       兩臺計算機經過TCP/IP協議通信的過程以下所示:

                                                

       傳輸層及其如下的機制由內核提供,應用層由用戶進程提供,應用程序對通信數據的含義進行解釋,而傳輸層及其如下處理通信的細節,將數據從一臺計算機經過必定的路徑發送到另外一臺計算機。應用層數據經過協議棧發到網絡上時,每層協議都要加上一個數據首部(header),稱爲封裝(Encapsulation),以下圖所示:

                                   

       不一樣的協議層對數據包有不一樣的稱謂,在傳輸層叫作段(segment),在網絡層叫作數據報(datagram),在鏈路層叫作幀(frame)。數據封裝成幀後發到傳輸介質上,到達目的主機後每層協議再剝掉相應的首部,最後將應用層數據交給應用程序處理。
       上圖對應兩臺計算機在同一網段中的狀況,若是兩臺計算機在不一樣的網段中,那麼數據從一臺計算機到另外一臺計算機傳輸過程當中要通過一個或多個路由器,以下圖所示:

                                                

       其實在鏈路層之下還有物理層,指的是電信號的傳遞方式,好比如今以太網通用的網線(雙絞線)、早期以太網採用的的同軸電纜(如今主要用於有線電視)、光纖等都屬於物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)是工做在物理層的網絡設備,用於雙絞線的鏈接和信號中繼(將已衰減的信號再次放大使之傳得更遠)。

       鏈路層有以太網、令牌環網等標準,鏈路層負責網卡設備的驅動、幀同步(就是說從網線上檢測到什麼信號算做新幀的開始)、衝突檢測(若是檢測到衝突就自動重發)、數據差錯校驗等工做。交換機是工做在鏈路層的網絡設備,能夠在不一樣的鏈路層網絡之間轉發數據幀(好比十兆以太網和百兆以太網之間、以太網和令牌環網之間),因爲不一樣鏈路層的幀格式不一樣,交換機要將進來的數據包拆掉鏈路層首部從新封裝以後再轉發。

       網絡層的IP協議是構成Internet的基礎。Internet上的主機經過IP地址來標識,Internet上有大量路由器負責根據IP地址選擇合適的路徑轉發數據包,數據包從Internet上的源主機到目的主機每每要通過十多個路由器。路由器是工做在第三層的網絡設備,同時兼有交換機的功能,能夠在不一樣的鏈路層接口之間轉發數據包,所以路由器須要將進來的數據包拆掉網絡層和鏈路層兩層首部並從新封裝。IP協議不保證傳輸的可靠性,數據包在傳輸過程當中可能丟失,可靠性能夠在上層協議或應用程序中提供支持。


       網絡層負責點到點(point-to-point)的傳輸(這裏的「點」指主機或路由器),而傳輸層負責端到端(end-to-end)的傳輸(這裏的「端」指源主機和目的主機)。傳輸層可選擇TCP或UDP協議。TCP是一種面向鏈接的、可靠的協議,有點像打電話,雙方拿起電話互通身份以後就創建了鏈接,而後說話就好了,這邊說的話那邊保證聽獲得,而且是按說話的順序聽到的,說完話掛機斷開鏈接。也就是說TCP傳輸的雙方須要首先創建鏈接,以後由TCP協議保證數據收發的可靠性,丟失的數據包自動重發,上層應用程序收到的老是可靠的數據流,通信以後關閉鏈接。UDP協議不面向鏈接,也不保證可靠性,有點像寄信,寫好信放到郵筒裏,既不能保證信件在郵遞過程當中不會丟失,也不能保證信件是按順序寄到目的地的。使用UDP協議的應用程序須要本身完成丟包重發、消息排序等工做。


       目的主機收到數據包後,如何通過各層協議棧最後到達應用程序呢?整個過程以下圖所示:

                                 

       以太網驅動程序首先根據以太網首部中的「上層協議」字段肯定該數據幀的有效載荷(payload,指除去協議首部以外實際傳輸的數據)是IP、ARP仍是RARP協議的數據報,而後交給相應的協議處理。假如是IP數據報,IP協議再根據IP首部中的「上層協議」字段肯定該數據報的有效載荷是TCP、UDP、ICMP仍是IGMP,而後交給相應的協議處理。假如是TCP段或UDP段,TCP或UDP協議再根據TCP首部或UDP首部的「端口號」字段肯定應該將應用層數據交給哪一個用戶進程。IP地址是標識網絡中不一樣主機的地址,而端口號就是同一臺主機上標識不一樣進程的地址,IP地址和端口號合起來標識網絡中惟一的進程

       注意,雖然IP、ARP和RARP數據報都須要以太網驅動程序來封裝成幀,可是從功能上劃分,ARP和RARP屬於鏈路層,IP屬於網絡層。雖然ICMP、IGMP、TCP、UDP的數據都須要IP協議來封裝成數據報,可是從功能上劃分,ICMP、IGMP與IP同屬於網絡層,TCP和UDP屬於傳輸層。

相關文章
相關標籤/搜索