網路協議學習之一 網路請求是如何發出

2021-08-11 01:19:12 字數 2390 閱讀 6323

最近突然對網路協議有了興趣,很想知道乙個簡單對網路請求是如何傳送出去的。我們都知道,所謂傳送資料,無非是把一串0/1位元發給接收方,拿最常見的場景來說,我們通常連線的wifi網路,計算機把一串0/1發給它,它是如何接收,如何識別該到那個地方截止是傳送方的乙個完整包呢?

這就要靠協議來支援了,所謂協議,就是大家共同約定好,共同遵守的一些規則而已。就好比國家與國家之間通常也會由很多協定,協議,備忘錄之類的檔案,其實也就約定了雙方在處理問題時的一些默契。而回到計算機協議,由於在計算機的世界都是0和1,所以計算機的協議通常就是約定雙方對這一串的0/1怎麼處理,比如,哪幾個0/1表示元資料,哪幾個表示分界符,哪幾個是真正的資料,等等。

圖1. 協議棧圖

上圖表示了資料從使用者產生到可以被傳送出去到封裝過程,也就是我們常看到到協議棧的流轉過程。分層協議棧的好處自不必多說,就是分層管理,模組化的典型思想,每一層只處理特定的問題,並為上層提供服務。從圖中可以看到,每一層往下,都會新增乙個首部作為元資料,並作為整個資料部分遞交給下層。各層新增的元資料各不相同,但基本目標都是方便管理本層的資料報。

我們知道現在計算機出廠一般都自帶網絡卡,網絡卡實現了mac層協議,複製資料報文的收發。我們也知道,tcp/ip協議棧族是由作業系統實現的,並封裝了介面作為系統呼叫供外部使用。

有了這兩點認識,我們就可以順暢的分析整個資料報的流轉。應用層呼叫作業系統提供的介面將資料傳入,經由系統內部處理後到達網絡卡(準確地說應該是到達網絡卡的快取),再由網絡卡驅動將資料封裝成mac幀後通過底層通道傳送出去。

資料從應用層經系統內部處理的過程如下圖所示:

圖2. 資料傳送在作業系統內部的流轉

問題1:有人就問了,那連續的資料到達後,最後封裝成mac幀後其實都是一串連續的位元,接收方是如何識別哪是開頭,哪是結尾呢?

先解釋下協議棧圖中的mac層和物理層幾個標示。fcs是幀檢驗序列,用於接收方校驗所收到的幀是否有差錯,一般用的是crc校驗方式。而物理層翻譯成位元流後,前面插入的8個位元組是用作同步與幀起始定界符(其中前7個位元組是同步碼,最後乙個位元組是表示幀定界符),所謂同步碼,是告訴接收方趕緊準備好接收資料,以免資料到達時接收方尚未準備好,白白浪費資源。

問題2:有人又問了,前面的起始定界符好理解,標示位元流中這裡是幀的開頭唄,那結尾咋辦,一連串的位元過來,總得有個尾定界符告知接收方這裡是幀的結尾吧。

其實這是個好問題,一般來說,在資料鏈路層封裝成幀的方案中,很明顯是要首尾定界符方能確定乙個完整的幀。但是現在廣泛使用的乙太網mac幀中卻是沒有定義結尾定界符的,這是因為它不需要,它有其他方式可以讓接收方識別出結尾。竅門就在傳送物理層位元流的時候,乙太網採用的是曼徹斯特編碼(不是聯隊,^_^),這種編碼的乙個特點是每個0或1碼元都有一次高低電平轉換(而不經編碼的話,傳統的就是1是高電平,0是低電平,這導致碰到連續的0或1的時候,接收方收到的就是連續的高電平,或者連續的低電平,無法提取這裡面到底有多少個1或0),有了這種編碼,那麼接收方就可以確定在沒有電平轉換的時候,就是幀的結尾,哈哈,這麼看這也是一種約定。

問題3:那還有人問了,要等到沒有電平變化的時候才能確定結尾,那不是沒發乙個幀都要等待一會,那如果我要連續的傳送咋辦?

這也是個好問題,其實解決方案很簡單,就是強制約定沒發乙個幀之間都要等待乙個間隔,讓接收方識別幀結尾,不允許連續的傳送幀。當然這麼強制也是有道理的,乙個是避免了插入幀定界符,再乙個是我們還要注意到乙太網一般使用廣播通道,其中使用的是csma/cd協議,也就是常說的載波監聽/碰撞檢測協議,這個協議說的其實是傳送前先監聽,邊傳送邊監聽,一旦檢測到碰撞就立即停止傳送。從這點看,如果一直連續的傳送幀,那麼就相當於連續的占用著共享通道,導致其他傳送方因碰撞而無法傳送,甚至被一直阻塞。所以,每傳送乙個幀,就留出點空隙,讓其他傳送方可以檢測通道是否空閒,公平競爭通道資源,這樣一舉兩得,何樂而不為呢。

問題4:就算前面的都沒問題了,那網絡卡在傳送位元流的時候,總不會乙個乙個位元的傳送吧,那也太慢了。

其實這就是個串並行的問題,我們看現在的網線,都是8個引腳絞在一塊,這可不是為了好看,事實上,計算機處理相關的東西都是以位元組作為基本單位,因此8個引腳絞在一塊,每次可以傳送乙個位元組,既可以並行傳送提高了速率,也方便了處理。至於無線網絡卡,雖沒有拆開看過,但是原理應該是不變的,只是由傳送電訊號,轉而傳送電磁訊號,所以應該也是8個位元一塊傳送,或者是更多倍數,如果路由器支援的話。

備註:

1. 圖二**於文章 ,在此謝過作者,也是看了其文章才把整個流程貫通起來。

2. 文章中很多知識點的解答都**於謝希仁老師編著的《計算機網路》,雖說當時看的不怎麼懂,但回過頭來細翻,還是頗有收穫。

基本網路概念之一 網路

網路是幾乎可以實時相互傳送和接收資料的計算機和其他裝置的集合。網路的每台機器稱為乙個節點 node 大多數節點是計算機,但是印表機 路由器 網橋 閘道器 可口可樂機也都是節點。具有完備功能的計算機節點也稱為主機 host 這裡將節點一詞指代網路的所有裝置,用主機一詞表示通用的計算機節點。每個網路節點...

一 網路協議概觀

訊號的傳輸總要符合一定的協議 protocol 比如說長城上放狼煙,是因為人們已經預先設定好狼煙這個物理訊號代表了 敵人入侵 這一抽象訊號。這樣乙個 狼煙 敵人入侵 就是乙個簡單的協議。協議可以更複雜,比如摩爾斯碼 morse code 使用簡訊號和長訊號的組合,來代表不同的英文本母。比如sos 代...

TCP IP 一 網路協議

網路協議就是 一套 通用規則,用來幫助定義複雜資料傳輸的過程。資料傳輸從一台計算機上的應用程式開始,通過計算機網路硬體,經過 傳輸介質到正確目的地,然後上傳到目的地計算機網路硬體,最後 到達負責接收的應用程式。tcp ip 協議定義了網路通訊過程,更重要的是,定義了資料單元 的格式和內容,以便接收計...