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必須為已傳送的資料保留乙個副本,直到它被對端確認為止。
資料報套接字
又稱udp套接字,它以資料報的方式傳輸資料。特點 面向無連線的 不可靠的 資料報套接字 注意 udp沒有3次握手,4次揮手。服務端流程 客戶端流程 socket af inet,soct dgram 建立udp套接字 socket af inet,soct dgram 建立udp套接字 bind 繫...
獲取和設定套接字選項
下面幾種方法可用來獲取和設定影響套接字的選項 1 getsockopt 和 setsockopt 函式 2 fcntl 函式 3 ioctl 函式。本文將介紹 getsockopt 和 setsockopt 函式,對 fcntl 的介紹見 url 函式介紹 url 而對 ioctl 的介紹則留到後面...
udp套接字收發資料
udp傳送資料注意點 s socket.socket socket.af inet,socket.sock dgram 1 初始化socket 兩個引數 第乙個 ip 1v4協議 第二個是tcp還是udp協議 socket.sock dgram udp協議 socket.sock stream tc...