簡體   English   中英

如果您不調用recv,則TCP / IP堆棧中的緩沖區在哪里?

[英]Where does the Buffer from TCP/IP stack if you don't call recv?

假設我有一台偵聽端口X的服務器。

幾個客戶端連接到服務器,並通過send命令發送數據。

如果服務器沒有發生什么recv程序來“刷新”緩沖區?

緩沖區駐留在您自己的進程中還是在Windows中?

是否還可以“ DDos”?

如果服務器沒有用於“刷新”緩沖區的recv例程,會發生什么情況?

與此套接字對應的接收緩沖區將填滿。 發生這種情況時,UDP將靜默丟棄傳入的數據報。 TCP將丟棄傳入的數據報,而不對其進行確認,從而觸發擁塞控制(在Reno / XP下將窗口大小減半,或者在CompoundTCP / Vista +下切換到延遲窗口)。
當您從緩沖區中刪除一些數據時,UDP將恢復接收數據報,就像什么都沒發生一樣(找出丟失的數據是您的問題!),而TCP將繼續接受和確認數據包,並逐漸增加窗口大小(數據在模擬流中將保持一致,就好像什么都沒掉一樣)。

緩沖區駐留在您自己的進程中還是在Windows中?

可能兩者都有,也沒有緊迫的要求,只要它由庫層管理/擁有,它就可以駐留在用戶空間中(盡管實際上在內核空間中)。 但是,這個細節並不重要,因為您無法直接訪問任何一種原始緩沖區。 您只能通過網絡庫提供的API(Winsock函數或類似Berkeley的套接字函數)訪問它。

是否還可以“ DDos”?

是。 DDoS是一種使網絡電纜物理飽和的攻擊。 在軟件方面做什么並不重要(或根本不重要)。 DDoS需要在更高的網絡層上尋址(您通常無法訪問的一個!)。 一旦惡意流量通過“胖管道”到達服務器的子網(或上游連接它的路由器),您將無能為力。
網絡具有不同的物理(光學或電氣)和邏輯(例如令牌)形式,但是在任何一種情況下,電纜上的任何時間都只能有一個發送者。 如果有人通過DDoS使您的線路容量達到飽和,則您和路由器都將無法將數據包放在線路上,除非偶爾是偶然的。 但是,路由器的構建具有短的轉發隊列,並在隊列填滿時迅速丟棄數據包,因此實際上您很不走運。

我對TCP不太了解,因此外行的解釋可能並不完全正確。 要了解更多信息的相關搜索詞是“流量控制”,“窗口”,“吞吐量”和“飽和度”。

看看tcp / udp服務器發布的速度快於客戶端消耗的速度嗎? ,答案為“不會”:連接僅允許一定數量的數據“處於傳輸中”,並在檢測到達到最大值后停止發送。

當所有接收緩沖區(NIC,內核)已滿並且未被接收應用程序處理時,發送方繼續發送數據(惡意不遵循TCP協議),接收NIC將丟棄傳入的數據包。

由於數據包最終會出現在NIC中,因此這仍然會占用帶寬,因此是的,這仍然是DDOS漏洞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM