『壹』 linux udp 如何發數據包 我要發送一個5M左右的數據,如何實現分片發送 或者分包發送
這個- - 肯定得自定義私有報文頭,然後組裝了。
感覺樓主好像還是新手,很難簡單講清楚啊回。
我們說答說比如某個下載軟體的udp私有協議,裡面還設計了udp層的3次握手,丟包請求等等。
如果你不考慮丟包,不考慮身份驗證,假設全部能收到,那麼肯定也得設計一個順序欄位。
報文頭(標志、序號)
把數據分割更1024位元組的小段,每個小段都帶著報文頭出去,
接收端收到後,根據報文頭的序號,剔除掉報文頭,把後面每個小段的內容重新組合成5m的時間數據。
不知道你聽明白了沒有- - 如果有編程基礎,實際編程中,不用講自己就明白了,如果沒有基礎,的確挺難說明白的
『貳』 Linux內核網路協議棧之IP層轉發框架
網路層處理框架(三層)
網路層處理框架在Linux內核中分為三層,分別是PRE_ROUTING、IP_FORWARD和POST_ROUTING。
在PRE_ROUTING階段,IP層的入口函數ip_rcv()扮演關鍵角色,負責接收報文並進行初步處理。
接收到報文後,會調用ip_rcv_finish()函數進一步處理,包括報文路由查詢、狀態檢查等。
在本地輸入階段,核心處理函數包括ip_local_deliver(),負責報文的本地交付。IP層處理還涉及到分片重組,由ip_defrag()函數執行。
在IP_FORWARD階段,ip_forward()函數負責報文轉發的決策與處理。特別提到的xfrm4_route_forward函數用於匹配IPsec策略。
完成轉發後,ip_forward_finish()函數進行後續處理,確保報文能夠正確到達下一跳。
本地輸出階段包含ip_queue_xmit()等關鍵函數,實現報文的排隊與發送。dst_output()與ip_output()分別負責輸出決策與最終輸出。
對於超過最大傳輸單元(MTU)的報文,Linux內核通過ip_fragment()進行分片處理。分片報文僅由接收端負責重組,中間設備無法重組,原因是重組過程並非必需,且中間設備可能無法收到完整分片。
最後,POST_ROUTING階段的ip_finish_output和ip_finish_output2函數處理IP層的最終輸出,特別涉及到ARP協議的執行。