緩衝區設定 套接字緩衝區大小及限制

2021-10-14 19:29:44 字數 1539 閱讀 7156

pv4資料報的最大值是65535位元組,包括ipv4首部。

ipv6資料報的最大值是65575位元組,包括40位元組的首部。

mtu:ip資料報的最大傳輸單元,乙太網的mtu是1500位元組。

ipv4要求的最小鏈路mtu是68位元組。

ipv6要求的最小鏈路mtu是1280位元組。

如果乙個ipv6的資料報的值小於要求的最小值1280位元組,那麼就需要進行重組和分片,以使得這些鏈路看起來具有至少為1280位元組的mtu。

在兩個主機之間的路徑中最小的mtu稱為路徑mtu。1500位元組的乙太網mtu是當今常見的路徑mtu。

如果資料報的大小超過了相應鏈路的mtu,ipv4和ipv6都將進行分片,這些分片在到達目的主機之前通常不會被重組。

ipv4主機對其產生的資料報進行分片,ipv4路由器對其**的資料報執行分片,但是ipv6只有主機對其產生的資料報執行分片,ipv6路由器不對其**的資料報執行分片。

ipv4的首部的"不分片「位(即df位)若被設定,那麼不管是傳送這些資料報的主機,還是**這些資料報的路由器,都不允許對它們進行分片,當ipv4路由器接收到乙個超過其外出鏈路mtu大小且設定了df位的ipv4資料報時,它將產生乙個icmpv4"destination unreachable,fragmentation needed but df bit set"(目的地不可達,需分片但df位已設定)出錯訊息,當ipv6路由器接收到乙個超過其外出鏈路mtu大小的ipv6資料報時,它將產生乙個icmpv6"packet too big"(分組太大)出錯訊息。

ipv4的df位可用於路徑mtu發現,如果乙個tcp是基於ipv4的,那麼它將在所傳送的所有資料報中設定df位。如果某個中間路由器返回乙個icmpv4"destination unreachable,fragmentation needed but df bit df bit set錯誤,那麼tcp就減少每個資料報的資料量並重傳。

tcp有乙個mss(maximum segment size,最大分節大小),用於向對端tcp通告對端在每個分節中能傳送的最大tcp資料量。mss的目的是告訴對端其重組緩衝區大小的實際值,從而試圖避免分片。mss經常設定成mtu減去ip和tcp首部的固定長度。在乙太網中使用ipv4的mss值為1460,使用ipv6的mss值為1440。

tcp輸出

每乙個tcp套接字有乙個傳送緩衝區,當某個程序呼叫write時,核心從該應用程序的緩衝區中複製所有資料到所寫套接字的傳送緩衝區。如果該套接字的傳送緩衝區容不下該應用程序的所有資料,該應用程序將被投入睡眠,這裡假設該套接字是阻塞的,它是通常的預設設定,核心將不從write系統呼叫返回,直到應用程序緩衝區中的所有資料都複製到套接字傳送緩衝區。因此,從寫乙個tcp套接字的write呼叫成功返回僅僅表示我們可以重新使用原來的應用程序緩衝區,並不表明對端的tcp或應用程序已接收到資料,對端tcp必須確認收到的資料,伴隨來自對端的ack的不斷到達,本端tcp至此才能從套接字傳送緩衝區中丟棄已確認的資料。tcp必須為已傳送的資料保留乙個副本,直到它被對端確認為止。

套接字的接受緩衝區及傳送緩衝區

1.套接字的接受緩衝區及傳送緩衝區 net.ipv4.tcp rmem 這個引數定義了tcp接收緩衝 用於tcp接收滑動視窗 的最小值 預設值 最大值 net.ipv4.tcp wmem 這個引數定義了tcp傳送緩衝 用於tcp傳送滑動視窗 的最小值 預設值 最大值 netdev max backl...

套接字中緩衝區

1 mtu maximum transmission unit 最大傳輸單元,在資料鏈路層中,往往規定了mtu大小,ip層的資料報通過資料鏈路層如果大於mtu,將被分片,到達接收端ip層後再被重組。乙太網的mtu為1500位元組。2 mss maximum segment size 最大報文段,是t...

設定socket緩衝區大小

分類 天上的星 亮晶晶 2008 11 18 16 50 2973人閱讀收藏 舉報socket傳送資料時候先把資料傳送到socket緩衝區中,之後接受函式再從緩衝區中取資料,如果傳送端特別快的時候,緩衝區很快就被填滿 socket預設的是1024 8 8192位元組 這時候我們應該根據情況設定緩衝區...