ISO七層網(wǎng)絡模型
ISO七層網(wǎng)絡模型大概作用如下:
- 物理層:物理層主要是用來處理光電信號的棺亭,例如網(wǎng)卡,光纖傅瞻,網(wǎng)線等等脉执,這些都是物理層需要考慮的地方疼阔;
- 鏈路層:由光電信號組成的數(shù)據(jù),在數(shù)據(jù)鏈路層半夷,被邏輯地劃分成一幀一幀地數(shù)據(jù)以便管理婆廊,這一層是數(shù)據(jù)交換的主要層面,交換的依據(jù)是網(wǎng)卡MAC地址巫橄,進行數(shù)據(jù)交換需要定義信號幀格式淘邻,就有了以太網(wǎng),需要在主機間交換數(shù)據(jù)湘换,就有了交換機和集線器宾舅;因此以太網(wǎng)统阿,交換機以及集線器都是這一層要考慮的;
- 網(wǎng)絡層:網(wǎng)絡層是比數(shù)據(jù)鏈路層更高一級的邏輯層筹我,在這一層工作的主要是路由器扶平,路由器是基于IP地址進行跨網(wǎng)鏈路的計算;
- 傳輸層:傳輸層是用來控制網(wǎng)絡層的數(shù)據(jù)傳輸?shù)氖呷铮峁┝薚CP和UDP兩種機制來確保數(shù)據(jù)網(wǎng)絡間傳輸?shù)目煽啃越岢危@樣寫代碼的就只需要打開socket套接字,便可以在網(wǎng)絡連接的狀態(tài)下傳輸數(shù)據(jù)岸夯;
- 表示層:
- 會話層:
- 應用層:應用層是最高協(xié)議層概而,這一層主要是軟件自定義的一些協(xié)議,如HTTP協(xié)議囱修,websocket協(xié)議,遠層登錄SSH協(xié)議等;
二層網(wǎng)絡和三層網(wǎng)絡
上面寫的七層網(wǎng)絡中王悍,物理層破镰,數(shù)據(jù)鏈路層和網(wǎng)絡層是低三層網(wǎng)絡,其余四層是高三層網(wǎng)絡压储,其中二層網(wǎng)絡指的就是數(shù)據(jù)鏈路層鲜漩,三層網(wǎng)絡指的就是網(wǎng)絡層,這兩者使我們需要重點理解的地方集惋。
在數(shù)據(jù)鏈路層孕似,物理信號以幀為單位進行組織,而每幀信號都需要一個目標地址和一個源地址刮刑,該地址基本上使用的是網(wǎng)卡MAC地址喉祭,在一層工作的主要是集線器和交換機,集線器會將所有幀信號投放到各個端口雷绢,因此連接端口的主機會收到很多沒有意義的數(shù)據(jù)幀泛烙,這將造成集線器和主機之間信道沖突劇烈,因此集線器一般情況下使用較少翘紊,而交換機具有MAC地址學習記憶功能蔽氨,能夠準確的將數(shù)據(jù)幀投放到指定端口,從而大大地提高了數(shù)據(jù)傳輸效率帆疟;而在L2層鹉究,數(shù)據(jù)只能在一個子網(wǎng)間進行交換,如果要跨子網(wǎng)傳輸數(shù)據(jù)踪宠,則需要借助L3層的路徑規(guī)劃功能自赔,也就是路由器的工作原理;
假設現(xiàn)有如下網(wǎng)絡拓撲圖柳琢,ABCD四臺主機屬于10.0.0.0子網(wǎng)匿级,網(wǎng)關(guān)指向路由器1的10.0.0.1蟋滴,EFGH四臺主機屬于10.0.1.0子網(wǎng),網(wǎng)關(guān)指向路由器2的10.0.1.1痘绎;
同一子網(wǎng)通信
先看同一子網(wǎng)內(nèi)通信情況津函,A向C發(fā)送數(shù)據(jù),這種情況下都是ip指定的孤页,假設所有主機尔苦,交換機和路由器都剛剛通電,沒緩存任何MAC映射和路由表行施。A在向C發(fā)送數(shù)據(jù)之前允坚,是知道C的ip地址,發(fā)現(xiàn)它倆在同一物理子網(wǎng)蛾号,于是A試圖在物理子網(wǎng)內(nèi)來尋找C,但是在物理子網(wǎng)內(nèi)尋址是通過MAC地址的稠项,A并不知道C的MAC地址,于是A發(fā)送了一個ARP廣播包鲜结,ARP廣播用的地址是ff:ff:ff:ff:ff:ff,包內(nèi)容如下:
源MAC | 目標MAC | 源IP | 目標IP |
---|---|---|---|
xx:xx:xx:xx:xx:aa | ff:ff:ff:ff:ff:ff | 10.0.0.2 | 10.0.04 |
交換機收到ARP廣播后展运,首先會學習到主機A是連接到1端口的,然后緩存起來精刷,同時在緩存中查找C的MAC地址拗胜,沒找到便將這個廣播包從所有端口發(fā)出去(1端口除外),交換機2收到廣播包后怒允,也會在緩存中查找C的MAC地址埂软,沒找到同樣進行轉(zhuǎn)發(fā),其中B纫事,D主機收到廣播包后發(fā)現(xiàn)和自己無關(guān)便丟棄勘畔,而C收到廣播后便會進行回應,來告知自己的身份丽惶,內(nèi)容格式如下:
源MAC | 目標MAC | 源IP | 目標IP |
---|---|---|---|
xx:xx:xx:xx:xx:ac | xx:xx:xx:xx:xx:aa | 10.0.0.4 | 10.0.0.2 |
這個對于參與的交換機也是個學習的過程咖杂,在過程中記憶了主機A和主機C的ip地址和mac地址,AC找到彼此后蚊夫,便可以在同一子網(wǎng)內(nèi)依靠mac地址進行相互通信诉字,格式如下:
源MAC | 目標MAC | 源IP | 目標IP | |
---|---|---|---|---|
C--->A | xx:xx:xx:xx:xx:ac | xx:xx:xx:xx:xx:aa | 10.0.0.4 | 10.0.0.2 |
A--->C | xx:xx:xx:xx:xx:aa | xx:xx:xx:xx:xx:ac | 10.0.0.2 | 10.0.0.4 |
跨物理子網(wǎng)通信
同樣假設所有設備都剛剛通電,沒有緩存任何信息知纷,這時A向E發(fā)送數(shù)據(jù)壤圃,A是知道E的ip地址,發(fā)現(xiàn)屬于同一網(wǎng)段琅轧,同樣不知道E的mac地址伍绳,于是A同樣發(fā)送ARP廣播包,BCD沒有響應,但是路由器1收到廣播后乍桂,為了避免廣播風暴冲杀,會把自己的mac地址告訴A效床,格式如下:
源MAC | 目標MAC | 源IP | 目標IP |
---|---|---|---|
xx:xx:xx:xx:xx:ca | xx:xx:xx:xx:xx:aa | 10.0.0.1 | 10.0.0.2 |
A等待超時后,會知道E不在當前物理子網(wǎng)內(nèi)权谁,于是會向路由器1發(fā)送數(shù)據(jù)包剩檀,路由器收到數(shù)據(jù)包后,發(fā)現(xiàn)沒有緩存E的ip地址旺芽,于是路由器1開始尋找E的過程沪猴。相比較交換機的廣播找人,路由器尋址的空間范圍更大采章,很多情況下是整個internet網(wǎng)絡运嗜,要跨很多網(wǎng)絡運營商,因此L3層面路由器的路徑尋址計算協(xié)議涉及很多悯舟,例如:RIP担租、OSPF、IS-IS抵怎、BGP奋救、IGRP等協(xié)議。路由器計算路徑時便贵,是無法窺探整個互聯(lián)網(wǎng)的,因此每臺路由器都是通過路由算法找到下一跳的最優(yōu)路徑冗荸,這些最優(yōu)路徑匯集起來就是完整的尋址路徑承璃,換句話說,路由器的轉(zhuǎn)發(fā)路徑不是一臺路由器選出來的蚌本,而是很多路由器共同選擇出來的最優(yōu)下一跳地址序列盔粹;在這里為了解釋原理,假設路由器1直接找到了路由器2匆瓜。
這樣路由器1開始想路由器2發(fā)送數(shù)據(jù)包澈蚌,路由器2便開始在自己的物理子網(wǎng)內(nèi)尋找E,進過一次廣播后汰蜘,發(fā)現(xiàn)E在自己子網(wǎng)內(nèi),于是向前一跳进萄,找到離自己最近的路由器1,反饋自己離E主機最近锐峭,最終經(jīng)過“A->廣播->路由器->路由器尋址->找到E主機所在子網(wǎng)”過程的A,便可以和E進行通信了中鼠。由于A和E之間經(jīng)歷了多個物理子網(wǎng),因此需要經(jīng)歷多次L2的轉(zhuǎn)發(fā)才能實現(xiàn)數(shù)據(jù)包的轉(zhuǎn)達沿癞,在這個過程中援雇,ip包外包的數(shù)據(jù)幀中的mac地址是不斷變換的。在A-E-A的過程中椎扬,數(shù)據(jù)幀和IP包的地址經(jīng)歷了如下過程(假設A的通信端口是88惫搏,而E的是99):
去包:
源MAC | 目標MAC | 源IP | 目標IP | 源端口 | 目的端口 | 用戶數(shù)據(jù) | 幀尾 | |
---|---|---|---|---|---|---|---|---|
A--->路由1 | xx:xx:xx:xx:xx:aa | xx:xx:xx:xx:xx:ca | 10.0.0.2 | 10.0.0.6 | 88 | 99 | ..... | .... |
路由1--->路由2 | xx:xx:xx:xx:xx:cb | xx:xx:xx:xx:xx:cc | 10.0.0.2 | 10.0.0.6 | 88 | 99 | ... | ..... |
路由2--->E | xx:xx:xx:xx:xx:cd | xx:xx:xx:xx:xx:ae | 10.0.0.2 | 10.0.0.6 | 88 | 99 | ... | ..... |
回包:
源MAC | 目標MAC | 源IP | 目標IP | 源端口 | 目的端口 | 用戶數(shù)據(jù) | 幀尾 | |
---|---|---|---|---|---|---|---|---|
E--->路由2 | xx:xx:xx:xx:xx:ae | xx:xx:xx:xx:xx:cd | 10.0.0.6 | 10.0.0.2 | 99 | 88 | ... | ..... |
路由2--->路由1 | xx:xx:xx:xx:xx:cc | xx:xx:xx:xx:xx:cb | 10.0.0.6 | 10.0.0.2 | 99 | 88 | ... | ..... |
路由1--->A | xx:xx:xx:xx:xx:ca | xx:xx:xx:xx:xx:aa | 10.0.0.6 | 10.0.0.2 | 99 | 88 | ..... | .... |
數(shù)據(jù)包在路由1和2中的1具温,4端口中進行轉(zhuǎn)發(fā)時,因為是在設備內(nèi)部筐赔,因此可以直接轉(zhuǎn)發(fā)铣猩,不用變換幀頭,從而提高效率川陆,另外如果A向其他子網(wǎng)的FGH發(fā)送數(shù)據(jù)時剂习,過程基本上一樣,只不過不會通過廣播尋址较沪,而是直接將數(shù)據(jù)包發(fā)送給路由器出口網(wǎng)關(guān)鳞绕。