作者:百哥
本期分享:系列15點到16點半-技術熱訊
感謝大家關注-百哥,請大家持續關注就可以了哦!
眾元教育技術公開課:更多認證知識
眾元教育技術交流裙:414605852
提到“地址”,我們會想到快遞,收發快遞時候,得有發件人地址和收件人地址,才能保證快遞能正確的送達目的地,比如這樣
ip地址其實就是互聯網上的地址,全稱Internet Protocol Address,我們在網上刷知乎啊,刷美劇啊,和師妹聊天啊,其實就是一個一個數據包在互聯網上收發的過程。
知乎有個ip,我們電腦有個ip,這篇回答就從知乎發到了電腦上。
b站有個ip,我們電腦有個ip,后浪就從b站發到了電腦上。
師妹手機有個ip,我們電腦有個ip,師妹消息總是不來,不知道為什么。
那么,我們電腦的ip地址是什么樣呢
百度一下,怎么查看ip地址,我們能看到這樣的內容
ip地址分為ipv4和ipv6,當前主流是ipv4
可以看出現在這台電腦的ip地址是192.168.11.165
那么這個地址是怎么來的呢,我們打開電腦就開始刷知乎刷b站和師妹聊天,並沒有設置地址呀
在我們網絡里有個“dhcp服務器”,dhcp服務器的作用就是給各個電腦(或手機)自動分配ip地址。
第一步,電腦開機,沒地址,會發出一個請求地址的數據包。這個數據包叫dhcp discover,是要發給dhcp服務器的,向dhcp服務器請求地址。
現在問題來了,是先有雞還是先有蛋的問題。
雞是由蛋孵出來的,所以得先有蛋。
蛋是雞下的,所以得先有雞。
互聯網上的報文必須有源地址和目標地址,所以得先有地址才能把數據包發出去。
現在要發個包給dhcp服務器,但是沒有地址,這個包怎么發出去呢?
雞和蛋的千古難題,無法考證
但是dhcp是這么做的
電腦發出的包,沒地址沒關系,就把源地址寫成0.0.0.0,所以數據包中看到這個地址,說明源主機暫時還沒有地址,但是為了遵循互聯網協議標准,先把地址寫上0.0.0.0
目標地址應該是dhcp服務器,但是dhcp服務器是誰也不知道呀,這里就把目標地址寫成255.255.255.255,這個特殊地址代表“廣播”,顧名思義,就是給所有人都發。
數據包的內容也很簡單,意思就是“請dhcp服務器回答,我需要個地址”
那么無關主機收到,就會丟棄這個包,因為自己不是dhcp服務器,不回答。
dhcp服務器收到,那么就會履行他的職責,給電腦分配一個地址。
如圖,通過抓包工具捕獲的dhcp discover包,源地址是0.0.0.0,目標地址是255.255.255.255
現在看dhcp工作的第二步,發offer
dhcp服務器收到請求后,會給電腦分配地址,這也是通過一個數據包返回給電腦的。電腦收到這個包,就會根據dhcp協議為自己配上地址。
等下,問題又來了,剛才說了電腦還沒地址,那么dhcp服務器是怎么把這個包發給電腦的的呢?
雖然電腦沒ip地址,但是電腦有另外一個地址,“mac地址”,也就是前面那張圖片上的“物理地址”,dhcp服務器也可以通過mac地址將數據包發給電腦,這樣電腦收到后,就會給自己配上ip地址了。
聽起來很復雜,既然用mac地址就可以,為什么非得配ip地址,這么麻煩
答案是這樣的,雖然可以用mac地址通信,但是只限於本地通信,也就是一個很小的局域網,沒辦法加入互聯網,所以也沒辦法刷知乎,看b站,和師妹聊天了。所以還是得有ip地址。
現在來看dhcp工作的第二步,也就是dhcp服務器給電腦發的dhcp offer包。
這里看到目標mac地址
打開offer包,會看到服務器准備給電腦分配的地址。
然后第三步,電腦會通過發送dhcp request包,確定使用這個地址。
服務器明明都把地址發過來了,為什么電腦還要再申請一次呢?
是因為網絡中為了可靠性,可能會部署多台dhcp服務器,這樣電腦可能會收到多個offer,到底使用哪個地址,則需要再發一個dhcp request來確認。服務器也是收到dhcp request后,才會真正的把這個地址分配出去。
最后一步,dhcp服務器通過ack包,真正的把地址分配給電腦
那么ip地址中的“子網掩碼”是做什么用的呢,配置地址時,子網掩碼是必不可少的
舉個熟悉的例子
小明是大一新生,小明的學號是05510050433
小明看到另一個學號,立即可以知道另一個同學和自己是不是同班同學。
比如好看的女生小紅05510050435是同班同學
好看的男生小藍05510030313不是同班同學
怎么看出的呢,學號前面部分數字相同就是同班同學
學號大致分為兩部分,前面部分是班級編號,后面部分是個人編號。
現在回到ip地址和子網掩碼
電腦(或者手機、ipad、小愛同學)都要聯網,聯網就會有ip地址,ip地址一般是自動獲取的,但是如果用手動配置的話,會發現必須填寫子網掩碼,否則是不讓確認的。
子網掩碼的作用,是確定ip地址所在的網段。
小明必須知道自己的班級,電腦也必須知道自己的網段。
小明學號的前9位代表班級編號,這個是學校制定的
那么ip地址的前多少位代表網段呢,這個就得看子網掩碼了。
ip地址分為兩部分,前面部分叫“網絡位”,類似於學號中的班級編號,只要兩個ip的網絡位相同,那么他們就是同網段。
ip地址后面的部分叫“主機位”,代表這個主機的個體編號,類似學號中老師每次點名喊的數字。
那么兩個ip是否同網段,要看他們的網絡位是否相同
192.168.1.199
255.255.255.0
這樣的掩碼,代表192.168.1.是網絡位,另一個地址只要也是192.168.1開頭,就是同網段了
192.168.1.199
255.255.0.0
這樣的掩碼,代表192.168.是網絡位,另一個地址只要192.168開頭就是同網段了
看到這里,應該已經發現規律了,子網掩碼幾個255,那ip地址的前幾段就是網絡位
可是實際情況往往錯綜復雜。
比如蘋果手機熱點給電腦分配的地址是這樣的
發現掩碼是3個255還帶個240
在實際的工程項目中,也會做類似的網絡規划,那么后面這個240又是怎么回事呢
這里需要把ip地址換成二進制來看,用win10 自帶的計算器可以換算,先算完再來看原理。
打開打算器,選擇“程序員”,輸入172,可以得到172對應的二進制,然后再得到其他幾個數的二進制。
172=10101100
20=00010100
10=00001010
8=00001000
注意,每個數字都要湊齊8位的二進制,不夠8位前面寫0
換算完后,ip地址172.20.10.8變成了
10101100. 00010100. 00001010. 00001000
然后再換算掩碼
255.255.255.240變成了
11111111.11111111.11111111.11110000
發現掩碼非常整齊,前面全是1后面全是0
那這里怎么從掩碼來得出網絡位,其實非常簡單,掩碼有多少個1,ip地址的前多少位就是網絡位,那么這個ip的網絡位就是前28位
也就是10101100. 00010100. 00001010. 0000
如果另一個ip的二進制,前28位也是這樣,那么就是同網段
當然,二進制很不友好,所以我們還可以計算出自己所在的網段的范圍
那就是網絡位固定下來,主機位從全0到全1就可以
10101100. 00010100. 00001010. 00000000到10101100. 00010100. 00001010. 00001111
換回十進制就是
172.20.10.0到172.20.10.15
所以,超過15的都不是同網段了。
用掩碼算了半天的網段,那么問題來了,為什么要算網段?
因為對電腦老說,訪問同網段的目標,和訪問不同網段的目標,采取的通信方法不一樣,他得先知道是否同網段,才能做下一步的動作。
如果目標是同網段,那么可以直接通信,直接發數據就好了。
如果目標不是同網段,那么不能直接通信,必須先交給一個中間人,也就是網關設備,由網關設備幫忙轉發。