1. 程式人生 > >網絡為什麽分層?

網絡為什麽分層?

層次 功能需求 規律 缺少 耦合度 所在 私有ip 網絡請求 機器

在自然世界中,分層無處不在。大到社會階層,小到細胞層次結構。

為什麽會這樣?因為復雜的事物組成復雜,完成的功能復雜,把所有的步驟都放到一個層次處理,那麽這一層就會變得越來越復雜,耦合度非常高,不容易理解和對事物的解剖,就不能分析出事物的規律。

分層需要分得對。層次間的分界線雖然無須有非常清晰的界限,但一定要有內在的層次劃分根據。

對於軟件世界來說,某大牛(太大大牛,記不住是誰了)說過,在計算機領域,任何問題到了某個復雜的階段,如果當前方法不能解決問題,必定可以通過加多一層來解決,如果加多一層都解決不了問題,那肯定是這個問題模型的層次已經到極限了。

通過這句話可以理解到,在計算機領域,任何問題都可以通過中間層來解決問題,現在的中間件如此就行,就是為了適應當前的快速開發和微服務架構吧。

在網絡協議中的分層。不僅僅是根據負責的功能來簡單的劃分層次,而且層與層之間會有不可缺少的的封裝與傳遞。對於網絡模型各層的封裝是根據整個網絡模型從上到下的工作流程來劃分的。但是,每層之間會有一定的聯系,不是獨立工作的。

在這裏以熟悉的協議 tcp協議 分析。對於網絡從上到下的流程為 應用層的網絡請求經過傳輸層加上TCP頭,經過網絡層加上端口號和IP源地址和目的地址等信息,經過數據鏈路層加上mac頭。

通過層層的封裝,得到一個完整的網絡包。註意:在網絡中,網絡包都是完整的,可以沒有上層只有下層,但一定不能有下層而沒有上層。這樣會破壞了網絡協議層從上到下的完整性。

到這裏,應該可以知道,網絡為什麽要分層了。這是從功能需求劃分,協議維護與方便升級,降低網絡通信復雜性出發考慮,可以毫不客氣的下定義,只有把網絡分層,才會有如今的互聯網繁榮世界。

上面是說了網絡為什麽分層,在這裏我提出一個問題,為什麽需要mac地址,只有ip地址可以嗎?

這個問題可以得到網絡層次間的聯系。舉個栗子,在現實世界中,在虛擬定義中,身份證號碼是一個人的唯一標識(正常來說,一個人只有唯一的身份證號碼吧)。如果我要郵寄一封信給另外一個人,但我只填寫他的身份證號碼在信封上。這樣要怎麽把信送到那個人手上?

假設一,各個郵局之間是有聯系,並且存儲下當地所有身份證對應的人的身份證地址。

那麽可以這樣做,在郵局的qq群吼一聲,幫我查下這個身份證前幾位是哪裏的,然後各個郵局就開始查找,然後查到這個身份證是符合自己這個地方的。就回一聲,是我這裏,然後就把信根據身份證號碼送過去,在整個地區吼一聲,這個身份證是誰的?只能這樣做啊,因為身份證號碼前幾位只能確定到一個地區。這樣做效率就很低,或者根本找不到這個人,因為身份證上的信息只是出生當時記錄下的地址而已。

在這裏,引出了一個概念,相對性,身份證雖然具有唯一性,但是記錄的地址是不變的,然後人是可移動的,所在地址是會變的,所以根據身份證找一個人的具體地址是不正確的。

所以在網絡協議中,單單有mac地址,沒有ip地址信息是不科學的。

解決上面問題的辦法是,在寄信時應該加多一個信息,這個人現在的具體地址。類比網絡協議,就是在mac之余增加ip。

ip地址是這個網絡包的來源和去向的具體地址,當然真實用到的有公有ip和私有ip,網絡包在局域網出去時經過路由轉換為公有ip,然後就可以在網絡世界中暢遊,找到對應的目的地公有ip,然後才根據mac地址來確定唯一的目的地機器。

至此,網絡的分層和聯系告一段落。。。

網絡為什麽分層?