#獲得請求來源ip_以太網數據包TCP、IP、ICMP、UDP、ARP協議頭結構詳解

0d9cb7ac77ead35e1dbc46849eb37716.png

以太網首部

目地MAC地址(8字節)

源MAC地址(8字節)

類型(2字節)

?1、IP頭的結構

版本(4位)

頭長度(4位)

服務類型(8位)

封包總長度(16位)

封包標識(16位)

標志(3位)

片斷偏移地址(13位)

存活時間(8位)

協議(8位)

校驗和(16位)

來源IP地址(32位)

目的IP地址(32位)

選項(可選)

填充(可選)

數據

(1)字節和數字的存儲順序是從右到左,依次是從低位到高位,而網絡存儲順序是從左到右,依次從低位到高位。

(2)版本:占第一個字節的高四位。頭長度:占第一個字節的低四位。

(3)服務類型:前3位為優先字段權,現在已經被忽略。接著4位用來表示最小延遲、最大吞吐量、最高可靠性和最小費用。

(4)封包總長度:整個IP報的長度,單位為字節。

(5)存活時間:就是封包的生存時間。通常用通過的路由器的個數來衡量,比如初始值設置為32,則每通過一個路由器處理就會被減一,當這個值為0的時候就會丟掉這個包,并用ICMP消息通知源主機。

(6)協議:定義了數據的協議,分別為:TCP、UDP、ICMP和IGMP。定義為:

#define PROTOCOL_TCP??? 0x06

#define PROTOCOL_UDP??? 0x11

#define PROTOCOL_ICMP?? 0x06

#define PROTOCOL_IGMP?? 0x06

(7)檢驗和:校驗的首先將該字段設置為0,然后將IP頭的每16位進行二進制取反求和,將結果保存在校驗和字段。

(8)來源IP地址:將IP地址看作是32位數值則需要將網絡字節順序轉化位主機字節順序。轉化的方法是:將每4個字節首尾互換,將2、3字節互換。

(9)目的IP地址:轉換方法和來源IP地址一樣。

在網絡協議中,IP是面向非連接的,所謂的非連接就是傳遞數據的時候,不檢測網絡是否連通。所以是不可靠的數據報協議,IP協議主要負責在主機之間尋址和選擇數據包路由。

2、ICMP協議的頭結構

類型(8位)

代碼(8位)

校驗和(8位)

類型或者代碼

?(1)類型:一個8位類型字段,表示ICMP數據包類型。(2)代碼:一個8位代碼域,表示指定類型中的一個功能。如果一個類型中只有一種功能,代碼域置為0。(3)檢驗和:數據包中ICMP部分上的一個16位檢驗和。

?3、TCP協議的頭結構

來源端口(2字節)

目的端口(2字節)

序號(4字節)

確認序號(4字節)

頭長度(4位)

保留(6位)

URG

ACK

PSH

RST

SYN

PIN

窗口大小(2字節)

校驗和(16位)

緊急指針(16位)

選項(可選)

數據

(1)TCP源端口(Source Port):16位的源端口包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。(2)TCP目的端口(Destination Port):16位的目的端口域定義傳輸的目的。這個端口指明報文接收計算機上的應用程序地址接口。

(3)序列號(Sequence Number):TCP連線發送方向接收方的封包順序號。

(4)確認序號(Acknowledge Number):接收方回發的應答順序號。

(5)頭長度(Header Length):表示TCP頭的雙四字節數,如果轉化為字節個數需要乘以4。

(6)URG:是否使用緊急指針,0為不使用,1為使用。

(7)ACK:請求/應答狀態。0為請求,1為應答。

(8)PSH:以最快的速度傳輸數據。

(9)RST:連線復位,首先斷開連接,然后重建。

(10)SYN:同步連線序號,用來建立連線。

(11)FIN:結束連線。如果FIN為0是結束連線請求,FIN為1表示結束連線。

(12)窗口大小(Window):目的機使用16位的域告訴源主機,它想收到的每個TCP數據段大小。

(13)校驗和(Check Sum):這個校驗和和IP的校驗和有所不同,不僅對頭數據進行校驗還對封包內容校驗。

(14)緊急指針(Urgent Pointer):當URG為1的時候才有效。TCP的緊急方式是發送緊急數據的一種方式。

4、UDP協議的頭結構

源端口(2字節)

目的端口(2字節)

封報長度(2字節)

校驗和(2字節)

數據

(1)源端口(Source Port):16位的源端口域包含初始化通信的端口號。源端口和IP地址的作用是標識報文的返回地址。(2)目的端口(Destination Port):6位的目的端口域定義傳輸的目的。這個端口指明報文接收計算機上的應用程序地址接口。(3)封包長度(Length):UDP頭和數據的總長度。(4)校驗和(Check Sum):和TCP和校驗和一樣,不僅對頭數據進行校驗,還對包的內容進行校驗。

5、ARP報頭結構

硬件類型

協議類型

硬件地址長度

協議長度

操作類型

發送方的硬件地址(0-3字節)

源物理地址(4-5字節)

源IP地址(0-1字節)

源IP地址(2-3字節)

目標硬件地址(0-1字節)

目標硬件地址(2-5字節)

目標IP地址(0-3字節)

(1)硬件類型字段指明了發送方想知道的硬件接口類型,以太網的值為1;

(2)協議類型字段指明了發送方提供的高層協議類型,IP為0800(16進制);

(3)硬件地址長度和協議長度指明了硬件地址和高層協議地址的長度,這樣ARP報文就可以在任意硬件和任意協議的網絡中使用;

(4)操作字段用來表示這個報文的類型,ARP請求為1,ARP響應為2,RARP請求為3,RARP響應為4;

(5)發送方的硬件地址(0-3字節):源主機硬件地址的前3個字節;

(6)發送方的硬件地址(4-5字節):源主機硬件地址的后3個字節;

(7)發送方IP(0-1字節):源主機硬件地址的前2個字節;

(8)發送方IP(2-3字節):源主機硬件地址的后2個字節;

(9)目的硬件地址(0-1字節):目的主機硬件地址的前2個字節;

(10)目的硬件地址(2-5字節):目的主機硬件地址的后4個字節;

(11)目的IP(0-3字節):目的主機的IP地址。

?ARP的工作原理如下:

1. ??首先,每臺主機都會在自己的ARP緩沖區(ARP Cache)中建立一個 ARP列表,以表示IP地址和MAC地址的對應關系。

2. ??當源主機需要將一個數據包要發送到目的主機時,會首先檢查自己 ARP列表中是否存在該 IP地址對應的MAC地址,如果有﹐就直接將數據包發送到這個MAC地址;如果沒有,就向本地網段發起一個ARP請求的廣播包,查詢此目的主機對應的MAC地址。此ARP請求數據包里包括源主機的IP地址、硬件地址、以及目的主機的IP地址。

3. ??網絡中所有的主機收到這個ARP請求后,會檢查數據包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此數據包;如果相同,該主機首先將發送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已經存在該IP的信息,則將其覆蓋,然后給源主機發送一個 ARP響應數據包,告訴對方自己是它需要查找的MAC地址;

4. ??源主機收到這個ARP響應數據包后,將得到的目的主機的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息開始數據的傳輸。如果源主機一直沒有收到ARP響應數據包,表示ARP查詢失敗

fa042d23a21c3168ca9f7e4a602c991b.png

努力學習,勤奮工作,讓青春更加光彩

b18e758c07b56672bb466a42579bc39f.png

再長的路,一步步也能走完,再短的路,不邁開雙腳也無法到達

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372910.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372910.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372910.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

團隊項目第二次沖刺Ⅶ

今天將整體代碼的編碼方式改了,作業模塊基本修改完成 遇到的問題是對于添加問答模塊無從下手轉載于:https://www.cnblogs.com/brucekun/p/5573312.html

編寫Play 2的模塊,第2部分:攔截器

在本教程的第一部分中,我們介紹了創建,發布和調用模塊的基本知識。 我們創建的模塊并沒有真正做很多事情,因此現在是時候使用Play的某些功能來擴展功能了。 1.攔截器 攔截器使您可以攔截對控制器的調用,并增強或阻止其行為。 在第…

c# ef報錯_C# EF調用MySql出現“未將對象引用設置到對象的實例”錯誤解決方案

C# EF調用MySql出現“未將對象引用設置到對象的實例”錯誤解決方案---修改步驟---1.打開Nuget管理包,把Mysql.Data替換為6.10.0以下任意版本。這里選擇的是6.8.82.修改完畢后,繼續把Mysql.Data.Entity也修改為對應版本6.8.8。3.安裝完成后可以看到App.Co…

js格式化時間

Date.prototype.format function(fmt) {var o { "M" : this.getMonth()1, //月份 "d" : this.getDate(), //日 "h" : this.getHours(), //小時 "m" : this.getMinu…

PHP---函數

一.函數定義的四個要素 返回類型,函數名,參數列表,函數體 //1.最簡單的定義方式/*function show(){ echo "hello";}show();*///2.有參數的函數定義/*function show($a){ echo $a;}show("bbbbb");*///3.有默認值的函數定義…

ServletRequest startAsync()的有用性有限

前段時間我遇到了Servlet 3.0中AsyncContext.start(…)的目的是什么? 題。 引用上述方法的Javadoc : 使容器調度線程(可能從托管線程池中)運行指定的Runnable 。 提醒大家, AsyncContext是Servl…

mysql所支持的比較運算符_mysql比較運算符有哪些?Mysql比較運算符詳解

比較運算符可用于比較數字和字符串。今天發一篇Mysql比較運算符詳解,希望對初學者有所幫助,雖然現在流行NoSQL,但是MYSQL還是很有用的,數字作為浮點值進行比較,字符串以不區為例進行比較,運算符用于比較表達…

數據結構0類模板的使用

類模板的使用 #include <iostream> #include <conio.h> #include <string> #define N 3 using namespace std;template <class numtype> class Swap{public :Swap(numtype a,numtype b){xa;yb;}numtype ___(){tempx;xy;ytemp;return x;}//testnumtype …

JavaScript 函數

函數 由于JavaScript的函數也是一個對象&#xff0c;所以類似function abs(v){}函數實際上是一個函數對象&#xff0c;而函數名abs可以視為指向該函數的變量。 因此&#xff0c;第二種定義函數的方式如下&#xff1a; var abs function (x) {if (x > 0) {return x;} else {…

Http Invoker的Spring Remoting支持

Spring HTTP Invoker是Java到Java遠程處理的重要解決方案。 該技術使用標準的Java序列化機制通過HTTP公開服務&#xff0c;并且可以被視為替代解決方案&#xff0c;而不是Hessian和Burlap中的自定義序列化。 而且&#xff0c;它僅由Spring提供&#xff0c;因此客戶端和服務器應…

mysql 日期列表_MySQL 生成日期表

1、創建一個num表&#xff0c;用來存儲數字0~9CREATE TABLE num (i int);2、在num表中生成0~9INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);3、生成一個存儲日期的表&#xff0c;datalist是字段名CREATE TABLE if not exists calendar(dateli…

學習后綴自動機想法

小序&#xff1a;學習后綴自動機是要有耐心的&#xff0c;clj的論文自己看真心酸爽&#xff01;&#xff08;還是自己太弱&#xff0c;ls&#xff0c;oyzx好勁啊&#xff0c;狂膜不止&#xff09; 剛剛在寫博客之前又看了篇論文&#xff0c;終于看懂了&#xff0c;好開心 正文&…

【BZOJ】3575: [Hnoi2014]道路堵塞

題目鏈接&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id3575 大概的做法是&#xff0c;按照順序枚舉每一條要刪去的邊&#xff0c;(假設當前點為$u$&#xff0c;在最短路徑上的下一個點是$v$)然后強制不走${u->v}$這條邊&#xff0c;將$u$入隊&#xff0c;做…

結合使用slf4j和Logback教程

在當前文章中&#xff0c;我將向您展示如何配置您的應用程序以使用slf4j和logback作為記錄器解決方案。 Java簡單日志記錄外觀&#xff08;slf4j&#xff09;是各種日志記錄框架的簡單外觀&#xff0c;例如JDK日志記錄&#xff08;java.util.logging&#xff09;&#xff0c;lo…

mysql 分組top_MySQL:如何查詢出每個分組中的 top n 條記錄?

問題描述需求&#xff1a;查詢出每月 order_amount(訂單金額) 排行前3的記錄。例如對于2019-02&#xff0c;查詢結果中就應該是這3條&#xff1a;解決方法MySQL 5.7 和 MySQL 8.0 有不同的處理方法。1. MySQL 5.7我們先寫一個查詢語句。根據 order_date 中的年、月&#xff0c;…

ACM第四站————最小生成樹(普里姆算法)

對于一個帶權的無向連通圖&#xff0c;其每個生成樹所有邊上的權值之和可能不同&#xff0c;我們把所有邊上權值之和最小的生成樹稱為圖的最小生成樹。 普里姆算法是以其中某一頂點為起點&#xff0c;逐步尋找各個頂點上最小權值的邊來構建最小生成樹。 其中運用到了回溯&#…

利用jenkins的api來完成相關工作流程的自動化

[本文出自天外歸云的博客園] 背景 1. 實際工作中涉及到安卓客戶端方面的測試&#xff0c;外推或運營部門經常會有很多的渠道&#xff0c;而每個渠道都對應著一個app的下載包&#xff0c;這些渠道都記錄在安卓項目下的一個渠道列表文件中。外推或運營部門經常會有新的渠道產生&a…

擁有成本分析:Oracle WebLogic Server與JBoss

Crimson Consulting Group 撰寫的非常有趣的白皮書 &#xff0c;比較了Weblogic和JBoss之間的擁有成本 。 盡管JBoss是免費的&#xff0c;但該白皮書卻嚴肅地宣稱&#xff0c;從長遠來看&#xff0c;Weblogic更便宜。 盡管此研究是由Oracle贊助的&#xff0c;但它看起來非常嚴肅…

mysql limit 分頁 0_Mysql分頁之limit用法與limit優化

Mysql limit分頁語句用法與Oracle和MS SqlServer相比&#xff0c;mysql的分頁方法簡單的讓人想哭。--語法&#xff1a;SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset--舉例&#xff1a;select * from table limit 5; --返回前5行select * from table limit 0…

與硒的集成測試

總覽 我已經使用了一段時間&#xff0c;遇到了一些似乎可以使生活更輕松的事情。 我以為可以將其作為教程分享&#xff0c;所以我將向您介紹這些部分&#xff1a; 使用Maven設置Web項目&#xff0c;配置Selenium以在CI上作為集成測試運行 尋找使用“頁面對象”為網站中的頁面…