通信過程(三)跨字節位段的網絡傳輸過程
前面講解了網絡傳輸中涉及到字節序相關的一些概念,以及一些常用的涉及到大小端通信時的C語言下的處理方式,本文基于前面的概念講一個不常用的通信過程,理解了這個過程,相信網絡通信中涉及到大小端的問題都可以遊刃有餘了。
本文還是以實際的例子為依據,因為實際的例子比較好理解。
在說明例子前,我想先說說我總結的幾點:
1、 這個跨1字節的位段定義,類似一個萬能公式,即使不是跨字節的位段(多個字節)也可以參考這種方式實現。
2、 跨字節的位段,并不是說我定義超過1字節的位段一定就是跨字節的。比如定義一個32位的位段(u32 8:8:8:8),雖然整體是32位,但每個位段隻有8個bit,位段之間并沒有跨越一個1字節。
下面以一個u32(u32 6:8:18)的跨字節位段的定義和通信過程為例說明:
1、 先看C語言的定義方式:很容易理解,跨字節的位段大小端的定義方式不同,大小端的定義正好相反,最後用一個共用體,整個位段和u32 d 共用一塊内存。這樣最後好轉字節序。如下圖所示:
2、 然後看大端模式下,這種定義方式在内存中的排序:相信根據圖片很容易理解排布方式。下面圖中的2個表是一樣的,做一個對比,上面的表不太好理解,之所以給出這個對比是為了後面通過第一個表來說明傳送的過程時更好理解。
3、 同理可以畫出在小端模式下,C語言定義的内存的排布:(這張和上面這張圖一定要仔細看明白了,仔細對比區别)
4、 看明白上面2張圖後整個傳輸的過程也就很好理解了:
5、 根據上圖的傳輸過程我們可以寫出C代碼的框架:
到這裡整篇文章就介紹完了,相信理解了這幾個過程,後面在看有些網絡協議時就更容易明白了。水平有限,對不正确的地方歡迎大佬指正。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!