網絡淺析(<<網絡是怎麼鏈接的>> 總結)

概要

網絡是個不少人都知道, 卻又是不少人都說不清楚的東西, 對於通常用戶來講, 沒什麼問題. 但對於一個軟件開發人員來講, 至少要可以大體描述本身的程序中網絡部分是如何運做的.git

由於, 目前幾乎任何程序都和網絡有關, 純粹的單機程序幾乎已經絕跡. 若是弄不清楚網絡的運做機制, 除了網絡相關問題每每一籌莫展, 而網絡問題每每是開發過程當中很難遇到的.瀏覽器

下面就以一次 HTTP 請求爲例, 儘可能簡要的說明網路的方方面面.服務器

基本概念

網絡中一些常見的基本概念, 弄清楚以後有助於瞭解網絡的構造.網絡

網線

這是最多見的網絡設備, 經過網線(無線網除外), 咱們纔將一個個網絡設備鏈接在一塊兒, 網線承擔的責任就是就是把咱們的數據都經過電信號傳輸到不一樣的地方.socket

集線器

收到的網絡包廣播到整個網絡.性能

交換機

收到的包根據 MAC 地址錶轉發到指定的端口, 交換機的端口有 MAC 模塊, 可是沒有 MAC 地址 交換機的 MAC 地址表主要包含 2 個信息:google

  • 設備的 MAC 地址
  • 設備鏈接在交換機的哪一個端口上

交換機的特殊操做:加密

  • 當發現包要發回原端口時, 直接丟棄包
  • MAC 地址表找不到指定地址時, 交換機沒法判斷應該把包發到哪一個端口, 只能將包轉發到除了源端口以外的全部端口

二層交換機 所謂的二層交換機, 其實和通常的交換機在功能上沒有什麼區別, 就是更高級, 性能更好的交換機而已.設計

路由器

路由器是基於 IP 設計的, 路由器中的每一個端口都有 IP 地址和 MAC 地址 經過路由器轉發的包, 其中接收方 MAC 地址就是路由器端口的 MAC 地址.視頻

路由器和交換機

如今的路由器其實包含了交換機的功能, 若是隻是純粹的路由器, 包的傳輸功能實際上是交給交換機來完成的. 路由器設計成只負責 IP 層是有重要意義的, 這樣具體的傳輸就能夠委託給其餘各類傳輸技術.

路由器和集線器

路由器是按照 IP 規則傳輸包的設備(IP) 集線器是按照以太網規則傳輸包的設備(MAC) 也就是說, 網絡包的傳輸過程當中, IP 協議頭部中的目的 IP 能夠不變, 可是 IP 協議頭部中 MAC 是不斷變化的, 傳輸過程當中, 中間通過了幾回路由器就會變化幾回.

接入網

接入網就是指鏈接互聯網與家庭, 公司網絡的通訊線路.

互聯網與家庭, 公司的網路結構基本同樣, 不一樣點主要有 2 個:

  • 距離不一樣, 互聯網上的設備之間距離通常都很遠
  • 路由的維護方式不一樣

接入網中的術語:

  • ADSL: Asymmetric Digital Subscriber Line. 不對稱數字用戶線
  • FTTH: Fiber To The Home. 光纖到戶
  • BAS: Broadband Access Server. 寬帶接入服務器, 本質是一個功能強大的路由器
  • PPP: Point-to-Point. 點對點協議, 它是電話線, ISDN 等通訊線路所使用的一種協議, 集成了用戶認證, 配置下發, 數據壓縮, 加密等功能
  • PPPoE: PPP over Ethernet. 以太網的點對點協議
  • IX: Internet eXchange. 互聯網交換中心, IX 的核心就是大型的, 高速的交換機

IP

IP 地址由 網絡號+主機號 組成

經常使用的 IP 地址有 A, B, C 3 類:

  1. 後 24 位是主機號, 就是 A 類 IP 地址
  2. 後 16 位是主機號, 就是 B 類 IP 地址
  3. 後 8 位是主機號, 就是 C 類 IP 地址

主機號全是 0, 表示整個子網, 主機號全是 1, 表示向子網上全部設備發送包, 即 廣播

DNS

DNS 查詢消息由 3 部分組成:

  1. 域名 要訪問的域名: 好比 google.com, microsoft.com
  2. Class 用來識別網絡信息, DNS 設計之初並不僅是針對互聯網的, 全部有這個字段. 如今 DNS 只用在互聯網, 這個字段一直是 IN
  3. 記錄類型 A-IP 地址, MX-郵件服務器地址, PTR-IP 反查域名, CNAME-域名相關別名 NS-DNS 服務器 IP

DNS 消息示例: a) 域名: google.com b) Class: IN c) 記錄類型: A DNS 會根據這條消息, 返回 goole.com 的 IP 地址

以太網

以太網是一種網絡類型, 它有 3 個基本特徵:

  1. 將包發送到 MAC 頭部的接收方 MAC 地址表明的目的地
  2. 用發送方 MAC 地址識別發送方
  3. 用以太類型識別包的內容

無線局域網也符合以太網的特徵, 只是識別包內容不用以太類型, 用的是其餘類型

以太網有 全雙工半雙工 2 種方式:

  • 全雙工: 發送和接收能夠並行的方式
  • 半雙工: 某一時刻只能進行發送或者接收其中一種操做

協議棧

協議棧主要是 TCP/IP 協議, 其餘還有 UDP, ICMP, ARP 等等

  • UDP 協議雖然沒有 TCP 可靠, 可是效率高, 它的適用場景好比 DNS, 音頻, 視頻的在線播放等等
  • ICMP 用於告知網絡包傳輸過程當中產生的錯誤以及各類控制消息
  • ARP 用於根據 IP 地址查詢相應的以太網 MAC 地址

網絡鏈接過程

通訊過程(瀏覽器 -> 服務器)

  1. 建立套接字(建立套接字階段) 套接字並不存在實體, 是一塊用於存放控制信息的內存空間. 這些控制信息包括: 通訊對象的 IP, 端口, 通訊進行狀態等等.
  2. 將管道鏈接到服務器端的套接字上(鏈接階段) 鏈接其實是通訊雙方交換控制信息, 在套接字中記錄這些必要信息並準備數據收發的一連串操做. 鏈接的頭部有 TCP, IP 協議的信息, 這些信息就是爲了確保傳輸可以準確, 高效. TCP 頭部有端口號, IP 頭部有 IP 地址
  3. 收發數據(通訊階段) 經過 MTU, MSS 控制發送頻率 經過 ACK 確認是否正確收到網絡包
    • MTU: Maximun Transmission Unit, 最大傳輸單元
    • MSS: Maximun Segment Size, 最大分段大小
  4. 斷開管道並刪除套接字(斷開階段) 斷開鏈接的操做由客戶端或者服務端發起都可.

客戶端和服務端

服務器和客戶端對於 socket 通訊來講是沒有區別的, 惟一的區別在於調用 socket 庫的方式上.

  • 客戶端 (1). 建立套接字(建立套接字階段) (2). 用管道鏈接服務器端的套接字(鏈接階段) (3). 收發數據(收發階段) (4). 斷開管道並刪除套接字(斷開階段)

  • 服務端 (1). 建立套接字(建立套接字階段) (2-1). 將套接字設置爲等待鏈接狀態(等待鏈接階段) (2-2). 接受鏈接(接受鏈接階段) (3). 收發數據(收發階段) (4). 斷開管道並刪除套接字(斷開階段)

服務端的套接字和套接字描述符

服務端的套接字, 須要 4 種信息來確認:

  • 客戶端 IP 地址
  • 客戶端端口號
  • 服務端 IP 地址
  • 服務端端口號

有了這 4 種信息, 就能夠肯定服務端的套接字, 爲何還要套接字描述符來指定套接字呢? 由於:

  • 等待鏈接的套接字中沒有客戶端 IP 地址和端口號
  • 使用描述符這一種信息比較簡單
相關文章
相關標籤/搜索