簡體   English   中英

python 2.7 socket.send()總協定

[英]python 2.7 socket.send() general contract

有人可以向我解釋python的socket.send()方法的一般約定嗎? 作為教育項目的一部分,我正在制作某種流量生成器。

每當執行socket.send()方法時,我都會進行簡單的日志記錄,我會發送一些流量,並在方法完成時記下文件的時間(除其他事項外,我還會記錄日志)。 這些日志顯示,我發送的消息多於wireshark顯示的消息,這是在我的傳出流量變得相對較高時發生的。

我已閱讀: https : //docs.python.org/2/howto/sockets.html#socket-howto

正如我在鏈接中提到的那樣:'它們不一定要處理您交給它們(或期望它們)的所有字節,因為它們的主要重點是處理網絡緩沖區。 通常,它們在關聯的網絡緩沖區已滿(發送)時返回。

如果我理解正確,則不能保證我的信息會正確發送。 我可以讀取socket.send() 處理了多少字節,但是我想知道“處理”的含義是什么。

有人可以向我解釋:

  • 我提供的鏈接中的網絡緩沖區是什么(TCP窗口,網卡上的某種隊列,還有其他?)
  • 外行的術語,如何在python中實現socket.send()以便我可以更好地利用它。 它如何與我的硬件/操作系統交互?

當您使用TCP時,網絡層確保您傳遞給send()所有字節實際上都將被發送(如果未發送,套接字將被關閉)。 但是,聽起來您是在計算數據包而不是字節。

調用send()的次數與發送的數據包的數目之間並不總是存在關系。 網絡層可以自由地將傳遞給send()的數據合並或拆分為不同大小的數據包,只要它們都以與發送的順序相同的方式到達遠端。

如果要進一步控制發送的數據包數量 ,請使用UDP而不是TCP。

暫無
暫無

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

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