面試 -- 網絡 TCP/IP

如今面試門檻愈來愈高,不少開發者對於網絡知識這塊瞭解的不是不少,遇到這些面試題會手足無措。本篇文章知識主要集中在 TCP/IP 這塊,也會對物理層和數據鏈路層有簡單的介紹。文中知識來自 《圖解 TCP/IP》與維基百科,如有錯誤請你們指出。文章會持續更新。面試

面試 -- 網絡 HTTP數據庫

TCP/IP 基礎知識

分組技術

  • 可讓多個用戶共享一條線路

tcp/ip 表明什麼

  • 利用 IP 進行通訊時所必須用到的協議羣的統稱
    • RFC 協議的說明,STD 管理 RFC

互聯網結構

  • 互聯網由不少較小範圍的網絡組成,每一個小網由骨幹網和末端網組成

TCP/IP 協議分層模型

  • 物理層將二進制的0和1和電壓高低,光的閃滅和電波的強弱信號進行轉換
  • 鏈路層表明驅動
  • 網絡層
    • 使用 IP 協議,IP 協議基於 IP 轉發分包數據
    • IP 協議是個不可靠協議,不會重發
    • IP 協議發送失敗會使用ICMP 協議通知失敗
    • ARP 解析 IP 中的 MAC 地址,MAC 地址由網卡出廠提供
    • IP 還隱含鏈路層的功能,無論雙方底層的鏈路層是啥,都能通訊
  • 傳輸層數組

    • 通用的 TCP 和 UDP 協議
      • TCP 協議面向有鏈接,能正確處理丟包,傳輸順序錯亂的問題,可是爲了創建與斷開鏈接,須要至少7次的發包收包,資源浪費
      • UDP 面向無鏈接,無論對方有沒有收到,若是要獲得通知,須要經過應用層
  • 會話層以上分層緩存

    • TCP/IP 分層中,會話層,表示層,應用層集中在一塊兒
    • 網絡管理經過 SNMP 協議

TCP/IP 分層模型與通訊示例

  • 發包過程
    • 表示層轉碼,會話層決定什麼時候創建鏈接,傳輸層負責創建鏈接,斷開鏈接和發送數據,保證數據能順利發送至對端。TCP 協議(傳輸層)在數據前附加一個首部,這個首部除了包含發送端和接收端地址之外,還包含序號,檢驗和(判斷數據是否被破壞)。IP (網絡層)模塊將 TCP 傳來的首部和數據當數據。加首部,這個首部中包含地址和上一層的協議。鏈路層除了添加首部,還會添加 FCS 到包尾
  • 收包過程
    • 鏈路層判斷 MAC 地址,判斷IP 協議。網絡層作的事情差很少,在這裏,對於有路由器的狀況下,藉助路由控制表,在找到應該送達的主句或路由器之後再轉發數據。傳輸層檢驗數據是否被損壞,檢驗數據是否按照順序發送,而後再作相同的事情

數據鏈路層

數據鏈路的做用

  • 鏈路層將數據集合爲一個幀的塊,而後進行傳輸
  • 只提供導線一端到另外一端的傳輸

MAC 地址

  • Mac 地址長48比特,被燒入到網卡 ROM 中,不會重複

交換機

  • 交換機自學而後生成一張 Mac 表,具體原理爲
    • 交換機4個端口鏈接着終端,A 終端與端口1鏈接,發送 frame 後交換機得知端口1和 A 終端的關係,而後轉發到其餘三端,轉發完成後得知端口2與主機 B 想對應,記錄到表中。之後主機 A 與主機 B 的通訊就經過端口1和端口2進行

幀 frame

  • 幀是「一個數據鏈路層的傳輸單元,由一個數據鏈路層首部和其攜帶的分組所組成」。譬如說以太網幀,PPP 幀

以太網幀結構

以太網幀結構

  • 一個幀以7個字節的前導碼和1個字節的幀開始符做爲幀的開始
  • 抱頭包含源和目標的 Mac 地址和代表上一層網絡協議的類型
  • 接下來是數據
  • 後面是幀驗證序列,以驗證幀是否損壞
  • 最後有一個幀間距,兩個幀發送間要再發送至少12字節的空閒線路狀態碼

IP 協議

網絡層做用

  • 跨越多種數據鏈路傳輸數據包
  • 提供路由和尋址功能

IP 地址

  • 每塊網卡需配置至少一個 IP 地址
  • IP 地址由32位正整數組成,爲二進制,可是爲了人類更好的閱讀,將他每8位分爲一組,共4組
  • IP 地址由網絡和主機兩標識組成
    • 網絡標識在數據鏈路的每一個段配置不一樣的值,必須保證相互鏈接的端的地址不重複
    • 主機標識不容許在同一網段內重複
  • IP 地址分爲四個級別,分別爲 A, B, C, D
    • A類地址是首位爲 0 開頭,前八位是網絡標識, 0.0.0.0 ~ 127.0.0.0屬於 A 類
    • B 類地址是前兩位由 10 組成,前16位是網絡標識,128.0.0.0 ~ 191.255.0.0 屬於 B 類
    • C 類地址前三位是 110, 前24位是網絡標識,192.0.0.0 ~ 239.255.255.0 屬於 B 類
    • D 類前四位是 1110,32位全是網絡標識,224.0.0.0 ~ 239.255.255.255屬於 D 類
  • 可是以上的分類已經不用,改成使用子網掩碼定位網絡標識長度。
    • 子網標識同一個網關,255.255.255.0和255.255.255.1是同一個子網
    • 子網掩碼也是32位組成
    • 掩碼中有幾個1就代碼幾位網絡標識,其餘爲主機標識
    • 假如掩碼前24位爲1,就表明前24位都爲網絡標識,用 IP 地址標識就是255.255.255.0,後面的0表明主機標識,理論上有256臺主機可鏈接

路由控制

  • 僅有 IP 地址還不足以將數據包發送到對端,還需指明路由器或主機。保存這種信息的就是路由控制表。
  • 路由控制表中記錄着地址與下一步要發送至路由器的地址。在發送 IP 包時,先肯定 IP 包首部目標地址,而後在表中找到與該地址具備相同網絡地址的記錄,根據記錄將 IP 包轉發給相應的下一個路由器。

IPv6

  • 地址長度爲128位
  • 解決了不少 IPv4的問題
    • IP 地址擴大(目前 IPv4地址不足的問題由 NAT解決,NAT 是一種在 IP 數據包經過路由器或防火牆時重寫源 IP 地址或目標地址的技術。這種技術被用於多臺主機使用單個公有 IP 訪問互聯網的私有網絡中。)
    • 包首部長度固定40字節,路由器不在作分片操做,直接在發送端主機分片
    • 不需 DHCP 服務器也能自動分配 IP地址
    • 使用認證和加密功能

IP協議相關技術

DNS

  • IP 地址不容易記憶,而後出現了域名。DNS 是將域名和 IP 地址相互映射的一個分佈式數據庫。
  • DNS 解析
    • 查詢 www.baidu.com ,DNS 服務器會先檢查自身緩存,有記錄則返回結果
    • 記錄不存在,DNS 服務器向根域名服務器查詢,而後會返回.com 域的權威域名服務器地址
    • DNS 向 .com 服務器查詢,獲得 .baidu.com 地址
    • DNS 向 .baidu.com 服務器查詢,獲得最終地址,存入緩存並返回結果

ARP

  • 以太網協議規定兩臺主機相互通訊必須知道目標主機 MAC 地址
  • 數據鏈路層會將上一層 IP 協議發來的 IP 地址轉爲 MAC 地址
  • 若是兩臺主機不在同一個局域網內,必須經過路由轉發才能通訊。此時,發送端經過 ARP 得到的 MAC 地址是一臺能夠通向局域網外的路由器的 MAC 地址
  • IPv6解析 MAC 地址經過 NDP

NAT

  • 用於在本地網絡中使用私有地址,鏈接互聯網時轉爲全局 IP 地址的技術
    • 本地地址10.0.0.10要向163.221.120.9通訊
    • NAT 路由器會將發送源地址從10.0.0.10轉爲全局 IP 地址202.244.174.37再通訊
  • 當一個公有 IP 下有多臺主機須要對外通訊時,若是多臺主機都使用相同的端口號會致使轉爲全局 IP 時數字一致,全部經過 NAPT 技術能夠給轉換端口號
    • NAT 路由器會自動生成 NAPT 的轉換表,這個轉換表能夠正確轉換地址和端口的組合
    • 在 TCP 中,簡歷 TCP 鏈接首次握手時的 SYN 包發出後就會生成表。在收到關閉鏈接時發出的 FIN 包時刪除

TCP 與 UDP

傳輸層協議

TCP 和 UDP 是傳輸層的兩個具備表明意義的協議.服務器

TCP 是面向有連接的,可靠的協議,TCP 創建鏈接須要三次握手,斷開鏈接須要四次握手.由於效率比不上 UDP 協議.可是 TCP 協議具備重發包,順序控制等的機制。網絡

UDP 是面向無鏈接的協議,不提供複雜的控制機制。作的最重要的事情就是分辨應用層協議。多用於視頻音頻通信。tcp

傳輸層的做用是指出具體該把數據包發給哪一個應用,經過端口來分辨應用。分佈式

端口號

同一個端口不會同時出現,傳輸層經過辨認端口號來確認應用。可是隻靠端口號識別通訊是不夠的。須要採起五個信息來識別一個通訊,分別是源 IP 地址,目標 IP 地址,協議號,源端口號,目標端口號。兩個包中只要任何一個信息不一樣就不是同一個通訊。post

TCP

三次握手創建鏈接

主機 A 相與主機 B 創建鏈接,主機 A 會首先發送一個 SYN 包給主機 B。主機 B 會返回 確認應答 ACK 或者否認應答 NACK。若是這時主機 A 長時間沒有收到主機 B 的應答,主機 A 會重發 SYN 包給主機 B,實現了重發數據包的功能。當主機 B 發送 ACK 給主機 A 後,主機 A 也會發送一個 ACK 包給主機 B,這時創建鏈接。性能

TCP有順序控制的功能,經過一個序列號來確認發送的數據。在發送 SYN 包前,假設主機 A 的初始序列號爲1000,以該序號依次往下進行數據編號,而後告訴主機 B 初始序列,同時主機 B 會對 A 的序列號進行確認,假如主機 B 返回一個2000的序列號,則表明字節編號爲1000 — 1999,代表主機 B 收到1000字節。

爲何不是兩次握手

兩次握手就創建鏈接,假如主機 A 發送的 SYN 因網絡問題遲遲沒有到達主機 B,這時候會重發另外一個 SYN 包給 B,當 A 接受到 B 的 ACK 包時創建鏈接。這時若是第一個 SYN 到達 B 時,主機 B 會認爲主機 A 但願再次創建鏈接,會返回一個 ACK 包給 A。當 A 收到 ACK 時會拋棄掉這個包,由於 A 並不想創建鏈接,這時主機 B 認爲鏈接已經創建,會一直等待主機 A 發送數據,這樣會致使主機 B 的性能損耗。

四次握手斷開鏈接

主機 A 發送 FIN(請求切斷鏈接),主機 B 收到後回覆 ACK 和 FIN 包,主機 A 收到主機 B 的 FIN 和 ACK 後發送 ACK 包

TCP首部

TCP首部

序列號碼

  • 若是含有 SYN,則此爲最初序列號
  • 若是沒有 SYN,則此爲第一個數據字節的序列號

確認號碼,指望收到的數據的開始序列號。

檢驗和,對整個 TCP 報文段,包括頭部和數據以16位字進行計算所得,這時一個強制性字段

UDP頭部

UDP頭部

報文長度,指定 UDP 報頭和數據總共佔用的長度。

檢驗和,用於發現頭部信息和數據中的傳輸錯誤,該字段在 IPv4中可選, IPv6中強制。

相關文章
相關標籤/搜索