因爲博客遷移至www.coderyi.com,文章請看http://www.coderyi.com/archives/405 服務器
寫這篇博客,主要是看了謝希仁的計算機網絡那本書,計算機專業的朋友在大學期間都學過那本教材,近日重讀特寫這篇博客。網絡
五層模型主要是結合了osi的七層和tcp/ip的四層得出,主要是物理層、數據鏈路層、網絡層、傳輸層、應用層五層,下層向上層提供服務,上層向下層提供接口。做爲一個iOS開發者接觸比較多的就是上面兩層,因此本文也主要介紹上面兩層。socket
先講一講各層的傳輸單位,應用層是報文(message),報文在發送以前通常會劃分紅爲等長的數據段,在每段前面加上一些必要的控制信息組成的首部後,就構成了一個分組(packet),也叫作包,首部也可叫包頭。不管在哪一層傳送的數據單元,習慣上均可以籠統地用分組來表示。tcp
傳輸層主要使用TCP和UDP,若是使用TCP的話,單位是報文段(segment),UDP的單位是用戶數據報。在發送數據時,網絡層把傳輸層產生的報文段或者用戶數據報封裝成分組或包進行傳送,因爲網絡層使用IP協議,分組也叫作IP數據報,簡稱數據報。 數據鏈路層將網絡層交下來的IP數據報組裝成幀(framing),物理層單位是比特,就是0和1。spa
從通常的概念講,講網絡互聯起來要使用一些中間設備,物理層使用的中間設備叫作轉發器(repeater),數據鏈路層使用的中間設備叫作網橋或橋接器(bridge),網絡層使用的中間設備叫作路由器(router),網絡層以上使用的中間設備叫作網關(gateway)。計算機網絡
接下來簡單介紹一下物理層,首先須要明白的是物理層不是指具體的物理設備或者信號傳輸的物理媒體,而是指在物理媒體之上爲上一層(鏈路層)提供一個傳輸原始比特流的物理鏈接。這一層實現的硬件是集線器(hub),它對接收到的信號進行再生整形放大,以擴大網絡的傳輸距離,同時把全部節點集中在以它爲中心的節點上。code
數據鏈路層協議有許多種,可是有三個基本問題則是共同的,這三個問題就是:封裝成幀、透明傳輸、差錯檢測。關於差錯控制,比特在傳輸過程當中可能0變1,1變0,這叫作比特差錯,數據鏈路層普遍使用了循環冗餘檢驗CRC(Cyclic Redundancy Check)。數據鏈路層使用兩種信道:點對點信道和廣播信道,點對點協議PPP(point-to-point protocol)則是點對點信道經常使用的協議,也是該層最普遍的協議,工做在該層的硬件是網橋。orm
第三層是網絡層,網絡層向上層提供的是無鏈接的數據報服務,數據報服務的可靠通訊應該由用戶主機來保證、鏈接的創建能夠不須要、每一個分組都有終點的完整地址、分組獨立選擇路由進行轉發,當結點出故障時,故障結點可能會丟失分組,一些路由可能會發生改變,到達終點不必定按發送順序,端到端的差錯控制和流量控制由用戶主機負責。網絡層不提供服務質量的承諾,IP數據報首部中的檢驗和字段,只檢驗首部是否出現差錯而不檢查數據部分。若是主機中的進程之間的通訊須要是可靠的,那麼就由網絡的主機中的運輸層負責(包括差錯處理、流量控制等),IP協議是該層的核心協議,IP協議的主要功能就是無鏈接的數據報傳輸、數據報路由選擇和差錯控制。router
第四層是傳輸層,它屬於面向通訊的最高層,同時也是用戶功能中的最底層。當網絡的邊緣部分中的兩個主機使用網絡的核心部分的功能進行端到端的通訊時,只有主機的協議棧纔有傳輸層,而網絡核心部分中的路由器在轉發分組時都只用到下三層的功能。網絡層是爲主機之間提供邏輯通訊,而傳輸層爲應用進程之間提供端到端的邏輯通訊。端口是應用層各協議進程與運輸實體進行層間交互的一種地址,傳輸層的端口號分爲兩大類,一是服務器使用的端口號,這裏又分兩類,熟知端口號,也叫系統端口號,數值爲0~1023,例如FTP(21)、HTTP(80)、SMTP(25)等,另外一種是登記端口號,數值在1024~49151;另外一類是客戶端使用的端口號,數值在49152~65535之間。server
傳輸層有一個重要的功能是複用和分用,複用是指發送方不一樣的應用進程可使用同一個傳輸層協議傳送數據,而分用是指接收方的傳輸層在剝去報文的首部後可以把這些數據正確交付到目的進程。
傳輸層有兩個協議,面向鏈接的TCP和無鏈接的UDP。UDP是無鏈接的,使用盡最大努力交付,即不可靠交付,UDP是面向報文的,UDP沒有擁塞控制,所以網絡出現的擁塞不會使源主機發送速率下降,UDP支持一對1、一對多、多對1、多對多的交互通訊,UDP的首部開銷小。TCP是面向鏈接的傳輸層協議,TCP鏈接只能是一對一的,它提供可靠的交付服務,也就是說,經過TCP鏈接傳送的數據,無差錯、不丟失、不重複、而且按序到達,TCP提供全雙工通訊,TCP是面向字節流的,TCP把應用程序交下來的數據塊當作無結構的字節流,TCP不保證接收方應用程序收到的數據塊和發送方應用程序所發出的數據塊具備對應的大小關係(例如,發送方應用程序交給發送方TCP共10個數據塊,但接收方的TCP可能只用4個數據塊就把收到的字節流交付給了上層的應用程序,但接收方應用程序收到的字節流必須和發送方應用程序發出的字節流徹底同樣)。
TCP鏈接的端點叫作套接字(socket)或插口,即(IP地址:端口號),每一條TCP鏈接惟一地被通訊兩端的兩個端點(即兩個套接字)所肯定。
TCP的運輸鏈接有三個階段,即鏈接創建、數據傳送、鏈接釋放。TCP鏈接創建的過程要使每一方可以肯定對方的存在,主動發起鏈接創建的應用進行叫作客戶(client),被動等待鏈接創建的應用進程叫作服務器(server),鏈接創建的過程叫作三次握手,假設A爲客戶,B爲服務器,A發送一個報文給B,B發回確認,而後A再加以確認,來回共三次。
鏈接的釋放須要發送四個包,所以成爲四次揮手。客戶端或服務器均可以主動發起揮手動做。
第五層是應用層,FTP(對應應用,文件傳送)、HTTP(對應應用萬維網)、TELNET(遠程終端接入)、SMTP(電子郵件)使用的傳輸層協議都是TCP,DNS(名字轉換)、TFTP(文件傳送)、專用協議(IP電話、流式媒體通訊)等使用的傳輸層協議都是UDP。
以上就是計算機網絡的五層協議。