上海微網(wǎng)站公司實時熱搜
文章目錄
- TCP/IP協(xié)議族
- ARP
- DNS
- 標(biāo)志字段:協(xié)商具體的通信方式和反饋通信狀態(tài)
- DNS查詢問題的格式
- 資源記錄(Resource Record, RR)格式:被用于應(yīng)答字段、授權(quán)字段和額外信息字段
- IP協(xié)議
- IP服務(wù)的特點
- 無狀態(tài)
- 無連接
- 不可靠
- IP頭部結(jié)構(gòu)
- IPv4頭部結(jié)構(gòu)
- IPv6頭部結(jié)構(gòu)
- IPv6擴展頭部
- IP分片
- 頭部信息
- 例子:攜帶ICMP報文的IP數(shù)據(jù)報被分片
- IP路由
- IP模塊工作流程
- 路由機制
- IP轉(zhuǎn)發(fā)
- 重定向
TCP/IP協(xié)議族
見上篇 【HarmonyOS學(xué)習(xí)日志(12)】計算機網(wǎng)絡(luò)之TCP/IP協(xié)議族(一)-CSDN博客
ARP
實現(xiàn)任意網(wǎng)絡(luò)層地址到任意物理層地址的轉(zhuǎn)換。
主機向自己所在網(wǎng)絡(luò)廣播一個ARP請求,請求中包含目標(biāo)機器網(wǎng)絡(luò)地址,這個網(wǎng)絡(luò)上的其他所有機器都會收到這個請求,但只有被請求的目標(biāo)機器會應(yīng)答一個ARP應(yīng)答,其中包含自己的物理網(wǎng)址。
在該流程中,硬件類型定義物理地址類型,協(xié)議類型要表示要映射的協(xié)議的地址的類型,兩個長度為硬件地址長度字段和協(xié)議地址長度字段。
操作則有四種:ARP的請求、ARP的應(yīng)答,RARP請求和RARP的應(yīng)答,分別對應(yīng)的值為1234。
發(fā)送端填充除了目的端的以太網(wǎng)地址外的其他三個字段構(gòu)建ARP請求并發(fā)送,而接收端發(fā)現(xiàn)該請求目的端的IP地址就是自己,所以就把自己的以太網(wǎng)地址填進去,然后交換這個目的端地址和兩個發(fā)送端的地址,構(gòu)建了ARP的應(yīng)答然后返回,并且把操作的這個字段設(shè)置為2,ARP應(yīng)答。
ARP維護者一個高速的緩存,包含著經(jīng)常訪問和最近訪問的機器的IP地址到物理地址的映射。
DNS
域名服務(wù),將機器域名轉(zhuǎn)換成IP地址
DNS是一套分布式的域名服務(wù)系統(tǒng)。每個DNS服務(wù)器上存在大量的機器域名和IP地址的映射,并且是動態(tài)更新的
16位問題個數(shù),16位應(yīng)答資源記錄個數(shù),16位授權(quán)資源記錄數(shù)目,16位額外資源記錄數(shù)目這四個部分表示資源的記錄數(shù)目。
標(biāo)志字段:協(xié)商具體的通信方式和反饋通信狀態(tài)
- QR:查詢/應(yīng)答標(biāo)志。查詢報文(0),應(yīng)答報文(1)
- Opcode:定義查詢和應(yīng)答的類型。標(biāo)準查詢(0),反向查詢(1),請求服務(wù)器狀態(tài)(2)
- AA:授權(quán)應(yīng)答標(biāo)志,僅由應(yīng)答報文使用。授權(quán)服務(wù)器(1)
- TC:截斷標(biāo)志,僅當(dāng)DNS報文使用UDP服務(wù)時使用
- RD:遞歸查詢標(biāo)志。迭代查詢(0),遞歸查詢(1)
- RA:允許遞歸標(biāo)志,僅由應(yīng)答報文使用。DNS服務(wù)器支持遞歸查詢(1)
- Zero:未用,置0
- Rcode:應(yīng)答狀態(tài)。無錯誤(0),域名不存在(3)
DNS查詢問題的格式
32位的查詢名包含16位的查詢類型和16位的查詢類
-
查詢名:以一定格式封裝了要查詢的主機域名。
-
查詢類型:表示如何執(zhí)行查詢操作。
- A(1):獲取目標(biāo)主機的IP地址
- CNAME(5):獲得目標(biāo)主機的別名。
- PTR(12):反向查詢。
-
查詢類:表示獲取因特網(wǎng)地址(IP地址)
資源記錄(Resource Record, RR)格式:被用于應(yīng)答字段、授權(quán)字段和額外信息字段
- 32位域名:該記錄中與資源對應(yīng)的名字。
- 16位類型:含義與DNS查詢問題中對應(yīng)字段相同。
- ·16位類:含義與DNS查詢問題中對應(yīng)字段相同。
- 32位生存時間:該查詢記錄結(jié)果可被本地客戶端程序緩存多長時間。
IP協(xié)議
IP服務(wù)的特點
IP協(xié)議是TCP/IP協(xié)議族的動力,它為上層協(xié)議提供無狀態(tài)、無連接、不可靠的服務(wù)。
無狀態(tài)
IP通信雙方不同步傳輸數(shù)據(jù)的狀態(tài)信息,因此所有IP數(shù)據(jù)報的發(fā)送、傳輸和接受都是相互獨立、沒有上下文關(guān)系的。
這種服務(wù)最大的缺點就是無法處理亂序和重復(fù)的IP數(shù)據(jù)報,比如發(fā)送端發(fā)送出的第N個IP數(shù)據(jù)報可能比第N+1個IP數(shù)據(jù)報后到達這個接收端,在這兩種情況下IP模塊就無法檢測到亂序和重重復(fù),因為沒有任何的上下文關(guān)系。接收端的IP數(shù)據(jù)模塊只要接收到了完整的數(shù)據(jù)報就會將其數(shù)據(jù)部分交給上層協(xié)議。
上層協(xié)議看來是亂序的、重復(fù)的。面向連接的協(xié)議,比如TCP協(xié)議就能夠自己處理亂序、重復(fù)的報文段。
無狀態(tài)的服務(wù)優(yōu)點也十分明顯:簡單、高效。
我們無需為保證通信的狀態(tài)而分配一些內(nèi)核資源,也無需每次傳輸數(shù)據(jù)的時候攜帶一些狀態(tài)的信息。
無連接
IP通信雙方都不長久地維持對方的任何信息,每次發(fā)送數(shù)據(jù)時都必須指定對方IP地址。
不可靠
IP協(xié)議不能保證IP數(shù)據(jù)報準確地到達接收端,只是承諾盡最大努力(best effort)
IP頭部結(jié)構(gòu)
IP頭部信息出現(xiàn)在每個IP數(shù)據(jù)報中,用于指定IP通信的源端IP地址、目的端IP地址,指導(dǎo)IP分片和重組,以及指定部分通信行為。
IPv4頭部結(jié)構(gòu)
4位的版本號指定IP協(xié)議的版本(IPv4中的4)
4位頭部長度是標(biāo)識IP頭部有多少個32位字也就是四字節(jié)
8位服務(wù)類型(TOS)包括一個3位的優(yōu)先權(quán)字段,4位的TOS字段和一個保留的字段,保留字段必須要置0。4位的TOS字段分別表示最小延遲、最大吞吐量、最高可靠性和最小費用。
16位總長度是整個IP數(shù)據(jù)報的長度,因此IP數(shù)據(jù)報最大的長度單位是65535字節(jié)。但由于MTU的限制,數(shù)據(jù)報都會被分片傳輸。接下來的3個字段來標(biāo)識如何進行分片。
- 16位的標(biāo)識字段是標(biāo)識主機發(fā)送的每個數(shù)據(jù)報,初始值由系統(tǒng)隨機生成,每發(fā)送一個數(shù)據(jù)報,值就+1
- 3位的標(biāo)志字段的第一位保留,第二位DF表示禁止分片,如果設(shè)置了這個位的話IP的這個模塊就不會對數(shù)據(jù)報進行分片,在這種情況下如果IP數(shù)據(jù)報長度超過了MTU的話將會丟棄數(shù)據(jù)報并返回一個差錯報文。
- 13位片偏移是分片相對原始IP數(shù)據(jù)報開始處的偏移,實際的偏移值是該值左移三位也就是乘8之后得到的
8位的生存時間(TTL)是指數(shù)據(jù)包到達目的地址前允許經(jīng)過的路由器的跳數(shù)。常見的數(shù)值是64,沒經(jīng)過一個路由就會被路由器減1,到0就會丟棄并返回一個差錯報文,這樣可以防止陷入路由循環(huán).
8位協(xié)議用來區(qū)分上層的協(xié)議,其中ICMP是1,TCP是6,UDP是17。
16位頭部校驗和由發(fā)送端填充,接收端對其使用CRC的算法以檢驗頭部是否損壞(僅檢驗頭部)
32位的源端IP地址和目的端IP地址用來標(biāo)識發(fā)送端和接收端。
選項字段是可變長的可選信息,最多包含4字節(jié)的可選選項包括:
- 記錄路由(record route):告訴數(shù)據(jù)報途徑的所有路由器都將自己的IP地址填入頭部的選項部分,這樣就可以跟蹤傳輸路徑。
- 時間戳(timestamp):告訴每個路由器都將數(shù)據(jù)報被轉(zhuǎn)發(fā)的時間填入選項部分,以測量傳輸時間。
- 松散源路由選擇(loose source routing):制定一個路由器的IP地址列表,數(shù)據(jù)報發(fā)送過程中必須嚴格經(jīng)過所有的路由器。
- 嚴格源路由選擇(strict source routing):與松散源路由選擇相似,不過是數(shù)據(jù)報只能經(jīng)過指定的路由器
IPv6頭部結(jié)構(gòu)
4位的版本號(version)指定了協(xié)議的版本,對于IPv6來說,其值是6。
8位的通訊類型(traffic class)指示數(shù)據(jù)流通訊類型或優(yōu)先級
20位的流標(biāo)簽(flow label)是IPv6新增加的字段,對于某些對連接服務(wù)質(zhì)量有特殊要求的通信,比如音頻和視頻的實時傳輸數(shù)據(jù)。
16位的凈荷長度(payload length)是指IPv6擴展頭部和應(yīng)用程序之間的和,不包括固定的頭部長度。
8位的下一位包頭(next header):指出緊跟這個固定頭部的頭部類型,比如擴展頭部或者某個上層協(xié)議頭部。
8位的跳數(shù)限制(hop limit):與TTL相同。
IPv4地址一般使用點分十進制來表示的,而這個IPv6的這個地址是用16進制來表示的
IPv6擴展頭部
可變長的擴展頭部使得IPv6能支持更多的選項,并且很便于將來的擴展需要。它的長度可以是0,表示數(shù)據(jù)報沒有使用任何擴展頭部。一個數(shù)據(jù)報可以包含多個擴展頭部,每個擴展頭部的類型由前一個頭部(固定頭部或擴展頭部)中的下一個字段指定。
IP分片
當(dāng)IP數(shù)據(jù)報的長度超過幀的MTU時,它將被分片傳輸。
頭部信息
頭部中有三個字段提供了足夠多的信息:數(shù)據(jù)報的標(biāo)識、標(biāo)志和片偏移。除了最后一個分片之外,其余分片都要置MF標(biāo)志。此外每個分片的IP的頭部的總長度字段都將設(shè)置為該分片的長度
例子:攜帶ICMP報文的IP數(shù)據(jù)報被分片
在這個例子里面長度是1501字節(jié)的IP數(shù)據(jù)報被拆分成了兩個IP分片,其中一個IP分片的長度為1500字節(jié),第二個IP分片的長度為21字節(jié)。那么每個IP分片都包含自己的IP的頭部20字節(jié),且第一個IP分片的IP頭部被設(shè)置了MF標(biāo)志,而第二個則沒有設(shè)置該標(biāo)志,因為它是最后一個分片。
原始的IP數(shù)據(jù)報中,IP頭部的內(nèi)容被完整的復(fù)制到了第一個IP的分片中,而第二個IP分片不包含ICMP的頭部信息,因為IP模塊重組該ICMP的報文的時候只需要一份信息就足夠。
ICMP的報文的頭部長度取決于報文的類型,變化范圍非常的大
IP路由
IP路由決定發(fā)送數(shù)據(jù)報到目標(biāo)機器的路徑
IP模塊工作流程
當(dāng)IP模塊接收到了來自數(shù)據(jù)鏈路層的IP數(shù)據(jù)報的時候,它首先對該數(shù)據(jù)報的頭部做CRC的校驗,確認無誤后再分析具體信息。如果IP數(shù)據(jù)報頭部設(shè)置了源站選路選項,則調(diào)用數(shù)據(jù)報轉(zhuǎn)發(fā)子模塊來處理數(shù)據(jù)報。如果IP數(shù)據(jù)報的頭部中的目標(biāo)IP就是本機的某個IP地址或者是廣播地址,則該數(shù)據(jù)報就是發(fā)送給主機的。這個IP的模塊就根據(jù)數(shù)據(jù)報頭部中的協(xié)議字段來確定將派發(fā)給哪一個上層的應(yīng)用(分用)。
如果IP模塊發(fā)現(xiàn)這個數(shù)據(jù)報不是發(fā)送給本機的,也是調(diào)用轉(zhuǎn)發(fā)子模塊來轉(zhuǎn)發(fā)出去。轉(zhuǎn)發(fā)子模塊首先檢測子系統(tǒng)是否允許轉(zhuǎn)發(fā),不允許就丟棄,如果允許就執(zhí)行一些操作,它交給IP數(shù)據(jù)報輸出子模塊。
IP模塊實現(xiàn)了數(shù)據(jù)報路由的核心的數(shù)據(jù)結(jié)構(gòu)是路由表,那么這個表按照數(shù)據(jù)報的目標(biāo)的IP地址進行分類,同一個類型的IP數(shù)據(jù)報將被發(fā)往相同的下一跳路由器。
IP的輸出隊列存放的是所有等待發(fā)送的數(shù)據(jù)報,除了需要轉(zhuǎn)發(fā)的數(shù)據(jù)報之外還包括封裝了本機的上層數(shù)據(jù)的IP數(shù)據(jù)報。
路由機制
那么路由表是如何按照IP地址分類的?給定數(shù)據(jù)報的目標(biāo)IP地址,它將匹配路由表中的哪一項?
路由機制:
- 查找路由表中和數(shù)據(jù)報的目標(biāo)IP地址完全匹配的主機IP地址。如果找到,就使用該路由項,沒找到則轉(zhuǎn)2。
- 查找路由表中和數(shù)據(jù)報的目標(biāo)IP地址具有相同網(wǎng)絡(luò)ID的網(wǎng)絡(luò)IP地址。如果找到,就使用該路由項,沒找到則轉(zhuǎn)3。
- 選擇默認路由項,這通常意味著數(shù)據(jù)報的下一跳是網(wǎng)關(guān)。
IP轉(zhuǎn)發(fā)
將不是發(fā)送給本機的IP數(shù)據(jù)報交由數(shù)據(jù)包轉(zhuǎn)發(fā)子模塊進行轉(zhuǎn)發(fā)。
對于允許IP數(shù)據(jù)報轉(zhuǎn)發(fā)的文件系統(tǒng)(主機/路由器),數(shù)據(jù)報轉(zhuǎn)發(fā)子模塊將對期望轉(zhuǎn)發(fā)的數(shù)據(jù)報執(zhí)行以下操作:
- 檢查數(shù)據(jù)報頭部的TTL值。如果TTL為0,則丟棄該數(shù)據(jù)報。
- 查看數(shù)據(jù)報頭部的嚴格源路由選擇選項。如果該選項被設(shè)置,則檢測數(shù)據(jù)報的目標(biāo)IP地址是否是本機的某個IP地址。如果不是則返回一個ICMP源站選路失敗報文。
- 給源端發(fā)送一個ICMP重定向報文,以告訴它一個更合適的下一跳路由器(如果有必要)
- 將TTL值減1
- 處理IP頭部選項
- 執(zhí)行IP分片操作(如果有必要)
重定向
ICMP重定向報文
ICMP重定向報文也能用于更新路由表,因此簡要討論ICMP重定向報文。
ICMP重定向報文的數(shù)據(jù)部分含義都十分明確,它給接收方提供了如下兩個信息:
- 引起重定向的IP數(shù)據(jù)報的源端IP地址。
- 應(yīng)該使用路由器的IP地址
接收主機根據(jù)這兩個信息就可以斷定引起重定向的IP數(shù)據(jù)報應(yīng)該是由哪一個路由器來進行轉(zhuǎn)發(fā),并因此來更新路由表,通常是更新路由表的緩沖而不是直接更改。