ขนาดบัฟเฟอร์สำหรับการจับแพ็กเก็ตในพื้นที่เคอร์เนล?


16

หากผ่านหน้า man ของtcpdumpดูเหมือนว่าเคอร์เนลสามารถวางแพ็กเก็ตได้หากบัฟเฟอร์เต็ม ฉันสงสัยว่า:

  1. ขนาดนั้นสามารถกำหนดค่าได้และ / หรือ
  2. ฉันจะดูขนาดของ distro ของฉันได้ที่ไหน

จากหน้าคน (สำหรับการอ้างอิงง่าย ๆ ):

แพ็กเก็ต `` ดร็อปโดยเคอร์เนล '' (นี่คือจำนวนแพ็กเก็ตที่ถูกดร็อปเนื่องจากการขาดพื้นที่บัฟเฟอร์โดยกลไกการดักจับแพ็กเก็ตในระบบปฏิบัติการที่ tcpdump ทำงานอยู่หากระบบปฏิบัติการรายงานข้อมูลไปยังแอปพลิเคชัน มิฉะนั้นจะถูกรายงานเป็น 0)

คำตอบ:


27

Tcpdump มีตัวเลือก-Bในการตั้งค่าขนาดบัฟเฟอร์การจับภาพ ค่าจะถูกส่งผ่านไปยัง libpcap (ไลบรารีที่ใช้โดย tcpdump เพื่อทำการจับแพ็คเก็ตจริง) ผ่านpcap_set_buffer_size()ฟังก์ชัน Tcpdump manpage ไม่ได้ระบุขนาดหน่วยบัฟเฟอร์ที่ระบุด้วย -B แต่จากแหล่งที่มาดูเหมือนว่าเป็น KiB

หน้าแบบแมนนวลของpcap_set_buffer_size()ไม่ได้ระบุขนาดบัฟเฟอร์เริ่มต้น (ซึ่งใช้หากไม่ได้เรียกใช้ฟังก์ชันนี้) แต่อีกครั้งจากแหล่ง libpcapดูเหมือนว่าจะเป็น 2 MiB อย่างน้อยใน linux (แต่ขึ้นอยู่กับระบบที่เป็นไปได้มากที่สุด)

เกี่ยวกับการบัฟเฟอร์แพ็กเก็ตและการดร็อปคุณควรใส่ใจกับการตั้งค่า-sพารามิเตอร์snaplen ( ) ตามลำดับ man tcpdump:

-s     Snarf  snaplen bytes of data from each packet rather than the
default of 65535 bytes.  Packets truncated because of a limited snapshot
are indicated in the output with ``[|proto]'', where proto is the name of
the protocol level at which the truncation has occurred. Note that  taking
larger  snapshots both increases the amount of time it  takes  to
process packets and, effectively, decreases the amount of packet buffering.
This may cause packets to be lost. You should limit snaplen to the
smallest number that will capture the protocol information you're
interested in. Setting snaplen to 0 sets it to the default of 65535, for
back-wards compatibility with recent older versions of tcpdump.

ซึ่งหมายความว่าด้วยขนาดบัฟเฟอร์คงที่คุณสามารถเพิ่มจำนวนของแพ็กเก็ตที่พอดีกับบัฟเฟอร์ (และไม่ลดลง) โดยการลดขนาด snaplen


2
ฉันรู้ว่านี่เป็นเธรดเก่า (และฉันชอบคำตอบนี้) แต่เมื่อคุณอ้างถึงแหล่งข้อมูลบน GitHub โปรดชี้ไปที่การกระทำปัจจุบัน (เนื่องจากสาขาหลักสามารถเปลี่ยนแปลงได้) เช่น: github.com/mcr/tcpdump/blob/ … .
bruno nery

@brunonery นั่นไม่ใช่ปัญหากับไซต์ Stack Exchange ที่เราสนับสนุนให้ผู้ใช้ปรับปรุงคำตอบแม้ว่าโพสต์นั้นจะค่อนข้างเก่า (แตกต่างจากฟอรัมที่มีการขมวดคิ้ว)
Léo Lam

แก้ไขลิงก์ที่ล้าสมัย
Eli Heady
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.