網(wǎng)絡(luò)基礎(chǔ)
前言
tracert
tracert
簡(jiǎn)單網(wǎng)絡(luò)診斷工具,探測(cè)數(shù)據(jù)包從源地址到目的地址經(jīng)過的路由器IP地址
Tracert 命令用 IP 生存時(shí)間 (TTL) 字段和 ICMP 錯(cuò)誤消息來確定從一個(gè)主機(jī)到網(wǎng)絡(luò)上其他主機(jī)的路由。
實(shí)現(xiàn)原理
1、tracert發(fā)出TTL值為1的ICMP數(shù)據(jù)包(40個(gè)字節(jié)、源地址、目標(biāo)地址和發(fā)出時(shí)間標(biāo)簽,一般發(fā)3個(gè))
2、當(dāng)?shù)竭_(dá)路徑上第一個(gè)路由器時(shí),路由器會(huì)將,TTL值減1
3、此時(shí)TTL值為0,該路由器將此數(shù)據(jù)包丟棄,向源地址返回一個(gè)ICMP超時(shí)通知(數(shù)據(jù)包的源地址、路由器的IP地址)
4、當(dāng)tracert收到該數(shù)據(jù)包,獲得了這個(gè)路徑上的第一個(gè)路由器的地址
5、tracert再發(fā)送另一個(gè)TTL為2的數(shù)據(jù)包
6、第一個(gè)路由器會(huì)將此數(shù)據(jù)包轉(zhuǎn)發(fā)給第二個(gè)路由器
7、當(dāng)TTL=0,第二個(gè)路由器返回一個(gè)超時(shí)通知,tracert得到第二個(gè)路由器地址
Tracert每次發(fā)出數(shù)據(jù)報(bào)時(shí)便會(huì)將TTL加1,發(fā)現(xiàn)下一個(gè)路由器
這個(gè)動(dòng)作一直重復(fù),直到到達(dá)目的地或者確定目標(biāo)主機(jī)不可到達(dá)為止
到達(dá)目的IP后,目標(biāo)主機(jī)并不返回超時(shí)報(bào)文
Tracert發(fā)送數(shù)據(jù)報(bào)時(shí),會(huì)選擇一個(gè)一般應(yīng)用程序不會(huì)使用的號(hào)碼來做端口(3000以上)
當(dāng)?shù)竭_(dá)目的地后,目標(biāo)主機(jī)返回一個(gè)ICMP port unreachable(端口不可達(dá))的消息
當(dāng)tracert收到這個(gè)消息后,就知道目的地到達(dá)了
Tracert會(huì)提取ICMP的超時(shí)回應(yīng)數(shù)據(jù)報(bào)中的IP地址并作主機(jī)名解析 (用-d參數(shù)表示不解析主機(jī)名,解析主機(jī)名會(huì)耽誤一些時(shí)間),
然后將所經(jīng)過的路由器的主機(jī)名及IP地址、數(shù)據(jù)報(bào)每次往返花費(fèi)的時(shí)間顯示出來。 Tracert有一個(gè)固定的等待響應(yīng)時(shí)間,如果這個(gè)時(shí)間過了 tracert就會(huì)輸出“*”來表示某個(gè)設(shè)備沒有在規(guī)定的時(shí)間內(nèi)作出響應(yīng),然后tracert會(huì)將TTL值加1,繼續(xù)進(jìn)行檢測(cè)。
ICMP差錯(cuò)報(bào)文
1、終點(diǎn)不可達(dá)
2、端口不可達(dá)
3、源點(diǎn)抑制
給IP提供一種流量監(jiān)控的機(jī)制
ICMP源點(diǎn)抑制機(jī)制并不能控制流量大小,但能根據(jù)流量使用情況,給源主機(jī)提供一些建議
作用:
通知數(shù)據(jù)報(bào)在擁塞時(shí)被丟棄了
還會(huì)警告源主機(jī)流量出現(xiàn)了擁塞的情況,然后源主機(jī)然后源主機(jī)根據(jù)反饋的ICMP源點(diǎn)一直報(bào)文信息做出處理
4、ICMP超時(shí)報(bào)文
-
當(dāng)路由器接收到的數(shù)據(jù)報(bào)的TTL生命周期字段值為0時(shí),路由器會(huì)把該數(shù)據(jù)報(bào)丟掉,并向源主機(jī)發(fā)回一個(gè)ICMP超時(shí)報(bào)文 -
當(dāng)目標(biāo)主機(jī)在規(guī)定時(shí)間內(nèi)沒有收到所有的數(shù)據(jù)分片時(shí),會(huì)把已收到的所有數(shù)據(jù)分片丟棄,向源主機(jī)發(fā)回一個(gè)ICMP超時(shí)報(bào)文
什么時(shí)候會(huì)發(fā)送ICMP超時(shí)報(bào)文呢?
比如:當(dāng)路由器R4收到數(shù)據(jù)報(bào)文TTL減1后值為0的話,那么路由器R4會(huì)丟棄該數(shù)據(jù)報(bào)文,然后向主機(jī)A發(fā)送一個(gè)ICMP超時(shí)報(bào)文。如圖所示:
當(dāng)主機(jī)A給主機(jī)B發(fā)送一個(gè)數(shù)據(jù)報(bào)文時(shí),該數(shù)據(jù)報(bào)文在網(wǎng)絡(luò)中會(huì)有一個(gè)TTL生存時(shí)間字段,就是數(shù)據(jù)報(bào)文每經(jīng)過一臺(tái)路由器,TTL字段值就會(huì)減1,當(dāng)路由器收到數(shù)據(jù)報(bào)文后TTL字段值減1后為0的話,那么該路由器就會(huì)把數(shù)據(jù)報(bào)丟棄并向主機(jī)A發(fā)回一個(gè)ICMP超時(shí)報(bào)文,這種機(jī)制有效的防止了路由環(huán)路,也就是解決了數(shù)據(jù)報(bào)在路由器之間一直轉(zhuǎn)圈的問題。
在實(shí)際情況中會(huì)出現(xiàn)TTL=55 TTL=118 因?yàn)樯芷诘某跏贾担?55、128、64對(duì)于不同系統(tǒng)有不同的TTL初始值 實(shí)際TTL=初始值減去經(jīng)過的路由器
使用方法1
1、打開命令行 2、輸入tracert 后面加域名
DNS自動(dòng)將域名轉(zhuǎn)換為IP地址,查出途徑的路由器信息
帶*號(hào)的信息表示該次ICMP包返回時(shí)間超時(shí)
從左到右五條信息
TTL “生存時(shí)間”(每途徑一個(gè)路由器節(jié)點(diǎn)自增1)
三次發(fā)送的ICMP包返回時(shí)間
途經(jīng)路由器的IP地址
使用方法2
tracert URL -h 5
在tracert命令與URL(或IP地址)之間輸入-h 5
只在追蹤5個(gè)路由器
參考資料:
https://cn./blog/
https://blog.csdn.net/qq_35733751/article/details/80053091
|