文章目錄
一、網絡層
1.IP協議
2.IP協議頭格式
3.網段劃分
4.特殊ip地址
5.IP地址的數量限制
6.私有ip和公網IP
7.路由
二、數據鏈路層
1.以太網
2.以太網幀格式
3.MAC地址
4.對比理解MAC地址和IP地址
5.MTU
6.ARP協議
ARP協議的工作流程
ARP數據報的格式
7.DNS
8.ICMP協議
9.NAT技術
NAPT
NAT和代理服務器
一、網絡層
在復雜的網絡環境中確定一個合適的路徑
1.IP協議
主機配有ip地址,但是不進行路由控制的設備;路由器配有ip地址,又能進行路由控制;
節點:路由器和主機的統稱
2.IP協議頭格式
4位版本 | 4位首部長度 | 8位服務類型(TOS) | 16位總長度(字節數) | |
16位標識 | 3位標志 | 13位片偏移 | ||
8位生存時間(TTL) | 8位協議 | 16位首部檢驗和 | ||
32位源ip地址 | ||||
32位目的ip地址 | ||||
選項(如果有) | ||||
數據 |
4位版本號:指定的IP協議版本,對于IPV4來說,就是4
4位頭部長度:IP頭部的長度是多少個32bit,也就是lenght*4的字節數,4bit表示最大的數字是15,因此ip頭部最大長度是60字節
8位服務類型:3位優先權字段(已經棄用),4位tos字段,和1位保留字段(必須置為0)4位tos分別表示:最小延時,最大吞吐量,最高可靠性,最小成本,這四者相互沖突,只能選擇一個。對于ssh/telnet這樣的應用程序,最小延時比較重要;對于ftp這樣的程序,最大吞吐量比較重要
16位總長度:ip數據包整體占多少字節
16位標識:唯一標識主機發送的報文,如果ip報文在數據鏈路層被分片了,那么每一片里面的這個id都是相同的
3位標志字段:第一位保留(保留的意思是暫時不用,將來可能會用到),第二位置為1表示禁止分片,這個給時候如果報文長度如果超過MTU,ip模塊就會丟棄報文,第三位置表示更多分片,如果分片的話,最后一個分片置為1,其他是0,類似一個結束標記
13位分片偏移:是分片相當于原始IP報文開始處的偏移,其實就是表示當前分片在原報文中處于哪個位置,實際偏移的字節數是這個值*8得到的,因此,除了最后一個報文,其他報文的長度必須是8的整數倍(否則報文就不連續了)
8位生存時間(Time to live):數據報到達目的地最大的報文跳數,一般是64,每次經過一個路由
8位生存時間(TTL):數據報到達目的地最大的報文跳數,一般是64,每次經過一個路由,ttl-1,一直-=0還沒到達,那么就丟棄了,這個字段主要是用來防止出現路由循環。
8位協議:表示上層協議的類型
16位頭部校驗和:使用crc校驗,來鑒別頭部是否損壞。
32位源地址和32位目標地址:表示 c和 s
3.網段劃分
- ip分為兩個部分,網絡號和主機號
- 網絡號:保證相互連接的兩個網段具有不同的標識
- 主機號:同一個網段內,主機之間具有相同的網絡號,但是必須有不同的主機號。
- 不同的子網就是把網絡號相同的主機放在一起
- 如果在子網中新增一臺主機,則這臺主機的網絡號和這個子網的網絡號一致,但是主機號必須不能和子網中的其他號重復。
- 那么,如果手動管理子網內的IP,很費事。有一種技術為DHCP,能夠自動給子網內新增主機節點分配IP地址,避免手動管理IP的不便。一般路由器都帶有DHCP功能,因此路由器也可以看成一個DHCP服務器。
- 曾經有一種方案將IP地址分為A B C D E五類,A類 0.0.0.0到127.255.255.255? B類 128.0.0.0到191.255.255.255? C類 192.0.0.0到223.255.255.255 D類 224.0.0.0到239.255.255.255 E類 240.0.0.0到247.255.255.255 大多數組織都申請B類,導致A類浪費了很多地址,針對這種情況,提出了CIDR方案
- 引入一個額外的子網掩碼來區分網絡號和主機號
- 子網掩碼是一個32位整數,通常用一串0結尾
- 將IP地址和子網掩碼進行按位與操作,結果就是網絡號
- 網絡號和主機號的劃分與這個IP地址是A類、B類還是C類無關。
4.特殊ip地址
- 將ip地址中的主機地址全部設置為0,就成了網絡號,代表這個局域網
- 將ip地址中的主機地址全部設為1,就成了廣播地址,用于給同一個鏈路中相互連接的所有主機發送數據包
- 127.*的IP地址用于本機環回測試,通常是127.0.0.1
5.IP地址的數量限制
IPV4是一個4字節的32位整數,那么2^32大概是43億左右,tcp/ip規定每個主機都需要有一個ip地址。但是這樣是不夠的。實際上,除了一些特殊的IP地址,另外的IP地址并非是按照主機來配置的,而是每個網卡都需要配置一個或者多個IP地址。
CIRD在一定程度上緩解了IP地址不夠用的問題,這個時候還有三種方式來解決
- 動態分配IP地址:只給接入網絡的設備分配IP地址,同一個MAC地址的設備,每次接入互聯網得到的IP地址不一定是相同的
- NAT技術(后續詳細講解)
- IPV6用16字節128位來表示一個IP地址
6.私有ip和公網IP
如果一個組織內部組件局域網,IP地址只用于局域網內的通信,而不直接連接到INTERNET上,使用任意的IP地址都可以,但是RFC1918規定了用于組件局域網的私有IP地址
- 10.*,前8位是網絡號,共16777216個地址
- 172.16.到172.31.,前12位是網絡號,共1048576個地址
- 192.168.*,前16位是網絡號,共65536個地址
- 包括在這個范圍的,都稱為私有IP,其余的稱為公網IP
- 一個路由器可以配置兩個IP地址,一個是wan口ip,一個是lan口ip(子網)
- 路由器的lan口連接的主機,都從屬于當前這個路由器的子網中
- 不同的路由器,子網IP其實都是一樣的,子網內的主機ip地址不能重復,但是子網之間的ip地址就可以復用了
- 每一個家用的路由器,其實又作為運營商路由器的子網中的一個節點,這樣的運營商路由器可能有很多級,最外層的運營商路由器,wan口ip就是一個公網ip
- 子網內的主機和外網通信時,服務器將ip首部的地址進行替換,替換稱wan口ip,這樣逐級替換,最終數據包中的IP地址稱為一個公網ip,這種技術位NAT技術
- 如果希望我們自己實現的服務器程序,能夠在公網上被訪問到,就需要把程序部署在一臺具有外網IP的服務器上。
7.路由
路由就是在復雜的網絡結構中,找出一條通往終點的路線。
就比如唐僧要去西天取經,一路上到一個節點,繼續問下一個節點怎么走。路由的過程就是這樣一跳一跳的。所謂的“一跳”就是數據鏈路層的一個區間,具體在以太網中指的源MAC地址到目的MAC地址之間的幀傳輸區間。
IP數據包的傳輸過程也和問路一樣
當ip數據包,到達路由器時,路由器會先查看目的IP
路由器決定著這個數據包是能直接發送給目標主機,還是需要發送給下一個路由器。
以此反復,直到到達目標ip地址。
那么如何判定這個數據包應該發送到哪里--->這個就依靠每個節點內部維護一個路由表
路由表可以使用route命令查看
如果目的ip命中了路由表,就直接轉發即可。
路由表中的最后一行,主要由下一跳地址和發送接口兩部分組成,當目的地址與路由表中其他行都不匹配的時候,就按缺省路由條目規定的接口發送到下一跳地址。
假設某主機上的網絡接口配置和路由表如下:
這臺主機有兩個網絡接口,一個連接到192.168.10.0/24這個網絡,另一個連接到192.168.56.0/24這個網絡
路由表的destination是目的網絡地址,GENMASK是子網掩碼,gateway是下一跳地址,iface是發送連接口,flags中的u表示此條目有效,g表示此條目的下一跳地址是某個路由器地址,沒有g標識的標識目的網絡地址是與本機接口直接相連的網絡,不必經過路由器轉發。
二、數據鏈路層
用于兩個設備(同一個數據鏈路節點)之間進行傳遞。
1.以太網
以太網不是一種具體的網絡,而是一種技術標準。既包含了數據鏈路層,也包含了一些物理層的。例如:規定了網絡拓撲結構,訪問控制方式,傳輸速率等。例如以太網中的網線必須通過雙絞線,傳輸速率有10M,100M,1000M等。以太網是當前最廣泛的局域網技術,還有令牌環網,無線lan等。
2.以太網幀格式
目的地址 | 源地址 | 類型 | 數據 | crc |
源地址和目的地址是指網卡的硬件地址(也叫MAC地址),長度是48位,在網卡出廠時固化。
幀協議類型資源有3中:ip,arp,rarp
幀末尾是CRC校驗
3.MAC地址
MAC地址是用來識別數據鏈路層中相連的節點
長度為48位,即6個字節,一般用16進制數字加上冒號的形式標識(例如:08:00:27:03:fb:19)
在網卡出廠時就確定了,不能被修改,mac地址通常是唯一的(虛擬機中的mac地址不是真實的mac地址,可能會沖突,也有些網卡支持用戶配置mac地址)
4.對比理解MAC地址和IP地址
IP地址是路途總體的起點和終點
MAC地址描述的是路途上每一個區間的起點和終點
5.MTU
MTU相當于發快遞對包裹尺寸的限制,這個限制是不同的數據鏈路層對應的物理層產生的限制。
- 以太網幀中的數據長度規定最小46字節,最大1500字節,ARP數據包的長度不夠46字節,要在后面補充
- 最大值1500稱為以太網傳輸的最大傳輸單元MTU,不同的網絡類型有不同的MTU
- 如果一個數據包從以太網路由到撥號鏈路上,數據包長度大于撥號鏈路MTU了,則需要對數據包進行分片
- 不同數據鏈路層標準的MTU不同
6.ARP協議
ARP協議建立了主機IP地址和MAC地址的映射關系
- 在網絡通訊時,源主機的應用程序知道目的主機的IP地址和端口號,卻不知道目的主機的硬件地址
- 數據包首先是被網卡接收到,再去處理上層協議的,如果接收到的數據包的硬件地址與本機不符,則直接丟棄
- 在通信之前,必須先獲得目的主機的硬件地址
ARP協議的工作流程
①主機A的IP地址172.20.1.1,它希望與172.20.1.2進行通信
②發送ARP請求包,目標IP地址知道,但是MAC地址不知道
③主機B告訴A它的MAC地址:08:00:20:74:CE:EC
④主機B發送ARP響應包,172.20.1.2的mac地址為08:00:20:74:CE:EC
- 源主機發出arp請求,詢問IP地址是172.20.1.2的主機的硬件地址是多少.并將這個請求廣播道本地網段(以太幀首部硬件地址填FF:FF:FF:FF:FF:FF表示廣播);
- 目的主機接收道廣播的ARP請求,發現其中的ip地址與本機相符,則發送一個arp應答數據包給源主機,將自己的硬件地址填寫在應答包中
- 每臺主機都維護一個ARP緩存表,可以用arp-a命令查看。緩存表中的表象有過期時間,如果這個時間內沒有再次使用某個表項,則該表項失效,下次還要發送ARP請求來獲得目的主機的硬件地址。
ARP數據報的格式
-
注意到源MAC地址、目的MAC地址在以太網首部和ARP請求中各出現一次,對于鏈路層為以太網的情況是多余的,但是如果鏈路層是其他類型的網絡則有可能是必要的。
-
硬件類型是指鏈路層的網絡類型,1為以太網
-
協議類型是指要轉換的地址類型,0x0800為IP地址
-
硬件地址長度對于以太網地址為6字節
-
協議地址長度對于和ip地址為4字節
-
op字段為1表示ARP請求,op字段為2表示ARP應答
7.DNS
DNS是一整套從域名映射道IP的系統。tcp/ip中使用ip地址和端口號來確定網絡上一臺主機的一個程序,但是IP地址不方便記憶,所以人們發明一個稱為主機的字符串,并且使用hosts文件來描述主機和ip地址的關系。
用戶可以輸入 host -a來查看ip地址。最初通過互聯網信息中心來管理這個hosts文件的,如果一個新的計算機要接入網絡,或者某個計算機ip變更,都需要到信息中心申請變更hosts文件,其他計算機也需要定期下載更新新版本的Host文件才能正確上網。這樣就太麻煩了,產生了dns系統
dns系統
- 一個組織的系統管理機構,維護系統內的每個主機的IP和主機名的對應關系
- 如果新計算機接入網絡,將這個信息注冊到數據庫中
- 用戶輸入域名的時候,會自動查詢DNS服務器,由DNS服務器檢索數據庫,得到對應的IP地址
- 至今計算機上仍保留了hosts文件,在域名解析的過程中仍然會優先查找hosts文件的內容 cat /etc/hosts
8.ICMP協議
ICMP是一個網絡層協議 一個新搭建好的網絡 需要進行一個簡單的測試,來驗證網絡是否暢通;但是ip協議并不提供可靠傳輸,如果丟包了,IP協議并不能通知傳輸層是否丟包以及丟包的原因
ICMP正是提供這種功能的協議;ICMP主要功能包括:
- 確認IP是否成功到達目標地址
- 通知在發送過程中IP被丟棄的原因
- ICMP也是基于IP協議工作的,但是它并不是傳輸層的功能,因此它仍舊是網絡層協議
- ICMP只能搭配IPV4使用,如果是IPV6的情況下,需要用ICMPV6
ICMP主要分為兩類報文:一類是通知出錯原因 一類用于診斷查詢
PING命令:
- PING的是域名,而不是url,一個域名可以通過DNS解析成IP地址
- ping命令不光能驗證網絡的連通性,同時也會統計響應時間和ttl
- ping命令對先發送一個icmp echo request給對端
- 對端收到之后,會返回一個icmp echo reply
有的面試官會問,telnet是23端口,ssh是22端口,那么ping對應哪個端口?
ping命令是基于ICMP,是網絡層,而端口號是傳輸層的內容,在ICMP中不關注端口號這樣的信息
traceroute命令 也是就與ICMP協議實現 能夠打印出可執行程序主機一直到目標主機之前經歷多少路由器
9.NAT技術
之前討論了IPV4中,IP地址數量不足的問題,NAT技術當前解決IP地址不夠用的主要手段,是路由器的一個重要功能
- NAT能夠將私有IP對外通信時轉為全局IP,也就是一種將私有IP和全局IP相互轉化的技術方法
- 很多學校,家庭,公司內部每個終端設置私有IP,而在路由器上或者必要的服務器設置為全局ip
- 全局IP要求唯一,但是私有IP不需要,在不同的局域網中出現相同的私有IP是不影響的。
- NAT路由器將源地址從10.0.0.10替換成全局的IP 202.244.174.37
- NAT路由器收到外部的數據時,又會把目標IP從202.244.174.37替換回10.0.0.10
- 在NAT路由器內部,有一張自動生成的,用于地址轉換的表
- 當10.0.0.10第一次向163.221.120.9發送數據就會生成表中的映射關系
NAPT
那么問題來了 如果局域網內 有多個主機都訪問同一個外網服務器 那么對服務器返回的數據中 目的IP都是相同的 那么NAT路由器如何判定將這個數據包轉發給哪個局域網的主機 NAPT就來解決這個問題了 使用IP+PORT來建立這個關系
這個關系也是NAT路由器自動維護的 在TCP的情況下,建立連接時,就會生成這個表項 在斷開連接后 就會刪除這個表項
NAT具有很多技術缺陷 無法從NAT外部向NAT內部建立連接 轉換表中的生成和銷毀都需要額外開銷 通信過程中一旦NAT設備異常 即使存在設備 所有的TCP連接都會斷開
NAT和代理服務器
路由器一般都具備NAT設備的功能,通過NAT設備進行中轉,完成子網設備和其他設備的通信過程
代理服務器看起來和NAT設備有一點像,客戶端向代理服務器發起請求,代理服務器將請求轉發給真正要請求的服務器,服務器返回結果后,代理服務器又把結果回傳給客戶端
- 從應用上講,NAT設備是網絡基礎設備之一,解決的是IP不足的問題,代理服務器更貼近具體應用,比如通過代理服務器進行翻墻,加速器等等
- 從底層上講,NAT是工作在網絡層,直接對IP地址進行替換,代理服務器往往工作在應用層
- 從使用范圍上講,NAT一般在局域網的出口部署,代理服務器可以在局域網上,也可以在廣域網上,也可以跨網。
- 從部署位置上看,NAT一般集成在防火墻,路由器等硬件設備上,代理服務器則是一個軟件程序,需要部署在服務器上
代理服務器是一種應用比較廣的技術
- 翻墻:廣域網中的代理
- 負載均衡:局域網中的代理
代理服務器又分為正向代理和反向代理,反向代理一般作為一個緩存,正向代理用于請求的轉發。
花王尿不濕是一個很經典的尿不濕品牌, 產自日本. 我自己去日本買尿不濕比較不方便, 但是可以讓我在日本工作的表姐去超市買了快遞給我. 此時超市看到的買家是我表姐, 我的表姐就是 "正向代理";
后來找我表姐買尿不濕的人太多了, 我表姐覺得天天去超市太麻煩, 干脆去超市買了一大批尿不濕屯在家里, 如果有人 來找她代購, 就直接把屯在家里的貨發出去, 而不必再去超市. 此時我表姐就是 "反向代理