前言
勞于讀書棍丐,逸于作文。
原文地址:internet協(xié)議入門
博主博客地址:Damonare的個人博客
博主之前寫過一篇博客:網(wǎng)絡協(xié)議分析,在這篇博客里通過抓包褥民,具體的分析了不同網(wǎng)絡協(xié)議的傳送的數(shù)據(jù)和傳送的方式。而此篇博客則用來作為一個大綱式的內(nèi)容,按照層級劃分誉尖,逐步介紹各層級的協(xié)議以及他們所起的作用。若有錯誤之處谢谦,歡迎批評指正释牺。
正文
1.概述
互聯(lián)網(wǎng)的實現(xiàn),分成好幾層回挽。每一層都有自己的功能没咙,就像建筑物一樣,每一層都靠下一層支持千劈。
1.1 模型劃分
首先我們需要明白的事互聯(lián)網(wǎng)的實現(xiàn)是分層級的祭刚,那么這個層級的劃分根據(jù)不同的模型又有一些不同。其中又有兩個模型的劃分是我們最常見到的墙牌,一個是OSI七層劃分涡驮,另一個是TCP/IP五層劃分。他們分別把互聯(lián)網(wǎng)分成了七層和五層喜滨。
OSI和TCP/IP模型是很基礎但又非常重要的網(wǎng)絡基礎知識
OSI七層模型
OSI的層 | 功能 | TCP/IP協(xié)議族 |
---|---|---|
應用層 | 文件傳輸捉捅,電子郵件,文件服務虽风,虛擬終端 | TFTP棒口,HTTP,SNMP辜膝,F(xiàn)TP无牵,SMTP,DNS厂抖,Telnet |
表示層 | 數(shù)據(jù)格式化茎毁,代碼轉(zhuǎn)換,數(shù)據(jù)加密 | 沒有協(xié)議 |
會話層 | 解除或建立與別的接點的聯(lián)系 | 沒有協(xié)議 |
傳輸層 | 提供端對端的接口 | TCP忱辅,UDP |
網(wǎng)絡層 | 為數(shù)據(jù)包選擇路由 | IP七蜘,ICMP,RIP墙懂,OSPF崔梗,BGP,IGMP |
數(shù)據(jù)鏈路層 | 傳輸有地址的幀以及錯誤檢測功能 | SLIP垒在,CSLIP蒜魄,PPP扔亥,ARP,RARP谈为,MTU |
物理層 | 以二進制數(shù)據(jù)形式在物理媒體上傳輸數(shù)據(jù) | ISO2110旅挤,IEEE802,IEEE802.2 |
1.2 層與協(xié)議
每一層都是為了完成一種功能伞鲫。為了實現(xiàn)這些功能粘茄,就需要大家都遵守共同的規(guī)則。
大家都遵守的規(guī)則秕脓,就叫做"協(xié)議"(protocol)柒瓣。
這個協(xié)議就是我們所說的互聯(lián)網(wǎng)協(xié)議
(internet protocol),每一層都有若干個協(xié)議,他們共同構成了我們所要講的互聯(lián)網(wǎng)協(xié)議吠架。
由以上表格我們可以看出芙贫,在OSI七層協(xié)議
模型里會話層和表示層是沒有協(xié)議的,這里我們?nèi)〉氖?code>TCP/IP模型傍药,分成五層也比較容易解釋磺平。
那么這五層又都是什么呢?從上到下分別是:
層級 | 網(wǎng)絡設備 |
---|---|
應用層 | 也就是用戶使用的應用了拐辽。 |
傳輸層 | 四層交換機拣挪、也有工作在四層的路由器 |
網(wǎng)絡層 | 路由器、三層交換機 |
數(shù)據(jù)鏈路層 | 網(wǎng)橋(現(xiàn)已很少使用)俱诸、以太網(wǎng)交換機(二層交換機)菠劝、網(wǎng)卡(其實網(wǎng)卡是一半工作在物理層、一半工作在數(shù)據(jù)鏈路層) |
物理層 | 網(wǎng)卡睁搭,光纖闸英,CAT-5線,中繼器介袜、集線器、還有我們通常說的雙絞線也工作在物理層 |
如上表格所示出吹,最底下的一層叫做物理層
(Physical Layer)遇伞,最上面的一層叫做應用層
(Application Layer),中間的三層(自下而上)分別是數(shù)據(jù)鏈路層
(Data Link Layer)捶牢、網(wǎng)絡層
(Network Layer)和傳輸層
(Transport Layer)鸠珠。越下面的層,越靠近硬件秋麸;越上面的層渐排,越靠近用戶。下面來介紹每一層的功能灸蟆,著重介紹每一層的主要協(xié)議
2. 物理層
物理層規(guī)定:為傳輸數(shù)據(jù)所需要的物理鏈路創(chuàng)建驯耻、維持、拆除,而提供具有機械的可缚,電子的霎迫,功能的和規(guī)范的特性 ——物理層(維基百科)
上面維基百科對于物理層的解釋說白了就是要把電腦連在一塊,方法呢帘靡,可以用光纜知给、電纜、雙絞線描姚、無線電波等方式涩赢。
物理層
就是把電腦連接起來的物理手段。它主要規(guī)定了網(wǎng)絡的一些電氣特性轩勘,作用是負責傳送0和1的電信號筒扒。
3. 數(shù)據(jù)鏈路層
在兩個網(wǎng)絡實體之間提供數(shù)據(jù)鏈路連接的創(chuàng)建、維持和釋放管理赃阀。構成數(shù)據(jù)鏈路數(shù)據(jù)單元(frame:數(shù)據(jù)幀或幀)霎肯,并對幀定界、同步榛斯、收發(fā)順序的控制观游。 ——數(shù)據(jù)鏈路層(維基百科)
3.1 定義
上面說的網(wǎng)絡實體也就是我們?nèi)粘S玫降氖謾C電腦等聯(lián)網(wǎng)設備了,我們剛剛了解到不同網(wǎng)絡實體之間通過一些物理手段(光纜驮俗,雙絞線懂缕,無線電波等)連接在了一起,來進行傳輸0和1電信號王凑。單純的傳輸0和1沒有任何意義搪柑,肯定是要規(guī)定電信號的解讀方式,多少個電信號是一組索烹?每一組代表的意義又是什么工碾?
這就是數(shù)據(jù)鏈路層的功能,規(guī)定這些電信號的分組方式百姓。
3.2 以太網(wǎng)協(xié)議
剛剛開始的時候渊额,每一家公司都有自己的一套對于電信號的解讀方式,后來隨著時間的推移垒拢,一種叫做以太網(wǎng)
(Ethernet)的協(xié)議旬迹,占據(jù)了主導地位。
以太網(wǎng)規(guī)定求类,一組電信號構成一個數(shù)據(jù)包奔垦,叫做"幀"(Frame)。每一幀分成兩個部分:標頭(Head)和數(shù)據(jù)(Data)尸疆。
標頭
包含數(shù)據(jù)包的一些說明項椿猎,比如發(fā)送者惶岭、接受者、數(shù)據(jù)類型等等鸵贬;數(shù)據(jù)
則是數(shù)據(jù)包的具體內(nèi)容俗他。
標頭
的長度,固定為18字節(jié)阔逼。數(shù)據(jù)
的長度兆衅,最短為46字節(jié),最長為1500字節(jié)嗜浮。因此羡亩,整個幀
最短為64字節(jié),最長為1518字節(jié)危融。如果數(shù)據(jù)很長畏铆,就必須分割成多個幀
進行發(fā)送。
3.3 MAC地址
我想在日常上網(wǎng)過程中吉殃,最為熟悉的就是用一根網(wǎng)線連接端口和電腦了吧辞居,網(wǎng)線連接電腦實際上是連接的這個玩意兒:
上面就是我們所說的網(wǎng)卡了,它在物理層和數(shù)據(jù)鏈路層兩個層級工作蛋勺,正所謂能力越大責任越大瓦灶,網(wǎng)卡的重要性自然不言而喻了。前面說抱完,以太網(wǎng)規(guī)定每一個數(shù)據(jù)包都有一個標頭
(Head)來說明發(fā)送者贼陶,接受者信息,數(shù)據(jù)類型等信息巧娱。而網(wǎng)卡就是以太網(wǎng)規(guī)定的來標明發(fā)送者和接受者信息的工具碉怔。
網(wǎng)卡的地址,就是數(shù)據(jù)包的發(fā)送地址和接收地址禁添,這叫做MAC地址撮胧。
這個Mac地址自然就是發(fā)送者,接受者信息的了老翘,通過這個每臺電腦獨一無二的地址計算機就能通過一些方式找到另一臺電腦了芹啥。每塊網(wǎng)卡出廠的時候,都有一個全世界獨一無二的MAC地址酪捡,長度是48個二進制位,通常用12個十六進制數(shù)表示纳账。有了MAC地址逛薇,就可以定位網(wǎng)卡和數(shù)據(jù)包的路徑了。
3.4 廣播
我們現(xiàn)在有了網(wǎng)卡疏虫,也知道每一塊網(wǎng)卡都有一個世界上獨一無二的Mac地址永罚,那發(fā)送者應該怎么去找接受者這臺設備呢啤呼,換句話說發(fā)送者怎么才能知道接受者的Mac地址呢?這就需要另一個協(xié)議了叫做ARP協(xié)議呢袱,這個協(xié)議留在后面介紹官扣。這里我們只需要知道,發(fā)送者必須要知道接受者的Mac地址才能準確的發(fā)送數(shù)據(jù)羞福。
以太網(wǎng)采用了一種廣撒網(wǎng)的方式惕蹄,發(fā)送者發(fā)送的數(shù)據(jù)包會發(fā)送給本網(wǎng)絡內(nèi)所有的計算機,然后由接收到數(shù)據(jù)包的計算機來判斷自己是不是接收方治专。
圖片來自維基百科廣播卖陵,如圖所示,紅色主機是發(fā)送方张峰,綠色某一臺是接收方泪蔫,數(shù)據(jù)包會發(fā)送給同一個子網(wǎng)絡的所有綠色主機,然后由綠色主機根據(jù)數(shù)據(jù)包的標頭來判斷自己是不是接收方喘批。如果是撩荣,就接受這個包,不是則丟棄饶深。這種發(fā)送數(shù)據(jù)的方式就是廣播
餐曹。
綜上,有了對于數(shù)據(jù)包的定義粥喜,網(wǎng)卡的Mac地址凸主,廣播的發(fā)送方式,數(shù)據(jù)鏈路層基本就算完整了额湘,然后不同計算機之間就可以傳送數(shù)據(jù)了卿吐。
4.網(wǎng)絡層
網(wǎng)絡層使兩終端系統(tǒng)能夠互連且決定最佳路徑,并具有一定的擁塞控制和流量控制的能力锋华。 ——網(wǎng)絡層(維基百科)
4.1 網(wǎng)絡層的產(chǎn)生
走到這里我們實現(xiàn)的只是在一個子網(wǎng)絡里傳送數(shù)據(jù)嗡官。但我們知道,互聯(lián)網(wǎng)實際上是由大大小小的子網(wǎng)絡組成的:
大到一個ISP(因特網(wǎng)服務提供商毯焕,國內(nèi)較大的比如移動電信等)衍腥,小到一個公司的局域網(wǎng),正事這些大大小小的子網(wǎng)絡組成了龐大的互聯(lián)網(wǎng)體系纳猫。但實際上婆咸,廣播的方式只能在子網(wǎng)絡內(nèi)進行,不同子網(wǎng)絡之間廣播方式是行不通的芜辕。
因此我們需要一種方法能夠判斷兩臺主機是否在同一個子網(wǎng)絡之內(nèi)尚骄,如果在同一個子網(wǎng)絡就以廣播的方式傳輸數(shù)據(jù),如果不在同一個子網(wǎng)絡就以路由
的方式傳輸(路由是個比較大的概念侵续,本文不涉及)倔丈,關于路由協(xié)議的了解戳這里憨闰,MAC地址做不到這一點,它只和廠商有關需五,和計算機所處的網(wǎng)絡并沒有關系鹉动。
這就導致了"網(wǎng)絡層"的誕生。它的作用是引進一套新的地址宏邮,使得我們能夠區(qū)分不同的計算機是否屬于同一個子網(wǎng)絡泽示。這套地址就叫做"網(wǎng)絡地址",簡稱"網(wǎng)址"蜀铲。
網(wǎng)址的出現(xiàn)边琉,使得每臺計算機都有了兩個地址,一個是出生就帶著不會改變的Mac地址记劝,一個是后期網(wǎng)絡管理員分配的可變的網(wǎng)絡地址变姨。網(wǎng)址判斷兩臺計算機是否在同一個子網(wǎng)絡,Mac地址則是將數(shù)據(jù)準確的傳遞到目標計算機中厌丑。因此邏輯上可以判斷必定是先處理網(wǎng)絡地址定欧,再處理Mac地址。
4.2 IP協(xié)議
規(guī)定網(wǎng)絡地址的協(xié)議怒竿,叫做IP協(xié)議砍鸠。它所定義的地址,就被稱為IP地址耕驰。
現(xiàn)在廣泛采用的是IP協(xié)議第四版爷辱,簡稱IPv4。這個版本規(guī)定朦肘,網(wǎng)絡地址由32個二進制位組成饭弓,IPV6則是64個二進制組成。
由于IPV6還沒有廣泛應用媒抠,這里還是用IPV4講解弟断。一般我們用分成四段(IPV6分成八段)的十進制數(shù)表示IP地址,從0.0.0.0一直到255.255.255.255趴生。這個地址分成兩部分阀趴,前一部分是網(wǎng)絡部分,后一部分代表主機苍匆。But!!!網(wǎng)絡部分具體是前16位還是前24位刘急,我們沒法從IP地址進行判斷,這是我們就需要另一參數(shù)叫做子網(wǎng)掩碼
浸踩。
所謂"子網(wǎng)掩碼"叔汁,就是表示子網(wǎng)絡特征的一個參數(shù)。它在形式上等同于IP地址,也是一個32位二進制數(shù)字攻柠,它的網(wǎng)絡部分全部為1后裸,主機部分全部為0瑰钮。比如,IP地址172.16.254.1微驶,如果已知網(wǎng)絡部分是前24位浪谴,主機部分是后8位,那么子網(wǎng)絡掩碼就是11111111.11111111.11111111.00000000因苹,寫成十進制就是255.255.255.0苟耻。
知道"子網(wǎng)掩碼",我們就能判斷扶檐,任意兩個IP地址是否處在同一個子網(wǎng)絡凶杖。方法是將兩個IP地址與子網(wǎng)掩碼分別進行AND運算(兩個數(shù)位都為1,運算結(jié)果為1款筑,否則為0)智蝠,然后比較結(jié)果是否相同,如果是的話奈梳,就表明它們在同一個子網(wǎng)絡中杈湾,否則就不是。
比如攘须,已知IP地址172.16.254.1和172.16.254.233的子網(wǎng)掩碼都是255.255.255.0漆撞,請問它們是否在同一個子網(wǎng)絡?兩者與子網(wǎng)掩碼分別進行AND運算于宙,結(jié)果都是172.16.254.0浮驳,因此它們在同一個子網(wǎng)絡。
那么問題來了限煞,IP地址放在哪里存儲呢抹恳?是的尤误,我們可以直接存儲在前面提到的以太網(wǎng)數(shù)據(jù)包的Data部分凡傅。
IP地址長這樣:
"標頭"部分主要包括版本、長度窃这、IP地址等信息杭攻,"數(shù)據(jù)"部分則是IP數(shù)據(jù)包的具體內(nèi)容。
現(xiàn)在把它加到以太網(wǎng)數(shù)據(jù)包里面:
IP數(shù)據(jù)包的"標頭"部分的長度為20到60字節(jié)馆铁,整個數(shù)據(jù)包的總長度最大為65,535字節(jié)埠巨。因此现拒,理論上印蔬,一個IP數(shù)據(jù)包的"數(shù)據(jù)"部分,最長為65,515字節(jié)哥遮。前面說過眠饮,以太網(wǎng)數(shù)據(jù)包的"數(shù)據(jù)"部分铜邮,最長只有1500字節(jié)松蒜。因此,如果IP數(shù)據(jù)包超過了1500字節(jié)召娜,它就需要分割成幾個以太網(wǎng)數(shù)據(jù)包玖瘸,分開發(fā)送了檀咙。
4.3 ARP協(xié)議
現(xiàn)在為止我們必須知道兩個地址弧可,一個是IP地址,一個是Mac地址才能把數(shù)據(jù)發(fā)送到目標主機裁良,那么IP地址是已知的(后文解釋)价脾,MAC地址怎么獲取呢?
我們需要一種能通過IP地址得知MAC地址的機制,這個極致就是ARP協(xié)議座硕。
那么涕蜂,這里又分成兩種情況机隙,一種是兩臺計算機在同一個子網(wǎng)絡,那么我們可以用ARP協(xié)議旭旭,得到對方的MAC地址持寄。ARP協(xié)議也是發(fā)出一個數(shù)據(jù)包(包含在以太網(wǎng)數(shù)據(jù)包中)稍味,其中包含它所要查詢主機的IP地址荠卷,在對方的MAC地址這一欄,填的是FF:FF:FF:FF:FF:FF掂碱,表示這是一個"廣播"地址顶吮。它所在子網(wǎng)絡的每一臺主機悴了,都會收到這個數(shù)據(jù)包,從中取出IP地址熟空,與自身的IP地址進行比較息罗。如果兩者相同才沧,都做出回復温圆,向?qū)Ψ綀蟾孀约旱腗AC地址,否則就丟棄這個包得运。
另一種情況是兩臺計算機不在同一個子網(wǎng)絡熔掺,
那么事實上沒有辦法得到對方的MAC地址非剃,只能把數(shù)據(jù)包傳送到兩個子網(wǎng)絡連接處的"網(wǎng)關"(gateway)备绽,讓網(wǎng)關(后文解釋)去處理。
4.4總結(jié)
這一層為止报慕,如果目標主機和本機在同一個子網(wǎng)絡眠冈,我們通過IP地址蜗顽,子網(wǎng)掩碼比較得出在同一個子網(wǎng)絡的結(jié)果雨让,在通過ARP協(xié)議得到目標主機的Mac地址栖忠,發(fā)送贸街!Success薛匪!
如果目標主機和本機不在同一個子網(wǎng)絡逸尖,我們通過IP地址娇跟,子網(wǎng)掩碼比較得出在同一個子網(wǎng)絡的結(jié)果太颤,然后交給本網(wǎng)絡的網(wǎng)關A處理栋齿,網(wǎng)關A根據(jù)路由協(xié)議得到目標主機所在子網(wǎng)絡的網(wǎng)關B瓦堵,網(wǎng)關B再通過IP地址判斷得出和目標主機在同一個子網(wǎng)絡菇用,然后再通過ARP協(xié)議獲取Mac地址陷揪,發(fā)送悍缠!Success!
5. 傳輸層
該層的協(xié)議為應用進程提供端到端的通信服務。它提供面向連接的數(shù)據(jù)流支持滤港、可靠性溅漾、流量控制添履、多路復用等服務脑又。——傳輸層(維基百科)
5.1 傳輸層的產(chǎn)生
我們現(xiàn)在成功的實現(xiàn)了主機和主機之間的通信叔壤,那么問題又來了炼绘,主機之間不同的程序該怎么區(qū)分這個數(shù)據(jù)是不是發(fā)送給自己的呢。要知道驮捍,當你正在QQ聊天的時候东且,微信發(fā)送過來的消息內(nèi)容呈現(xiàn)在了QQ界面珊泳,這會讓計算機懵逼的拷沸!太混亂了撞芍!
這個時候我們就需要一個新的參數(shù)了序无!這個參數(shù)就是端口
。
可連接兩個或兩個以上不同之電路裝置使之能夠傳遞電子或任何形式訊號之裝置.——端口(維基百科)
它其實是每一個使用網(wǎng)卡的程序的編號晶通。每個數(shù)據(jù)包都發(fā)到主機的特定端口录择,所以不同的程序就能取到自己所需要的數(shù)據(jù)隘竭。
不同的程序在計算機中所占用的端口是不同的讼渊,確切的說是不能相同的爪幻,否則就混亂了须误。比如京痢,HTTP所占用的端口一般是80祭椰,HTTPS所占用的端口一般是443方淤。
端口
是0到65535之間的一個整數(shù)蹄殃,正好16個二進制位诅岩。0到1023的端口
被系統(tǒng)占用吩谦,用戶只能選用大于1023的端口
。不管是瀏覽網(wǎng)頁還是在線聊天卿堂,應用程序會隨機選用一個端口
懒棉,然后與服務器的相應端口
聯(lián)系策严。
確切的說妻导,傳輸層實現(xiàn)的是端對端的服務倔韭,網(wǎng)絡層實現(xiàn)的僅僅是主機到主機之間的服務瓢对。只要確定主機和端口硕蛹,我們就能實現(xiàn)程序之間的交流硕并。因此倔毙,Unix系統(tǒng)就把主機+端口陕赃,叫做"套接字"(socket)凯正。
5.2 UDP協(xié)議
現(xiàn)在又出了一個新的數(shù)據(jù)廊散,就是端口信息∥嗥#現(xiàn)在以太網(wǎng)數(shù)據(jù)包里已經(jīng)包括發(fā)送者幌氮,接受者信息,數(shù)據(jù)類型米者,IP地址數(shù)據(jù)包蔓搞,UDp數(shù)據(jù)包喂分。
UDP數(shù)據(jù)包同樣是由標頭和數(shù)據(jù)組成:
標頭
部分主要定義了發(fā)出端口和接收端口蒲祈,
數(shù)據(jù)
部分定義了具體的內(nèi)容萝嘁。然后把它放在IP地址數(shù)據(jù)包的數(shù)據(jù)部分牙言,前面我們說過IP數(shù)據(jù)包是放在以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)里面的嬉挡,那么現(xiàn)在整個以太網(wǎng)數(shù)據(jù)包就成了這樣:
UDP數(shù)據(jù)包非常簡單,"標頭"部分一共只有8個字節(jié)拔恰,總長度不超過65,535字節(jié)颜懊,一個IP數(shù)據(jù)包正好可以容納。
5.3 TCP協(xié)議
為了解決這個問題匠璧,提高網(wǎng)絡可靠性夷恍,TCP協(xié)議就誕生了酿雪。這個協(xié)議非常復雜侄刽,但可以近似認為州丹,它就是有確認機制的UDP協(xié)議墓毒,每發(fā)出一個數(shù)據(jù)包都要求確認。如果有一個數(shù)據(jù)包遺失磺芭,就收不到確認醉箕,發(fā)出方就知道有必要重發(fā)這個數(shù)據(jù)包了讥裤。
因此己英,TCP協(xié)議能夠確保數(shù)據(jù)不會遺失损肛。它的缺點是過程復雜、實現(xiàn)困難摩泪、消耗較多的資源劫谅。
TCP數(shù)據(jù)包和UDP數(shù)據(jù)包一樣捏检,都是內(nèi)嵌在IP數(shù)據(jù)包的"數(shù)據(jù)"部分。TCP數(shù)據(jù)包沒有長度限制熊楼,理論上可以無限長孙蒙,但是為了保證網(wǎng)絡的效率挎峦,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度合瓢,以確保單個TCP數(shù)據(jù)包不必再分割晴楔。
關于TCP協(xié)議的三次握手和四次揮手過程博主在網(wǎng)絡協(xié)議分析這篇博客里有較為詳細的說明税弃。
6. 應用層
應用層直接和應用程序接口并提供常見的網(wǎng)絡應用服務。 ——應用層(維基百科)
6.1 應用層介紹
應用程序收到"傳輸層"的數(shù)據(jù)幔翰,接下來就要進行解讀遗增。由于互聯(lián)網(wǎng)是開放架構做修,數(shù)據(jù)來源五花八門饰及,必須事先規(guī)定好格式,否則根本無法解讀步悠。
"應用層"的作用鼎兽,就是規(guī)定應用程序的數(shù)據(jù)格式谚咬。
舉例來說择卦,TCP協(xié)議可以為各種各樣的程序傳遞數(shù)據(jù)郎嫁,比如Email泽铛、WWW盔腔、FTP等等。那么瓢喉,必須有不同協(xié)議規(guī)定電子郵件栓票、網(wǎng)頁走贪、FTP數(shù)據(jù)的格式链烈,這些應用程序協(xié)議就構成了"應用層"强衡。
這是最高的一層码荔,直接面對用戶。它的數(shù)據(jù)就放在TCP數(shù)據(jù)包的"數(shù)據(jù)"部分越败。因此究飞,現(xiàn)在的以太網(wǎng)的數(shù)據(jù)包就變成下面這樣:
上面買的坑改填了亿傅,我們前面說過葵擎,我們對于目標主機的IP地址肯定知道的,為什么呢签餐?還有就是當兩臺計算機不在同一個子網(wǎng)絡的時候氯檐,我們需要通過本機所在子網(wǎng)絡的網(wǎng)關A男摧,再通過路由協(xié)議得到目標主機子網(wǎng)絡的網(wǎng)關B耗拓,由網(wǎng)關B將我們要發(fā)送給目標主機的數(shù)據(jù)包發(fā)送給目標主機乔询。那么韵洋,網(wǎng)關又是什么呢搪缨?
6.2 DNS協(xié)議
我們都知道由于IP地址不方便記憶副编,我們創(chuàng)造了域名這個概念。
DNS(網(wǎng)域名稱系統(tǒng)打月,Domain Name System蚕捉,有時也簡稱為域名)是因特網(wǎng)的一項核心服務迫淹,它作為可以將域名和IP地址相互映射的一個分布式數(shù)據(jù)庫敛熬,能夠使人更方便的訪問互聯(lián)網(wǎng),而不用去記住能夠被機器直接讀取的IP地址數(shù)串盹靴。
例如稿静,damonare.cn是一個域名改备,和IP地址119.29.180.47相對應悬钳。DNS就像是一個自動的電話號碼簿默勾,我們可以直接撥打damonare的名字來代替電話號碼(IP地址)聚谁。我們直接調(diào)用網(wǎng)站的名字以后形导,DNS就會將便于人類使用的名字(如 damonare.cn)轉(zhuǎn)化成便于機器識別的IP地址(如119.29.180.47)朵耕。
已知DNS服務器為8.8.8.8(這個和IP地址一樣管理員告知或是通過自行設置的)阎曹,于是我們向這個地址發(fā)送一個DNS數(shù)據(jù)包(53端口):
DNS服務器做出響應,告訴我們Google的IP地址是172.194.72.105形娇。于是筹误,我們知道了對方的IP地址厨剪。
6.2 網(wǎng)關
網(wǎng)關要區(qū)別于路由器(由于歷史的原因祷膳,許多有關TCP/IP的文獻曾經(jīng)把網(wǎng)絡層使用的路由器(英語:Router)稱為網(wǎng)關直晨,在今天很多局域網(wǎng)采用都是路由來接入網(wǎng)絡勇皇,因此現(xiàn)在通常指的網(wǎng)關就是路由器的IP)焚刺,經(jīng)常在家庭中或者小型企業(yè)網(wǎng)絡中使用乳愉,用于連接局域網(wǎng)和Internet。
前面我們已經(jīng)說過發(fā)送以太網(wǎng)數(shù)據(jù)包捕虽,需要知道兩個地址:
- 對方的MAC地址
- 對方的IP地址
有了這兩個地址薯鳍,數(shù)據(jù)包才能準確送到接收者手中挖滤。但是斩松,前面說過觉既,MAC地址有局限性,如果兩臺電腦不在同一個子網(wǎng)絡钧椰,就無法知道對方的MAC地址嫡霞,必須通過網(wǎng)關(gateway)轉(zhuǎn)發(fā)诊沪。
上圖中,1號電腦要向4號電腦發(fā)送一個數(shù)據(jù)包晕粪。它先判斷4號電腦是否在同一個子網(wǎng)絡巫湘,結(jié)果發(fā)現(xiàn)不是(后文介紹判斷方法)昏鹃,于是就把這個數(shù)據(jù)包發(fā)到網(wǎng)關A盆顾。網(wǎng)關A通過路由協(xié)議您宪,發(fā)現(xiàn)4號電腦位于子網(wǎng)絡B宪巨,又把數(shù)據(jù)包發(fā)給網(wǎng)關B,網(wǎng)關B再轉(zhuǎn)發(fā)到4號電腦极祸。
6.3 DHCP協(xié)議
新買的電腦通常你必須做一些設置遥金,才能上網(wǎng)蒜田,有時冲粤,管理員(或者ISP)會告訴你下面四個參數(shù),你把它們填入操作系統(tǒng)窝撵,計算機就能連上網(wǎng)了:
- 本機的IP地址
- 子網(wǎng)掩碼
- 網(wǎng)關的IP地址
- DNS的IP地址
由于它們是給定的碌奉,計算機每次開機蝌矛,都會分到同樣的IP地址入撒,所以這種情況被稱作"靜態(tài)IP地址上網(wǎng)"椭岩。如下圖Window靜態(tài)IP上網(wǎng)設置界面:
這樣的設置很專業(yè)献雅,但普通用戶望而生畏塌计,而且如果一臺電腦的IP地址保持不變,其他電腦就不能使用這個地址章钾,不夠靈活贱傀。出于這兩個原因府寒,大多數(shù)用戶使用"動態(tài)IP地址上網(wǎng)"株搔。
動態(tài)IP地址上網(wǎng)使用的協(xié)議就是DHCP協(xié)議
纯蛾,這個協(xié)議規(guī)定茅撞,每一個子網(wǎng)絡中,有一臺計算機負責管理本網(wǎng)絡的所有IP地址糊啡,它叫做"DHCP服務器"吁津。新的計算機加入網(wǎng)絡碍脏,必須向"DHCP服務器"發(fā)送一個"DHCP請求"數(shù)據(jù)包典尾,申請IP地址和相關的網(wǎng)絡參數(shù)钾埂。
前面說過褥紫,如果兩臺計算機在同一個子網(wǎng)絡髓考,必須知道對方的MAC地址
和IP地址
氨菇,才能發(fā)送數(shù)據(jù)包门驾。但是,新加入的計算機不知道這兩個地址楣责,怎么發(fā)送數(shù)據(jù)包呢秆麸?
DHCP協(xié)議
做了一些巧妙的規(guī)定。
首先DHCP協(xié)議是建立在UDP協(xié)議之上及汉,所以整個數(shù)據(jù)包是這樣的:
- (1).最前面的"以太網(wǎng)標頭"沮趣,設置發(fā)出方(本機)的MAC地址和接收方(DHCP服務器)的MAC地址。前者就是本機網(wǎng)卡的MAC地址坷随,后者這時不知道房铭,就填入一個廣播地址:FF-FF-FF-FF-FF-FF驻龟。
- (2).后面的"IP標頭",設置發(fā)出方的IP地址和接收方的IP地址缸匪。這時翁狐,對于這兩者露懒,本機都不知道。于是,發(fā)出方的IP地址就設為0.0.0.0荞怒,接收方的IP地址設為255.255.255.255。
- (3).最后的"UDP標頭",設置發(fā)出方的端口和接收方的端口砾淌。這一部分是DHCP協(xié)議規(guī)定好的,發(fā)出方是68端口劫乱,接收方是67端口。
這個數(shù)據(jù)包構造完成后殖妇,就可以發(fā)出了。以太網(wǎng)是廣播發(fā)送磅氨,同一個子網(wǎng)絡的每臺計算機都收到了這個包。因為接收方的MAC地址是FF-FF-FF-FF-FF-FF叉橱,看不出是發(fā)給誰的,所以每臺收到這個包的計算機,還必須分析這個包的IP地址探膊,才能確定是不是發(fā)給自己的。當看到發(fā)出方IP地址是0.0.0.0,接收方是255.255.255.255姿骏,于是DHCP服務器知道"這個包是發(fā)給我的",而其他計算機就可以丟棄這個包擅腰。
接下來,DHCP服務器讀出這個包的數(shù)據(jù)內(nèi)容沐绒,分配好IP地址,發(fā)送回去一個"DHCP響應"數(shù)據(jù)包蹋肮。這個響應包的結(jié)構也是類似的漆魔,以太網(wǎng)標頭的MAC地址是雙方的網(wǎng)卡地址,IP標頭的IP地址是DHCP服務器的IP地址(發(fā)出方)和255.255.255.255(接收方)阿纤,UDP標頭的端口是67(發(fā)出方)和68(接收方),分配給請求端的IP地址和本網(wǎng)絡的具體參數(shù)則包含在Data部分匕荸。
新加入的計算機收到這個響應包,于是就知道了自己的IP地址腹泌、子網(wǎng)掩碼、網(wǎng)關地址钟鸵、DNS服務器等等參數(shù)涤躲。
6.4 小結(jié)
應用層比較重要的協(xié)議還有大名鼎鼎的HTTP協(xié)議,這個在博主的網(wǎng)絡協(xié)議分析這篇博客里對于TCP/HTTP協(xié)議有較為詳細的分析,在這里就不多做介紹了。
后記
通過整篇博客分析,我想整個互聯(lián)網(wǎng)的層級劃分就很清楚了无宿,也應該明白了數(shù)據(jù)是如何發(fā)送的彬碱,大概的過程就是如此灵奖,但互聯(lián)網(wǎng)協(xié)議浩如煙海究極一生可能也無法真正理解。此篇博客僅僅作為一個入門攀细,也算是一個大致的思路。關于數(shù)據(jù)包數(shù)據(jù)具體的形式,路由,以及其他協(xié)議就需要讀者自己去進一步發(fā)掘理解了。
參考文章: