網路是如何連線的--第二章

徹恩發表於2018-02-05
第二章:協議棧 與網路卡
2.1 建立套接字

Ⅰ ① 協議棧的內部結構由上到下 --> 應用程式(網路應用程式 Socket );作業系統 協議棧 (TCP、UDP、IP(ICMP,ARP));驅動程式(網路卡驅動程式等);硬體(網路卡)。
② 一般收發時間比較短的用的是UDP連線比如DNS查詢,視訊流;需要穩定的是TCP來傳輸,比如郵件服務,web訪問。
IP 是用來控制網路包的收發狀態,資料會切成一個一個的包。IP同時還包括 ICMP(告知傳輸過程中產生的錯誤以及控制資訊)和 ARP(用來根據IP地址獲取對應的 MAC 地址)

Ⅱ 套接字: 通訊的控制資訊,比如在 windows 系統的 CMD 下, netstat -ano。建立套接字會形成記錄,包括: PID、本地IP:本地埠、目的IP:目的埠、當前狀態(listening| established)、協議(TCP|UDP)。
其中 0.0.0.0 表示的是 已經連線但沒有進行通訊。

Ⅲ 客戶端呼叫 Socket 的時候 ① 先在記憶體中開闢一個空間來儲存資訊;② 存入資訊.
<1> 描述符 = socket(地址,埠,...) ;<2> 連線;<3> write() 傳送;<4> 接收 len = read();<5> close();
個人理解:這裡的描述符就是指的JAVA中的變數,所指向的是記憶體中剛開闢的這段空間的首地址。

2.2 連線伺服器

Ⅰ 什麼叫做連線:
① 建立套接字後應用程式將會呼叫 connect 元件;② 雙方開始交換各自的控制資訊;③ 客戶端的協議棧需要知道向誰傳送訊息(服務端的 IP 和 埠);④ 連結時,向服務端明確自己的IP和埠(服務端才知道我這是在跟誰在連線);⑤ 最後在客戶端地方形成一個緩衝區來儲存資料。

Ⅱ 關於控制資訊:
① 客戶端和伺服器相互聯絡時交換的控制資訊。TCP頭部格式: 傳送方埠,接收方埠,序號,ack序號,資料偏移量,保留,控制位,視窗,檢驗和,緊急指標,可選欄位。
一個完整的資料包: 乙太網和IP控制資訊、TCP控制資訊、資料塊。
② 儲存在套接字的控制資訊:主要明確下一步繼續做的事情,(1) 應用程式傳遞來的資訊;(2) 從 服務端 | 通訊物件那裡接收過來的資訊;(3)收發資料操作的執行狀態。

2.3 收發資料

I 將HTTP訊息給協議棧。是將呼叫完成connect之後進行資料傳送的階段。
① 協議棧不會關心資料,因為資料是一些長度一定的二進位制;
② 有兩種傳送的方式:馬上傳送(網路包小,效率低)和緩衝區滿再傳送(延遲高);
③ 判斷: MTU最大傳輸單元(乙太網:一個網路包的最大的長度是1500個位元組);MSS最大報文長度選項:去掉頭部後,一個網路包所能容納TCP資料的最大長度。
④ 組成:報頭/起始幀分界符 MAC頭部 IP頭部 TCP頭部 資料 FCS(幀校驗位)。

Ⅱ 對於資料較大的包:只要查過MSS的長度,以MSS為單位分割並且每一個新增 TCP頭部,標記,埠等。其中標記是來說明當前的資料包是這個資料的第幾個包。

Ⅲ 通過 ACK 確認是否收到資料包。(TCP的工作便是 確認收到資料包並且對沒有收到的資料包重新傳送)
① 客戶端在傳送的時候會產生一個隨機的初始值=>作用:表示包的標號從這裡開始;
② 傳送的資料長度 = TCP網路包的長度 - TCP頭部的長度;
③ 接收方的確認響應:當前資料的所有長度和寫入了 ACK號 的 TCP頭部的返回。
④ 大體流程: 客戶端資料+初始值 傳送給 伺服器;伺服器計算ACK 返回給 客戶端。

IV 根據網路包的平均往返時間來調整 ACK 等待的時間。
① 產生的原因: 網路包的傳輸的速率不同,比如區域網下通常是幾毫秒,網際網路情況下幾百毫秒也有可能;
② 當時間過短,以為丟失,資料包重傳之後ACK才回來;當時間過長,發生了資料丟包不能夠及時的重傳;
③如何自動調整時間: TCP在傳送資料的時候,實時偵測 ACK 的返回時間,自動調整等待的時間。

Ⅴ 視窗管理 ACK 號
① 視窗是接收方的緩衝區;② 收到資料後先進緩衝區,然後計算ACK的值等並把資料傳送給應用程式。
③ 滑動視窗:等待ACK返回的同時直接傳送資料(TCP調優引數)。

Ⅵ ACK 與 視窗合併
① 什麼時候傳送視窗的大小:當接收方把資料傳送給應用程式的時候;② 需要連續傳送ACK/視窗大小的時候,僅需要傳送最後一次就好了。;③ ACK 和 視窗的大小可以在 一個包裡面一塊傳送。

Ⅶ 接收HTTP的響應(服務端)
大體過程:<1> 檢查收到的資料塊和tcp 頭部的內容;<2> 判斷資料是否丟失(根據標號);<3> 返回 ACK;<4> 暫時放入緩衝區;<5> 還原資料(去掉頭部);<6>交給應用程式。
交給應用程式兩步走:先將資料複製到對應應用程式指定的記憶體的地址將控制權轉移給應用程式,同時向客戶端傳送視窗更新,告知客戶端視窗當前的大小。

2.4 從伺服器斷開並刪除套接字

I 資料傳送完畢後就開始斷開連線
① 應用程式判斷資料傳送完畢後就開始斷開連線;② 資料傳送完成的一方會發起斷開過程;③ 過程: 呼叫 Sockete 的close程式;生成含有斷開資訊(FIN 設定為 1 )的TCP頭部;委託IP模組傳送資料;記錄相關資訊;

Ⅱ 刪除套接字
刪除套接字的時候會有一個等待的時間,因為在斷開連線的時候比如 客戶端發 FIN,服務端回 ACK, 服務端發 FIN,客戶端回 ACK 這樣才是真正的結束。
再舉一個例子,客戶端給服務端傳送 FIN 的時候 服務端回了 ACK了。如果客戶端直接刪除了套接字,釋放了本地的資源(埠),同時一個新的應用程式剛剛佔用該埠建立了套接字,馬上就受到了來自服務端的 FIN 的資料包了,只能執行斷開操作了。
再回想整個過程:1)服務端建立套接字;2)客戶端建立套接字併發起連線請求;3)客戶端與服務端連線呼叫 connect;4) 雙方開始進行資料的收發;5)斷開連線並且刪除套接字。

2.5 IP與乙太網的包收發操作

Ⅰ 包的基礎知識
① 網路包是由頭部和資料組成的。頭部包含目的地址等控制資訊,頭部的後面就是資料。
② 傳送方的網路裝置建立包,新增上控制的頭部和要傳送的資料後傳送給最近的轉發裝置,轉發裝置根據頭部中資訊和轉發裝置中的表確定接下來去哪裡。
③ 對於TCP/IP 在傳輸的過程中,IP協議根據IP頭部的目標地址判斷下一個IP轉發裝置的位置(但IP協議不會進行資料傳輸);子網中乙太網協議(MAC頭部)將包傳輸到下一個轉發裝置。
在這裡乙太網是可以更換的,比如光纖,無線區域網等,IP更加靈活。

Ⅱ 包收發操作概覽

① 包在收發的過程中,TCP模組先在資料塊的前面加上TCP頭部,然後整體傳遞給IP模組,同時TCP模組還要告訴IP模組將資料發給誰(目的地址)。IP模組收到後 新增上IP頭部和MAC頭部。

② IP模組中,IP頭部是確定的是發往目的地址所需要的控制資訊(主要是 目的IP地址,這個在傳輸的過程中不會變化);MAC頭部包含通過乙太網區域網傳輸到最近路由器的控制資訊 (主要是MAC地址,會隨著路由每次更新尋找下一個路由的位置)。

③ 對於IP模組來說,TCP和資料對它自己都是一樣的,僅僅當作資料來看待。所以無論是傳送的控制包還是資料包,IP對各種型別的包的收發操作是一致的。它僅僅負責將包從源地址傳送到目的地址,對丟包亂序等一概不知。

Ⅲ 生成包接收方IP地址的IP頭部
① 先看IP模組的目的地址來自於哪裡?IP模組的地址來源於TCP模組,TCP模組的地址來源於應用程式,所以IP生成的包的目的地址是根據應用程式給的目的地址來確定的。

② IP頭部的格式

| 版本號 | 頭部長度 | 服務型別 | 總長度 | ID號 | 標誌 | 分片偏移量 | 生存時間 | 協議號 | 頭部檢驗和 | 傳送方IP地址 | 接收方IP地址 | 可選欄位 | |:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | 4 | 4 | 8 | 16 | 16 | 3 | 13 | 8 | 8 | 16 | 32 | 32 | 可選欄位 |

③ <1>版本號:v4 / v6;② ID號一般是包的序號;③ 分片偏移量:當前包內容為整個資料的第幾個位元組;④ 協議號 TCP:06; UDP:11; ICMP:01

④ IP地址對應的並不是計算機而是網路卡,是網路卡的地址,在家庭中一般只有一個網路卡所以日常生活中簡單說IP對應著計算機。

Ⅳ 生成乙太網的MAC頭部 ①為什麼存在 MAC 頭部? 在TCP/IP裡面通過目的IP地址來確定目標在哪裡但對於乙太網中是根據MAC頭部來確定目的地在哪裡。 ② MAC地址的頭部

| 接收方MAC地址 | 傳送方IP地址 | 以太型別 | |:-----:|:-----:|:-----:| | 48 | 48 | 16 |
③ 以太型別中 0000-05DC 表示 IEEE802.3;0800 表示 IP協議;0806 表示 ARP協議;08DD 表示 IPV6 協議

④ MAC 地址是寫入到 網路卡的ROM 中,那麼為什麼還會存在軟MAC,是因為網路卡在初始化的時候是將ROM中的地址寫入到記憶體中,應用程式在讀MAC地址的時候是從記憶體中獲取的而不是ROM中且許可權是讀寫。

Ⅴ 通過ARP查詢目標路由的MAC地址

① ARP 址解析協議:原理是使用廣播的方式問這個IP地址是誰的,只要由應答的就把他的mac地址拿過來並寫入到MAC地址頭部。

② 為了提高速度就會有ARP快取的產生,ARP快取一般在幾分鐘內會全部刪除,重新執行一次ARP查詢。

Ⅵ 乙太網的基礎知識

① 乙太網的基礎架構:a) 10BASE5 乙太網原型< 相當於直接連線到主幹網 | 收發器以及收發器的網線 >; b) 10BASE-T 中繼式集線體的變體< 相當於多個終端連線到一個集線器上,主幹網一根線與集線器相連 | 雙絞線 >; c) 交換式集線器的結構<這裡的終端連線到交換機上>。

② 10BASE5 乙太網原型,某個裝置傳送訊號,該網路下所有的都能收到,為了確定誰是接收者,在訊號的頭部新增資訊,就是接收者的地址。

③通過目的MAC確定向誰傳送;通過源MAC 知道誰發出來的;通過以太型別判斷裝了什麼樣的資料。

④ 集線器與上面的大體類似,但交換機不同,最大的改變是 資料僅是會從源 mac 到 目的 mac。

Ⅶ 將IP包轉換成電或者光訊號傳送出去
①IP 包在記憶體中僅僅是一串數字資訊,只有將其轉換成光或者電訊號才可以進行傳輸
②負責這個工作的是 網路卡。協議棧生成IP包 --> 網路卡驅動程式 --> 擴充套件匯流排介面 --> 網路卡。
③網路卡的組成:由上到下:緩衝區(緩衝資料) 、MAC(控制碰撞檢測,重發等),PHY(MAU)傳送和接收訊號的電路、RJ-45 介面。同時還有一個 ROM 用來儲存全球唯一的MAC地址
④ 網路卡中的MAC地址是驅動程式在初始化的時候給MAC模組設定的MAC地址,所以MAC地址有兩個來源,一個是網路卡本身的ROM,一個是來自命令或者配置檔案。

Ⅷ 給網路包再加三個控制資料
①IP包先到網路驅動,驅動找到網路卡將資料存放在快取區,接著呼叫網路卡的MAC模組,增加三個控制資料:報頭、起始分界符和FCS;

| 資料包位置 | 報頭 | 起始分界符 | MAC頭部 | IP頭部 | TCP頭部 | UDP頭部 | 資料 | FCS | |:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:| | 負責模組 | 網路卡 | 網路卡 | IP | IP | TCP | UDP | 應用程式 | 網路卡 |

③ 報頭的作用是確定傳輸的時機;起止分界符是用來確定幀的起始位置;
④ 包在傳送的時候是將資料和時鐘週期疊加在一起傳送,然後根據固定的時脈頻率再還原成對應的位元。如果判斷時鐘的週期,這邊是報頭的作用;
⑤ 末尾的FCS(幀校驗序列)32位元序列,通過演算法將資料包從頭到尾算一遍,接收方根據其判斷是否發生了變化。這裡與 CRC (迴圈冗餘檢驗) 效果類似,發生錯誤就會將包重傳。

Ⅸ 由集線器向網路包傳送資料
① 傳送資料有兩種模式:半雙工模式和全雙工模式;
② 在半雙工模式下,為了避免衝突,先要檢測是否存在其他的訊號。
③ 傳遞過程中先由 MAC模組由數字訊號轉換成電訊號,然後傳遞給 PHY/MAU。將數字訊號轉換成電訊號的速率就是我們日常所說的網路速率。
④ MAC 模組生成的是通用的訊號格式,對於不同的傳輸方式,PHY|MAU 將訊號轉化成對應的格式傳送出去。
⑤ 對於 PHY 除了負責訊號格式轉換之外,還要負責監控接收的線路有沒有訊號進來。
⑥ 在半雙工模式下,如果發生了訊號碰撞就要進行一段時間的阻塞訊號等待,時間是根據 MAC地址隨機算出來的。如果阻塞訊號結束之後同時發資料還是會發生碰撞,這個時候將等待時間延長一倍,十次之後返回通訊錯誤。
⑦ 在全雙工的模式下訊號的收發可以同時進行不會發生碰撞。

Ⅹ 接收返回包 ① 在半雙工模式下,不管任何的訊號只要傳進來就會接收;
② 訊號到 RJ-45,接著到 PHY/MAU 將傳進來的訊號轉換成通用格式的訊號給 MAC 模組;MAC 模組 從頭開始將訊號轉換成數字資訊,並且檢測 FCS 以及 源、目的MAC地址 ;將資料傳送到網路卡的緩衝區並且發起中斷訊號告知一個資料包到了,準備接收。
③ 關於中斷訊號。網路卡先向擴充套件匯流排中中斷訊號線傳送中斷訊號,擴充套件匯流排通知CPU,CPU掛起操作並處理中斷程式,呼叫驅動程式控制網路卡準備接收資料。
那為什麼來了不直接呢?作業系統不會一直監聽網路卡,驅動程式也僅僅是一段程式。通過中斷打斷當前的任務,就知道網路卡有資料發過來了。

Ⅺ 伺服器響應包從 IP 傳遞給 TCP
① IP 模組收到資料之後第一步是檢測資料是否是正確的;確認無誤之後再檢視目的IP和網路卡的地址是否相同。如果不是,那麼客戶端直接丟棄,服務端會包轉發。
② 當發生錯誤的時候,將會通過 ICMP 將錯誤告知給傳送方。
③ ICMP:Echo reply 0 、 Destination unreachable 3、 Source quench 4、 Redirect 5、 Echo 8、 Time exceeded 11、 Parameter problem 12
④ IP 還有一個工作是關於分片的。就是之前同一個資料超過了最大值,切割成小包,在這裡從新按序號將小包還原成原始的包(分片重組)。這裡兩個量:一個是ID確定是不是屬於同一個分片;一個是偏移量,每個分片中小包在大包中對應的位置。

2.6 UDP 協議的說發出操作

Ⅰ 不需要重新發的資料就用UDP,比如資料很小,一個包便能裝下,那就UDP,即便重發也不過是重發一個包而已。而且返回的資料可以當作確認收到的包。

Ⅱ 控制用的短資料可以用UDP來傳送比如說DNS查詢。
封裝的時候是 資料+ UDP頭部 + IP頭部。
對於UDP 遇到錯誤的時候是一律不管,客戶端應用程式沒有收到反饋會重新傳送一遍資料。
UDP 可傳送資料的長度 = IP的長度 - IP的頭部 - UDP的頭部,一般長度是65507 個位元組。
UDP頭部控制資訊:傳送方埠號、接收方埠號、資料長度、校驗和

Ⅲ 關於音訊和視訊資料。主要是為了提高實時性,所以使用UDP 進行傳輸。使用TCP發現資料錯誤進行重傳會發生嚴重的失真,如果是UDP在丟失少量包的情況下影響並不會太大。在無需重新傳送的資料上面,使用UDP是最為高效的。

相關文章