天天看點

linux【網絡程式設計】之網絡基礎

作者:是蜃樓啊

一、網絡協定與協定分層

“協定” 是一種約定

1.1 為什麼要分層

  1. 軟體設計方面的優勢—低耦合
  2. 分層依據:功能比較集中,耦合度較高的子產品—高内聚
  3. 每一層都要解決特定的問題

每一層都有自己比對的協定,每一層協定都解決自己的問題

1.2 OSI七層模型

OSI(Open System Interconnection,開放系統互連)七層網絡模型稱為開放式系統互聯參考模型,是一個邏輯上的定義和規範;把網絡從邏輯上分為了7層. 每一層都有相關、相對應的實體裝置,比如路由器,交換機;

linux【網絡程式設計】之網絡基礎

但是, 它既複雜又不實用; 是以我們按照TCP/IP四層模型來講解

1.3 TCP/IP五層(或四層)模型

實體層: 負責光/電信号的傳遞方式. 比如現在以太網通用的網線(雙絞 線)、早期以太網采用的的同軸電纜(現在主要用于有線電視)、光纖, 現在的wifi無線網使用電磁波等都屬于實體層的概念。實體層的能力決定了最大傳輸速率、傳輸距離、抗幹擾性等. 集線器(Hub)工作在實體層.

資料鍊路層: 負責裝置之間的資料幀的傳送和識别. 例如網卡裝置的驅動、幀同步(就是說從網線上檢測到什麼信号算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發)、資料差錯校驗等工作. 有以太網、令牌環網, 無線LAN等标準. 交換機(Switch)工作在資料鍊路層.

網絡層: 負責位址管理和路由選擇. 例如在IP協定中, 通過IP位址來辨別一台主機, 并通過路由表的方式規劃出兩台主機之間的資料傳輸的線路(路由). 路由器(Router)工作在網路層.

傳輸層: 負責兩台主機之間的資料傳輸. 如傳輸控制協定 (TCP), 能夠確定資料可靠的從源主機發送到目标主機.

應用層: 負責應用程式間溝通,如簡單電子郵件傳輸(SMTP)、檔案傳輸協定(FTP)、網絡遠端通路協定(Telnet)等. 我們的網絡程式設計主要就是針對應用層

linux【網絡程式設計】之網絡基礎

二、網絡傳輸流程

2.1 了解區域網路

一、協定報頭

  1. 協定每一層都有,每一個協定的最終表現就是協定都要有報頭(快遞盒上的快遞單)
  2. 協定通常是通過協定報頭來表達的
  3. 每一份資料最終在被發送或者在不同的協定層中,都要有報頭

二、區域網路

  • 兩台區域網路的主機能夠直接通信
  • 通信原理:每一台主機都有網卡,每一張網卡都有自己的MAC位址 ,全球唯一。

2.2 同一網段内的兩台主機進行檔案傳輸

封裝:有效載荷+各層報頭(用誰的協定加誰的報頭)

解包:将報頭和有效載荷分離的過程

分用:将有效載荷交給指定協定解包的過程

封包=報頭+有效載荷

linux【網絡程式設計】之網絡基礎

以上我們可以認為:同層協定在直接通信,也可以了解成向下傳遞。

2.3 跨網段的主機的檔案傳輸

同層協定看到的封包都是一樣的

最後一層與IP層通過路由器,經過解包與重新封包之後,再去解包分用

linux【網絡程式設計】之網絡基礎

在上圖中,路由器橫跨兩個網絡,則有兩個網絡接口:路由器和以太網屬于同一個區域網路;路由器也和令牌環網屬于同一個區域網路,這樣兩個不同的區域網路下的主機就能通過路由器實作資料包轉發

IP層及IP協定存在的意義之一:屏蔽底層網絡的差異,如上圖中的網卡層。

三、資料包封裝和分用

  • 不同的協定層對資料包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做資料報 (datagram),在鍊路層叫做幀(frame).
  • 應用層資料通過協定棧發到網絡上時,每層協定都要加上一個資料首部,稱為封裝
  • 首部資訊中包含了一些類似于首部有多長, 載荷(payload)有多長, 上層協定是什麼等資訊.
  • 資料封裝成幀後發到傳輸媒體上,到達目的主機後每層協定再剝掉相應的首部, 根據首部中的 “上層協定字段” 将資料交給對應的上層協定處理
linux【網絡程式設計】之網絡基礎

四、網絡中的位址管理

4.1 IP位址

  1. IP位址是在IP協定中, 用來辨別網絡中不同主機的位址,通常使用于廣域網中,區域網路中也能使用;
  2. 對于IPv4來說, IP位址是一個4位元組, 32位的整數;對于IPv6來說, IP位址是一個16位元組, 128位的整數,暫時不需要關注IPv6
  3. 我們通常也使用 “點分十進制” 的字元串表示IP位址, 例如 192.168.0.1 ; 用點分割的每一個數字表示一個位元組, 範圍是 0 - 255;

IP位址可以了解為某個路途的起點和終點(源IP和目的IP);在網絡傳輸中提供方向

4.2 MAC位址

MAC位址用來識别資料鍊路層中相連的節點;在網卡出廠時就确定了,不能更改!

MAC位址可以了解為某個路途中,中間相鄰的節點(源MAC位址和目的MAC位址);在網絡傳輸中提供可行性

繼續閱讀