目錄
一、MAC幀
(一)IP地址和MAC地址
(二)MAC幀格式
(三)MTU對IP協議的影響、
(四)MTU對UDP協議的影響
(五)MTU對TCP協議的影響
二、以太網協議
(一)以太網MAC幀如何進行解包和分用
(二)局域網中轉發原理
三、ARP協議
(一)ARP協議的作用
(二)ARP數據報的格式
(三)ARP協議的工作流程
(四)RARP協議
四、相關的技術與協議
(一)DNS協議
(二)ICMP協議
(三)代理服務器
一、MAC幀
(一)IP地址和MAC地址
????????通過上節我們了解一臺入網的主機的IP地址是有可能發生變化的,例如該主機處于不同的網絡或重新入網時路由器分配了新的IP地址,因此僅靠IP地址是無法完成網絡中數據通信的,因此引入了MAC地址。
????????MAC地址用來區別數據鏈路層中相連的節點,MAC地址是網絡接口卡的硬件標識符,全球唯一,主要作用于數據鏈路層,描述的是數據傳輸中每個區間的起點和終點。
? ? ? ? MAC地址一共48位,全球任意一張網卡都有唯一的MAC地址。使用 ifconfig 命令可查看本機的MAC地址:
(二)MAC幀格式
目的地址:目的主機的MAC地址;
源地址:發送主機的MAC地址;
類型:MAC幀類型;
CRC:MAC幀校驗碼。
? ? ? ? 數據鏈路層的MAC數據幀協議規定了單幀有效載荷最大為1500字節,有效載荷的最大值稱MTU最大傳送單元。
? ? ? ? 在網絡通信中,真正決定數據發送的是傳輸層,因此數據包的大小實際由傳輸層決定。若傳輸層向下交付的數據包過大,則需要IP層將數據進行分片以及重組,而數據鏈路層對此并不關心只負責數據包的發送。
? ? ? ? 在網絡傳輸中,不僅僅只有主機采用MTU最大傳輸單元,對于中間節點的路由器同樣也存在MTU最大傳輸單元,若報文大小超過了路由器的MTU最大傳輸單元且該數據報中的df = 0,那么路由器的IP層會再次對報文進行IP分片后發送報文,若df = 1 也就是禁止分片的話,路由器會將報文丟棄并通知發送端(ICMP報文)。
(三)MTU對IP協議的影響、
? ? ? ? 由于數據鏈路層MTU的限制,對于較大的IP數據包要進行分片:
????????當傳輸層交付的數據過大需要進行分片時,IP層首先將數據進行分割并填寫相應的報頭信息,其中被原始的數據報分配唯一的標識位,所有分片繼承該標識,除了最后一個分片外,其他分片的標志位中的MF = 1,最后的標識位置0。置1表示后續還有分片,而置0表示后續沒有分片即該數據報為最后一個分片。在分片的同時也需要填寫片偏移大小,該字段用于表示該數據報的數據原處分配前數據的起始位置,其中除了最后一個分片以外,其他的分片的偏移量必須是8的整數倍。
????????當收到一個報文時,查看標志位的MF是否為1,若為1則說明該報文進行過分片操作并不是完整報文,若為0則需要查看該報文的偏移量,若偏移量不為0則說明該報文是被分片后的最后一個IP報文,若為0則說明該報文本身是個完整的報文;通過以上步驟即可驗證該報文是否被分片,若沒有進行分片該報文本身就是一個完整報文,若該報文進行過分片,需等到最后一個報文的到達。偏移量為數據處原始數據的起始地址。因此當收到最后一個報文后,只需要將各個報文按偏移量大小進行排序,驗證各個相鄰報文之間的是否連續即可判斷收到的所有分片報文是否完整。若完整則重新組裝后交付給上層。
? ? ? ? 在傳輸過程中,數據包進行分片后的小數據包中任意一個小包丟失,接受端的重組就會失敗,若需要重新發送數據包,是需要將整個數據包重新進行分片后再此全部發給發送端的,IP層不服職責重新傳輸數據,由上層決定。因此在實際傳輸中,傳輸層會避免向下交付的數據包過大而導致IP分片的,IP分片不僅僅增加了網絡層的負擔,也增加了整個數據包重傳的風險。
(四)MTU對UDP協議的影響
- 一旦UDP攜帶的數據超過1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就會在網絡層分成多個IP數據報。
- 這多個IP數據報有任意一個丟失, 都會引起接收端網絡層重組失敗. 那么這就意味著, 如果UDP數據報在網絡層被分片, 整個數據被丟失的概率就大大增加了。
(五)MTU對TCP協議的影響
- TCP的數據不能過大,IP協議受制于MTU,同樣的TCP協議也受制于MTU,TCP協議蛋哥數據報的最大消息長度稱為MSS(Max Segment Size)
- TCP在建立連接時,通信雙方會協商MSS大小:雙方在發送SYN時會把自己能支持的最大MSS值寫入TCP首部,一般取雙方較小的作為最終MSS;
- 最理想的情況下,MSS的值正好是在IP不會被分片處理的最大長度;
- MSS的值就在TCP首部的40字節變長選項中。
二、以太網協議
(一)以太網MAC幀如何進行解包和分用
? ? ? ? MAC幀采用定長的策略,對于一個MAC幀而言,首部為 6+6+2 = 14字節以及有效載荷后的4字節CRC校驗位,解包時去掉以上部分即為有效載荷。
? ? ? ? 在MAC幀首部由類型字段,根據該類型字段即可了解將有效載荷交付給上層的哪種協議,例如0800代表是IP數據報,0806為ARP協議。
(二)局域網中轉發原理
? ? ? ? 當局域網內的一臺主機發送了一個MAC幀后,局域網內的所有主機都可以收到該MAC幀,而只有其目的地址為本主機的MAC地址時,該主機數據鏈路層才會把該數據向上交付,而其他主機會直接將該MAC幀丟棄。在局域網中,網卡有一種“混雜模式”,該模式下不會放棄任何數據幀,物理MAC幀內的目的地址是否為主機的MAC地址,都會將MAC幀解包后向上交付,這也是局域網內抓包工具的原理。
? ? ? ? 因此在一個局域網內如果多個主機同時發送數據,那么總線上的信號會相互干擾產生碰撞沖突。所以在同一時刻只有一臺主機能夠發送數據。因此需要約定一些協議保證數據的正常發送:
令牌環:令牌環網絡中有一個令牌(Token)在環路上循環傳遞。只有持有令牌的節點才能發送數據,其他節點則監聽該鏈路以接收數據。當節點需要發送數據時,它會將數據附加到令牌上,并將令牌繼續傳遞下去。每個節點在接收到令牌時檢查是否有附加的數據,如果有,節點就將數據提取出來并處理。
以太網:以太網使用一種稱為CSMA/CD(帶沖突檢測的載波偵聽多路訪問)的協議來管理和調度數據傳輸。在CSMA/CD中,每個節點都監聽網絡上的信道來檢測是否有其他節點正在發送數據;如果檢測到信道空閑,則節點可以開始發送數據;否則,節點會等待一段隨機時間后再次嘗試發送;當多個主機同時發送該數據導致沖突時,所有主機停止發送并發送阻塞清號,隨后二進制指數退避算法重新嘗試發送。
? ? ? ? 當局域網上的主機越多時,越容易發生數據碰撞沖突,因此可以在局域網中使用交換機。
? ? ? ? 交換機可以隔絕沖突域。正常情況下,交換機并不影響局域網內的通信,例如當主機A向主機E發送數據時,交換機會正常將數據進行轉發;當主機A和主機B同時向主機D發送數據時發生沖突,當交換機左側(如圖)發生沖突時并不會將發生沖突的數據轉發給右側,而右側也就是主機C和主機E之間仍然可以繼續進行正常的通信不受左側沖突的影響。
????????對于每條MAC的數據長度,數據越長,越有可能發生碰撞,這也是MAC幀協議限制有效載荷最大是1500字節的原因。
三、ARP協議
? ? ? ? ARP協議是介于數據鏈路層和網絡層之間的協議,用于使用IP地址來獲取MAC地址。
? ? ? ? 在網絡傳輸過程總,IP地址就相當于最終目的地,而MAC地址相當于中間途徑的地址。數據報封裝為MAC幀時需要目的MAC地址。當主機向服務器發送數據時,主機如何知道所處網段的公網路由器的MAC地址是多少?當報文到達目的網絡時,路由器又怎么知道該數據包的目的地址的MAC地址是多少?這些實際都需要MAC地址。
(一)ARP協議的作用
? ? ? ? ARP協議建立了主機IP地址和MAC地址的映射關系
- 在網絡通信中,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址;
- 數據包首先是唄網絡接收到再去交給上層協議的,如果收到的數據包的目的硬件地址與本主機不符,則會直接丟棄數據包;
- 因此在通信前必須獲得目的主機的硬件地址
(二)ARP數據報的格式
- 注意源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對于鏈路層為以太網的情況是多余的,但如果鏈路層為其他類型的網絡則是有必要的;
- 硬件類型指的是鏈路層網絡類型,以太網為1;
- 協議類型指要轉換的地址類型,0x0800為IP地址;
- 硬件地址長度對于以太網地址為6字節;
- 協議地址長度對于IP地址為4字節;
- op字段為1表示ARP請求,op表示為2表示ARP應答;
(三)ARP協議的工作流程
? ? ? ? 當主機A需要向主機E發送數據時,由于主機A只知道主機E的IP地址,因此需要通過ARP協議獲取主機E的MAC地址。
????????首先主機A發送ARP請求報文,其中ARP報文中的以太網目的地址為全F,也就是為廣播地址。局域網內的所有主機都會收到該請求報文,由于報文中的以太網目的地址為廣播地址,對MAC幀首部進行解包后查看幀類型字段并將其交給ARP協議處理。首先讀取ARP請求報文的op字段,若op字段為1即確認該報文為ARP請求報文,再查看目的IP地址是否為本主機的IP地址(目的以太網地址為全F),若不為本主機的IP地址則將該報文丟棄。
? ? ? ? 當主機E收到該ARP請求報文后,經過處理后向主機A回送ARP響應報文,其中MAC幀首部的目的地址為主機A的MAC地址,也就是單播地址。當其他主機收到該報文后查看MAC目的地址并不是本機的MAC地址后會將該報文進行丟棄。當主機A收到該ARP響應報文后對其進行解包,查看op字段,若op字段為2即該報文為ARP響應報文,再查看發送端以太網地址字段獲取主機E的MAC地址。
? ? ? ? ? ? ?除此之外,局域網內的設備實際還會維護一張ARP緩存表,用于映射IP地址和MAC地址的關系,每次封裝MAC幀時首先會進行查表,若表中不存在目標條目的話才會進行ARP協議請求。
(四)RARP協議
? ? ? ? RARP協議與ARP協議過程類似,不過其作用為MAC地址映射IP地址,也就是知道目的主機的MAC地址,但不知道其IP地址,因此需要通過RARP協議來獲取目的主機的IP地址。
四、相關的技術與協議
(一)DNS協議
? ? ? ? 當我們通過網絡訪問服務器時,我們輸入的往往是域名,例如我們訪問百度時只需要搜索百度的域名而不是其IP地址,這是因為IP對人的記憶及使用不友好,域名網址就比較直觀了,而由域名到IP地址的映射實際是由DNS來完成的。
? ? ? ? DNS域名系統是互聯網的核心基礎設施之一,承擔著將人類可讀的域名轉換為機器可識別的IP地址的關鍵任務。
百度的域名:www.baidu.com
com: 一級域名. 表示這是一個企業域名. 同級的還有 "net"(網絡提供商), "org"(非盈利組織) 等。
baidu: 二級域名, 公司名。
www: 只是一種習慣用法. 之前人們在使用域名時, 往往命名成類似于ftp.xxx.xxx/www.xxx.xxx這樣的格式, 來表示主機支持的協議。在瀏覽器輸入域名時可以省略。
? ? ? ? 域名服務器一共有三類,根服務器、權威服務器和遞歸服務器。
根服務器:全球共13組。存儲頂級域服務器地址;
權威服務器:管理特定域名的解析記錄;
遞歸服務器:接收用戶查詢并完成全鏈路解析。
? ? ? ? 下面簡單介紹下DNS解析的一般流程:
- 當用戶訪問www.baidu.com時,先檢查本地緩存(瀏覽器/操作系統緩存),命中則直接返回IP;
- 未命中則向遞歸服務器發送請求,遞歸服務器依次查詢根服務器、.com服務器、baidu.com權威服務器,最終獲取IP并返回;
- 遞歸服務器緩存結果,其生存時間決定緩存有效期。
????????目前計算機上仍然保留了hosts文件,在域名解析的過程中仍然會優先查找hosts文件的內容。
(二)ICMP協議
? ? ? ? IP協議并不是可靠的協議,如果在傳輸過程中丟包了,IP協議是無法得知是否出現了丟包。因此引入了ICMP協議。
????????ICMP互聯網控制報文協議,TCP/IP協議族中的核心網絡層協議,主要用于在IP主機和路由器之間傳遞控制消息,輔助網絡通信的可靠性和診斷。
? ? ? ? ICMP協議提供了以下功能:
差錯報文:
- 目標不可達;
- 超時報文:TTL耗盡或分片重組超時;
- 重定向:通知發送端更有路由路徑。
查詢報文:
- Echo請求/應答:用于Ping等工具;
- 時間戳請求或應答:同步網絡設備時間。
? ? ? ? ICMP協議是基于IP協議的,但是它并不是傳輸層的功能,因此將其歸于網絡層協議,ICMP協議只能搭配IPv4協議使用,若是IPv6則需要ICMPv6.
? ? ? ? PING命令實際就是基ICMP協議實現的。
? ? ? ? Ping命令通過發送ICMP Echo請求并等待Echo應答,測試兩臺主機的連通性。
1、此處 ping 的是域名, 而不是url! 一個域名可以通過DNS解析成IP地址;
2、ping命令不光能驗證網絡的連通性, 同時也會統計響應時間和TTL(IP包中的Time To Live, 生存周期);
3、ping命令會先發送一個 ICMP Echo Request給對端;
4、對端接收到之后, 會返回一個ICMP Echo Reply;
ping命令是不關注端口的,因為ping命令是基于ICMP, 是在網絡層;而端口號, 是傳輸層的內容。在ICMP中根本就不關注端口號這樣的信息。
(三)代理服務器
????????
????????正向代理:正向代理是客戶端與目標服務器之間的中介,?代理對象是客戶端。客戶端通過代理服務器間接訪問目標服務器,隱藏自身真實信息。
????????反向代理:客反向代理是服務器端的中介,?代理對象是服務器。客戶端直接訪問反向代理,由代理將請求分發到后端服務器。
? ? ? ? 采用反向代理可以實現負載均衡策略:客戶端可能會發送大量的數據,反向代理服務器需要合理的將數據分配給服務器集群。
????????作為反向代理的服務器,需要配置較高,充當軟件服務的可以是Nginx(Web服務器,不做業務處理,只做轉發處理),當反向代理服務器中的服務器集群將請求處理完,可以通過代理服務器將結果發回給客戶端,也可以直接發回給客戶端。
????????NAT和代理服務器的區別:
1、從應用層面上講, NAT設備是網絡基礎設備之一, 解決的是IP不足的問題。代理服務器則是更貼近具體應用, 比 如通過代理服務器進行翻墻;
2、從底層實現上講, NAT是工作在網絡層, 直接對IP地址進行替換,代理服務器往往工作在應用層;
3、從使用范圍上講, NAT一般在局域網的出口部署, 代理服務器可以在局域網做, 也可以在廣域網做, 也可以跨網。
4、從部署位置上看, NAT一般集成在防火墻, 路由器等硬件設備上, 代理服務器則是一個軟件程序, 需要部署在服務器上。