??在這一章當中我們講述計算機網絡基礎。
一、計算機網絡
??網絡通信就像人與人之間的交流一樣,說同一種語言,而后雙方進行無障礙的通信交流,那么兩臺主機通信時,它們彼此交換數據的格式的前提為互相理解才可以,我們此前也有了解到,當兩臺主機在交換數據時,一般而言這個數據為流式數據,或者叫做可流式化的數據,簡單來講假如在本地放的是一個文件,這個文件是由文本流組成的,我們需要將這個文本文件的文本流將其抽成絲兒,一個位一個位轉換成1和0組成的二進制格式,這樣才能在線路介質上進行傳輸,那么對于這臺主機之間,我們只需知道需要數據完成交換時,也有一種傳輸介質,這種傳輸介質可以是有線的,常見的有以太網網線,在以太網未出現之前早期使用的是同軸電纜來實現信號傳輸,到今天為止還有另外一種更為常用的就是基于電磁波信號來進行傳輸的,這其實都是傳輸信號的一種方式,來實現其信號交換的機制。
??無論是用那種信號方式進行傳輸,必然的是,當傳送方發出信號后,接收方必須能理解對方是如何傳送的,真正傳送文件時,文件大小在本地的容量有所不同,假設要傳輸五個文件到另一臺主機上,則必須要界定文件的開始和結尾處,這實際上兩臺計算機之間要想完成數據傳輸并且讓對方做到精確理解時,通過網絡傳輸無非就是二進制01
的信號,傳達給對方之后,對方如何理解并還原成原來的文件就變得至關重要,但是兩臺主機之間為了完成信號傳輸需要解決的問題有很多,不光是文件本身的格式,還要恢復原來的樣子也是一個問題,比如在傳輸信號過程中萬一線路收到干擾,導致信號傳遞失敗該如何解決,還有雙方在實現數據交換時,如果一方發的速度很快,而另一方接收很慢,這樣的話,發送方的數據流會將接收方給淹沒,導致數據丟失,因此這里面有許多復雜的問題。
??實際上,在現在的互聯網當中所使用到的協議為TCP/IP協議,TCP/IP其實不是一個協議,它是一個協議簇,也可以稱之為協議棧,因為在這里涉及到許許多多的協議,那么協議可以理解為是一種標準或規范,就是雙方事先商定的一種組織機制,并協調的一種機制。
??對于計算機來講,要想了解網絡的話,就得需要深度參與進去,需要人為的參與,因為站在自然角度來講,它們是沒有辦法能夠自行解決的,因此計算機網絡上的主機與之間,完成信息交換時也講過這是一個很復雜的問題,不過可以將其化整為零,一個一個的逐個擊破,所以說主機之間的通信所面臨的非常復雜的問題,就得必須劃分層次,每一個層次逐一能夠單獨進行解決,那么這就是協議分層的概念,而TCP/IP協議棧共有四層或五層(看人為理解),哪一種模型都不為錯,因為本身TCP/IP協議棧從設計上并不太規范,而OSI才是一個非常規范的協議棧,但是這并不能說明TCP/IP是在計算機網絡中正在廣泛使用的協議棧,因為這個世界并非完美,不管黑貓白貓,抓到老鼠就是好貓。
??由于TCP/IP定制的不規范,而且該協議在概念上有很模糊,所以ISO(國際標準組織)就定制了OSI(開放系統互聯)參考模型,它也是個協議棧及協議規范,原先就是取代TCP/IP協議接口之間的不規范,而且接口之間交互及邊界模糊不清的目的,但并沒有取代,因為OSI設計上是規范了,理解起來也清晰了,但是帶來的問題就是該協議過于重量級,為了接口規范,它在性能上做了許多妥協,有些功能在OSI協議棧的內部實現了多次,所以該協議比起TCP/IP來講有些過于重量級,所以OSI就成為了學習的模型,但TCP/IP是一個使用中的模型。
??計算機通信是需要協議的,而就在之前講過,它們之間的問題太復雜了,所以將大問題分割成為了小問題,而這些小問題彼此之間交接起來來完成,就像收發快遞一樣,如果我們將一個包裹從A地發往B地的話,有以下方式:第一,親自跑到B地,不過這樣很麻煩,那么如果可以讓包裹可以飛起來的話,則解決了很多麻煩,至于如何飛肯定是由第三方機構所為我們提供,那么A和B為了完成物品交換的問題,有一些物流公司來解決這樣的一個問題,幫我們提供數據交換的服務,那么對于A來講,為了發送包裹給B,只需調用物流公司的接口,也就是說自己去還是上門取件,這就是接口調用的機制,至于如何傳送的,無需關心,只關心B是否接收成功就可以了。
??所以站在這個角度來講,物流就是社會實現物品交換的一個基礎設施即服務,而對于計算機來講,為了完成數據能夠交換,我們最起碼有網卡這樣的接口,還需要有傳輸介質,無論是有線還是無線,可以理解為它們是為了實現通信的基礎設施,但我們應該明白,基礎設置能夠傳輸很多物品,無論大到×××,小到一張紙發送給對方都可以的,不管你要傳輸什么物品,一般而言就能夠承載完成傳遞的任務,同樣的道理,兩臺主機所實現的數據交換,不管你的數據形態是什么(大到電影,小到文件),這個介質都能夠進行傳遞,但傳遞過去之后,在傳遞過程中我們需要關注一些問題,比如說將數據打碎如何還原成原來的形態,對于傳輸來講,這也是必須要這么做的一件功能,基于現代的通信交換通常都是按照位
來進行的,數據無論是什么形態,最終都要流式化,所以雙方彼此之間要在協調與商定,如何將數據進行流式化,以及如何還原。如果你的數據不能還原,避免出現這樣的問題,則雙方都得需要某種協議,來定義數據的交換類型以及數據交換如何進行,所以這里涉及到一些復雜的問題。
??計算機傳輸的過程我們無需關心,只要能將流式化的數據傳輸過去就可以,并且能夠還原回來,但是如何還原需要了解物品的原生形態的問題,這涉及到文件本身的組織格式,所以說TCP/IP網絡也大致分為兩個層次,第一個為較低的層次是關心數據如何送往及傳輸的功能,而第二層就是將數據是如何被組織起來的,站在另一個角度來講,我們的網絡被成為通信子網
和資源子網
,所謂通信子網只是關心你的數據到底如何從該主機送往另一臺主機,而所謂的資源子網主要關注的就是如何將數據組織起來。
??一般而言,對于TCP/IP來講,負責完成數據交換或完成通信的,就叫做通信子網,無論有幾個層次,而負責文件類型數據內部組織格式的,就叫做資源子網。
??簡單闡述一下上面的內容,其實就是為了完成數據交互及傳輸,于是就有了TCP/IP協議,以及提供了便于理解的OSI的學習參考模型,我們都需要去了解,但是我們需要了解的是,我們要對于一個復雜的問題切割成多個小問題,但兩臺主機進行通信時,在底層的物理結構上,將其組織起來。
??但其實主機之間實際上不止有兩臺,所以我們不考慮多臺的復雜問題,只是考慮兩臺完成信號交換很容易,一方發送一方接收就可以了。但是對于計算機網絡來講,這件事情復雜很多,因為在一個網絡時,組織的計算機是很多的,當我們組織n臺主機在一起時,如何將它們實現通信及傳輸信號也是個問題,在施樂公司的PACK實驗室里,他們研發了現代主流的以太網網絡,那個時候的以太網網絡是一種使用同軸線纜,每個同軸線纜可以做多個T型頭,每個T型頭可以使主機鏈接到同一根兒線纜上,意味著這一根物理傳輸介質,它所帶來的問題就是,A主機如果想和C主機通信時,底層的線纜上給調至相應的電壓信號施加到該線纜上,高低電壓,這個線纜充滿的信號,所以說不止C能收到,B也可以收到,那么這時如果B和D也想傳輸信號,則是不允許的,因為B和D在想施壓時,則造成信號干擾,因此這四臺主機在某一時刻只能有一個信號來進行傳輸。因此,等通信信道空閑時,那一臺主機就開始搶占通信信道進行數據傳輸。
??那么這樣會帶來幾個問題,A發信號時,B也發了,二者必然會沖突,那么如何避免沖突,既然空間中不能復用,則只能進行時間上的復用,實際上計算機網絡組織有很多問題需要解決,這也是其中一種,但解決的方案有很多種,在以太網當中引入了一種協議叫做CSMA/CD
,叫做載波偵聽多路訪問/沖突檢測協議,也可以理解為這也是一種線路仲裁的機制,A、B、C、D這四個主機,每一個主機在發信號之前,先去檢測一下該線路是否被占用,如果沒有占用,則開始搶占該線路,進行數據傳輸,如果同時占用該線路時,則載波偵聽:將數據邊發送變檢測,檢測是否有別的主機同時到達的信號以至于不要發生沖突,所以載波偵聽還要沖突檢測,如果沒有檢測到沖突,則傳輸完成退出,如果檢測到其它信號干擾,則此前的信號傳輸將被打斷,于是不得不終止剛才的信號傳輸,過一會在重試。總之就是如果信道正繁忙那就等待一個隨機時間在檢測,如果線路空閑時將會立即發送信號,并且邊發送變檢測是否有沖突發生,如果沒有沖突發生將會持續發送數據信號,在傳輸信號的過程中檢測到沖突的話則立即停止信號傳輸,并且后退隨機等待一段時間再次檢測,這就是CSMA/CD的解決方案。
??還有一種是IBM早期研發的網絡,稱之為令牌環網,將多臺主機連接到可以想象為是一個還狀網絡中,在這個環狀網絡上游走一個令牌,這個令牌在這個網絡上不斷的游走著,任何一個主機想要發送信號時,必須得有令牌才可以,誰擁有這個令牌,誰就能夠擁有傳輸數據的權限,其它主機則不可能有該權限發送信號,它也可以解決所有主機使用該線路去爭用的問題,因為它的解決方案就是誰抓住令牌誰就能發送信號。
??那么對于現在的以太網就是使用使用同軸線纜去連接多個主機,使用CDMA/CD來解決在信道上的網絡就稱之為以太網。那么A發送給C的信號B和D能看到但是并不接收,這是因為每個主機都有一個標識,這就相當于在信封上有個收件人的地址,同樣的道理,每個主機主機都應該有唯一的標識,這種唯一標識對于以太網來講,都會在主機上使用一個以太網的物理設備,來完成對主機上的內部基于IO的方式來完成信號的交換。這個IO設備我們通常稱之為網卡,該設備有自己唯一的標識符,而這個標識符就是我們所熟知的MAC地址,而MAC所表示的意思為介質訪問控制,MAC地址是固定在網卡設備上的,要求生產的網卡的公司或組織都可以生產網卡,而且將網卡的MAC地址固定進去,為了防止各個廠商之間的網卡地址相同,于是乎就有個國際組織來規范的來組織解決地址分配避免沖突等問題。我們知道MAC地址共有48位的二進制組成,國際名稱地址分配機構ICANN
將48位的地址塊這樣做了定義,前24位地址共有2^24
,大約有一千六百萬個地址,如果你想用需要就得購買,但凡以太網網卡廠商通常都是從該組織購買的,注冊申請其中一個或某些個地址,而這個過程我們就稱之為注冊地址的過程,而后24位也共有2^24
,是作為廠商來講是可以隨意變換的,主要保證生產網卡的當中不會有沖突就可以,而這前24位我們就稱之為地址塊,要是廠商還是不夠用的話,可以繼續再次購買。
??因此,計算機之間在底層的通信上解決了這些基本的問題,但是還有另外一個層次的問題,當同一個網絡上的主機越多越多時,在以太網中是變檢測變發信號,等到沖突就收回信號的一種機制,但有很多臺主機時,沖突則就大大增加,大大增加的話則就會將沖突無時無刻的增加,相當于前世五百年凈回眸,換來今生的擦肩而過,這里也是一樣, 凈是沖突。所以我們必須要解決該問題,雖然有很多的主機,但是真正交互的沒有幾臺,不可能對每個主機彼此進行交互,可能率極小,我們可以將通信頻繁非常大的主機放置在一個網絡中,另外一些主機放置在另一個網絡中,將其切割,但是切割就成為了兩座孤島,如果需要跨越這層需要網絡進行通信的話,最簡單的合并方式顯然是不妥當的,我們可以找一個專門的設備將兩個網絡連接起來,這個設備有一定的智能性,智能在連接這兩個網絡能夠判斷A主機發送的信號,如果發送給X主機的,該設備將信號從該網絡發送到另一個網絡中去,但是該主機僅限制在本地通信的話,比如A和B之間通信,那么該設備是不會傳送到另一個網絡中去,因此就避免了沖突,那么這個該設備就是網橋,它能解決在跨越主機時將信號傳送到另一個網絡中去。將沖突性問題給分割開來,所以網橋的作用就是分割沖突域的,無論是本地通信還是夸網絡通信,網橋其實都能接收到一份,但是在本地通信時,并不會將信號發送到另一個網絡中去,但是某一個主機需要夸網絡時,網橋才能將信號傳送給另一個網絡中的另一臺主機,因此它分割并連接了兩個網絡。
??那么網橋是如何知道那個網絡中有那臺主機是憑著內部有一個地址簿,它明確知道某個主機在哪一個接口上,當接收到A主機發送信號的時候,通過檢查該地址簿就發現,因為不管那個主機發送的信號,其里面肯定會有收信者,這個收信者一定是某臺主機的地址,因此則根據收信者的地址查看該表,查看發現自己收到目標的接和目標主機都在同一個接口上,于是乎就認為這個是不需要進行轉發的,但收到信號來自于左側接口,但是一查表發現目標主機X在右側接口,于是將數據將左側接口發往右側接口,那么這個過程就叫做數據交換的過程,這也是該設備也被稱之為交換機的原因。那么這張地址表我們也稱之為MAC地址表。
??但是我們需要開始要考慮一個問題,A主機有可能發送到的是廣播信號,所謂的廣播信號就是,A主機發送的信號不是針對的某一臺,而是事先商定的任何一臺主機都可以接收的一個地址,這個地址我們就稱之為廣播地址。全為1時就是廣播地址,因此A主機發送的信號為目標地址是48個1,其它主機認為都可以接收,那么網橋設備也認為另一端的網絡也可以收到該廣播信號,因為這個設備也不確定該信號的目標主機,這時候交換機一定會將廣播信號送給右側接口一份,另一側的主機也都接收到了該廣播信號,這樣做的后果是交換器忙著轉發廣播信號,而廣播信號由于每個主機都要接收,久而久之如果廣播信號過多時,則在網絡內都會充斥著廣播信號。
??廣播信號的作用就是在網絡內搜尋其它主機,為了避免大范圍的廣播信號,我們可以廣播信號將其切割使得廣播報文所到達的范圍是有限的,就像一個部門一樣,新同事來了對該部門進行自我介紹,而不是對全公司,這就限制了廣播的范圍。此前我們容易理解,對于MAC地址來講,通常為兩段組成,而且第一段是不由我們自己來控制的,是由ICANN來控制的,第二個其實也是不由我們控制,好在地址不同就可以,所以這使得我們的通信地址是平面的,是一個平面化的地址,所謂的平面化地址只能在同一個范圍內進行通信。
??如果將大范圍切割成為小范圍,當我們需要完成通信時,將地址變得立體化時,則變得簡便許多,與層級化結構相同,它也是一種倒置的樹狀結構,將一個大范圍切割成n個小范圍,從根處逐一向下去找,一級一級向下去找,將范圍劃分的越來越小,而現在的主機和手持的終端設備是有很多的,則更要將通信的范圍將其切割,因此它們也是的確這樣做的,假如在一個可控的組織內,有許多臺主機,為了避免廣播范圍過大,許多臺主機為了互相通信,使得網橋設備之間相互連接,假設A主機與X2主機進行通信,無非這個報文就是從第一個交換機交換到第二個交換機,而第二個交換機將數據放置在右側端口送達X2,那么在這時,A主機送一個廣播則全網都能收到,這也是必然的,那么為了避免廣播規模過大的問題,我們也需要將地址切割成立體化結構,而后在兩臺設備之間在加上一個隔離廣播的設備。必要時,如果A主機需要和X2主機通信時,依舊是可以通信的,但是不能夠用廣播的方式與X2進行通信,任何一個主機的廣播只能限制在自己的部門內,該設備可以想象成是一個部門的分割器,那么A主機與X2通信時與之前的方式是不一樣的,比如說A與X2進行通信,發送報文給X2,那么第一個交換機(S1),其實不知道有X2這臺主機,因為S1的所有操作都無法跨越該隔離設備,因此該設備S1無法知道是有X2主機的,但X2的確是存在的,這樣的話A主機與X2被該設備相隔了,雖然有可能知道,但是就是傳遞不過去,為了避免這種情況發生,當A主機發送信號時,S1發現這個廣播域并沒有該設備,就會送到該隔離設備,我們稱之為R1,送到R1之后,由R1負責發送,由1號口發送給2號口,為了具有一定的智能性,R1在1號口和2好口所屬的網絡做了應有的標記,各自有一個網絡號,用于標識各個范圍的網絡,A主機屬于1號網絡,X2主機屬于2號網絡,當A主機與X2主機通信時就會改成這種方式:我需要將信號發送給2號網絡的X2主機,所以這個報文送給S1以后,S1并不知道有沒有該主機,但是A主機要知道要將報文發送給R1的2號接口,R1的一號接口發現其目標主機是2號網絡的,所以將報文就從1號網絡扔到2號網絡中去,而A主機的廣播信號R1是置之不理的。
??但是有可能具體有某個報文信號從1號網絡路由到2號網絡,完成這個功能,所以站在這個角度來講,每個網絡都得有網絡號來實現該功能,但是MAC地址是不能標記網絡號,因為我們沒有辦法來進行界定,因此為了解決該問題,在原有的地址之上,重新設計一套地址標識方式,就像×××號碼一樣,MAC地址只能在本地通信時才能使用,如果非本地通信而是跨網絡通信時,使用另外一層的地址,賦予某個新的地址,那個新的地址就是給每臺主機一個網絡號,使用MAC地址固然很好用,但是并不是同一套設計體系,而這個網絡號的主機的標識方法為,在設立該主機一個網絡號的同時,設立自己的主機號,因此則整個地址就會被分成為兩段,網絡號+主機號
,而這就是我們所現在使用的IP地址。
??因此,有了IP地址以后,或者擁有了這樣的標記以后,我們的主機就擁有了兩個地址,第一個就是網卡上內嵌的地址就是我們剛才稱之為的MAC地址,第二個就是自己官方所講到的,為了實現編寫容易以及跨網絡進行通信,就需要額外給其添加的邏輯地址,這個邏輯地址我們通常就稱之為IP地址,IP就叫做互聯網地址,又稱為互聯網協議Internet Protocol
,而這個地址(address
)由網絡號和主機號共同組成,所以這樣的話,彼此主機之間相互通信時,需要指明那個網絡中的的那個主機來接收報文就可以了,我們需要同時標記那個網絡中的那個主機,但是,網絡號和主機號也在之前講過,對于計算機來講,更容易識別的是數字,假設有個網絡為1號網絡中的2號主機,如何編寫到一起的聯系更加方便這也是個問題,那么IP地址其實就是解決這么一個問題的地址,它將網絡號和主機號聯系在一起,同時進行標識,而這個標識就叫做IP地址,所以一個IP地址的內部包含了網絡號和主機號。
??那么IP地址的組織格式或組織標識為點分十進制,共有32bits二進制組成(注意:只有32bits組成
),由于這是第四版,我們稱之為IPv4
,IP共有兩種版本,一種為IPv4
,另一種為IPv6
,而IPv6共有128bits
二進制,我們在現階段只介紹IPv4,這32為地址每八位一段,使用點號.
隔開,轉換十進制每8位標識0-255
,因此該地址的表示范圍為:0.0.0.0-255.255.255.255
,這四段當中如何定義那些是網絡號以及那些是主機號是非常重要的,對于網絡來講,既有大型網絡又有小型網絡,可能對于一個小型的網絡來講,容納兩百臺以上的主機,可以將最后一個8bits
設定為主機號,因此對于規模不同的網絡要求也是不相同的,因此我們不能將IP地址直接定死那些當作網絡號,那些當作主機號。需要根據不同的使用場景進行靈活的調度。那么,這就是我們接下來所講述的IP地址的分類。
???計算機網絡:TCP/IP協議棧(使用)ISO,?OSI:協議棧(學習)MAC:?Media?Access?Control48bits:ICANN:?24bit,?2^24地址塊:2^24網橋(bridge):MAC地址表靜態指定:動態學習:根據源地址學習;交換機(switch):多端口網橋;IP(Internet?protocol)地址:網絡號+主機號A?<-->?B網絡?主機?IPv4:32bits8bits.8bits.8bits.8bits0-2550.0.0.0-255.255.255.255
二、IP地址分類
??我們需要注意的是,在互聯網上通信的,只有A、B、C
三類。D類是組播地址,E類姑且算科研用。
2.1 A類地址
??IP地址共分為五類,由A、B、C、D、E
來進行標識,對于A類來講,前8位二進制當中,第一位為0不變,后7位可以隨意變化,我們現在知道IP地址共有4段組成,將第一段當作網絡號,后三段為主機號。所以網絡號的變化范圍為:由于第一位0是固定不變的,后7位可以隨意變化,可表示為0 000 0000 - 0 1111 1111
,這樣的話,網絡號的數量范圍為1-127
,需要注意的是,全0不能用,以及全1也不能用,所以有效的網絡范圍為1-127
。所以A類地址的第一段為網絡號,而后三段為主機號,那么對于A類來講的網絡數量為127個,但其實共有126個,因為127被拿來當作本地環回地址。而每個網絡中的主機數量為2^24-2
,其中2^24
表示了主機的范圍,而減去兩個則表示全0全1不能配置,因為全0的為網絡地址,表示其網絡自身,全1的為廣播地址,表示網絡內所有主機。子網掩碼為255.0.0.0
,而子網掩碼是用來做如果目標主機和本地主機在同一個網絡中,那么這個是不需要路由器進行參與,因為路由器是用來實現跨網絡主機通信的,那么如何判定本地主機和目標主機是否在一個網絡時,需要靠掩碼來實現,掩碼是對每一個通信的主機,該主機用自己的掩碼和IP地址按位進行"與"
運算,1與誰向與還等于誰,0與誰相與都得0。這是該兩個特點,因此,掩碼的主要作用就是將對應的網絡號的一部分都置為1,用來表示計算的結果還是自己,而對應的主機號置為0,用來取得網絡地址。所以子網掩碼的作用就是用來"與"
計算IP地址,計算以后取得網絡地址。
??因此,掩碼就是用于與IP地址按位進行"與"運算,從而取出其網絡地址的一種機制,每一個主機和其它的主機進行通信時,通常都有自己的地址,也有對方的地址,所以它會拿著掩碼與自己的IP地址做一次"與"運算,得到一個網絡號。并且與對方的地址做一次"與"運算,又得一個網絡號,之后開始比較這兩個網絡號是否一樣,如果一樣則進行本地通信,如果不一樣則跨網絡通信,夸網絡通信則需要路由器進行轉發。
??對于A類來講,我們可以劃分子網,既然有默認掩碼,也可以沒有默認掩碼,可以繼續做三級或四級劃分。
??每一類網絡當中,需要注意的是,既然有了IP地址,那么IP地址的分配也是由國際名稱地址分配機構所分配的,任何人要想使用互聯網通信使用該地址時,是需要買地址塊,或者買一個地址,如果不打算進行互聯網通信,而僅僅是用于本地通信的話,需要購買地址也是對我們需要在本地通信的用戶也是非常不友好的,所以他們也想到保留下一些地址,只進行在本地通信的用戶而使用,但是不能用于互聯網通信,而這些地址我們就稱之為私網地址。私網地址就表示,雖然有這些地址,但只能在有限的范圍內進行通信,比如說在公司內部進行通信,但不能在互聯網上進行通信,互聯網不會將該數據包進行轉發的。
??那么對于A類地址總結如下:
???IP地址分類:A類:第一段為網絡號,后三段為主機號網絡號:0?000?0000?-?0?111?1111:?1-127網絡數量:126,?127每個網絡中的主機數量:2^24-a默認子網掩碼:255.0.0.0,?/8用于與IP地址按位進行"與"運算,從而獲取其網絡地址;1.5.2.1/255.0.0.0?=?1.0.0.03.2.4.6/255.0.0.0?=?3.4.0.0私網地址:10.0.0.0/255.0.0.0
2.2 B類地址
??對于B類網來講,基本的套路與之前A類的套路都是一樣的,只不過有些不同而已,在這里不做闡述,總結如下:
???????B類:前兩段為網絡號,后兩段為主機號網絡號:10?00?0000?-?10?11?1111:?128-191網絡數:2^14-2每個網絡中的主機數量:2^16-2默認子網掩碼:255.255.0.0.?/16私網地址:172.16.0.0-172.31.0.0
2.3 C類地址
???????C類:前三段為網絡號,后一段為主機號網絡號:110?00000?-?110?11111:?192-113網絡數:2^21-2每個網絡中的主機數量:2^8-2默認子網掩碼:255.255.255.0,?/24私網地址:192.168.0.0-192.168.255.255
??那么以上就是我們IP地址的分類,需要背會和算劃分出來IP及網絡地址。
三、路由器
??路由器所看到IP地址進行通信時,自動尋找最佳路線進行數據包的傳送,路由器如何知道那個網絡屬于哪里是有一個路由表來進行決策的,所以無論是交換機還是路由器的智能性表現在:交換機(前身為網橋
)的智能性表現在擁有MAC地址表,網橋如何知道那個主機在那個接口上的是通過兩種方式來指定:第一,靜態指定,通俗一點來說就是手動配置,不過這樣很麻煩,也是非常繁瑣的事情。第二,動態學習,交換機會自動學習learn
,在剛開始時,交換機上的接口并不知道接入的是那臺主機,但是當A主機發送一個報文的時候,該主機一定是從某個接口接入的,所以交換機就知道,假如A主機是從1號接口接入發送報文的,該接口收到A所發的報文,無論發給誰,只記錄A在那個接口上發送的,所以這是根據源地址進行學習,這就是動態學習的過程,它的好處就是無需手動配置,壞處在于必須要有一個有效期限,因為交換機自動學習到的源地址,但該主機移除了,所以MAC地址表中的條目都會有一個TTL
值,我們稱之為生存周期,這個生存周期一般默認為300秒鐘,那么時間周期過了之后就會該源地址就會被刪除,過一會還得需要重新學習,這樣的話交換機大量的時間用來進行學習,在這學習過程的當中,有可能會發送大量廣播,因為交換機如果不知道該主機在那個接口上,就只能發送廣播給每個接口使得該主機接收并回饋給交換機,這種我們就稱之為泛洪。
??而對于路由器來說,剛才提到過,路由器靠的是路由表,能實現IP地址轉發的報文叫做路由器設備,我們稱之為router
,另外剛才所講到的網橋設備,一般指的是交換機,但是他倆并不是同一種東西,交換機一般指的是多個端口,現代的智能化網橋,早期網橋通常用來連接兩個網絡,現在的交換機有多個接口,而且并不是連接的網絡,而是連接的是單獨的主機,那么我們把它稱之為交換機(switch
),又把它稱之為多端口網橋。
??對于路由器來講,剛才也講過,內部是靠路由表來事先判定該主機通信時目標主機在那個網絡上,從而能轉發給那個接口。路由器可能不止一個接口,或者不止兩個或n個,它們能連接多個網絡,但全球的網絡非常龐大,從那個網絡到那個網絡這也是一個問題,事實上全球的路由器可能是分成多個等級的,路由器可分成多個分支,層層環扣,跨國家以及夸大洋是可以的,那么一臺國內的主機與另一臺國家的主機進行通信,中間是有n條路徑可以走的,有很多路徑可以到達,但無論多少條路,選擇的路只有一條,不過無論多少條路,姑且那一條路最近這是最好的選擇。而且那一條最近的路是根據估算標準來進行決策,有所謂的路徑最短,以及花銷最少,還有就是時間最短的,所以說,估算標準不一樣使得有很多條路可以走,看對于那條路來進行估算,是根據時間還是很據距離等。
??因此,我們要在選路時,找出一種標準來完成所謂的其路徑×××的計算標準,所以我們的路由實現的路由協議算法時,通常的算法第一個為距離矢量,例如像RIP
協議,還有一個就是OSPF
,OSPF叫做開放最短路徑優先,但至少是在我們的路由表當中,應該會定義一下最終每一條路由表都應該知道自己在網絡中所處在什么位置。
??每個路由器到最終都需要明白,整個網絡或者是有限需要到達的某個路徑可以走,每個路由器在某一時刻必須要知道到達全球每一個位置到底有那些個路可以走,而其中選擇最優的并且記錄下來,這個記錄的條目就叫做路由表條目,最終記錄了n條路徑,因為需要有很多網絡進行到達,到達每一條網絡都得有尋好的路,最終每一個路都是一個條目,于是條目很多,就形成了路由表。那么條目的生成以及如何到達某個網絡時從哪里經過這也是最主要的事情,對于路由表的生成以及對于MAC地址表的生成是一樣的,無非之前說的兩種方式,靜態指定和動態學習,靜態指定對于小范圍的網絡來講是比較可靠的,但對于大范圍來講并不可靠,那么對于動態學習的方式來講,它需要專門的學習來專門幫助我們來學習,例如rip2
和ospf
等協議,當然前者已經廢棄,ospf
就是學習知道從其它網絡哪里學習得知我們能夠到達那些網絡以及有那些路可以走,每一種不同的協議它們的選擇路徑長短標準也是不一樣的,甚至同一種協議經過調整以后也可以基于不同的標準來進行,所以這叫做路由表。
??有了路由表終于可以確定從那個主機到那個主機二者之間或彼此之間是如何進行通信的,因此在系統中有個命令,該命令的功能是例如從A主機到B主機之間走的那條路,這條命令稱之為traceroute
,而ping
操作就是探測兩臺主機之間有沒有可靠的鏈路彼此之間能夠到達的一條命令。
????路由器:router路由表:靜態學習動態學習:rip2,?ospf路由條目:目標地址?下一跳(nexthop)目標地址的類別:主機:主機路由網絡:網絡路由0.0.0.0/0.0.0.0;默認路由
??
??但是有了IP地址最多也就是擁有跨網絡的特性,雖然我們現在通過路由這種方式能夠跨越很復雜的網絡,但是能讓各個互聯網之間的主機能夠通信,需要有個問題進行解決,現代的主機都是多任務的操作系統,我們此前也說過我們的OS都是擁有多用戶及多任務的,在多任務的概念中,是由多進程同時運行,我們平時瀏覽互聯網的時候,一方面可以瀏覽網頁,還一方面還可以聊天以及聽音樂,這意味著不僅僅是主機與主機之間進行通信,每一個主機中的多個程序需要與另一個主機的程序進行通信。
??因此,當本地的聊天工具發送的信息被WEB服務器接收到,其結果是非常糟糕的,所以我們還得需要給每個進程去標識某個地址,這樣一來就意味著,對方的信號發送過去以后,對方的主機需要想辦法識別出與本地的那一個進程進行通信,既然進程間都有地址,地址可以固定,也可以不固定,每個進程不可能跨越主機來使用地址的,所以進程地址只能在本地主機范圍內使用,因為剛才講過,進程地址只是在當前主機上來區別不同進程的,所以它的有效范圍只限于本地主機。再則,我們用于標識進程的時候,這個進程地址是不是固定的,就像IP地址一樣,至少有一段時間是固定的,那端口也亦是如此,在通信時的某一時刻,無論是IP還是端口,只要不隨意更改或者一直傳輸都是永久固定的。就像服務器一樣,必須有固定的IP地址等待管理,就像守株待兔一樣,而客戶端的IP地址和端口可隨意變的,由它發起的通信,一時興起訪問一次,主動出擊。
???OS:?多用戶,?多任務多任務:多進程chromeWechat網易云音樂Client:?主動出擊,臨時可用地址和端口;Server:?固定且明確的地址,守株待兔;
??所以說Server
端,也就是服務器端必須要有固定且明確的地址,這個地址包含IP和端口,但對于客戶端而言,只要能進行訪問與回應就可以了,它也必須要有明確的地址和端口,但只是臨時的。
??端口就是標識主機上哪一個進程唯一的數字標識,是進程用于實現網絡通信時所給出的數字標識,這個數字標識用二進制表示的范圍有16位二進制,所以它的范圍為0-65535
,但0一般不會拿來去使用,所以實際使用的范圍為1-65535
,但是在這些標識當中,有些進程是需要使用固定的,比如就是服務器端,而客戶端隨意拿來用都可以,但國際名稱互聯網機構給其做了一些界定,界定介紹如下:
????通信時,進程的數字標識:16bits:0-65535:?1-655351-1023:?固定分配,而且只有管理員有權限啟動;專門用于服務進程使用;1024-41951:?半固定;41952:?臨時;
??那么真正的互聯通信其實就是從某個主機的進程到另外一個主機進程的通信,那么每個主機的進程如何標識地址的方式為IP:PORT
,這就是一個套接字,一個IP加上一個端口說明指明了那個主機上的那個端口,從而標識了用來通信的某一進程,所以這就是一個進程的完整地址,我們就把它稱之為套接字地址,而真正的套接字是由內核提供的。
???????進程地址:IP:PORT,?socket
??對于我們Linux主機來講,系統共有四層組成由硬件、內核、庫文件、應用程序
,這是站在靜態視角來看,而當一個操作系統運行起來以后,其實共有兩個層面,一個層面叫內核空間Kernel space
,另一個層面叫用戶空間User space
,所謂的用戶空間就是各進程運行的集合空間就叫做用戶空間,而內核線程所運行的空間位置就叫做內核空間,而內核啟動的有進程管理、網絡協議棧、驅動程序、內存管理、安全相關、文件系統
等;其中有這么一個功能叫網絡協議棧,TCP/IP協議棧就在這里,可分為兩層第一個叫通信子網
,第二個叫資源子網
,而通信子網就是由內核使用,而資源子網就是由用戶空間來實現。資源子網就是運行在用戶空間中的各個服務或者是客戶端進程,用來實現通信及資源交換的,或者完成資源的表現形式所定義的,而內核所謂的TCP/IP協議棧,它只是負責能從A主機的數據送往B主機的進程,后背后的一些問題是由用戶子網的進程來實現。
??端口是由內核來提供的,每一個進程啟動要想完成網絡通信,需要向內核申請注冊使用該端口,如果該端口沒有被其它進程所占用,則可以分配,否則就是端口沖突,一個端口在某一時刻只能被一個進程所占用,不然的話就無法做到唯一標識進程,任何一個服務類的程序,啟動時注冊一個著名的端口,但兩個程序同時注冊時,就會出現沖突,例如httpd
和nginx
,都是提供WEB服務,固定使用的是80端口,啟動其中一個時,后一個肯定是啟動不了的,不然內核就會告訴你注冊不成功。那任何一個進程都必須得向內核注冊端口(指網絡程序),排除只是守護的進程。而這個注冊過程我們也稱之為注冊套接字的過程。
??現在我們了解到,主機與主機之間通信需要用三個地址。
???第一,MAC地址用來實現本地通信;第二,IP地址用來實現跨網絡通信;第三,端口地址用來實現進程間通信;
??那么有了IP地址之后,在主機還得需要使用MAC地址,原因就是IP地址僅僅是用來標識、路由,也僅僅用來標識網絡使用的,雖然我們給了主機一個IP地址,但是真正到達本地內部事務以后,需要轉換成MAC地址才能完成真正的通信,所以互聯網通信是先完成一段又一段的本地通信才完成的。通信過程就相當于是一個大的目標沒有變,但是在實行的過程中是需要不斷修正的,比如:隨便先實現個小目標,但一定要到達大的目標。所以互聯網的IP地址僅能標識源主機和目標主機是誰,并且能夠選出一條可要選的路來,所以互聯網通信無非就是實現的是多段接力的本地通信。兩段之間是不斷的發生變化最終才能走完的數據包到目標主機,看上去使用的是IP,但最終使用的是MAC地址及本地局域網通信。
??那么A1和X2通信的方式是:首先,確保存在X2這個主機,第二步,A1的報文以本地(MAC)通信的方式發送給R1的1號接口,而這個過程就是本地事務,而R1將該報文交給了2號接口,于是2號接×××給了X2,這又是一次第二段的本地事務,而R1的1號接口與A1通信靠MAC地址,而R1的2號接口考的也是MAC地址,IP僅用來標識A1和X2,而真正通信的是A1上的某個進程和X2上的某個進程而已。因此,真正通信的方式是某個主機的某個端口,和另外主機的某個端口通信,但最終轉換為MAC或本地事務之間的交互,從而完成通信,當然這也是在通信子網中完成的過程。
??而到了資源子網之后,需要取決于具體的協議,而且到了具體協議之后還得有一個地址,只不過是應用層的地址,但是我們說了三個地址需要簡單總結一下:
???總結:MAC:本地通信;范圍:本地局域網;IP:界定通信主機,源和目標;范圍:互聯網;Port:界定進程;范圍:主機;
轉載于:https://blog.51cto.com/tianxie/2096972