ping和資料報傳送流程

2022-01-24 06:33:29 字數 3395 閱讀 5981

iwehdio的:

學習自:

icmp 功能都有啥?

在 ip 通訊中如果某個 ip 包因為某種原因未能達到目標位址,那麼這個具體的原因將由 icmp 負責通知。比如說是未發現目的主機,即目標不可達。

icmp 的通知訊息會使用 ip 進行傳送 。

icmp 包頭格式:

在選項資料中, ping 還會存放傳送請求的時間值,來計算往返時間,說明路程的長短。

目標不可達訊息(destination unreachable message) —— 型別為 3:

主機不可達**為 1:

協議不可達**為 2:

埠不可達**為 3:

需要進行分片但設定了不分片位**為 4:

原點抑制訊息(icmp source quench message) —— 型別 4:

重定向訊息(icmp redirect message) —— 型別 5:

超時訊息(icmp time exceeded message) —— 型別 11:

每發出乙個請求資料報,序號會自動加 1 。為了能夠計算往返時間 rtt ,它會在報文的資料部分插入傳送時間。

然後,由 icmp 協議將這個資料報連同位址 192.168.1.2 一起交給 ip 層。ip 層將以 192.168.1.2 作為目的位址,本機 ip 位址作為源位址,協議字段設定為 1 表示是 icmp 協議,再加上一些其他控制資訊,構建乙個 ip 資料報。

接下來,需要加入 mac 頭。如果在本地 arp 對映表中查詢出 ip 位址 192.168.1.2 所對應的 mac位址,則可以直接使用;如果沒有,則需要傳送 arp 協議查詢 mac 位址,獲得 mac 位址後,由資料鏈路層構建乙個資料幀,目的位址是 ip 層傳過來的 mac 位址,源位址則是本機的 mac 位址;還要附加上一些控制資訊,依據乙太網的介質訪問規則,將它們傳送出去。

主機 b 收到這個資料幀後,先檢查它的目的 mac 位址,並和本機的 mac 位址對比,如符合,則接收,否則就丟棄。

接收後檢查該資料幀,將 ip 資料報從幀中提取出來,交給本機的 ip 層。同樣,ip 層檢查後,將有用的資訊提取後交給 icmp 協議。

在規定的時候間內,源主機如果沒有接到 icmp 的應答包,則說明目標主機不可達;如果接收到了icmp 回送響應訊息,則說明目標主機可達。

此時,源主機會檢查,用當前時刻減去該資料報最初從源主機上發出的時刻,就是 icmp 資料報的時間延遲。

ping 這個程式是使用了 icmp 裡面的 echo request(型別為 8 ) 和echo reply (型別為 0)

傳送方如何知道發出的 udp 包是否到達了目的主機呢?

traceroute 作用二:

工作原理如下:

要是上圖中的藍色部分 url 元素都省略了,那應該是請求哪個檔案呢?

生產 http 請求資訊:

ip 下面的網絡卡驅動程式負責控制網絡卡硬體,而最下面的網絡卡則負責完成實際的收發操作,也就是對網線中的訊號執行傳送和接收操作。

tcp的三次握手,建立連線。

如果 http 請求訊息比較長,超過了 mss 的長度,這時 tcp 就需要把 http 的資料拆解成一塊塊的資料傳送,而不是一次性傳送所有資料。

據會被以 mss 的長度為單位進行拆分,拆分出來的每一塊資料都會被放進單獨的網路包中。也就是在每個被拆分的資料加上 tcp 頭資訊,然後交給 ip 模組來傳送資料

在雙方建立了連線後,tcp 報文中的資料部分就是存放 http 頭部 + 資料,組裝好 tcp 報文之後,就需交給下面的網路層處理。

因為 http 是經過 tcp 傳輸的,所以在 ip 包頭的協議號,要填寫為 06 (十六進製制),表示協議為tcp。

假設客戶端有多個網絡卡,就會有多個 ip 位址,那 ip 頭部的源位址應該選擇哪個 ip 呢?

mac 傳送方和接收方如何確認?

既然知道要發給誰,按如何獲取對方的 mac 位址呢?

每次都要廣播獲取,這不是很麻煩嗎?

檢視 arp 快取內容:

最後的報文格式:

最後網絡卡會將包轉為電訊號,通過網線傳送出去。

將包存入緩衝區後,接下來需要查詢一下這個包的接收方 mac 位址是否已經在 mac 位址表中有記錄了。

交換機根據 mac 位址表查詢 mac 位址,然後將訊號傳送到相應的埠。

當 mac 位址表找不到指定的 mac 位址會怎麼樣?

路由器基本原理:

路由器的包接收操作:

查詢路由表確定輸出埠:

路由器的傳送操作:

知道對方的 ip 位址之後,接下來需要通過 arp 協議根據 ip 位址查詢 mac 位址,並將查詢的結果作為接收方 mac 位址。路由器也有 arp 快取,因此首先會在 arp 快取中查詢,如果找不到則傳送 arp 查詢請求。

接下來是傳送方 mac 位址字段,這裡填寫輸出埠的 mac 位址。還有乙個以太型別字段,填寫0080 (十六進製制)表示 ip 協議。

網路包完成後,接下來會將其轉換成電訊號並通過埠傳送出去。

傳送出去的網路包會通過交換機到達下乙個路由器。由於接收方 mac 位址就是下乙個路由器的位址,所以交換機會根據這一位址將包傳輸到下乙個路由器。接下來,下乙個路由器會將包**給再下乙個路由器,經過層層**之後,網路包就到達了最終的目的地。

在網路包傳輸的過程中,源 ip 和目標 ip 始終是不會變的,一直變化的是 mac 位址,因為需要 mac 位址在乙太網內進行兩個裝置之間的包傳輸。

iwehdio的:

ping指定資料報大小

ping指定資料報大小 linux下ping包的預設大小為64byte,次數不限。但有時我們需要嘗試ping大資料報,來測試網路的狀況,這時,就要指定ping包的大小了。linux下ping大資料報的格式 語 法 ping dfnqrrv c 完成次數 i 間隔秒數 i 網路介面 l 前置載入 p ...

IOT MQTT協議 控制資料報 PING

pingreq資料報從客戶端傳送到伺服器。它可以用於 在沒有任何其他控制資料報從客戶端傳送到伺服器的情況下,向伺服器指示客戶端處於活動狀態。請求伺服器響應以確認它處於活動狀態。練習網路以指示網路連線處於活動狀態。此資料報用於keep alive處理,有關詳細資訊,請參閱第3.1.2.10節。圖3.3...

winpcap使用 傳送資料報

傳送資料報是winpcap的擴充套件功能,並不是libpcap本身具備的,所以不能工作在linux下。利用pcap sendpacket 函式可以傳送單個資料報,其函式原型為 int pcap sendpacket pcap t p,u char buf,int size 說明 該函式可以傳送乙個原...