程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> IP分片,ip分

IP分片,ip分

編輯:關於C語言

IP分片,ip分


  當數據超過底層允許最大字節時(一個以太幀1514字節,14字節以太首部,20字節IP首部,UDP8/TCP20,因此IP包每次最大為1500==MTU。去掉協議頭UDP有效數據1472字節,TCP為1460字節。)會進行IP分片。LwIP允許的最大IP由如下決定:IP_REASS_MAX_PBUFS 決定IP分片允許最大pbuf數量,IP_REASS_MAXAGE分片的生存時間,超過則錯誤並將之前接收的IP分片丟棄。

  如果數據大於IP_REASS_MAX_PBUFS則有兩種選擇,一:直接刪除數據返回;二,是刪除生存時間最長的IP分片PBUF,這個通過IP_REASS_FREE_OLDEST來使能。

  當為UDP協議時,如果緩沖區描述符大小小於完整的IP數據包,IP分片數據包到來時,很快將描述符耗盡,後來的IP包由於無緩沖區描述符而丟棄,UDP沒有重傳機制,很可能永遠不會接收到完整的IP分片包。從而大於IP_REASS_MAXAGE出現錯誤,因此緩沖區描述符也應增大以適應IP分片重裝。

  TCP發送數據時,將大於MSS的數據分段(segment不叫分片),MSS一般為1460.所以,TCP數據包不會在IP層分片。

  IP頭部有3位標志字段,標志是否為分片包。第一位無用,第二位0:允許分片,1:不允許。第三位0:最後一片,1:後面還有分片。13位offset表示偏移,用於IP重組時數據排序,13位因此支持最大IP數據包為8192字節。

  標准的BSD協議實現如下圖所示,采用兩個結構體,IPQ為表頭,將各個IP分片表頭連接起來,並存儲IP信息。Ipasfrag為具體的分片數據。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved