網絡概念

瀏覽器,郵件等通常應用程序收發數據時用TCP;
DNS 查詢等收發較短的控制數據時用UDP.
IP中還包括ICMP協議和ARP協議。
ICMP用於告知網絡包傳送過程當中產生的錯誤以及各類控制信息
ARP協議用於根據IP地址查詢相應的以太網MAC地址
 
網卡負責完成實際的收發操做,也就是對網線中的信號執行發送和接收的操做。
源IP地址和目的IP地址以及源端口號和目的端口號的組合稱爲套接字。
協議棧是指網絡中各層協議的總和。
套接字的實體就是通訊控制信息(協議棧是根據套接字中記錄的控制信息來工做的。)
套接字中記錄了用於控制通訊操做的各類控制信息,協議棧則須要根據這些信息判斷下一步的行動
 
建立套接字時,首先分配一個套接字所需的內存空間,而後向其中寫入初始狀態。
描述符至關於用來區分協議棧中的多個套接字的號碼牌。

套接字中記錄了通訊雙方的信息以及通訊處於怎樣的狀態。

瀏覽器

鏈接( connect)其實是通訊雙方交換控制信息。緩存

把服務器的 IP 地址和端口號等信息告知協議棧,這是鏈接操做的目的之一。服務器

客戶端向服務器傳達開始通訊的請求(包含客戶端的ip,端口等信息),也是鏈接操做的目的之一。網絡

當執行數據收發操做時,咱們還須要一塊用來臨時存放要收發的數據的內存空間,這塊內存空間稱爲緩衝區,它也是在鏈接操做的過程當中分配的。上面這些就是「鏈接」這個詞表明的具體含義。併發

控制信息其實能夠大體分爲兩類:1.客戶端和服務器相互聯絡時交換的控制信息。        2.保存在套接字中,用來控制協議棧操做的信息。spa

通訊操做中使用的控制信息分爲兩類。
(1) 頭部中記錄的信息
(2) 套接字(協議棧中的內存空間)中記錄的信息對象

鏈接操做的第一步是在 TCP 模塊處建立表示鏈接控制信息的頭部。blog

經過 TCP 頭部中的發送方和接收方端口號能夠找到要鏈接的套接字。ip

客戶端鏈接服務器的過程:內存

當 TCP 頭部建立好以後,接下來 TCP 模塊會將信息傳遞給 IP 模塊並委託它進行發送。服務器從處於等待鏈接狀態的套接字中找到與 TCP 頭部中記錄的端口號相同的套接字以後,套接字中會寫入相應的信息,並將狀態改成正在鏈接,而後,服務器的 TCP 模塊會返回響應,這個過程和客戶端同樣,須要在 TCP 頭部中設置發送方和接收方端口號以及 SYN 比特。此外,在返回響應時還須要將 ACK 控制位設爲1 ,這表示已經接收到相應的網絡包,而設置ACK 比特就是用來進行確認網絡包是否已經送達接下來,服務器 TCP 模塊會將 TCP頭部傳遞給 IP 模塊,並委託 IP 模塊向客戶端返回響應。而後,網絡包就會返回到客戶端,經過 IP 模塊到達 TCP 模塊,並經過 TCP 頭部的信息確認鏈接服務器的操做是否成功。若是 SYN 爲 1 則表示鏈接成功,這時會向套接字中寫入服務器的 IP 地址、端口號等信息,同時還會將狀態改成鏈接完畢。到這裏,客戶端的操做就已經完成,但其實還剩下最後一個步驟。剛纔服務器返回響應時將 ACK 比特設置爲 1,相應地,客戶端也須要將 ACK 比特設置爲 1 併發回服務器,告訴服務器剛纔的響應包已經收到。當這個服務器收到這個返回包以後,鏈接操做纔算所有完成。

數據發送的過程:應用程序在調用 write 時會指定發送數據的長度,在協議棧看來,要發送的數據就是必定長度的二進制字節序列而已。協議棧並非一收到數據就立刻發送出去,而是會將數據存放在內部的發送緩衝區中,並等待應用程序的下一段數據。

MTU(最大傳輸單元):一個網絡包的最大長度,以太網中通常爲 1500 字節。
MSS(最大分段大小):除去頭部以後,一個網絡包所能容納的 TCP 數據的最大長度。下圖爲說明:

 IP 與以太網的包收發操做

 

(1)路由器根據目標地址判斷下一個路由器的位置
(2)集線器在子網中將網絡包傳輸到下一個路由

集線器是按照以太網規則傳輸包的設備,而路由器是按照 IP規則傳輸包的設備,即:

(1)IP 協議根據目標地址判斷下一個 IP 轉發設備的位置
(2)子網中的以太網協議將包傳輸到下一個轉發設備

 TCP/IP 網絡中,一個網絡包從出發到到達目的地的全過程:

網絡包在傳輸過程當中會通過集線器,集線器是根據以太網協議工做的設備。爲了判斷包接下來應該向什麼地方傳輸,集線器裏有一張表(用於以太網協議的表),可根據以太網頭部中記錄的目的地信息查出相應的傳輸方向。這張圖中只有一個集線器,當存在多個集線器時,網絡包會按順序逐一經過這些集線器進行傳輸。

接下來,包會到達下一個路由器。路由器中有一張 IP 協議的表,可根據這張表以及 IP 頭部中記錄的目的地信息查出接下來應該發往哪一個路由器。爲了將包發到下一個路由器,咱們還須要查出下一個路由器的 MAC 地址,並記錄到 MAC 頭部中,你們能夠理解爲改寫了 MAC 頭部。這樣,網絡包就又被髮往下一個節點了。

網絡包會經過路由器到達下一個路由器。這個過程不斷重複,最終網絡包就會被送到目的地,當目的地設備成功接收以後,網絡包的傳輸過程就結束了。

無線局域網、ADSL、FTTH 等,它們均可以替代以太網的角色幫助 IP 協議來傳輸網絡包A 。所以,將 IP 和負責傳輸的網絡分開,能夠更好地根據須要使用各類通訊技術。

IP 模塊負責添加以下兩個頭部。
(1) MAC 頭部:以太網用的頭部,包含 MAC 地址
(2) IP 頭部:IP 用的頭部,包含 IP 地址

不管要收發的包是控制包仍是數據包,IP 對各類類型的包的收發操做都是相同的。

IP 頭部的「接收方 IP 地址」填寫通訊對象的 IP 地址。   發送方 IP 地址須要判斷髮送所使用的網卡,並填寫該網卡的 IP地址。

MAC 頭部是以太網使用的頭部,它包含了接收方和發送方的 MAC 地址等信息。

經過 ARP 查詢目標路由器的 MAC 地址:在以太網中,有一種叫做廣播的方法,能夠把包發給鏈接在同一以太網中的全部設備。ARP 就是利用廣播對全部設備提問:「×× 這個 IP 地址是誰的?請把你的 MAC 地址告訴我。」而後就會有人回答:「這個 IP 地址是個人,個人 MAC 地址是××××。」若是對方和本身處於同一個子網中,那麼經過上面的操做就能夠獲得對方的 MAC 地址。

將查詢結果放到一塊叫做 ARP 緩存的內存空間中留着之後用。ARP 緩存中的值在通過一段時間後會被刪除,通常這個時間在幾分鐘左右。

相關文章
相關標籤/搜索