linux網路編程之TCP/IP基礎(一):TCP/IP協議棧與資料包封裝

來源:互聯網
上載者:User

一、ISO/OSI參考模型

OSI(open system interconnection)開放系統互聯模型是由ISO(International Organization for Standardization)國際標準組織定義的網路分層模型,共七層,如。


物理層(Physical Layer):物理層定義了所有電子及物理裝置的規範,為上層的傳輸提供了一個物理介質,本層中資料轉送的單位為位元(bit)。屬於本層定義的規範有EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等,實際使用中的裝置如網卡等屬於本層。


資料連結層(Data Link Layer):對物理層收到的位元流進行資料成幀。提供可靠的Data Transmission Service,實現無差錯資料轉送。在資料

鏈路層中資料的單位為幀(frame)。屬於本層定義的規範有SDLC、HDLC、PPP、STP、框架轉送等,實際使用中的裝置如switch交換器屬於本層。

網路層(Network Layer):網路層負責將各個子網之間的資料進行路由選擇,分組與重組。本層中資料轉送的單位為資料包(packet)。屬於本層定義的規範有IP、IPX、RIP、OSPF、ICMP、IGMP等。實際使用中的裝置如路由器屬於本層。


傳輸層(Transport Layer):提供可靠的Data Transmission Service,它檢測路由器丟棄的包,然後產生一個重傳請求,能夠將亂序收到的資料包重新排序。在傳輸層資料的傳輸單位是段(segment)。

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

展示層(Presentation Layer):展示層對網路傳輸的資料進行變換,使得多個主機之間傳送的資訊能夠互相理解,包括資料的壓縮、加密、格式轉換等。

應用程式層(Application Layer):應用程式層與應用程式介面溝通,以達至展示給使用者的目的。 在此常見的協定有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等


二、TCP/IP協議四層模型

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屬於傳輸層。


參考:

《Linux C 編程一站式學習》

《TCP/IP詳解 卷一》

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.