1.傳送緩衝區問題:
tcp:每個tcp套接字都有乙個傳送緩衝區,可以用so_sndbuf套介面選項來改變這一緩衝區的大小。
當某個應用程序呼叫write往套接字寫資料時,核心從應用程序緩衝區中拷貝所有資料到套介面的傳送緩衝區,
如果套介面傳送緩衝區容不下應用程式的所有資料,或者是應用程序的緩衝區大於套介面的傳送緩衝區,或者是套介面的
傳送緩衝區中有別的資料,應用程序將被掛起。核心將不從write返回。直到應用程序緩衝區中的所有資料都拷貝到套介面傳送緩衝區。
所以,從寫乙個 tcp套介面的write呼叫成功返回僅僅表示我們可以重新使用應用程序緩衝區,它並不是告訴我們對方收到資料。
tcp發給對方的資料,對方在收到資料時 必須給矛確認,只有在收到對方的確認時,本方tcp才會把tcp傳送緩衝區中的資料刪除。
udp:udp因為是不可靠連線,不必儲存應用程序的資料拷貝,應用程序中的資料在沿協議棧向下傳遞時,以某種形式拷貝到核心緩衝區,
當資料鏈路層把資料傳出後就把核心緩衝區中資料拷貝刪除。因此它不需要乙個真正意義上的傳送緩衝區,但是任何udp套接字還是
有傳送緩衝區的,並且我們可以使用so_sndbuf套接字選項更改它,不過它僅僅是可寫到該套接字的udp資料報的大小上限。如果乙個應用程序寫乙個大於
套接字傳送緩衝區大小的資料報,核心將返回該程序乙個emsgsize錯誤。
2.接受緩衝區
tcp:對於tcp來說,套接字接收緩衝區中可用空間的大小限定了tcp通告對端的視窗大小,tcp套接字的接收緩衝區不可能溢位,
因為不允許對端發出超過本端所通告視窗大小的資料,這就是tcp的流量控制。如果對端無視視窗大小而發出超過該視窗大小的資料,
本端tcp將丟棄它們。
udp:當收到的資料報裝不進套接字接收緩衝區時,該資料報就被丟棄。udp是沒有流量控制的,較快的傳送端可以很容易地淹沒較慢的接收端,導
致接收端的udp丟棄資料報。
1.因為tcp的視窗規模選項是在建立連線時用syn分節與對端互換得到對,所以函式的呼叫順序很重要:對於客戶,so_rcvbuf選項必須在
呼叫connect之前設定,對於伺服器,該選項必須在呼叫listen之前給監聽套接字設定
2.關於緩衝區大小的設定範圍是有規定的。
tcp udp套介面緩衝區
概念 mtu 鏈路層上資料幀中資料的最大值,即ip資料報的整個值。詳見tcp ip第7頁。資料進入協議棧的封裝過程。mss tcp報文段中資料的最大值 mss選項只能出現在syn報文中。tcp輸出 每個tcp套介面都有乙個傳送緩衝區,我們可以用so sndbuf套介面選項來改變這個緩衝區的大小。當應...
輸入緩衝區與輸出緩衝區
本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...
緩衝區溢位問題
1.什麼是緩衝區溢位 緩衝區溢位是一種非常普遍 非常危險的漏洞,在各種作業系統 應用軟體中廣泛存在。利用緩衝區溢位 攻擊,可以導致程式執行失敗 系統宕機 重新啟動等後果。更為嚴重的是,可以利用它執行非授權指 令,甚至可以取得系統特權,進而進行各種非法操作。緩衝區溢位 buffer overflow ...