目錄
一、前言
二、以太網
二、以太網幀格式
三、 MAC地址
四、MTU
1、數據鏈路層的數據分片
2、MTU對UDP協議的影響
3、MTU對TCP協議的影響
五、ARP協議
1、什么是ARP
2、ARP的作用
3、ARP協議的工作流程
4、ARP緩存表
5、ARP請求報文
6、中間人?
六、DNS,?Domain Name System
1、DNS
2、域名簡介
七、ICMP協議的簡單認識
1、定義
2、功能
3、ICMP報文格式
八、ping命令?
九、?traceroute命令
十、NAT技術
1、定義
2、NAT? IP轉換過程
3、NAPT
4、NAT技術的缺陷
十一、代理服務器
1、定義
2、正向代理和反向代理
正向代理
反向代理
3、負載均衡
常見的負載均衡算法
一、前言
上篇文章中,我們對網絡協議棧中的網絡層進行了詳細的介紹,但是我們需要知道的是網絡層并不會真正的傳輸數據。真正負責數據或者對數據進行傳輸的是數據鏈路層。
二、以太網
以太網其實并不是一種具體的網絡,而是一種技術標準,是一種廣泛使用的局域網(LAN)技術,用于在設備之間進行數據通信,即包含了數據鏈路層的內容也包含了一些物理層的內容,例如規定了網絡拓撲結構、訪問控制方式、傳輸速率等
-
傳輸介質:早期的以太網使用同軸電纜作為傳輸介質,但現代以太網通常使用雙絞線(如Cat5e、Cat6等)或光纖。不同的傳輸介質支持不同的傳輸速度和距離。
-
傳輸速率:以太網的傳輸速率從最初的10Mbps發展到如今常見的100Mbps(快速以太網)、1Gbps(千兆以太網)、10Gbps、40Gbps甚至100Gbps,適用于不同需求的網絡環境。
-
拓撲結構:傳統的以太網采用總線型拓撲結構,但現在更常用的是星型拓撲結構,其中所有設備都通過交換機連接在一起。
-
幀格式:以太網的數據單位稱為幀,每個幀包含源地址、目標地址、類型/長度字段以及有效載荷數據和幀校驗序列(FCS)。這些信息幫助確保數據能夠準確無誤地到達目的地。
-
訪問方法:以太網采用載波監聽多路訪問/沖突檢測(CSMA/CD)機制來管理網絡上多個設備試圖同時發送數據的情況。不過,在全雙工模式下,這種沖突檢測機制不是必需的,因為數據可以在同一時間雙向流動。
以太網是當前應用最廣泛的局域網技術,和以太網并列的還有令牌環網、無限LAN等
二、以太網幀格式
我們知道在通信過程中,每層協議都要加上一個數據首部,即封裝。
不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報(datagram),在鏈路層叫做幀(frame)。數據封裝成幀后發到傳輸介質上,到達目的主機后每層協議再剝掉相應的首部,最后將應用層數據交給應用程序處理。
以太網幀格式如圖所示
- 源地址和目的地址是指網卡的硬件地址,即MAC地址,長度是48位,是在網卡出廠時固化的。
- 幀協議類型字段有三種值,分別對應IP、ARP、RARP
- 幀末尾是CRC(Cyclic Redundancy Check))校驗碼,它是一種錯誤檢測技術,用于確保數據在傳輸過程中沒有被損壞或修改。
三、 MAC地址
MAC地址(Media Access Control Address,媒體訪問控制地址)是網絡設備的物理地址,用于在局域網(LAN)中唯一標識一個網絡接口。每個網絡接口卡(NIC, Network Interface Card)都有一個全球唯一的MAC地址,這確保了在同一網絡內不會有兩個設備擁有相同的MAC地址。
-
格式:標準的MAC地址由6組兩位的十六進制數表示,每組之間通常用冒號(:)、連字符(-)或不使用分隔符來分開。例如,00:1A:2B:3C:4D:5E。
-
長度:MAC地址總共有48位(6字節),其中前24位(3字節)是由IEEE分配給制造商的組織唯一標識符(OUI, Organizationally Unique Identifier),用來識別制造該設備的公司或廠商;剩下的24位則由制造商自行管理,用于區分不同的設備。
-
局域網內的通信:MAC地址主要用于局域網內的直接通信,如以太網、Wi-Fi等。在網絡層協議(如IP)之下,數據鏈路層利用MAC地址進行幀的傳輸。
-
ARP協議:在IP網絡中,地址解析協議(ARP, Address Resolution Protocol)用于將IP地址映射到對應的MAC地址上,以便能夠通過二層網絡進行數據包的發送。
所以MAC地址就是用來識別數據鏈路層中相連的節點。
那么IP地址和MAC地址的關系是什么呢?
還拿我們之前的唐僧取經的例子來說,IP地址就是路途的起點和終點。而MAC地址描述的是路途上每一個區間的起點和終點。
四、MTU
我們知道TCP協議是傳輸控制協議,它能決定每次發送的單個報文的大小,在我們學習滑動窗口的時候,有沒有這樣的疑惑?那就是既然已經知道了自己和接收方的可接受報文的大小,為什么一次將一個大的報文發過去,卻還是需要分成部分發呢?
我們知道在網絡協議棧中實際對數據進行轉發路由的是數據鏈路層。
在數據傳輸過程中,由于鏈路層物理特征的原因,不同的數據鏈路對應的物理層對傳輸的數據包有著不同的限制了,就像是我們寄快遞一樣,不同的快遞方限制了不同的快遞包大小。
以太網幀中的數據長度規定最小是46字節,最大是1500字節,APR數據包的長度不夠46字節的需要在后面補充。這個最大值1500就稱為以太網的最大傳輸單元,不同的網絡類型有著不同的MTU。
所以MTU稱為Maximum Transmission Unit(最大傳輸單元),是指在網絡層(如IP層)上能夠發送的最大數據包大小,包括報頭和數據部分。它通常以字節數為單位表示。MTU對網絡通信非常重要,因為它影響到數據傳輸的效率和網絡的性能。
如果一個數據從以太網路由到撥號鏈路上,數據包的長度大于撥號鏈路的MTU,則需要對該數據包進行分片(fragmentation)。
不同數據鏈路層標準的MTU是不同的。
在網絡通信中,數據傳輸的基本單位是數據包。每個數據包包含數據以及相關的控制信息。MTU定義了一個數據包的最大大小,超過這個大小的數據包需要分片成更小的數據包進行傳輸,然后在目的地重新組裝。我們也可在Linux下查看自己主機的MTU大小,具體如下圖:
1、數據鏈路層的數據分片
那么問題來了,這些超過MTU的數據包是在哪里分片又在哪里組裝呢?
分片行為是在發送方網絡層發生的,分片之后將這些分片交給鏈路層,接收方在網絡層向上交付時,也得需要一個完整的報文?,所以也是在這里將分片進行組裝。
下面我們看看具體的流程是什么樣子的:
- 數據分片:假設我們此時需要發送一個大的IP數據包,他需要通過網絡傳輸。首先,網絡層會將這個IP數據包分成多個較小的分片,這些小的分片也屬于IP數據包,所以它們也必須像大的數據包一樣封裝IP報頭。
- 分片的傳輸:這些數據分片被分別發送到網絡中,它們可以采用不同的路徑,經過不同的路由器和鏈路,因為網絡通常是不穩定的,所以分片的到達順序也可能會發生變化。
- 目的地的分片接收:在目的地,網絡層接收到這些分片,每個分片上都包含了偏移量和標識號,這些信息用于確定分片的正確順序。
- 分片的組裝:目的地的網絡層將這些分片按照它們的偏移量和標識號重新組裝成原始數據包,這個過程確保數據包的正確性和完整性。
- 上交給上層協議:一旦數據包被成功組裝,它就會被傳遞給更高層的協議,比如傳輸層的TCP和UDP協議,以便最終交付給應用程序。
我們現在再來拿出之前的IP協議報頭分析里面的標識位,標志位和偏移量的實際用途
下面我們,詳解他們到底起到了什么作用,怎么用他們進行的分片與組裝。
首先在分片之后:此時每個小IP分片的協議報頭中的16位標識(id)都是一樣的,且每個小IP分片的協議報頭的3位標志字段中,第2位置置為0,表示允許分片;第三位表示結束標記,即如果當前的分片是整組分片的最后一個分片的話,此位就置為0,否則置為1.該位用來給接收方判斷這批數據包是否全部接收到。
所以如果報文進行了分片,那么分片后形成的新的報文都是具有相同的標識位的。這也就能夠在組裝時很好的與其他報文分割開來了。
?但是我們怎么知道這個報文是否進行了分片呢?如果該報文后有更多的分片了,標志位的最后一位會被設置為1。
這時還有一個問題:怎么組裝起來呢,其實也就是怎么可以很好的將所有的分片進行按順序組裝呢?這個就用到 片偏移量 字段了。報文的第一個分片:標志位為1,片偏移量為0;報文的中間的分片:標志位為1,片偏移不是0;報文的最后一個分片:標志位為0,片偏移不是0。
怎么來確定是否有分片丟失呢?根據偏移量,來進行升序排序,結合偏移量+自身大小(16位總長度)看是否等于一個報文的偏移量。掃描整個報文如果不匹配,中間一定會有丟失的,如果成功計算到結尾,就一定收取完整了!
? 這個分片與組裝的過程允許數據在不穩定的網絡環境中可靠傳輸,因為即使某些分片到達順序混亂,目的地仍然可以正確地重建原始數據包。這是網絡通信中重要的一部分,特別是在廣域網或互聯網上,數據包可能需要經過多個路由器和鏈路才能到達目的地。但是實際上如果某個分片丟失或者受損,整個原始數據包將無法成功重組,接收端通常會因為缺少必要的分片而不得不丟棄整個數據包。
? 但是我們需要注意的是:主流情況下,都是不會進行分片的。TCP在發送數據時,就會決定發送數據的大小。一般情況下,結合MTU都是不會進行分片的。因為分片相對來說增加了丟包的概率,同時分片和組裝也是有所消耗的。
? 怎么理解分片增加了丟包的概率:當我們發送方進行了分片發送后,只有當接收方收到了全部的分片報文并將其成功組裝起來,這時我們才認為該數據被對方可靠的收到了。但如果眾多的分片報文當中有一個報文出現了丟包,就會導致接收方就無法將報文成功組裝起來,這時接收方會將收到的分片報文全部丟棄,此時傳輸層TCP會因為收不到對方應答而進行超時重傳。簡單理解:本來是一個報文就能解決的事,現在需要多個報文了。
我們還需要注意的是:除了源和目的地之外,在路徑上的任何中間路由器都可能對數據包進行分片,前提是這些路由器沒有被配置為禁止分片。如果一個中間路由器接收到一個不允許分片的數據包,但其大小超過該路由器出站接口的MTU,則該路由器將丟棄此數據包并向源地址發送ICMP消息(類型3,代碼4),指示需要減小數據包大小。
2、MTU對UDP協議的影響
- 一旦UDP攜帶的數據超過1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就會在網絡層分成多個IP數據報.
- 這多個IP數據報有任意一個丟失, 都會引起接收端網絡層重組失敗. 那么這就意味著, 如果UDP數據報在網絡層被分片, 整個數據被丟失的概率就大大增加了
3、MTU對TCP協議的影響
????????在使用TCP傳輸的情況下,如果某個分片丟失導致整個數據報不能被正確重組,TCP會檢測到數據缺失并請求重傳相應的數據段。因此,雖然IP層本身不具備修復丟失分片的能力,但結合傳輸層的可靠性機制,可以實現在網絡不穩定環境下數據的可靠傳輸,但是分片會增加額外的開銷,并可能導致性能下降或復雜性增加,特別是在其中一個分片丟失的情況下。
為了避免分片帶來的問題,維護TCP傳輸的可靠性,MSS(Maximum Segment Size)技術被提出。
MSS(最大報文段長度)是TCP協議頭部的40字節變長選項中。用于指示在建立TCP連接時雙方愿意接受的最大TCP段長度(不包括TCP/IP頭部的總長度),即數據段。MSS選項是在TCP三次握手期間通過SYN和SYN/ACK數據包進行協商的。
MSS的主要目的是為了防止數據包被分片。是在其中一個分片丟失的情況下。因此,通過合理設置MSS,可以避免數據包在傳輸過程中被分片,從而提高傳輸效率。
?MSS的協商是為了確保通信的各個端點之間可以有效地傳輸數據,同時避免因數據段過大而導致的分段和數據包重傳。MSS協商過程通常如下:
- 客戶端發送一個TCP連接請求報文(SYN),其中包含自己支持的MSS大小。
- 服務器收到連接請求后,會檢查客戶端發送的MSS大小,并確定自己支持的MSS大小。
- 服務器在TCP連接響應報文(SYN-ACK)中回復客戶端,其中包含服務器支持的MSS大小。
- 客戶端收到服務器的響應后,會根據服務器支持的MSS大小來確定最終的MSS大小。
- 一旦MSS大小確定,雙方就可以開始在這個MSS大小下進行數據傳輸。
MSS的協商過程的作用主要有以下幾個方面:
- 避免分片:TCP協議要求數據在傳輸過程中不被分片,即一個TCP數據段的大小不能超過MSS。通過MSS協商,可以確保數據在傳輸過程中不會被分片,從而避免了額外的數據重組工作。
- 最大利用帶寬:MSS的大小會影響每個TCP段的有效載荷大小,從而影響了數據傳輸的效率。通過協商一個合適的MSS大小,可以更好地利用網絡帶寬,提高傳輸效率。
- 減少擁塞:MSS協商也有助于減少網絡擁塞的可能性。如果MSS大小合理,可以減少過大數據包引起的擁塞問題,提高網絡性能。
舉例來說,假設某個網絡的MTU為1500字節,而MSS為1460字節。如果一臺計算機想要向另一臺計算機發送2000字節的數據,根據MTU的限制,這個數據在傳輸層會被分割成兩個數據包,每個數據包的大小不能超過 1460 字節。在TCP協議中,每個數據包的大小將根據MSS的限制進行調整,確保TCP頭部和數據部分的大小不超過1460字節。
五、ARP協議
通過上面的部分我們已經知道了IP協議和MAC地址,接下來我們就要探討它們之間的關系了。
雖然,我們是在數據鏈路層這一篇文章中介紹ARP協議的,但是需要注意的是,ARP協議并不是一個單純的數據鏈路層協議,而是一個介于數據鏈路層和網絡層之間的協議。
1、什么是ARP
ARP協議是“Address?Resolution Protocol”(地址解析協議)的縮寫,是互聯網協議族中的一員,主要用于將網絡層(IP層,即第三層)的IP地址解析為數據鏈路層(第二層)的MAC地址。在局域網中,設備之間的通信需要知道對方的物理地址(MAC地址),而ARP協議正是用于實現這種轉換的。
2、ARP的作用
在我們的網絡通信中,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址。而在以太網環境中,數據的傳輸所依懶的是MAC地址而非IP地址,而將已知IP地址轉換為MAC地址的工作是由ARP協議來完成的。
在局域網中,網絡中實際傳輸的是“幀”,幀里面是有目標主機的MAC地址的。在以太網中,一個主機和另一個主機進行直接通信,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得的呢?它就是通過地址解析協議獲得的。
所謂“地址解析”就是主機在發送幀前將目標IP地址轉換成目標MAC地址的過程。ARP協議的基本功能就是通過目標設備的IP地址,查詢目標設備的MAC地址,以保證通信的順利進行。
3、ARP協議的工作流程
假設主機A和主機B處在同一個局域網,主機A想要給主機B發送信息,具體的地址解析如下:
- 首先,主機A會查看自己的ARP緩存表(一個臨時存儲最近映射關系的表),如果找到了對應的MAC地址,則主機A直接利用ARP表中的MAC地址,對IP數據包進行幀封裝,并將數據包發送給主機B。
- 如果主機A在ARP緩存表中找不到對應的MAC地址,則將緩存該數據報文,接著主機A就會廣播一個ARP請求包到整個局域網。這個請求包含發送方的IP地址和MAC地址,即主機A的IP地址和MAC地址,以及目標設備的IP地址和目標設備的MAC地,即主機B的IP地址和全0的MAC地址(先填充全0).
- 由于ARP請求報文以廣播方式發送,該網段上的所有主機都可以接收到該請求,都會對接收到的報文做報頭和有效載荷分離,然后驗證自己的 IP與目標IP是否一致,不一致則丟棄,就不會向上交付,上面的也不知道收到了這個報文。只有被請求的主機(即主機B)會對該請求進行處理。
- 主機B比較自己IP地址和ARP請求報文中的?目標IP?地址,當兩者相同時進行如下處理:將ARP請求報文中的發送端(即主機A)的IP地址和MAC地址存入自己的ARP表中。之后以單播(也是封裝后的)方式發送ARP響應報文給主機A,其中包含了自己的MAC地址。
- 主機A收到ARP響應報文后,將主機B的MAC地址加入到自己的ARP表中以用于后續報文的轉發,同時將IP數據包進行封裝后發送出去。
如下
- 上面提到在ARP請求報文以廣播方式發送的時候,該網段上的所有主機都可以接收到該請求,都會對接收到的報文做報頭和有效載荷分離
- 所以在局域網中,網卡有一種模式稱為 混雜模式,即不放棄任何數據幀,直接向上交付,這也就是局域網抓包工具的原理。所以http協議并不是十分安全的,因為數據包需要經過很多路由的時候,指不定哪個網卡就設置混雜模式。
- 在局域網中,任何時刻,只能有一個主機發送消息,如果多個消息被同時發送,會導致局域網中的數據發生碰撞,成為無效數據。該一個局域網稱為一個碰撞域。所以針對這個問題,也有很多方案,比如令牌環網,就是持有令牌的主機才能發消息,發完之后將令牌轉給下一個主機,類似鎖。第二個就是以太網,它的策略是如果檢測到發送的消息發生碰撞,數據鏈路層的協議就會觸發策略,等一等,等待的時間根據情況定,然后再重新發送數據(主機的碰撞檢測或者碰撞避免算法)。如果想要黑局域網,就只需要不斷向局域網中發送垃圾數據,就像班里大喊大叫的。所以局域網不能太大,不然主機太多,容易碰撞。
那么能不能減少碰撞呢?
可以引入交換機,它可以識別局部性的碰撞,對碰撞數據不予轉發。
4、ARP緩存表
?每臺主機都會維護一個ARP緩存表,使用 arp -a 查看,緩存表中的表項有過期時間(一般為20分鐘),如果你20分鐘沒有再次使用某個表項,則該表項就失效,下次還要發送ARP請求來獲得目的主機的MAC地址。
- ?IP地址: 每一行的第一個括號內的數字(如169.254.0.3)表示一個IP地址。
- MAC地址:at后面的字符串(如 fe:ee:7e:91:aa:82)表示與該IP地址對應的MAC地址。
- [ether]: 表示這是以太網設備。
- 接口名稱:?on eth0 表示這些映射關系是在 eth0 接口上記錄的。
- ?: 表示這是一個動態學習到的ARP條目。
- gateway: 特殊標記,表示這是默認網關的條目。
例如:
? (169.254.0.3) at fe:ee:7e:91:aa:82 [ether] on eth0
這一行表示IP地址為 169.254.0.3 的設備對應的MAC地址是fe:ee:7e:91:aa:82,并且這個映射關系是在 eth0 接口上動態學習到的。
gateway (10.2.8.1) at fe:ee:7e:91:aa:82 [ether] on eth0
這表示默認網關的IP地址是 10.2.8.1,對應的MAC地址是fe:ee:7e:91:aa:82
5、ARP請求報文
ARP是一個獨立的三層協議,所以ARP報文在向數據鏈路層傳輸時不需要經過IP協議的封裝,而是直接生成自己的報文,其中包括ARP報頭,到數據鏈路層后再由對應的數據鏈路層協議(如以太網協議)進行封裝。ARP報文分為ARP請求和ARP應答報文兩種,它們的報文格式可以統一為下圖所示。
- 硬件類型:占兩字節,表示ARP報文可以在哪種類型的網絡上傳輸,值為1時表示為以太網地址。
- 上層協議類型:占兩字節,表示硬件地址要映射的協議地址類型,映射IP地址時的值為0x0800。
- MAC地址長度:占一字節,標識MAC地址長度,以字節為單位,此處為6。
- IP協議地址長度:占一字節,標識IP得知長度,以字節為單位,此處為4。
- 操作類型:占2字節,指定本次ARP報文類型。1標識ARP請求報文,2標識ARP應答報文。
- 源MAC地址:占6字節,標識發送設備的硬件地址。
- 源IP地址:占4字節,標識發送方設備的IP地址。
- 目的MAC地址:占6字節,表示接收方設備的硬件地址,在請求報文中該字段值全為0,即00-00-00-00-00-00,表示任意地址,因為現在不知道這個MAC地址。
- 目的IP地址:占4字節,表示接受方的IP地址。
ARP報文不是直接在網絡層上發送的,它還是需要向下傳輸到數據鏈路層,所以當ARP報文傳輸到數據鏈路層之后,需要再次進行封裝。以以太網為例,ARP報文傳輸到以太網數據鏈路層后會形成ARP幀。ARP幀如下圖所示,他就是在ARP報文前面加了一個以太網幀頭。
- 目的MAC地址:占6字節,如果是ARP請求幀,因為它是一個廣播幀,所以要填上廣播MAC地址(FF-FF-FF-FF-FF-FF),其目標主機是網絡上的所有主機。
- 源MAC地址:占6字節,這是發送ARP幀的節點MAC地址。
- 幀類型:占兩字節,這里用來標識幀封裝的上層協議,因為本幀的數據部分是ARP報文,所以直接用ARP的協議號0x0806表示就可以了。
??注意到源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對于鏈路層為以太網的情況是多余的,但如果鏈路層是其它類型的網絡則有可能是必要的。
6、中間人?
那么在一臺主機向另一臺主機請求對方的MAC地址的時候,會不會出現中間人的情況呢?
實際上是會的,如下圖所示
由于ARP收到應答的時候會以最新的為主?!!!!
所以中間人最后告訴主機A自己是IP4,然后把自己的MAC地址告訴主機A,此時主機A的ARP緩存表中就保存了IP4的MAC地址是MAC3,然后同樣的操作在給主機C來一次,這樣它們之間的通信數據每次都要經過中間人,中間人就可以獲取到它們的數據包了。這就是ARP欺騙。
六、DNS,?Domain Name System
1、DNS
DNS是一整套從域名映射到IP的系統
DNS(Domain Name System,域名系統)是互聯網的一項核心服務,它作為將域名轉換為IP地址的分布式數據庫系統,使得用戶能夠通過易于記憶的域名訪問網站,而不是直接使用難以記憶的IP地址.
TCP/IP中使用IP地址和端口號來確定網絡上的一臺主機的一個程序. 但是IP地址不方便記憶.于是人們發明了一種叫主機名的東西, 是一個字符串, 并且使用hosts文件來描述主機名和IP地址的關系
最初, 通過互連網信息中心(SRI-NIC)來管理這個hosts文件的.
- 如果一個新計算機要接入網絡, 或者某個計算機IP變更, 都需要到信息中心申請變更hosts文件.
- 其他計算機也需要定期下載更新新版本的hosts文件才能正確上網.
這樣就太麻煩了, 于是產生了DNS系統.
- 一個組織的系統管理機構, 維護系統內的每個主機的IP和主機名的對應關系.
- 如果新計算機接入網絡, 將這個信息注冊到數據庫中;
- 用戶輸入域名的時候, 會自動查詢DNS服務器, 由DNS服務器檢索數據庫, 得到對應的IP地址.
至今, 我們的計算機上仍然保留了hosts文件. 在域名解析的過程中仍然會優先查找hosts文件的內容
使用 cat /etc/hosts 命令查看
2、域名簡介
主域名是用來識別主機名稱和主機所屬的組織機構的一種分層結構的名稱
以www.baidu.com 為例
域名之間使用? . 連接
- com: 一級域名. 表示這是一個企業域名. 同級的還有 "net"(網絡提供商), "org"(非盈利組織) 等.
- baidu: 二級域名, 公司名.
- www: 只是一種習慣用法. 之前人們在使用域名時, 往往命名成類似于 ftp.xxx.xxx/www.xxx.xxx這樣的格式, 來表示主機支持的協議.
所以?域名解析:DNS最主要的功能就是將人類可讀的域名(如www.example.com)轉換為計算機使用的IP地址(如93.184.216.34),以便建立網絡連接。
七、ICMP協議的簡單認識
1、定義
ICMP(Internet Control Message Protocol,互聯網控制消息協議)是網絡層協議之一,主要用于在IP網絡中發送控制消息和錯誤報告。它是一個非常重要的工具,用于診斷網絡問題、通知發送者有關數據包傳輸失敗的信息等。
一個新搭建好的網絡, 往往需要先進行一個簡單的測試, 來驗證網絡是否暢通; 但是IP協議并不提供可靠傳輸. 如果丟包了, IP協議并不能通知傳輸層是否丟包以及丟包的原因。
2、功能
- 確認IP包是否成功到達目標地址.
- 通知在發送過程中IP包被丟棄的原因.
- ICMP也是基于IP協議工作的. 但是它并不是傳輸層的功能, 因此人們仍然把它歸結為網絡層協議; ICMP只能搭配IPv4使用. 如果是IPv6的情況下, 需要是用ICMPv6
3、ICMP報文格式
- 類型(Type):定義了ICMP報文的類別,如錯誤報告、查詢等。
- 代碼(Code):進一步描述了特定類型中的具體情況。
- 校驗和(Checksum):用于驗證ICMP報文的完整性
ICMP大概分為兩類報文:
- 一類是通知出錯原因
- 一類是用于診斷查詢
八、ping命令?
ping 命令是一個非常基礎且常用的網絡工具,用于測試主機之間的連通性。它通過發送ICMP Echo Request消息到目標主機,并等待接收ICMP Echo Reply消息來工作。這有助于確定兩臺設備是否能夠互相通信以及測量數據包往返的時間延遲。
下面舉個例子
- 注意, 此處 ping 的是域名, 而不是url! 一個域名可以通過DNS解析成IP地址.
- ping命令不光能驗證網絡的連通性, 同時也會統計響應時間和TTL(IP包中的Time To Live, 生存周期). ping命令會先發送一個 ICMP Echo Request給對端;
- 對端接收到之后, 會返回一個ICMP Echo Reply;
telnet是23端口, ssh是22端口,
ping命令基于ICMP, 是在網絡層. 而端口號, 是傳輸層的內容. 在ICMP中根本就不關注端口號這樣的信息。
九、?traceroute命令
該命令是基于ICMP協議實現, 能夠打印出可執行程序主機, 一直到目標主機之前經歷多少路由器.
十、NAT技術
?在前面我們已經了解了現在IPV4協議中,IP地址數量不充足的問題,提到了很多的解決方法,比如IPV6,NAT技術等。下面我們就NAT技術詳細說明一下它是怎么解決IP地址數量不足的問題的。
1、定義
NAT(Network Address Translation,網絡地址轉換),顧名思義,是一種用于修改網絡數據包傳輸信息的技術,主要用于在IP數據包通過路由器時,修改其中的源IP地址或目的IP地址。
- NAT技術能夠將私有IP在對外通信時轉換為全局IP,本質上就是私有轉公有或者公有轉私有
- 日常生活中,很多學校、家庭、公司內部采用每個終端設置私有IP,而在公網上的路由器上或者必要的服務器上要設置全局IP,如云服務器
- 全局IP要求是唯一的,但是私有IP是不需要的,可以允許在不同的局域網中出現相同的私有IP
2、NAT? IP轉換過程
假設此時主機A(IP:192.168.201/24) 要向D(IP:122.77.241.3/24) 發送請求,在主機A中構建了報文之后然后自頂向下進行交付,然后到了網絡層準備開始路由
- 首先它發現目標主機沒有和自己在同一個子網內(不然網絡號肯定是一樣的),所以將報文再向下交付封裝成MAC幀發送給家用路由器B
- 家用路由器經過上面同樣的操作將該報文發送給了運營商路由器C,然后由運營商路由器C將報文通過廣域網發送給D。在這個過程中,需要注意的是并不僅僅將報文在不斷轉發,而是在轉發的同時還將源IP地址不斷做著替換。
- 我們知道每個路由器都有著自己的子網IP和WAN口IP,當它在做數據包轉發的時候,它實質上是將報文的源IP替換成自己的WAN口IP。
- 所以一路替換上去之后,D端處理之后就可以返回到運營商服務器C,走到這里就有一個問題了?:剩下的路該怎么走呢?報文該如何正確返回到主機A呢?
下面看個具體的例子
- 上面的每臺主機都是一個TCO/IP協議棧,客戶端A要將報文發送給服務端
- NAT路由器將源地址從10.0.0.10替換成全局的IP(路由器的WAN口IP) 202.244.174.37,路由器就提這個客戶端去向服務器發起請求;
- 返回
- NAT路由器收到外部的數據時, 又會把目標IP從202.244.174.37替換回10.0.0.10;
- 在NAT路由器內部, 有一張自動生成的, 用于地址轉換的表;
- 當 10.0.0.10 第一次向 163.221.120.9 發送數據時就會生成表中的映射關系;
3、NAPT
如果局域網內, 有多個主機都訪問同一個外網服務器, 那么對于服務器返回的數據中, 目的IP都是相同的. 那么NAT路由器如何判定這個響應數據包是哪一臺主機請求的呢?應該發給哪個主機呢?
所以這時候就需要NAPT來解決這個問題了,它采用的是 IP+ Port 來構建這個關聯關系。
????????上圖私有IP地址世界中有著多臺主機,當然這些主機也有可能是路由器,且它們經過NAT路由器轉發時IP地址都被替換成了一樣的路由器的WAN口IP,所以為了分清楚服務器返回報文時各個客戶端自己的響應報文,這就要求NAT路由器必須自己維護一張由外網到內網之間的數據包和主機的對應關系。
????????且實質上并不是主機與主機之間進行通信,而是主機上的進程與進程之間的通信,也許客戶端A同時有著多個進程和服務端在進行通信,所以該NAT路由器不僅需要有能力去區分客戶端主機之間的差別還需要區分同一臺主機上進程之間的區別,所以數據包通過NAT路由器轉發的時候,不僅需要考慮源IP地址被替換的問題,還需要考慮端口號被替換的問題。如上圖中客戶端A、B使用同一個端口號請求同一臺服務器的同一個端口號,此時為了方便區分,NAT路由器在維護轉換表時就將端口號換成1026了。
????????這種關聯關系也是由NAT路由器自動維護的. 例如在TCP的情況下, 建立連接時, 就會生成這個表項;因為建立連接的本質也就是客戶端向服務端發起報文,?在斷開連接后, 就會刪除這個表項。
4、NAT技術的缺陷
由于NAT依賴這個轉換表, 所以有諸多限制:
- 無法從NAT外部向內部服務器建立連接;
- 裝換表的生成和銷毀都需要額外開銷;
- 通信過程中一旦NAT設備異常, 即使存在熱備, 所有的TCP連接也都會斷開
十一、代理服務器
除了上面講的NAT這種在路由器級別上所作的地址轉化的功能之外,還存在一種技術:代理服務器
1、定義
在網絡中,代理(Proxy)服務器充當客戶端和目標服務器之間的中介角色。它可以幫助用戶間接訪問互聯網或內部網絡資源,提供了多種功能和服務,
2、正向代理和反向代理
我們先以生活中的例子來描述以下正向代理和反向代理
正向代理
想象一下你正在嘗試從國外的一個在線商店購買商品,但該商店只接受來自某些國家的信用卡支付,并且由于你的地理位置不在這些國家之列,因此無法直接完成支付。這時,你可以通過一個朋友的幫助,這個朋友住在其中一個被接受的國家,并愿意使用自己的信用卡幫你完成支付。在這個場景中,你的這位朋友就扮演了正向代理的角色:
- 你(客戶端)請求幫助以完成購買。
- 你的朋友(正向代理)代替你向在線商店(目標服務器)發出支付請求。
- 在線商店只知道與它交互的是你的朋友,而不知道背后還有你這個人存在。
這就像你在使用正向代理訪問互聯網資源時,代理服務器代表你發送請求并接收響應,隱藏了你的真實身份。
反向代理
現在考慮你去一家大型商場購物的情景。這家商場內部有多個不同的店鋪(比如服裝店、電子產品店等),但對外只有一個統一的入口。當你進入商場并詢問某個品牌的位置時,服務臺的工作人員會根據你的需求指引你到相應的店鋪,或者如果你要買的東西可以在多個店鋪找到,他們可能會根據當前的人流情況建議你去人少的那個店鋪。在這里,商場的服務臺就像是反向代理:
- 你(客戶端)想要尋找特定的商品或服務。
- 服務臺工作人員(反向代理)知道所有店鋪(后端服務器)的信息,并根據一定的規則(如人流分布、店鋪特色等)引導你到合適的店鋪。
- 即你并不知道自己最終會被引導至哪一個具體的店鋪,只知道自己想要什么東西,且是在這個商場內完成購物。
這類似于反向代理在互聯網應用中的角色,它負責接收客戶端的請求,并依據負載均衡策略或其他標準將請求轉發給合適的后端服務器處理,同時隱藏了這些服務器的具體信息。
站在客戶端的角度,離客戶端近的叫正向代理,離客戶端遠的叫反向代理。
3、負載均衡
負載均衡器位于客戶端和服務器之間,接收來自客戶端的請求,并根據預設的算法將這些請求分發給后端的一臺或多臺服務器進行處理。一旦服務器處理完請求,響應會先返回給負載均衡器,再由其轉發回客戶端。負載均衡不僅能夠分散流量,還可以檢測服務器狀態,避免將請求發送到不可用或表現不佳的服務器上。
常見的負載均衡算法
-
輪詢法(Round Robin):按照順序依次將請求分配給不同的服務器,每個服務器都有平等的機會處理請求。
-
最少連接法(Least Connections):優先將請求分配給當前連接數最少的服務器,適用于每個請求占用服務器時間差異較大的場景。
-
源IP哈希法(Source IP Hash):根據客戶端IP地址的哈希值決定分配哪個服務器,這樣來自同一IP的請求總是被定向到相同的服務器,有助于保持會話一致性。
-
加權輪詢法(Weighted Round Robin):給每臺服務器分配一個權重值,權重越高,分配到的請求數量越多,適合不同性能的服務器集群。
-
響應速度法(Least Time):基于服務器響應時間和活動連接數來分配請求,選擇最快響應的服務器以提升用戶體驗。
以上就是數據鏈路層的所有內容了。
感謝閱讀!