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