如今面試門檻愈來愈高,不少開發者對於網絡知識這塊瞭解的不是不少,遇到這些面試題會手足無措。本篇文章知識主要集中在 TCP/IP 這塊,也會對物理層和數據鏈路層有簡單的介紹。文中知識來自 《圖解 TCP/IP》與維基百科,如有錯誤請你們指出。文章會持續更新。面試
面試 -- 網絡 HTTP 數據庫
TCP/IP 基礎知識
分組技術
tcp/ip 表明什麼
互聯網結構
互聯網由不少較小範圍的網絡組成,每一個小網由骨幹網和末端網組成
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中強制。