TCP/IP協(xié)議1

本文轉(zhuǎn)載自 https://www.cnblogs.com/fengzanfeng/articles/1339347.html

感謝作者的總結(jié)税手。

為什么會有TCP/IP協(xié)議

在世界上各地,各種各樣的電腦運行著各自不同的操作系統(tǒng)為大家服務(wù)拯辙,這些電腦在表達(dá)同一種信息的時候所使用的方法是千差萬別。就好像圣經(jīng)中上帝打亂了各地人的口音,讓他們無法合作一樣吁脱。計算機使用者意識到,計算機只是單兵作戰(zhàn)并不會發(fā)揮太大的作用彬向。只有把它們聯(lián)合起來兼贡,電腦才會發(fā)揮出它最大的潛力。于是人們就想方設(shè)法的用電線把電腦連接到了一起娃胆。

但是簡單的連到一起是遠(yuǎn)遠(yuǎn)不夠的遍希,就好像語言不同的兩個人互相見了面,完全不能交流信息里烦。因而他們需要定義一些共通的東西來進行交流凿蒜,TCP/IP就是為此而生。TCP/IP不是一個協(xié)議胁黑,而是一個協(xié)議族的統(tǒng)稱废封。里面包括了IP協(xié)議,IMCP協(xié)議丧蘸,TCP協(xié)議漂洋,以及我們更加熟悉的http、ftp触趴、pop3協(xié)議等等氮发。電腦有了這些,就好像學(xué)會了外語一樣冗懦,就可以和其他的計算機終端做自由的交流了爽冕。

TCP/IP協(xié)議分層

提到協(xié)議分層,我們很容易聯(lián)想到ISO-OSI的七層協(xié)議經(jīng)典架構(gòu)披蕉,但是TCP/IP協(xié)議族的結(jié)構(gòu)則稍有不同颈畸。如圖所示

TCP/IP協(xié)議族按照層次由上到下乌奇,層層包裝。最上面的就是應(yīng)用層了眯娱,這里面有http礁苗,ftp,等等我們熟悉的協(xié)議。而第二層則是傳輸層徙缴,著名的TCP和UDP協(xié)議就在這個層次(不要告訴我你沒用過udp玩星際)试伙。第三層是網(wǎng)絡(luò)層,IP協(xié)議就在這里于样,它負(fù)責(zé)對數(shù)據(jù)加上IP地址和其他的數(shù)據(jù)(后面會講到)以確定傳輸?shù)哪繕?biāo)疏叨。第四層是叫數(shù)據(jù)鏈路層,這個層次為待傳送的數(shù)據(jù)加入一個以太網(wǎng)協(xié)議頭穿剖,并進行CRC編碼蚤蔓,為最后的數(shù)據(jù)傳輸做準(zhǔn)備。再往下則是硬件層次了糊余,負(fù)責(zé)網(wǎng)絡(luò)的傳輸秀又,這個層次的定義包括網(wǎng)線的制式,網(wǎng)卡的定義等等(這些我們就不用關(guān)心了贬芥,我們也不做網(wǎng)卡)吐辙,所以有些書并不把這個層次放在tcp/ip協(xié)議族里面,因為它幾乎和tcp/ip協(xié)議的編寫者沒有任何的關(guān)系誓军。發(fā)送協(xié)議的主機從上自下將數(shù)據(jù)按照協(xié)議封裝袱讹,而接收數(shù)據(jù)的主機則按照協(xié)議從得到的數(shù)據(jù)包解開,最后拿到需要的數(shù)據(jù)昵时。這種結(jié)構(gòu)非常有棧的味道捷雕,所以某些文章也把tcp/ip協(xié)議族稱為tcp/ip協(xié)議棧。

一些基本的常識

在學(xué)習(xí)協(xié)議之前壹甥,我們應(yīng)該具備一些基本知識救巷。

互聯(lián)網(wǎng)地址(ip地址)

網(wǎng)絡(luò)上每一個節(jié)點都必須有一個獨立的Internet地址(也叫做IP地址)。現(xiàn)在句柠,通常使用的IP地址是一個32bit的數(shù)字浦译,也就是我們常說的IPv4標(biāo)準(zhǔn),這32bit的數(shù)字分成四組溯职,也就是常見的255.255.255.255的樣式精盅。IPv4標(biāo)準(zhǔn)上,地址被分為五類谜酒,我們常用的是B類地址叹俏。具體的分類請參考其他文檔。需要注意的是IP地址是網(wǎng)絡(luò)號+主機號的組合僻族,這非常重要粘驰。

域名系統(tǒng)

域名系統(tǒng)是一個分布的數(shù)據(jù)庫屡谐,它提供將主機名(就是網(wǎng)址啦)轉(zhuǎn)換成IP地址的服務(wù)。

RFC

RFC是什么蝌数?RFC就是tcp/ip協(xié)議的標(biāo)準(zhǔn)文檔愕掏,在這里我們可以看到RFC那長長的定義列表,現(xiàn)在它一共有4000多個協(xié)議的定義顶伞,當(dāng)然饵撑,我們所要學(xué)習(xí)的,也就是那么十幾個協(xié)議而已枝哄。

端口號(port)

注意肄梨,這個號碼是用在TCP,UDP上的一個邏輯號碼挠锥,并不是一個硬件端口,我們平時說把某某端口封掉了侨赡,也只是在IP層次把帶有這個號碼的IP包給過濾掉了而已蓖租。

應(yīng)用編程接口

現(xiàn)在常用的編程接口有socket和TLI。而前面的有時候也叫做“Berkeley socket”羊壹,可見Berkeley對于網(wǎng)絡(luò)的發(fā)展有多大的貢獻蓖宦。

TCP/IP詳解學(xué)習(xí)筆記(2)-數(shù)據(jù)鏈路層

數(shù)據(jù)鏈路層有三個目的:

· 為IP模塊發(fā)送和 接收IP數(shù)據(jù)報。

· 為ARP模塊發(fā)送ARP請求和接收ARP應(yīng)答油猫。

· 為RARP發(fā)送RARP請 求和接收RARP應(yīng)答

ip大家都聽說過稠茂。至于ARP和RARP,ARP叫做地址解析協(xié)議情妖,是用IP地址換MAC地址的一種協(xié)議睬关,而RARP則叫做逆地址解析協(xié)議,在tcp/ip協(xié)議的后面章節(jié)會介紹它們(在局域網(wǎng)里面用ARP協(xié)議可以很容易的搞癱瘓網(wǎng)絡(luò)哦)

數(shù)據(jù)鏈路層的協(xié)議還是很多的毡证,有我們最常用的以太網(wǎng)(就是平時我們用的網(wǎng)卡)協(xié)議电爹,也有不太常見的令牌環(huán),還有FDDI料睛,當(dāng)然丐箩,還有國內(nèi)現(xiàn)在相當(dāng)普及的PPP協(xié)議(就是adsl寬帶),以及一個loopback協(xié)議恤煞。

聯(lián)系linux里面的ifconfig -a命令屎勘,這個命令通常會得到如下的結(jié)果

eth0 Link encap:Ethernet HWaddr 00:01:4A:03:5B:EDinet addr:192.168.11.2 Bcast:192.168.11.255 Mask:255.255.255.0inet6 addr: fe80::201:4aff:fe03:5bed/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:2819 errors:0 dropped:0 overruns:0 frame:0TX packets:76 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:241609 (235.9 KiB) TX bytes:9596 (9.3 KiB)

lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:2713 errors:0 dropped:0 overruns:0 frame:0TX packets:2713 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:3516032 (3.3 MiB) TX bytes:3516032 (3.3 MiB)

其中,eth0就是以太網(wǎng)接口居扒,而lo則是loopback接口概漱。這也說明這個主機在網(wǎng)絡(luò)鏈路層上至少支持loopback協(xié)議和以太網(wǎng)協(xié)議。

以太網(wǎng)(Ether-net)的定是指數(shù)字設(shè)備公司( Digital Equipment Corp.)苔货、英特爾公司(Intel Corp.)和Xerox公司在1982年聯(lián)合公布的一個標(biāo)準(zhǔn)犀概,這個標(biāo)準(zhǔn)里面使用了一種稱作CSMA/CD的接入方法立哑。而IEEE802提供的標(biāo)準(zhǔn)集802.3(還有一部分定義到了802.2中)也提供了一個CSMA/CD的標(biāo)準(zhǔn)。這兩個標(biāo)準(zhǔn)稍有不同姻灶,TCP/IP協(xié)議對這種情況的處理方式如下:

· 以太網(wǎng)的IP數(shù)據(jù)報封裝在RFC894中定義铛绰,而IEEE802網(wǎng)絡(luò)的IP數(shù)據(jù)報封裝在RFC1042中定義。

· 一臺主機一定要能發(fā)送和接收RFC894定義的數(shù)據(jù)報产喉。

· 一臺主機可以接收RFC894和RFC1042的封裝格式的混合數(shù)據(jù)報捂掰。

· 一臺主機也許能夠發(fā)送RFC1042數(shù)據(jù)報。曾沈。如果主機能同時發(fā)送兩種類型的分組數(shù) 據(jù)这嚣,那么發(fā)送的分組必須是可以設(shè)置的,而且默認(rèn)條件下必須是RFC 894分組塞俱。

可見姐帚,RFC1042在TCP/IP里面處于一個配角的地位。這兩種不同的數(shù)據(jù)報格式請參考教材障涯。

ppp(點對點協(xié)議)是從SLIP的替代品罐旗。他們都提供了一種低速接入的解決方案凸椿。而每一種數(shù)據(jù)鏈路層協(xié)議牺堰,都有一個MTU(最大傳輸單元)定義,在這個定義下面掂林,如果IP數(shù)據(jù)報過大粘我,則要進行分片(fragmentation)鼓蜒,使得每片都小于MTU,注意PPP的MTU并不是一個物理定義征字,而是指一個邏輯定義(個人認(rèn)為就是用程序控制)都弹。可以用netstat來打印出MTU的結(jié)果柔纵,比如鍵入netstat -in

Kernel Interface tableIface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flgeth0 1500 0 1774 0 0 0 587 0 0 0 BMRUlo 16436 0 2667 0 0 0 2667 0 0 0 LRU

就可以觀察到eth0的MTU是1500缔杉。而lo(環(huán)回接口)的MTU則是16436。

最后說說那個環(huán)回接口(loopback)搁料。平時我們用127.0.0.1來嘗試自己的機器服務(wù)器好使不好使或详。走的就是這個loopback接口。對于環(huán)回接口郭计,有如下三點值得注意:

·傳給環(huán)回地址(一般是127.0.0.1)的任何數(shù)據(jù)均作為I P輸入霸琴。

·傳給廣播地址或多播地址的數(shù)據(jù)報復(fù)制一份傳給環(huán)回接口,然后送到以太網(wǎng)上昭伸。這是 因為廣播傳送和多播傳送的定義包含主機本身梧乘。

·任何傳給該主機IP地址的數(shù)據(jù)均送到環(huán)回接口。

這一章還是很簡單的,一般作為了解知識也就足夠了选调,沒必要摳的那么詳細(xì)

TCP/IP詳解之IP協(xié)議ARP協(xié)議和RARP協(xié)議

把這三個協(xié)議放到一起學(xué)習(xí)是因為這三個協(xié)議處于同一層夹供,ARP協(xié)議用來找到目標(biāo)主機的Ethernet網(wǎng)卡Mac地址,IP則承載要發(fā)送的消息仁堪。數(shù)據(jù)鏈路層可以從ARP得到數(shù)據(jù)的傳送信息哮洽,而從IP得到要傳輸?shù)臄?shù)據(jù)信息。

1.IP協(xié)議

IP協(xié)議是TCP/IP協(xié)議的核心弦聂,所有的TCP鸟辅,UDP,IMCP莺葫,IGCP的數(shù)據(jù)都以IP數(shù)據(jù)格式傳輸匪凉。要注意的是,IP不是可靠的協(xié)議捺檬,這是說再层,IP協(xié)議沒有提供一種數(shù)據(jù)未傳達(dá)以后的處理機制--這被認(rèn)為是上層協(xié)議--TCP或UDP要做的事情。所以這也就出現(xiàn)了TCP是一個可靠的協(xié)議欺冀,而UDP就沒有那么可靠的區(qū)別树绩。這是后話,暫且不提

1.1.IP協(xié)議頭

挨個解釋它是教科書的活計隐轩,我感興趣的只是那八位的TTL字段,還記得這個字段是做什么的么?這個字段規(guī)定該數(shù)據(jù)包在穿過多少個路由之后才會被拋棄(這里就體現(xiàn)出來IP協(xié)議包的不可靠性渤早,它不保證數(shù)據(jù)被送達(dá))职车,某個ip數(shù)據(jù)包每穿過一個路由器,該數(shù)據(jù)包的TTL數(shù)值就會減少1鹊杖,當(dāng)該數(shù)據(jù)包的TTL成為零悴灵,它就會被自動拋棄。這個字段的最大值也就是255骂蓖,也就是說一個協(xié)議包也就在路由器里面穿行255次就會被拋棄了积瞒,根據(jù)系統(tǒng)的不同,這個數(shù)字也不一樣登下,一般是32或者是64茫孔,Tracerouter這個工具就是用這個原理工作的,tranceroute的-m選項要求最大值是255被芳,也就是因為這個TTL在IP協(xié)議里面只有8bit缰贝。

現(xiàn)在的ip版本號是4,所以也稱作IPv4∨媳簦現(xiàn)在還有IPv6剩晴,而且運用也越來越廣泛了。

1.2.IP路由選擇

當(dāng)一個IP數(shù)據(jù)包準(zhǔn)備好了的時候,IP數(shù)據(jù)包(或者說是路由器)是如何將數(shù)據(jù)包送到目的地的呢?它是怎么選擇一個合適的路徑來"送貨"的呢?

最特殊的情況是目的主機和主機直連赞弥,那么主機根本不用尋找路由毅整,直接把數(shù)據(jù)傳遞過去就可以了。至于是怎么直接傳遞的绽左,這就要靠ARP協(xié)議了悼嫉,后面會講到。

稍微一般一點的情況是妇菱,主機通過若干個路由器(router)和目的主機連接承粤。那么路由器就要通過ip包的信息來為ip包尋找到一個合適的目標(biāo)來進行傳遞,比如合適的主機闯团,或者合適的路由辛臊。路由器或者主機將會用如下的方式來處理某一個IP數(shù)據(jù)包

如果IP數(shù)據(jù)包的TTL(生命周期)以到,則該IP數(shù)據(jù)包就被拋棄房交。

搜索路由表彻舰,優(yōu)先搜索匹配主機,如果能找到和IP地址完全一致的目標(biāo)主機候味,則將該包發(fā)向目標(biāo)主機

搜索路由表刃唤,如果匹配主機失敗,則匹配同子網(wǎng)的路由器白群,這需要“子網(wǎng)掩碼(1.3.)”的協(xié)助尚胞。如果找到路由器,則將該包發(fā)向路由器帜慢。

搜索路由表笼裳,如果匹配同子網(wǎng)路由器失敗,則匹配同網(wǎng)號(第一章有講解)路由器粱玲,如果找到路由器躬柬,則將該包發(fā)向路由器。

搜索陸游表抽减,如果以上都失敗了允青,就搜索默認(rèn)路由,如果默認(rèn)路由存在卵沉,則發(fā)包

如果都失敗了颠锉,就丟掉這個包。

這再一次證明了偎箫,ip包是不可靠的木柬。因為它不保證送達(dá)。

1.3.子網(wǎng)尋址

IP地址的定義是網(wǎng)絡(luò)號+主機號淹办。但是現(xiàn)在所有的主機都要求子網(wǎng)編址眉枕,也就是說,把主機號在細(xì)分成子網(wǎng)號+主機號。最終一個IP地址就成為 網(wǎng)絡(luò)號碼+子網(wǎng)號+主機號速挑。例如一個B類地址:210.30.109.134谤牡。一般情況下,這個IP地址的紅色部分就是網(wǎng)絡(luò)號姥宝,而藍(lán)色部分就是子網(wǎng)號翅萤,綠色部分就是主機號。至于有多少位代表子網(wǎng)號這個問題上腊满,這沒有一個硬性的規(guī)定套么,取而代之的則是子網(wǎng)掩碼,校園網(wǎng)相信大多數(shù)人都用過碳蛋,在校園網(wǎng)的設(shè)定里面有一個255.255.255.0的東西胚泌,這就是子網(wǎng)掩碼。子網(wǎng)掩碼是由32bit的二進制數(shù)字序列,形式為是一連串的1和一連串的0肃弟,例如:255.255.255.0(二進制就是11111111.11111111.11111111.00000000)對于剛才的那個B類地址玷室,因為210.30是網(wǎng)絡(luò)號,那么后面的109.134就是子網(wǎng)號和主機號的組合笤受,又因為子網(wǎng)掩碼只有后八bit為0穷缤,所以主機號就是IP地址的后八個bit,就是134箩兽,而剩下的就是子網(wǎng)號碼--109津肛。

2. ARP協(xié)議

還記得數(shù)據(jù)鏈路層的以太網(wǎng)的協(xié)議中,每一個數(shù)據(jù)包都有一個MAC地址頭么?我們知道每一塊以太網(wǎng)卡都有一個MAC地址汗贫,這個地址是唯一的快耿,那么IP包是如何知道這個MAC地址的?這就是ARP協(xié)議的工作。

ARP(地址解析)協(xié)議是一種解析協(xié)議芳绩,本來主機是完全不知道這個IP對應(yīng)的是哪個主機的哪個接口,當(dāng)主機要發(fā)送一個IP包的時候撞反,會首先查一下自己的ARP高速緩存(就是一個IP-MAC地址對應(yīng)表緩存)妥色,如果查詢的IP-MAC值對不存在,那么主機就向網(wǎng)絡(luò)發(fā)送一個ARP協(xié)議廣播包遏片,這個廣播包里面就有待查詢的IP地址嘹害,而直接收到這份廣播的包的所有主機都會查詢自己的IP地址,如果收到廣播包的某一個主機發(fā)現(xiàn)自己符合條件吮便,那么就準(zhǔn)備好一個包含自己的MAC地址的ARP包傳送給發(fā)送ARP廣播的主機笔呀,而廣播主機拿到ARP包后會更新自己的ARP緩存(就是存放IP-MAC對應(yīng)表的地方)。發(fā)送廣播的主機就會用新的ARP緩存數(shù)據(jù)準(zhǔn)備好數(shù)據(jù)鏈路層的的數(shù)據(jù)包發(fā)送工作髓需。

一個典型的arp緩存信息如下许师,在任意一個系統(tǒng)里面用“arp -a”命令:

Interface: 192.168.11.3 --- 0x2

Internet Address Physical Address Type

192.168.11.1 00-0d-0b-43-a0-2e dynamic

192.168.11.2 00-01-4a-03-5b-ed dynamic

都會得到這樣的結(jié)果。

這樣的高速緩存是有時限的,一般是20分鐘(伯克利系統(tǒng)的衍生系統(tǒng))微渠。

TCP/IP詳解學(xué)習(xí)筆記(4)-ICMP協(xié)議搭幻,ping和Traceroute

1.IMCP協(xié)議介紹

前面講到了,IP協(xié)議并不是一個可靠的協(xié)議逞盆,它不保證數(shù)據(jù)被送達(dá)檀蹋,那么,自然的云芦,保證數(shù)據(jù)送達(dá)的工作應(yīng)該由其他的模塊來完成俯逾。其中一個重要的模塊就是ICMP(網(wǎng)絡(luò)控制報文)協(xié)議。

當(dāng)傳送IP數(shù)據(jù)包發(fā)生錯誤--比如主機不可達(dá)舅逸,路由不可達(dá)等等桌肴,ICMP協(xié)議將會把錯誤信息封包,然后傳送回給主機堡赔。給主機一個處理錯誤的機會识脆,這 也就是為什么說建立在IP層以上的協(xié)議是可能做到安全的原因。ICMP數(shù)據(jù)包由8bit的錯誤類型和8bit的代碼和16bit的校驗和組成善已。而前 16bit就組成了ICMP所要傳遞的信息灼捂。書上的圖6-3清楚的給出了錯誤類型和代碼的組合代表的意思。

盡管在大多數(shù)情況下换团,錯誤的包傳送應(yīng)該給出ICMP報文悉稠,但是在特殊情況下,是不產(chǎn)生ICMP錯誤報文的艘包。如下

  1. ICMP差錯報文不會產(chǎn)生ICMP差錯報文(出IMCP查詢報文)(防止IMCP的無限產(chǎn)生和傳送)

  2. 目的地址是廣播地址或多播地址的IP數(shù)據(jù)報的猛。

  3. 作為鏈路層廣播的數(shù)據(jù)報。

  4. 不是IP分片的第一片想虎。

  5. 源地址不是單個主機的數(shù)據(jù)報卦尊。這就是說,源地址不能為零地址舌厨、環(huán)回地址岂却、廣播地 址或多播地址。

雖然里面的一些規(guī)定現(xiàn)在還不是很明白裙椭,但是所有的這一切規(guī)定躏哩,都是為了防止產(chǎn)生ICMP報文的無限傳播而定義的。

ICMP協(xié)議大致分為兩類揉燃,一種是查詢報文扫尺,一種是差錯報文。其中查詢報文有以下幾種用途:

1.ping查詢(不要告訴我你不知道ping程序)

2.子網(wǎng)掩碼查詢(用于無盤工作站在初始化自身的時候初始化子網(wǎng)掩碼)

  1. 時間戳查詢(可以用來同步時間)

而差錯報文則產(chǎn)生在數(shù)據(jù)傳送發(fā)生錯誤的時候炊汤。就不贅述了正驻。

2.ICMP的應(yīng)用--ping

ping可以說是ICMP的最著名的應(yīng)用弊攘,當(dāng)我們某一個網(wǎng)站上不去的時候。通常會ping一下這個網(wǎng)站拨拓。ping會回顯出一些有用的信息肴颊。一般的信息如下:

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255Reply from 10.4.24.1: bytes=32 time<1ms TTL=255Reply from 10.4.24.1: bytes=32 time<1ms TTL=255Reply from 10.4.24.1: bytes=32 time<1ms TTL=255Ping statistics for 10.4.24.1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms

ping這個單詞源自聲納定位,而這個程序的作用也確實如此渣磷,它利用ICMP協(xié)議包來偵測另一個主機是否可達(dá)婿着。原理是用類型碼為0的ICMP發(fā)請 求,受到請求的主機則用類型碼為8的ICMP回應(yīng)醋界。ping程序來計算間隔時間竟宋,并計算有多少個包被送達(dá)。用戶就可以判斷網(wǎng)絡(luò)大致的情況形纺。我們可以看到丘侠, ping給出來了傳送的時間和TTL的數(shù)據(jù)。我給的例子不太好逐样,因為走的路由少蜗字,有興趣地可以ping一下國外的網(wǎng)站比如sf.net,就可以觀察到一些 丟包的現(xiàn)象脂新,而程序運行的時間也會更加的長挪捕。ping還給我們一個看主機到目的主機的路由的機會。這是因為争便,ICMP的ping請求數(shù)據(jù)報在每經(jīng)過一個路由器的時候级零,路由器都會把自己的ip放到該數(shù) 據(jù)報中。而目的主機則會把這個ip列表復(fù)制到回應(yīng)icmp數(shù)據(jù)包中發(fā)回給主機滞乙。但是奏纪,無論如何,ip頭所能紀(jì)錄的路由列表是非常的有限斩启。如果要觀察路由序调, 我們還是需要使用更好的工具,就是要講到的Traceroute(windows下面的名字叫做tracert)兔簇。

3.ICMP的應(yīng)用--Traceroute

Traceroute是用來偵測主機到目的主機之間所經(jīng)路由情況的重要工具炕置,也是最便利的工具。前面說到男韧,盡管ping工具也可以進行偵測,但是默垄,因為ip頭的限制此虑,ping不能完全的記錄下所經(jīng)過的路由器。所以Traceroute正好就填補了這個缺憾口锭。

Traceroute的原理是非常非常的有意思朦前,它受到目的主機的IP后介杆,首先給目的主機發(fā)送一個TTL=1(還記得TTL是什么嗎?)的UDP(后面就 知道UDP是什么了)數(shù)據(jù)包韭寸,而經(jīng)過的第一個路由器收到這個數(shù)據(jù)包以后春哨,就自動把TTL減1,而TTL變?yōu)?以后恩伺,路由器就把這個包給拋棄了赴背,并同時產(chǎn)生 一個主機不可達(dá)的ICMP數(shù)據(jù)報給主機。主機收到這個數(shù)據(jù)報以后再發(fā)一個TTL=2的UDP數(shù)據(jù)報給目的主機晶渠,然后刺激第二個路由器給主機發(fā)ICMP數(shù)據(jù) 報凰荚。如此往復(fù)直到到達(dá)目的主機。這樣褒脯,traceroute就拿到了所有的路由器ip便瑟。從而避開了ip頭只能記錄有限路由IP的問題。

有人要問番川,我怎么知道UDP到?jīng)]到達(dá)目的主機呢到涂?這就涉及一個技巧的問題,TCP和UDP協(xié)議有一個端口號定義颁督,而普通的網(wǎng)絡(luò)程序只監(jiān)控少數(shù)的幾個號碼較 小的端口践啄,比如說80,比如說23,等等。而traceroute發(fā)送的是端口號>30000(真變態(tài))的UDP報适篙,所以到達(dá)目的主機的時候往核,目的 主機只能發(fā)送一個端口不可達(dá)的ICMP數(shù)據(jù)報給主機。主機接到這個報告以后就知道嚷节,主機到了聂儒,所以,說Traceroute是一個騙子一點也不為過:)

Traceroute程序里面提供了一些很有用的選項硫痰,甚至包含了IP選路的選項衩婚,請察看man文檔來了解這些,這里就不贅述了效斑。

TCP/IP詳解學(xué)習(xí)筆記(5)-IP選路非春,動態(tài)選路,和一些細(xì)節(jié)

1.靜態(tài)IP選路

1.1.一個簡單的路由表

選路是IP層最重要的一個功能之一缓屠。前面的部分已經(jīng)簡單的講過路由器是通過何種規(guī)則來根據(jù)IP數(shù)據(jù)包的IP地址來選擇路由奇昙。這里就不重復(fù)了。首先來看看一個簡單的系統(tǒng)路由表敌完。

Destination Gateway Genmask Flags Metric Ref Use Iface192.168.11.0 * 255.255.255.0 U 0 0 0 eth0169.254.0.0 * 255.255.0.0 U 0 0 0 eth0default 192.168.11.1 0.0.0.0 UG 0 0 0 eth0

對于一個給定的路由器储耐,可以打印出五種不同的flag。

  1. U表明該路由可用滨溉。

  2. G表明該路由是到一個網(wǎng)關(guān)什湘。如果沒有這個標(biāo)志长赞,說明和Destination是直連的,而相應(yīng)的Gateway應(yīng)該直接給出Destination的地址闽撤。

  3. H表明該路由是到一個主機得哆,如果沒有該標(biāo)志,說明Destination是一個網(wǎng)絡(luò)哟旗,換句話說Destination就應(yīng)該寫成一個網(wǎng)絡(luò)號和子網(wǎng)號的組合贩据,而不包括主機號(主機號碼處為0),例如 192.168.11.0

  4. D表明該路由是為重定向報文創(chuàng)建的

  5. M該路由已經(jīng)被重定向報文修改

U沒啥可說的热幔,G說明這是一個網(wǎng)關(guān)乐设,如果你要發(fā)數(shù)據(jù)給Destination,IP頭應(yīng)該寫Destination的IP地址绎巨,而數(shù)據(jù)鏈路層的MAC地址就應(yīng)該是GateWay的Mac地址了近尚;反之,如果沒有G標(biāo)志场勤,那么數(shù)據(jù)鏈路層和IP層的地址應(yīng)該是對應(yīng)的戈锻。H說明了Destination的性質(zhì),如果是H的和媳,則說明該地址是一個完整的地址格遭,既有網(wǎng)絡(luò)號又有主機號,那么再匹配的時候就既要匹配網(wǎng)絡(luò)號留瞳,又要匹配主機號拒迅;反之,Destination就代表一個網(wǎng)絡(luò)她倘,在匹配的時候只要匹配一下網(wǎng)絡(luò)號就可以了璧微。

這樣,IP選路的方式就可以更加具體化了硬梁。如下

  1. 首先用IP地址來匹配那些帶H標(biāo)志的DestinationIP地址前硫。

  2. 如果1失敗就匹配那些網(wǎng)絡(luò)地址。

  3. 如果2失敗就發(fā)送到Default網(wǎng)關(guān)

順便提一下那個GenMask(還記得子網(wǎng)掩碼么)荧止,它指定了目的地址的子網(wǎng)號屹电,例如第一條的子網(wǎng)就是11。

1.2.其他有關(guān)路由表的知識

一般跃巡,我們在配置好一個網(wǎng)絡(luò)接口的時候危号,一個路由就被直接創(chuàng)建好了。當(dāng)然我們也可以手動添加路由素邪。用route add命令就可以了葱色。

而當(dāng)一個IP包在某一個路由器的時候發(fā)現(xiàn)沒有路由可走,那么該路由器就會給源主機發(fā)送“主機不可達(dá)”或者“網(wǎng)絡(luò)不可達(dá)”的ICMP包來報錯娘香。

注意苍狰,一般的操作系統(tǒng)默認(rèn)是沒有路由功能的,這需要自己配置烘绽。這些歷史原因就不細(xì)說了淋昭,

1.3.ICMP的IP重定向報文和路由發(fā)現(xiàn)報文

當(dāng)IP包在某一個地方轉(zhuǎn)向的時候,都回給發(fā)送IP報的源主機一個ICMP重定向報文安接,而源主機就可以利用這個信息來更新自己的路由表翔忽,這樣,隨著網(wǎng)絡(luò)通信的逐漸增多盏檐,路由表也就越來越完備歇式,數(shù)據(jù)轉(zhuǎn)發(fā)的速度也會越來越快。我們需要注意的是:

  1. 重定向報文只能由路由器發(fā)出胡野。

  2. 重定向報文為主機所用材失,而不是為路由器所用。

在主機引導(dǎo)的時候硫豆,一般會發(fā)送在網(wǎng)內(nèi)廣播一個路由請求的ICMP報文龙巨,而多個路由器則會回應(yīng)一個路由通告報文。而且熊响,路由其本身不定期的在網(wǎng)絡(luò)內(nèi)發(fā)布路由通告報文旨别,這樣,根據(jù)這些報文汗茄,每一個主機都會有機會建立自己的路由表而實現(xiàn)網(wǎng)絡(luò)通信秸弛。路由器在一份通告報文中可以通告多個地址,并且給出每一個地址的優(yōu)先等級洪碳,這個優(yōu)先等級是該IP作為默認(rèn)路由的等級递览,至于怎么算的就不深究了。

路由器一般會在450-600秒的時間間隔內(nèi)發(fā)布一次通告偶宫,而一個給定的通告報文的壽命是30分鐘非迹。而主機在引導(dǎo)的時候會每三秒發(fā)送一次請求報文,一旦接受到一個有效的通告報文纯趋,就停止發(fā)送請求報文憎兽。

在TCP/IP詳解編寫的時候,只有Solaris2.x支持這兩種報文吵冒,大多數(shù)系統(tǒng)還不支持這兩種報文纯命。(后面還會講到一些有用的路由報文)

動態(tài)選路協(xié)議

前面的選路方法叫做靜態(tài)選路,簡要地說就是在配置接口的時候痹栖,以默認(rèn)的方式生成路由表項亿汞。并通過route來增加表項,或者通過ICMP報文來更新表項(通常在默認(rèn)方式出錯的情況下)揪阿。 而如果上訴三種方法都不能滿足疗我,那么我們就使用動態(tài)選路咆畏。

動態(tài)選路協(xié)議是用于動態(tài)選路的重要組成部分,但是他們只是使用在路由器之間吴裤,相鄰路由器之間互相通信旧找。系統(tǒng)(路有選擇程序)選擇比較合適的路有放到核心路由表中,然后系統(tǒng)就可以根據(jù)這個核心路有表找到最合適的網(wǎng)路麦牺。也就是說钮蛛,動態(tài)選路是在系統(tǒng)核心網(wǎng)絡(luò)外部進行的,它只是用一些選路的策略影響路由表剖膳,而不會影響到最后通過路由表選擇路由的那一部分魏颓。選路協(xié)議有一大類常用的叫做內(nèi)部網(wǎng)關(guān)協(xié)議(IGP),而在IGP中吱晒,RIP就是其中最重要的協(xié)議甸饱。一種新的IGP協(xié)議叫做開放最短路經(jīng)優(yōu)先(OSPF)協(xié)議,其意在取代RIP枕荞。另一種最早用在網(wǎng)路骨干網(wǎng)上的IGP協(xié)議--HELLO柜候,現(xiàn)在已經(jīng)不用了。

如今躏精,任何支持動態(tài)選路的路由器都必須同時支持OSPF和RIP渣刷,還可以選擇性的支持其他的IGP協(xié)議。

2.1.Unix選路程序

Unix系統(tǒng)上面通常都有路由守護程序--routed矗烛。還有一個叫做gate辅柴。gate所支持的協(xié)議要比routed多,routed只是支持RIPv1版本瞭吃。而gate則支持RIPv1碌嘀、v2,BGPv1 等等歪架。

2.1.RIP:選路信息協(xié)議

它的定義可以在RFC1058內(nèi)找到股冗,這種協(xié)議使用UDP作為載體(也就是UDP的上層協(xié)議)。我們最關(guān)心的就是RIP其中的一個段和蚪,叫做度量的段止状,這是一個以hop作為計數(shù)器(就是以走過多少路由為計數(shù)器)的段(IP協(xié)議里面也有一個TTL不是么)。這個度量段將最終影響到路由表的建立攒霹。參考圖:

一般說來routed要承擔(dān)如下的工作:

  1. 給每一個已知的路由器發(fā)送rip請求報文怯疤,要求其他路由器給出完整的路由表。這種報文的命令字段為1催束,地址字段為0集峦,度量地段為16(相當(dāng)于無窮大)。

  2. 接受請求,如果接收到剛才的那個請求塔淤,就把自己的完整的路由表交給請求者摘昌。如果沒有,就處理IP請求表項高蜂,把表項中自己有的部分添上跳數(shù)第焰,沒有的部分添上16。然后發(fā)給請求者妨马。

  3. 接受回應(yīng)。更新自己的路由表杀赢。使用hop數(shù)小的規(guī)則烘跺。

  4. 定期更新路由表,一般是30s(真頻繁)給相鄰的路有啟發(fā)一次自己的路由表脂崔。這種形式可以使廣播形式的滤淳。

這個協(xié)議看起來會工作的很好,但是砌左,這里面其實有很多隱藏的憂患脖咐,比如說RIP沒有子網(wǎng)的概念,比如說環(huán)路的危險汇歹。而且hop數(shù)的上限也限制了網(wǎng)絡(luò)的大小屁擅。

因此,出現(xiàn)了很多RIPv1的替代品产弹,比如說RIPv2,比如說OSPF派歌。他們都是通過某種策略來影響路由表,所以就不說了痰哨。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胶果,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子斤斧,更是在濱河造成了極大的恐慌早抠,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撬讽,死亡現(xiàn)場離奇詭異蕊连,居然都是意外死亡,警方通過查閱死者的電腦和手機锐秦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門咪奖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酱床,你說我怎么就攤上這事羊赵。” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵昧捷,是天一觀的道長闲昭。 經(jīng)常有香客問我,道長靡挥,這世上最難降的妖魔是什么序矩? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮跋破,結(jié)果婚禮上簸淀,老公的妹妹穿的比我還像新娘。我一直安慰自己毒返,他們只是感情好租幕,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拧簸,像睡著了一般劲绪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盆赤,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天贾富,我揣著相機與錄音,去河邊找鬼牺六。 笑死颤枪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兔乞。 我是一名探鬼主播汇鞭,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庸追!你這毒婦竟也來了霍骄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淡溯,失蹤者是張志新(化名)和其女友劉穎读整,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咱娶,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡米间,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膘侮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片屈糊。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖琼了,靈堂內(nèi)的尸體忽然破棺而出逻锐,到底是詐尸還是另有隱情夫晌,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布昧诱,位于F島的核電站晓淀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盏档。R本人自食惡果不足惜凶掰,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜈亩。 院中可真熱鬧懦窘,春花似錦、人聲如沸稚配。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽药有。三九已至,卻和暖如春苹丸,著一層夾襖步出監(jiān)牢的瞬間愤惰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工赘理, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宦言,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓商模,卻偏偏與公主長得像奠旺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子施流,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 個人認(rèn)為响疚,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評論 0 8
  • IPv4分組 IPv4瞪醋,即現(xiàn)在普遍使用的IP協(xié)議(版本為4)忿晕。IP協(xié)議定義數(shù)據(jù)傳送的基本單元——IP分組及其確切的...
    CodeKing2017閱讀 1,877評論 0 0
  • TCP/IP 協(xié)議族 Transmission Control Protocol/Internet Protoco...
    槑小姐_1419閱讀 925評論 0 1
  • 1、TCP為什么需要3次握手银受,4次斷開践盼? “三次握手”的目的是“為了防止已失效的連接請求報文段突然又傳送到了服務(wù)端...
    杰倫哎呦哎呦閱讀 3,479評論 0 6
  • 網(wǎng)絡(luò)層提供的兩種服務(wù) 在計算機網(wǎng)絡(luò)領(lǐng)域,網(wǎng)絡(luò)層應(yīng)該向運輸層提供怎樣的服務(wù)(面向連接還是無連接)曾引起了長期的爭論宾巍,...
    srtianxia閱讀 3,965評論 0 12