openwrt dhcp 无法获取ip_电脑的 ip 是怎么来的呢?我又没有配置过
來源 | 苦逼的碼農(nóng)
作者 | 帥地
對于我們平時上網(wǎng)的電腦的 ip 是如何來的呢?一種簡單的方法就是我們自己來配置了
顯然,這里有兩種配置方式,一種是自動獲取 ip 地址,一種是我們手動來設(shè)置,我相信大部分人都是通過自動獲取的方式來得到 ip 的,那么問題來了,它是如何自動獲得到的呢?
客戶端請求 ip
可能很多人都知道,是通過 DHCP 服務(wù)器來獲取 ip 的,那么問題來了,你要給 DHCP 服務(wù)器發(fā)報文來獲取 ip,那么你知道 DHCP 服務(wù)器的 ip 是多少嗎?自己客戶端的源 ip 又是多少呢?現(xiàn)在啥也不知道,該如何發(fā)送報文呢?
為了解決這個問題,客戶端會發(fā)送一個廣播,我們知道,廣播報文是會發(fā)送局域網(wǎng)內(nèi)的所有其他主機的,廣播的目的 ip 是 255.255.255.255,目的端口是 67,為了讓別人知道它是來請求一個 ip 的,我們的客戶端會把 0.0.0.0 作為自己的源 ip,源端口是 68。意在告訴別人:我現(xiàn)在啥也沒有,急需一個 ip,哪位老鐵能給我提供一個 ip。
我們把這個請求 ip 的報文稱之為 discover 報文。
這里提醒一些,這里發(fā)送的報文都是采用 UDP 報文,而不是 TCP 報文哈,下同。
DHCP響應(yīng)
當 DHCP 服務(wù)器收到這個報文之后,一看源地址是 0.0.0.0,就知道生意來了,知道這是一個請求 ip 的報文,DHCP 服務(wù)器就會給它提供一個 ip,包括 ip 地址,子碼掩碼,網(wǎng)關(guān),ip 的有效期等信息。
有人可能會問,只有源 ip 為 0.0.0.0 的信息,我們怎么把報文發(fā)送到它的手里呢?這不,我們每臺電腦不都有 Mac 地址嗎?在 discover 報文中,就會包含它的 MAC 地址了,DHCP 服務(wù)器,只需要發(fā)一個廣播報文就可以了,廣播報文的源ip是 DHCP ?服務(wù)器自己的 ip,源端口是 67,目的地址是 255.255.255.255,目的端口是 68
我們把 DHCP 提供 ip 地址的報文稱之為offer報文。
客戶端挑選 ip 地址
我們知道,有可能不止一臺 DHCP 服務(wù)器收到了 discover 請求報文,也就是說,我們的主機可能會收到多個 offer 報文,所以呢,我們的主機會選擇其中一個心儀的 offer 報文來作為自己的 ip,一般是選擇最先收到的 offer 報文,選擇好之后,會給對應(yīng)的 DHCP 服務(wù)器次發(fā)送一個 request 報文,意在告訴它,我看中了你的報文。
DHCP 收到 request 報文之后,會給它回復一個 ACK 報文,并且把這個分配出去的 ip 進行登記(例如把這個 ip 標記為已使用狀態(tài))。
當我們的主機收到 ACK 報文之后,就可以開始沖浪在網(wǎng)上沖浪了。
幾點說明
這里可能有人會說,如果 DHCP 服務(wù)器沒有在我們所在的局域網(wǎng)里怎么辦?這個時候,這個 discover 報文 就會通過我們的網(wǎng)關(guān)來進行傳遞,并且會把源 ip 替換成網(wǎng)絡(luò)的 ip,源端口是 68,這里涉及到 NAT 地址到轉(zhuǎn)換,不懂的可以看我之前的一篇文章。
談?wù)凬AT:什么?全球IP和私有IP是什么鬼?
DHCP 服務(wù)器收到報文之后,就可以根據(jù)源端口 68 來判斷這是一個 discover 請求報文了。就會把 offer 發(fā)給網(wǎng)關(guān),網(wǎng)關(guān)再發(fā)給我們的主機。
租期
在DHCP客戶端的租約時間到達 1/2 時,客戶端會向為它分配 IP 地址的DHCP服務(wù)器發(fā)送 request 單播報文,以進行 IP 租約的更新。如果服務(wù)器判斷客戶端可以繼續(xù)使用這個 IP 地址,就回復 ACK 報文,通知客戶端更新租約成功。如果此IP地址不能再分配給客戶端,則回復 NAK 報文,通知客戶端續(xù)約失敗。
如果客戶端在租約到達 1/2 時續(xù)約失敗,客戶端會在租約到 7/8 時間時,廣播發(fā)送 request 報文進行續(xù)約。DHCP服務(wù)器處理同首次分配 IP 地址的流程。
最后
這個過程中,涉及到聽多種報文,為了篇幅不要太長,我有些報文沒有詳細說,這里為了方便大家查看,我把所有報文都總結(jié)了一下
| Discove | DHCP客戶端請求地址時,會在本地網(wǎng)絡(luò)內(nèi)以廣播方式發(fā)送請求報文,這個報文成為Discover報文。 |
| Offer | DHCP服務(wù)器收到Discover報文后,會構(gòu)造一個Offer報文(包括各種所需要的各種),發(fā)送給用戶 |
| Request | DHCP客戶端可能會收到很多Offer,所以必須在這些回應(yīng)中選擇一個。Client通常選擇第一個回應(yīng)Offer報文的服務(wù)器作為自己的目標服務(wù)器,并回應(yīng)一個廣播Request報文,通告選擇的服務(wù)器 |
| ACK | DHCP服務(wù)器收到Request報文后,根據(jù)Request報文中攜帶的用戶MAC來查找有沒有相應(yīng)的租約記錄,如果有則發(fā)送ACK報文作為回應(yīng),通知用戶可以使用分配的IP地址 |
| NAK | 如果DHCP服務(wù)器收到Request報文后,沒有發(fā)現(xiàn)有相應(yīng)的租約記錄或者由于某些原因無法正常分配IP地址,則發(fā)送NAK報文作為回應(yīng),通知用戶無法分配合適的IP地址。 |
| Release | 當用戶不再需要使用分配IP地址時,就會主動向DHCP服務(wù)器發(fā)送Release報文,告知服務(wù)器用戶不再需要分配IP地址,DHCP服務(wù)器會釋放被綁定的租約。 |
| Decline | DHCP客戶端收到DHCP服務(wù)器回應(yīng)的ACK報文后,通過地址沖突檢測發(fā)現(xiàn)服務(wù)器分配的地址沖突或者由于其他原因?qū)е虏荒苁褂?#xff0c;則發(fā)送Decline報文,通知服務(wù)器所分配的IP地址不可用。 |
| Inform | DHCP客戶端如果需要從DHCP服務(wù)器端獲取更為詳細的配置信息,則發(fā)送Inform報文向服務(wù)器進行請求,服務(wù)器收到該報文后,將根據(jù)租約進行查找,找到相應(yīng)的配置信息后,發(fā)送ACK報文回應(yīng)DHCP客戶端 |
如果大家對計算機網(wǎng)絡(luò)這塊感興趣的話,后續(xù)會算法和計算機網(wǎng)絡(luò)穿插講勒。如果有哪里說錯了,歡迎指點出來!
你可能會喜歡
1、為什么你學不會遞歸?告別遞歸,談?wù)勎业囊恍┙?jīng)驗
2、【面試被虐】游戲中的敏感詞過濾是如何實現(xiàn)的?
3、一文讀懂一臺計算機是如何把數(shù)據(jù)發(fā)送給另一臺計算機的
4、騰訊面試:一條SQL語句執(zhí)行得很慢的原因有哪些?---不看后悔系列
5、史上最全各類面試題匯總,沒有之一,不接受反駁
總結(jié)
以上是生活随笔為你收集整理的openwrt dhcp 无法获取ip_电脑的 ip 是怎么来的呢?我又没有配置过的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis timeout设置多少合适_
- 下一篇: AJAX 信息查询管理