0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

電腦怎么知道自己的IP地址的?

小林coding ? 來源:八股文網(wǎng)站 ? 作者:八股文網(wǎng)站 ? 2022-11-04 14:21 ? 次閱讀

今天這篇文章,很有意思,它來源于我曾經(jīng)的一次真實面試里的其中一個小問題。

當時是終面,面我的是那家公司的技術(shù)顧問,在面試前hr還讓我看了他的履歷,是一位1996年就進了麻省理工計算機系的大佬。

屬實有被震驚到,什么概念?1996年,沒記錯的話那是個用BP機和大哥大的年代?有幾個人能用上電腦?又有幾個人有這種機會能出國深造。

這是哪部爽文小說的主人公劇情?

就算放到現(xiàn)在,這也是非常強的事情。

我這輩子是沒希望了,也不知道我的兒子或者孫子輩有沒有機會能做到。

也就是說,這位大佬,至少領(lǐng)先了我兩代人。

那一天,我感受到了,那種跨越時代的碾壓感。

好了,不講騷話了,直接開始主題吧。

我們知道,如果你知道某臺電腦的IP,就可以向這個IP發(fā)起連接請求,建立連接后就可以操作收發(fā)數(shù)據(jù)。

8f781cfe-5c05-11ed-a3b6-dac502259ad0.png

五層網(wǎng)絡(luò)協(xié)議對應(yīng)的消息體變化分析

要發(fā)送的數(shù)據(jù),會在網(wǎng)絡(luò)層里加入IP頭。

8f8ae28a-5c05-11ed-a3b6-dac502259ad0.png

ip報頭

這里面最重要的是發(fā)送端和接收端的IP地址。這個IP地址就像是一個門牌號一樣,有了它,數(shù)據(jù)包就能在這個紛繁復雜的網(wǎng)絡(luò)世界里找到該由誰來接收這個數(shù)據(jù)包。

所以說上面的網(wǎng)絡(luò)通信離不開IP。

假設(shè)我有一臺新買的電腦,還沒聯(lián)網(wǎng)呢,這時候拿著新買的網(wǎng)線,插入網(wǎng)線口,網(wǎng)線插口亮起來了。

然后就可以開始用它上網(wǎng)了。

那么問題來了。

剛插上網(wǎng)線,電腦怎么知道自己的IP是什么?怎么就突然能上網(wǎng)了呢?

這個話題,我們從DHCP聊起吧。

DHCP是什么

插上網(wǎng)線之后,獲得IP的方式主要有兩種。

第一種是,自己手動在電腦里配。像下圖那樣,是macOS的一個截圖,在選擇手動配置之后,除了IP地址還需要配上子網(wǎng)掩碼和路由器的地址。

8f9e6800-5c05-11ed-a3b6-dac502259ad0.png

手動配IP

這就很不科學了,電腦又不只是賣給程序員,這幾個詞對于大部分普通人來說,比賦能抓手閉環(huán)這種黑話還要難理解。

大部分人沒事都不應(yīng)該去配這玩意。

有沒有辦法可以讓這些IP信息自動獲得?

有,這就是第二種獲取IP的方式,DHCP(DynamicHostConfigurationProtocol,動態(tài)主機配置協(xié)議)。

8fb24a46-5c05-11ed-a3b6-dac502259ad0.png

DHCP自動生成IP

通過DHCP,在聯(lián)網(wǎng)之后可以自動獲取到本機需要的IP地址,子網(wǎng)掩碼還有路由器地址。

DHCP的工作原理

DHCP的工作原理也非常簡單。

說白了,就是向某個管IP分配的服務(wù)器,也就是DHCP服務(wù)器,申請IP地址。其實一般家里用的路由器就自帶這個功能。

整個操作流程分為4個階段。

8fcd5dd6-5c05-11ed-a3b6-dac502259ad0.png

DHCP協(xié)議

DHCP Discover:在聯(lián)網(wǎng)時,本機由于沒有IP,也不知道DHCP服務(wù)器的IP地址是多少,所以根本不知道該向誰發(fā)起請求,于是索性選擇廣播,向本地網(wǎng)段內(nèi)所有人發(fā)出消息,詢問"誰能給個IP用用"。

DHCP Offer:不是DHCP服務(wù)器的機子會忽略你的廣播消息,而DHCP服務(wù)器收到消息后,會在自己維護的一個IP池里拿出一個空閑IP,通過廣播的形式給回你的電腦。

DHCP Request:你的電腦在拿到IP后,再次發(fā)起廣播,就說"這個IP我要了"。

DHCP ACK:DHCP服務(wù)器此時再回復你一個ACK,意思是"ok的"。你就正式獲得這個IP在一段時間(比如24小時)里的使用權(quán)了。后續(xù)只要IP租約不過期,就可以一直用這個IP進行通信了。

到這里,問題來了

為什么要有第三和第四階段

大家有沒有發(fā)現(xiàn),在Offer階段,其實你的機子就已經(jīng)拿到了IP了,為什么還要有后面的Request和ACK呢?是不是有些多此一舉?

這是因為本地網(wǎng)段內(nèi),可能有不止一臺DHCP服務(wù)器,在你廣播之后,每個DHCP服務(wù)器都有可能給你發(fā)Offer。

本著先到先得的原則,你的機子一般會對第一個到的Offer響應(yīng)DHCP Request,目的是為了確認offer,在你確認Offer這段時間內(nèi),DHCP服務(wù)器確認這個IP還沒被分出去,你才可以安心使用這個IP。

像不像你找工作的過程?

你海投簡歷(DHCP Discover),然后拿到了多個offer(DHCP Offer)。

這時候事情還沒完,你一般會跟HR說:"你給我兩天時間,我要跟家里人商量下"。

HR也會對你說:"那你盡快確認,我這邊還有不少候選人等著"。

之后你考慮下來覺得不錯,跟HR說要接這個Offer(DHCP Request),HR看了下這個崗位還在,才能確認讓你第二天來上班(DHCP ACK)。如果這個公司的崗位已經(jīng)招到其他候選人了,第四階段的消息就會改為發(fā)DHCP NAK,意思是拒絕了你的接Offer請求。

DHCP抓包

光看原理是有些枯燥,我們可以嘗試下抓包看下數(shù)據(jù)。

在命令行里執(zhí)行下面的命令,可以強行讓電腦的en0網(wǎng)卡重新走一遍DHCP流程。

sudoipconfigseten0DHCP

en0可以替換成其他網(wǎng)卡,比如eth0啥的。

這時候就可以抓到相關(guān)的數(shù)據(jù)包。

8fe9903c-5c05-11ed-a3b6-dac502259ad0.png

我們可以看到藍色的四個數(shù)據(jù)包,分別對應(yīng)上面提到的四個DHCP階段。

其中第二階段中的DHCP Offer里會返回給我們需要的IP、子網(wǎng)掩碼、路由器地址以及DNS服務(wù)器地址。

8ffca3a2-5c05-11ed-a3b6-dac502259ad0.png

offer階段

另外,通過抓包,我們可以發(fā)現(xiàn)DHCP是應(yīng)用層的協(xié)議,基于傳輸層UDP協(xié)議進行數(shù)據(jù)傳輸。

9013b678-5c05-11ed-a3b6-dac502259ad0.png

那么問題又來了。

為什么DHCP用UDP,能不能改用TCP?

按道理說,UDP能做到的,TCP一般也能做到。但這次真不行。

主要原因還是因為TCP是面向連接的,而UDP是無連接的。

所謂"連接",他就只有一個發(fā)送端和一個接收端,就跟水管一樣。

而DHCP由于一開始并不知道要跟誰建立連接,所以只能通過廣播的形式發(fā)送消息,注意,小細節(jié),廣播。

902a09f0-5c05-11ed-a3b6-dac502259ad0.png

廣播尋找DHCP服務(wù)器.drawio

同樣是在本地網(wǎng)段內(nèi)發(fā)廣播消息,UDP只需要發(fā)給255.255.255.255。它實際上并不是值某個具體的機器,而是一個特殊地址,這個地址有特殊含義,只要設(shè)了這個目的地址,就會在一定本地網(wǎng)段內(nèi)進行廣播。

而TCP卻不同,它需要先建立連接,但實際上255.255.255.255對應(yīng)的機器并不存在,因此也不能建立連接。如果同樣要做到廣播的效果,就需要先得到本地網(wǎng)段內(nèi)所有機器的IP,然后挨個建立連接,再挨個發(fā)消息。這就很低效了。

因此DHCP選擇了UDP,而不是TCP。

為什么第二階段不是廣播,而是單播。

903a281c-5c05-11ed-a3b6-dac502259ad0.png

另外一個小細節(jié)不知道大家注意到?jīng)],上面在提到 DHCP Offer 階段時,提到的是DHCP服務(wù)器會使用廣播的形式回復。但抓個包下來卻發(fā)現(xiàn)并不是廣播,而是單播。

其實,這是DHCP協(xié)議的一個小優(yōu)化。原則上大家在DHCP offer階段,都用廣播,那肯定是最穩(wěn)的,目標機器收到后自然就會進入第三階段DHCP Request。而非目標機器,收到后解包后發(fā)現(xiàn)目的機器的mac地址跟自己的不同,也會丟掉這個包。

但是問題就出在,這個非目的機器需要每次都在網(wǎng)卡收到包,并解完包,才發(fā)現(xiàn)原來這不是給它的消息,這。。。真,有被打擾到。

如果本地網(wǎng)段內(nèi)這樣的包滿天飛,也浪費機器性能。

如果能用單播,那當然是最好的。但這時候目的機器其實并沒有IP地址,有些系統(tǒng)在這種情況下能收單播包,有些則認為不能收,這個跟系統(tǒng)的實現(xiàn)有關(guān)。因此,對于能收單播包的系統(tǒng),會在發(fā)DHCP Discover階段設(shè)一個Broadcast flag = 0 (unicast)的標志位,告訴服務(wù)器,支持單播回復,于是服務(wù)器就會在DHCP Offer階段以單播的形式進行回復。

90519bbe-5c05-11ed-a3b6-dac502259ad0.png

Discover要求使用單播回復

是不是每次聯(lián)網(wǎng)都要經(jīng)歷DHCP四個階段?

只要想聯(lián)網(wǎng),就需要IP,要用IP,就得走DHCP協(xié)議去分配。

但大家也發(fā)現(xiàn)了,DHCP第一階段和第二階段都可能會發(fā)廣播消息。對于家用電腦還好,插個網(wǎng)線,之后就雷打不動。但像手機這樣的移動設(shè)備,是要帶著到處跑的,坐個地鐵,進個電梯,公司里到處走走,都可能會涉及到網(wǎng)絡(luò)切換。

這每次都要來一個完整的四階段,各種廣播消息滿天飛,其實對網(wǎng)絡(luò)環(huán)境不太友好。

于是問題叒來了,是不是每次聯(lián)網(wǎng)都要經(jīng)歷DHCP四個階段?

當然不需要。

我們會發(fā)現(xiàn)每次斷開wifi再打開wifi時,機子會經(jīng)歷一個從沒網(wǎng)到有網(wǎng)的過程。

這時候去抓個包,會發(fā)現(xiàn)。

9063fe58-5c05-11ed-a3b6-dac502259ad0.png

其實只發(fā)生了DHCP的第三和第四階段。這是因為機子記錄了曾經(jīng)使用過 192.168.31.170這個IP,重新聯(lián)網(wǎng)后,會優(yōu)先再次請求這個IP,這樣就省下了第一第二階段的廣播了。

另外需要注意的是,抓包圖里DHCP Request之所以出現(xiàn)兩次,是因為第一次Request發(fā)出后太久沒得到回應(yīng),因此重發(fā)。

DHCP分配下來的IP一定不會重復嗎?

一般來說DHCP服務(wù)器會在它維護的IP池里找到一個沒人用的IP分配給機子,

這個IP如果重復分配了,那本地網(wǎng)段內(nèi)就會出現(xiàn)兩個同樣的IP,這個IP下面卻對應(yīng)兩個不同的mac地址。但其他機器上的ARP緩存中卻只會記錄其中一條mac地址到IP的映射關(guān)系。

于是,數(shù)據(jù)在傳遞的過程中就會出錯。

因此本地網(wǎng)段內(nèi)IP必須唯一。

那么DHCP分配下來的IP有沒有可能跟別的IP是重復的?

都這么問了,那肯定是可能的。

有兩個常見的情況會出現(xiàn)IP重復。

文章開頭提到,IP是可以自己手動配的,自己配的IP是有可能跟其他DHCP分配下來的IP是相同的。解決方案也很簡單,盡量不要手動去配IP,統(tǒng)一走DHCP?;蛘咴贒HCP服務(wù)器里維護的IP范圍里,將這條IP剔除。

一個本地網(wǎng)段內(nèi),是可以有多個DHCP服務(wù)器的,而他們維護的IP地址范圍是有可能重疊的,于是就有可能將相同的IP給到不同的機子。解決方案也很簡單,修改兩臺DHCP服務(wù)器的維護的IP地址范圍,讓它們不重疊就行了。

不過吧,上面的解決方案,都需要有權(quán)限去修改DHCP服務(wù)器。

得到DHCP ACK之后立馬就能使用這個IP了嗎?

這就好像在問,拿到offer之后你是第一時間就去上班嗎?

不。

你會先告訴你的同事同學朋友,甚至會發(fā)朋友圈。

你的機子也一樣。

在得到DHCP ACK之后,機子不會立刻就用這個IP。

而是會先發(fā)三條ARP消息。

907b2fba-5c05-11ed-a3b6-dac502259ad0.png

大家知道ARP消息的目的是通過IP地址去獲得mac地址。所以普通的ARP消息里,是填了IP地址,不填mac地址的。

但這三條ARP協(xié)議,比較特殊,它們叫無償ARP(Gratuitous ARP),特點是它會把IP和mac地址都填好了,而且填的還是自己的IP和mac地址。

目的有兩個。

一個是為了告訴本地網(wǎng)段內(nèi)所有機子,從現(xiàn)在起,xx IP地址屬于xx mac地址,讓大家記錄在ARP緩存中。

另一個就是看下本地網(wǎng)段里有沒有其他機子也用了這個IP,如果有沖突的話,那需要重新再走一次DHCP流程。

在三次無償ARP消息之后,確認沒有沖突了,才會開始使用這個IP地址進行通信。

總結(jié)

電腦插上網(wǎng)線,聯(lián)網(wǎng)后會通過DHCP協(xié)議動態(tài)申請一個IP,同時獲得子網(wǎng)掩碼,路由器地址等信息。

DHCP分為四個階段,分別是 Discover,Offer, Request和ACK。如果曾經(jīng)連過這個網(wǎng),機器會記錄你上次使用的IP,再次連接時優(yōu)先使用原來的那個IP,因此只需要經(jīng)歷第三第四階段。

DHCP是應(yīng)用層協(xié)議,考慮到需要支持廣播功能,底層使用的是UDP協(xié)議,而不是TCP協(xié)議。

DHCP分配下來的IP是有可能跟某臺手動配置的IP地址重復的。

DHCP得到IP之后還會發(fā)3次無償ARP通告,在確認沒有沖突后開始使用這個IP。

最后給大家留個問題吧。我們上面的IP都是從DHCP服務(wù)器上申請的,在服務(wù)器返回DHCP Offer的時候,可以看到上面寫了DHCP服務(wù)器的IP。比如192.168.31.1,這明顯是個局域網(wǎng)內(nèi)的IP,但這能說明,你的DHCP服務(wù)器一定在這個局域網(wǎng)里嗎?

90931076-5c05-11ed-a3b6-dac502259ad0.png

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • IP
    IP
    +關(guān)注

    關(guān)注

    5

    文章

    1610

    瀏覽量

    149246
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    248

    瀏覽量

    24344

原文標題:你不好奇剛插上網(wǎng)線,電腦怎么知道自己的 IP 地址的?

文章出處:【微信號:小林coding,微信公眾號:小林coding】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    根據(jù)ip地址查網(wǎng)頁怎么查詢?

    一、通過命令提示符查詢查網(wǎng)頁(Windows系統(tǒng)) ①按“Win+R”鍵,打開運營窗口。 根據(jù)ip地址查網(wǎng)頁怎么查詢? ②輸入“cmd”+“回車”,打開命令提示符窗口。 ③輸入“nslookup
    的頭像 發(fā)表于 09-29 10:56 ?626次閱讀
    根據(jù)<b class='flag-5'>ip</b><b class='flag-5'>地址</b>查網(wǎng)頁怎么查詢?

    IP地址小分享

    一、IP地址的作用與重要性 唯一標識:在網(wǎng)絡(luò)通信中,每個連接到互聯(lián)網(wǎng)的設(shè)備都必須擁有唯一的IP地址,這樣才能確保數(shù)據(jù)在網(wǎng)絡(luò)中正確地路由和傳遞。想象一下,如果網(wǎng)絡(luò)中的設(shè)備沒有
    的頭像 發(fā)表于 09-25 14:21 ?151次閱讀
    <b class='flag-5'>IP</b><b class='flag-5'>地址</b>小分享

    IP地址會被黑?

    IP地址會被黑?是的,你的IP地址如果不幸被惡意分子盯上,就會被惡意利用,這會引發(fā)一系列明顯的異常表現(xiàn)。就像網(wǎng)絡(luò)會突然變得異常緩慢,下載速度驟降,網(wǎng)頁無法加載,更甚至在打游戲時,頻繁出
    的頭像 發(fā)表于 09-12 14:24 ?250次閱讀

    如何查看公共IP地址安全?這些要點要牢記

    網(wǎng)絡(luò)已經(jīng)離不開我們的生活,當你在訪問網(wǎng)絡(luò)時,不管是為了娛樂、工作還是其他目的,不可避免要接觸公共IP地址,為確保自己的個人隱私、工作數(shù)據(jù)等的安全我們必須要確保IP
    的頭像 發(fā)表于 09-07 11:18 ?253次閱讀

    關(guān)于IP地址的那些事兒

    網(wǎng)絡(luò)現(xiàn)如今已經(jīng)成為我們生活中不可或缺的一部分。很多人就開始會開始好奇,“我的IP是什么?”“我一直使用同一個IP嗎?”“我能擁有屬于自己IP嗎?”今天我們就來討論這些問題。 ? 我的
    的頭像 發(fā)表于 09-06 16:04 ?193次閱讀

    IP地址與子網(wǎng)劃分

    子網(wǎng)的劃分,實際上就是設(shè)計子網(wǎng)掩碼的過程,它指的是指將一個給定的IP網(wǎng)絡(luò)地址空間劃分為更小的子網(wǎng)絡(luò)。 在子網(wǎng)掩碼中用1和0來分別網(wǎng)絡(luò)號和主機號,其中是1的表示是網(wǎng)絡(luò)部分,0表示的是主機部分,所有
    的頭像 發(fā)表于 09-06 09:46 ?269次閱讀

    IP地址安全與隱私保護

    在當今數(shù)字化時代,IP地址作為網(wǎng)絡(luò)設(shè)備的唯一身份標識,在網(wǎng)絡(luò)安全與隱私保護中扮演著至關(guān)重要的角色。然而,隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,IP地址也面臨著諸多挑戰(zhàn),對用戶的隱私和網(wǎng)絡(luò)安全構(gòu)成了潛
    的頭像 發(fā)表于 09-03 15:59 ?296次閱讀

    IP地址與NAT技術(shù)的結(jié)合與應(yīng)用

    隨著互聯(lián)網(wǎng)用戶增多,IPv4地址資源日益緊張,IPv6尚未完全普及,而私有IP地址的的使用讓內(nèi)部網(wǎng)絡(luò)可以靈活構(gòu)建,但無法直接訪問互聯(lián)網(wǎng)。NAT技術(shù)的出現(xiàn)解決了這一矛盾,它允許內(nèi)部網(wǎng)絡(luò)使用私有I
    的頭像 發(fā)表于 08-28 17:30 ?292次閱讀

    購買海外虛擬IP地址可以通過以下幾種方式#虛擬IP地址

    ip地址
    jf_62215197
    發(fā)布于 :2024年08月16日 07:16:04

    IP地址與DNS的關(guān)系

    IP地址和DNS是網(wǎng)絡(luò)架構(gòu)中的重要組成部分。IP地址是計算機網(wǎng)絡(luò)中用于標識設(shè)備的唯一地址,而DNS則是負責將域名解析為
    的頭像 發(fā)表于 08-12 17:40 ?357次閱讀

    IP地址的分配

    公有IP地址與私有IP地址 公有IP地址:用于互聯(lián)網(wǎng)上的全球唯一
    的頭像 發(fā)表于 08-09 14:55 ?425次閱讀

    IP地址基礎(chǔ)科普

    IP地址是我們在網(wǎng)絡(luò)上識別設(shè)備的“身份證”。 1. 什么是IP地址? IP地址是一個用來標識網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-22 11:55 ?418次閱讀

    IP地址與網(wǎng)絡(luò)監(jiān)控

    在當今的數(shù)字時代,網(wǎng)絡(luò)安全已成為企業(yè)和個人都十分關(guān)注的重要話題。通過IP地址進行網(wǎng)絡(luò)監(jiān)控,可以有效地檢測異常流量和可疑活動,從而保護網(wǎng)絡(luò)免受潛在威脅。本文將詳細討論如何利用IP地址進行
    的頭像 發(fā)表于 07-09 16:41 ?355次閱讀

    如何綁定ip地址與mac物理地址呢?

    如何綁定ip地址與mac物理地址呢? 綁定IP地址與MAC物理地址是一種網(wǎng)絡(luò)管理和安全措施,可以
    的頭像 發(fā)表于 12-07 09:33 ?6374次閱讀

    局域網(wǎng)IP地址不夠用怎么解決

    如果是在一個小型的局域網(wǎng)里可能完全不必要考慮IP地址不夠的情況,但是在超過“255臺”電腦的大型局域網(wǎng)里,就必須要考慮電腦IP
    的頭像 發(fā)表于 12-05 10:13 ?932次閱讀
    局域網(wǎng)<b class='flag-5'>IP</b><b class='flag-5'>地址</b>不夠用怎么解決