《圖解HTTP》
《圖解TCP/IP》
《計算機網絡:自頂向下方法》
慕課網
慕課網html
獲取本機IP地址,DNS服務器地址,網關路由器地址程序員
獲取域名的IP地址算法
創建鏈接,通訊,斷開鏈接json
TCP 爲啥須要三次握手,四次揮手瀏覽器
SYN/ACK 報文
先到達服務端(第一次握手),服務端處理後返回一個 SYN/ACK報文
(第二次握手),客戶端根據自身上下文判斷出這是一個歷史鏈接(序列號或鏈接超時),會發送一個RST報文表示終止這一次鏈接(第三次握手)去重
,雙方數據包有序
抓包分析三次握手和四次揮手緩存
名詞 | 解釋 |
---|---|
[S] |
SYN |
[.] |
ACK |
[P] |
Package,數據包 |
[F] |
FIN |
爲啥 time_wait 須要等待 2MSL?服務器
服務端會從新發送 FIN 標記報文請求斷開與客戶端鏈接(1MSL),客戶端收到後會從新發送一個 ACK 報文
,保證TCP協議的全雙工鏈接可以可靠關閉爲啥會出現大量的 close_wait ?網絡
TCP 爲啥須要流量控制併發
TCP 是全雙工的,客戶端和服務器都可做爲發送方或接收方,咱們如今假設一個發送方向接收方發送數據的場景來說解流量控制。首先咱們的接收方有一塊接收緩存,當數據來到時會先把數據放到緩存中,上層應用等緩存中有數據時就會到緩存中取數據。假如發送方沒有限制地不斷地向接收方發送數據,接收方的應用程序又沒有及時把接收緩存中的數據讀走,就會出現緩存溢出,數據丟失的現象,爲了解決這個問題,引入流量控制窗口socket
緩衝區剩餘大小稱之爲接收窗口,用 rwnd 表示,若是 rwnd=0,則發送方中止發送
。只要接收方在響應 ACK 的時候把這個窗口的值帶給發送方,發送方就能知道接收方的接收緩存還有多大的空間,進而設置滑動窗口的大小。
TCP 爲啥須要擁塞控制
擁塞控制是指發送方先設置一個小的窗口值做爲發送速率,當成功發包並接收到ACK時,便以指數速率增大發送窗口的大小,直到遇到丟包(超時/三個冗餘ACK),才中止並調整窗口的大小。這麼作能最大限度地利用帶寬,又不至於讓網絡環境變得太過擁擠。
擁塞控制 是調解網絡的負載
接收方網絡資源繁忙,因未及時響應ACK致使發送方重傳大量數據,這樣將會致使網絡更加擁堵
擁塞控制是動態調整 win 大小,不僅是依賴緩衝區大小肯定窗口大小
擁塞控制與流量控制的區別
TCP 擁塞控制分爲兩個部分
慢開始和擁塞避免
擁塞窗口增長,慢慢提速(指數遞增),試探網絡承受能力,避免擾亂網絡通道的秩序
初始閾值後,加法增長擁塞窗口,直至到最大擁塞窗口
,緩衝區已滿,還有ACK請求的話,數據包會被丟棄初始閾值數改成最大擁塞窗口的一半,而後擁塞窗口數降爲0,從新開始 慢啓動 過程
快速重傳和快速恢復
收到3個重複的ACK請求則執行快重傳,將丟失的數據包從新發送一遍
爲何會出現粘包/拆包
通俗講
tcp發送緩衝區中
,與服務端經過TCP鏈接
,在這個階段,不一樣的請求可能被合併爲一個請求(粘包)而後經過 socket通訊 將數據發送到服務端 tcp 接收緩衝區中
TCP鏈接
中,可能會將一個請求拆分爲多個請求數據包發送到服務端tcp發送緩衝區中
理論
拆包
網卡將應用屢次寫入的數據發送到網絡上
,這將會發生粘包
拆包
粘包
如何獲取完整應用數據報文(四種方式)?
\n
名詞 | 解釋 |
---|---|
以太網標頭 | MAC地址 |
IP標頭 | ip 和port |
TCP標頭 | TCP 傳輸的類型和數據包的長度 |
應用層數據包 | 實際數據包 |
Http 協議
Websocket 協議
101 Switching Protocols
切換協議,升級成 WebsocketWebsocket Data 協議
名詞 | 解釋 |
---|---|
FIN |
標識是否是最後一條數據包 |
RSV1或2或3 |
通常是0,表示是否是有拓展協議 |
opcode |
數據包的類型 |
MASK |
是否是通過源碼處理 |
Payload len |
數據包大小 |
信道
一個接收信道 和 一個發送信道
單工通訊信道
有線電視、無線電收音機等
半雙工通訊信道
不能雙方同時發送,也不能同時接收
全雙工通訊信道
分用-複用技術
封裝成幀
SOH: 00000001
EOT: 00000100
透明傳輸
差錯檢測
物理層只管傳輸比特流,沒法控制是否出錯,數據鏈路層負責起差錯檢測
的工做
檢測機制
奇偶檢驗碼:傳輸前將一個字節中的8位加起來,若爲偶數,則校驗碼爲1,若爲奇數,則校驗碼爲0
,服務端的數據鏈路層進行一樣的運算,若校驗碼與客戶端不一樣,則數據出錯
循環冗餘校驗碼 CRC:一種根據傳輸或保存的數據而產生固定位數校驗碼
的方法,檢測
數據傳輸或者保存後可能出現的錯誤,生成的數字計算出來而且附加到數據後面
MTU(Maximum Transmission Unit)
路徑 MTU
局域網技術
,是一種應用於數據鏈路層的協議,使用以太網能夠完成相鄰設備的數據幀傳輸
目的地址 | 源地址 | 類型 | 幀數據 | CRC |
---|---|---|---|---|
6 | 6 | 2 | 46-1500 | 4 |
數據由路由器發送至服務端過程
路由器MAC地址表(數據鏈路層中)中有目的地記錄
取出前6字節
,目的地址路由器MAC地址表中沒有記錄
廣播
請求的數據包到 除A之外的端口
數據包跨設備傳輸(數據鏈路層沒法解決,須要網絡層)
虛擬互聯網絡
虛擬互聯(解決以太網協議只能局域網傳輸的缺點)
的網絡專一網絡層的數據轉發
解決了在虛擬網絡中數據報傳輸路徑的問題
,使用者不須要去關注IP 協議
點分十進制
來表示第一個4字節(第一行,版本和長度)
版本
:指IP協議的版本,通訊雙方的版本必須一致,當前主流版本是4,即IPv4,也有IPv6首部長度
:用與標識首部的長度,單位爲4個字節,IP首部最大長度爲60字節(2^4 - 1 ) * 4
,但通常只推薦使用20字節的固定長度服務類型
:8位,用於標識IP包的優先級,但如今並未使用總長度
:佔16位,最大數值爲655352^16-1
,表示的是IP數據報總長度(IP首部+IP數據)第二個4字節(第二行,分片相關)
第三個4字節(第三行,報文壽命,校驗以及上層傳輸層協議)
發送主機設置
,代表IP數據報文在網絡中的壽命,(也能夠說是通過路由器的個數)每通過一個設備,TTL 減1,當TTL=0時,網絡設備必須丟棄該報文。TTL解決了當IP報文在網絡中找不到終點的時候,避免了IP數據在網絡中無限循環和收發,消耗帶寬
第四個4字節(第四行)
第五個4字節(第五行)
MTU 與 MSS
MTU:一個網絡包的最大長度,以太網中通常爲 1500 字節;
MSS:除去 IP 和 TCP 頭部以後,一個網絡包所能容納的 TCP 數據的最大長度;
當 IP 層有一個超過 MTU 大小的數據(TCP 頭部 + TCP 數據)要發送,那麼 IP 層就要進行分片,把數據分片成若干片,保證每個分片都小於 MTU。把一份 IP 數據報進行分片之後,由目標主機的 IP 層來進行從新組裝後,在交給上一層 TCP 傳輸層。
這看起來井井有理,但這存在隱患的,那麼當若是一個 IP 分片丟失,整個 IP 報文的全部分片都得重傳。
由於 IP 層自己沒有超時重傳機制,它由傳輸層的 TCP 來負責超時和重傳。
當接收方發現 TCP 報文(頭部 + 數據)的某一片丟失後,則不會響應 ACK 給對方,那麼發送方的 TCP 在超時後,就會重發「整個 TCP 報文(頭部 + 數據)」。
所以,能夠得知由 IP 層進行分片傳輸,是很是沒有效率的。
因此,爲了達到最佳的傳輸效能 TCP 協議在創建鏈接的時候一般要協商雙方的 MSS 值,當 TCP 層發現數據超過 MSS 時,則就先會進行分片,固然由它造成的 IP 包的長度也就不會大於 MTU ,天然也就不用 IP 分片了。
IP 協議的轉發流程
網絡層中
,記錄源IP 與 下一跳的IP,可類比數據鏈路層的MAC地址表每一跳(hop)的MAC地址都在變化
每一跳的IP地址始終不變
ARP 與 RARP 協議
(R)ARP
協議是 TCP/IP 協議棧裏面基礎的協議,ARP 和 RARP 的操做對程序員是透明的,理解該協議有助於理解網絡分層的細節
子網劃分
網絡號
與 主機號
組成127.0.0.1:一般被稱爲本地迴環地址(Loopback Address),不屬於任何一個有類別地址類。它表明設備的本地虛擬接口,因此默認被看做是永遠不會宕掉的接口。在Windows操做系統中也有類似的定義,全部一般在安裝網卡前就能夠ping通這個本地迴環地址。通常都會用來檢查本地網絡協議、基本數據接口等是否正常的。
子網劃分的緣由:當使用A類或B類網絡號時,主機數量分別爲2^16-2 和 2^8-2
,爲了更充分利用不一樣分類的主機數量,因此在從網絡號後開始,劃分子網
快速判斷某個IP所屬的網絡號:利用子網掩碼 與 當前 IP 地址進行與運算
子網掩碼:
無分類編址CIDR
定義
網絡前綴
相同的IP地址稱爲一個 CIDR地址塊
背景
現階段更多使用 CIDR 方式,相比原來子網劃分更加靈活
多個主機 經過 一個公有IP 訪問互聯網的私有網絡中
分類
三類內網地址
網絡地址轉換NAT 技術
ICMP(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議簇的一個子協議,用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡自己的消息。這些控制消息雖然並不傳輸用戶數據,可是對於用戶數據的傳遞起着重要的做用,當路由器在處理一個數據包的過程當中發生了意外,能夠經過ICMP向數據包的源端報告有關事件
封裝在IP 數據報中的數據中,經過IP協議進行數據傳輸,主要是進行網絡中的錯誤以及異常報告
差錯報文
詢問報文
ping 命令使用 ICMP 回送請求和應答報文
在網絡可達性測試中使用的分組網間探測命令 ping 能產生 ICMP 回送請求和應答報文。目的主機收到 ICMP 回送請求報文後馬上回送應答報文,若源主機能收到 ICMP 回送應答報文,則說明到達該主機的網絡正常。
Ping 排查網絡故障步驟以下:
路由分析診斷程序 tracert 使用了 ICMP時間超過報文
經歷的路徑詳細信息
,並顯示每一個路徑所消耗的時間
。自治系統
自治系統 層次劃分
RIP 協議的過程
FTP | HTTP | HTTPS | DNS | TELNET |
---|---|---|---|---|
21 | 80 | 443 | 53 | 23 |
中止等待協議
超時重傳:發送方發送消息,接收方未收到;接收方發送確認消息,發送方未收到
中止等待協議對信道的利用效率不高
,它是最簡單的可靠傳輸協議
連續協議
ARQ(Automatic Repeat request):自動重傳請求
核心:滑動窗口 與 累計確認
TCP 協議的選擇重傳
選項字段
記錄了當前TCP報文的邊界信息
,當報文丟失時,會根據這個邊界信息重傳範圍內的TCP報文
,而不是某個確認序號的報文但願發送方不要發送數據太快
慢啓動算法
慢啓動閾值(ssthresh)
擁塞避免算法
傳輸速率
Mbps
,速率:bps=bit/s時延
受限於計算機網卡,由計算機硬件決定的
,如千兆網卡,百兆網卡受限與傳輸介質
,如介質爲銅線或者光纖,不一樣介質傳播速率不同往返時間 RTT
傳輸方式
分組
通訊鏈路與分組交換機
進行數據報文
交換來通訊,報文是由數據塊分組構成
分組交換
存儲時延
輸出緩存
與輸出隊列
與之對應,新到達的分組發現路由器正在接收其餘分組時,就會在輸出隊列中進行排隊 ,這種等待分組轉發耗費時間爲***排隊時延
丟包
:路由器輸出隊列是有限制的,當多條鏈路同時發送分組致使輸出緩存沒法接受超額的分組後,這些分組會丟失(到達的分組或已排隊的分組將會被丟棄),在實際狀況中,經過限制端系統之間的吞吐量
來控制數據丟失。