標籤:

香格里拉遊記隨想

麗江古城—塔城—茨中—梅里—奔子蘭—香格里拉沿線游以來,一直處於驚喜與興奮之中,驚喜的是當地的美麗的風景與淳樸好客的人們,興奮的是,那些無數次出現在腦海里的地名就在眼前:金沙江、瀾滄江、怒江、麗江古城、梅里雪山,一個個充滿著無數美麗傳說的地方。梅里雪山,一個充滿著神奇與魔幻的山峰,倒下一批又一批登山隊員,至今依然無人可以攀登上去,其實海拔只有6700米…

唯一遺憾是到達海拔3800米的雪域高原,出現了高原反應,頭痛氣短,儘管潔白的雪山就在眼前,可也沒有心情包攬眼前的美景,最惡劣到了時候差點需要吸氧緩解癥狀。

在離開梅里雪山的一段旅程,到達海拔4200米的雪域高原,山上白雪皚皚,美不勝收,可是車上的小朋友卻一個個吐了,真是痛並快樂著…

終於下到半山腰,氧氣充足了,於是記錄一點文字,人類在大自然是多麼渺小,開車了6天,行程800多公里,竟然一直在山窩窩裡轉,任何一座雪山搬到上海或北京,都會吸引來無數的遊客。

最為神奇的是,天空晴朗,藍天白雲,太陽刺眼,但是天空卻飄著鵝毛般的雪花,這點就和太陽雨一樣的自然現象。

一路聽領隊兼導遊介紹沿途的風土人情,大開眼界,說以前還沒有開發旅遊資源時,如果你走累了,身上沒有一分錢,都可以到當地的村民去借宿,他們會像招待自家人一樣招待你,還會給你的馬餵食,這種熱情好客的傳統一直世世代代延續下來。

但自從開發旅遊資源,這種傳統慢慢地消失了,如果你去借宿,至少需要掏錢了,這是商業社會帶給淳樸鄉情的最直觀的衝擊。這次每到一個客棧,都受到5星級的禮遇接待,一張張誠摯而甜蜜的笑容,與周邊的美景融為一體,讓人倍感親切。

如果人與人之間充滿著善意,即使在被鋼筋水泥森林的大都市,也不會感覺絲毫的壓抑與無奈。在社交平台,如果人人之間存有一絲謙讓,如果人人追求文明的光輝,那麼人人是否更幸福快樂?

這個世界沒有那麼多的如果,只有冷冰冰的現實,唯一能做到的就是做好自己,不為冷漠的城市平添一份冷漠,讓自己的熱情、友愛融化自己身邊的冷漠。

在寫文章的過程中,會冷不丁問自己一個問題:為何有那麼多同學會覺得計算機網路抽象而複雜?為何老司機卻覺得很簡單?這中間一定有一座或幾座大山,對嗎?

每當此時我都會回憶自己的過往經歷,也許時光比較久遠,翻過大山的時刻有點淡忘了,但有幾座大山卻是非常清晰,讓我把這段記憶記錄下來:

當我們學習OSI參考模型時,會看到N多人畫了七層模型框架圖,這其實是非常誤導的,彷彿讓人覺得所有的通信都需要七層,其實不然。

舉個簡單例子,當我們在瀏覽器里輸入zhihu.com時,會發生什麼呢?

第一步:域名解析

瀏覽器需要將域名解析為IP地址,這是DNS行為

DNS ->UDP ->IP

但是這個這五層的TCP/IP模型,按照從上到下,可以看做一個縱向維度(Y軸),所以OSI參考模型也僅僅是一個Y軸。那麼時間可以看做一個橫軸(X軸)。

Y軸到達IP層嘎然而止,因為需要知道下一跳(通常網關)的MAC地址,需要解析下一跳的MAC地址。

標記Y軸為Y1。

第二步:ARP解析

主機ARP解析進程,此時的Y軸的最頂端是ARP,誕生第一個報文,可以表示為:

ARP -> Ethernet -> Hardware

按照OSI模型來分類,這裡只有數據鏈路層、物理層,所以並不是所有通信都是7層;也不是TCP/IP協議的5層,這裡只有2層。

假如成功解析了下一跳(網關)的MAC地址,返回Y軸Y1點。

第三步:誕生第二個報文

DNS ->UDP ->IP ->Ethernet -> Hardware

這個報文才是嚴格意義上的TCP/IP協議5層結構。

當DNS報文到達DNS伺服器對端,解析並返回:

Hardware->Ethernet ->IP ->UDP ->DNS

這時的時間已經悄悄地在流失,表現為X軸向右平移。

第四步:瀏覽器可以完成必要的http數據封裝

Http -> TCP

標記為Y2

第五步:TCP層觸發三次握手

去向還是來向,可以表示為

TCP -> IP -> Ethernet -> Hardware

你看,這裡的通信只有4層,而不是5層。

假定三次握手成功,客戶端產生了第三個報文(SYN)、第四個報文(ACK),返回Y2點。

第六步:此時產生第六個報文

Http -> TCP -> IP -> Ethernet ->Hardware

這個才是我們經常看到邏輯示意圖,但是它把前面的細節全部忽略掉了。

第七步:伺服器端TCP接收到第六個報文,會代表伺服器端的http回應一個ACK,表示成功接收,表示為:

TCP -> IP -> Ethernet -> Hardware

客戶端TCP接收到伺服器的ACK,會釋放掉retransmit queue里的第六個報文。

第八步:伺服器TCP通知http伺服器進程取走數據,http伺服器進程將請求結果,調用TCP/IP進程發送。同樣可以表示為:

Http -> TCP -> IP -> Ethernet ->Hardware

第九步:客戶端TCP接收到第八步報文,會代表客戶端瀏覽器發送ACK,表示為:

TCP -> IP -> Ethernet -> Hardware

第十步:客戶端TCP通知瀏覽器取走數據,瀏覽器將數據copy完成,解析成網頁,顯示在屏幕上。

計算機網路的通信,不僅要看上下封裝的Y軸,也要看時間流逝的X軸,也不是全部通信都是5層或7層,為了完成用戶之間通信,需要很多無名英雄,如ARP、DNS、TCP默默做出巨大貢獻,而這些通信則不是5層或7層的,這點一定要清晰,如果理解了這一點,相當於爬過了一座大山。

如果各位同學,想翻越更多的高山,歡迎來參加我的live:你敢來挑戰嗎?計算機網路面試系列一

這裡個個都是高山,翻過這些高山,你看到的風景將別有洞天,謝謝閱讀!


推薦閱讀:

Python網路編程中的套接字名和DNS解析。
探究 tcp 協議中的三次握手與四次揮手
華為路由器無線橋接水星路由器
ngrok - 免費的內網穿透

TAG:計算機網路 |