วิธีตรวจสอบอย่างอดทนสำหรับการสูญเสียแพ็กเก็ต TCP? (Linux)


61

ฉันจะติดตามการสูญหายของแพ็คเก็ตแบบพาสซีฟในการเชื่อมต่อ TCP ไปยัง / จากเครื่องของฉันได้อย่างไร

โดยทั่วไปฉันต้องการเครื่องมือที่อยู่ในพื้นหลังและดู TCP ack / nak / re-transmits เพื่อสร้างรายงานที่อยู่ IP ของเพียร์ "ดูเหมือน" จะประสบกับการสูญเสียจำนวนมาก

คำถามส่วนใหญ่เช่นนี้ที่ฉันค้นหาของ SF แนะนำให้ใช้เครื่องมือเช่น iperf แต่ฉันต้องตรวจสอบการเชื่อมต่อไปยัง / จากแอปพลิเคชันจริงบนเครื่องของฉัน

ข้อมูลนี้มีอยู่ใน Linux TCP stack หรือไม่

คำตอบ:


49

สำหรับความเข้าใจทั่วไปเกี่ยวกับขนาดของปัญหาของคุณnetstat -sจะติดตามจำนวนการส่งสัญญาณซ้ำทั้งหมดของคุณ

# netstat -s | grep retransmitted
     368644 segments retransmitted

คุณสามารถ grep segmentsเพื่อดูรายละเอียดเพิ่มเติมได้ที่:

# netstat -s | grep segments
         149840 segments received
         150373 segments sent out
         161 segments retransmitted
         13 bad segments received

สำหรับการดำน้ำที่ลึกกว่านั้นคุณอาจต้องการจุดไฟใน Wireshark

ใน Wireshark ตั้งค่าตัวกรองของคุณtcp.analysis.retransmissionเพื่อดูการส่งสัญญาณซ้ำตามโฟลว์

นั่นเป็นตัวเลือกที่ดีที่สุดที่ฉันสามารถทำได้

ปลายตายอื่น ๆ สำรวจ:

  • เครื่องมือ netfilter / conntrack ดูเหมือนจะไม่ทำการส่งซ้ำ
  • stracing netstat -sแสดงให้เห็นว่ามันเป็นเพียงการพิมพ์/proc/net/netstat
  • คอลัมน์ 9 ใน / proc / net / tcp ดูมีแนวโน้ม แต่น่าเสียดายที่ดูเหมือนจะไม่ได้ใช้งาน

และคุณสามารถตรวจสอบแพ็กเก็ตที่สูญหายด้วย # watch 'netstat -s | grep retransmited '
ไม่มี

สิ่งนี้จะแสดงเฉพาะปัญหาขาออก "netstat -s | grep เซกเมนต์" ดูสมเหตุสมผลสำหรับฉันมากขึ้น
akostadinov

1
หากคุณกำลังจัดการเครือข่ายขนาดที่เหมาะสมฉันขอแนะนำ pastmon ผ่าน wireshark สำหรับการตรวจสอบอย่างต่อเนื่อง - pastmon.sourceforge.net/Wikka-1.1.6.5/wikka.php?wakka=HomePage
symcbean

4
ด้วยเหตุผลบางอย่างมันสะกดretransmitedสำหรับฉัน (Ubuntu Server 14)
sudo

1
อัตราที่ดีสำหรับการส่งสัญญาณใหม่เทียบกับการส่งหรือรับคืออะไร
abourget

12

สถิติเหล่านี้อยู่ใน / proc / net / netstat และcollectlจะตรวจสอบให้คุณแบบโต้ตอบหรือเขียนลงดิสก์เพื่อเล่นในภายหลัง:

[root@poker ~]# collectl -st
waiting for 1 second sample...
#<------------TCP------------->
#PureAcks HPAcks   Loss FTrans
        3      0      0      0
        1      0      0      0

แน่นอนหากคุณต้องการเห็นการรับส่งข้อมูลเครือข่ายแบบเคียงข้างกันเพียงแค่รวมnกับ-s:

[root@poker ~]# collectl -stn
waiting for 1 second sample...
#<----------Network----------><------------TCP------------->
#  KBIn  PktIn  KBOut  PktOut PureAcks HPAcks   Loss FTrans
      0      1      0       1        1      0      0      0
      0      1      0       1        1      0      0      0

7

คุณสามารถใช้ssเครื่องมือเพื่อรับสถิติ TCP แบบละเอียด:

$ /sbin/ss -ti

ภายใต้ Debian ใช้apt-get install iprouteเพื่อรับไบนารี


โปรดทราบว่าคนที่ถามคำถามนั้นกำลังมองหาเครื่องมือที่สามารถดูผลลัพธ์ได้ ในขณะที่บางคำสั่งที่กล่าวถึงยังไม่สามารถใช้วิธีนี้ได้คำตอบที่ upvote ทั้งหมดรวมอย่างน้อยหนึ่งวิธีในการทำเช่นนั้น
Andrew B

2
@AndrewB: watch ss -tiคุณสามารถทำได้
John Zwinck

3

ดูเหมือนว่าบางคนที่ University of North Carolina (UNC) ได้สร้างยูทิลิตี้เพื่อตรวจสอบสิ่งนี้:

ระเบียบวิธี

TCP เป็นตัวอย่างดั้งเดิมของโปรโตคอลดั้งเดิมที่ได้รับการแก้ไข น่าเสียดายที่การประเมินสิ่งที่เป็นพื้นฐานเช่นเดียวกับกลไกตรวจจับ / กู้คืนความสูญเสียของ TCP นั้นไม่ครอบคลุม เป้าหมายของเราคือการประเมินการสูญเสีย TCP ที่เป็นจริงอย่างสมบูรณ์และผลกระทบต่อประสิทธิภาพ TCP

ฉันพึ่งพาการวิเคราะห์แบบพาสซีฟของการเชื่อมต่อ TCP ในโลกแห่งความเป็นจริงเพื่อให้ได้ระดับรายละเอียดและความสมจริงในการวิเคราะห์ของฉัน

http://www.cs.unc.edu/~jasleen/Research-passivetcp.htm#Tool

เครื่องมือ

วัตถุประสงค์ของเครื่องมือนี้คือการให้ผลลัพธ์ที่สมบูรณ์และถูกต้องมากขึ้นสำหรับการระบุและจำแนกกลุ่มเซ็กเมนต์ที่ไม่อยู่ในลำดับมากกว่าที่จัดทำโดยเครื่องมือก่อนหน้านี้เช่น tcpanaly, tcpflows, LEAST และ Mystery วิธีการของเราจำแนกแต่ละเซกเมนต์ที่ปรากฏ out-of-sequence (OOS) ในการติดตามแพ็คเก็ตเป็นหนึ่งในหมวดหมู่ต่อไปนี้: การจัดลำดับเครือข่ายใหม่หรือการส่งผ่าน TCP ซ้ำที่ทริกเกอร์โดยหมดเวลาหนึ่ง ACKs ซ้ำ นอกจากนี้การส่งสัญญาณซ้ำแต่ละครั้งจะได้รับการประเมินว่าจำเป็นหรือไม่

ฉันจะไม่บอกว่ามันคือคุณภาพการผลิต ก่อนหน้านี้ฉันได้สร้างสคริปต์ Perl อย่างรวดเร็วเพื่อเก็บ ip / พอร์ต / ack tuples ในหน่วยความจำแล้วรายงานข้อมูลที่ซ้ำกันจากการสแกนเอาต์พุต pcap ดูเหมือนว่าจะให้การวิเคราะห์ที่ละเอียดยิ่งขึ้น



0

เห็นได้ชัดว่าsar แบบเก่าที่ดีสามารถรวบรวมการส่งสัญญาณใหม่ (และสถิติ tcp อื่น ๆ ) พร้อมกับสถิติระบบอื่น ๆ ทุกชนิดที่อาจน่าสนใจถ้าคุณตรวจสอบปัญหาเช่น cpu, หน่วยความจำ, ดิสก์ I / O ฯลฯ

คุณอาจจำเป็นต้องติดตั้งแพคเกจ: sysstat และเปิดใช้งานสถิติชนิดนี้โดยเฉพาะด้วยสวิตช์ -S SNMP บน RHEL / OracleLinux สิ่งนี้ถูกกำหนดค่าใน /etc/cron.d/sysstat โดยที่ / usr / lib64 / sa / sa1 ถูกเรียกใช้ โดยค่าเริ่มต้นทุก ๆ 5 นาที แต่ก็สามารถปรับได้เช่นกัน

สำหรับการวิเคราะห์ข้อมูลนี้ใช้:

  • sar (บรรทัดคำสั่งตามข้อความ)
  • sadf สร้าง SVG ตามhttp://sebastien.godard.pagesperso-orange.fr/matrix.html
  • ksar (ที่สามารถพล็อตกราฟที่ดีและทำงานบน Java - มีโคลนที่แตกต่างกันหลายรอบที่ให้เลือกใน sf.net และ GitHub ถ้าฉันจำได้อย่างถูกต้อง)
  • http://www.sargraph.com (อิงตาม PHP ซึ่งฉันไม่มีประสบการณ์ใด ๆ - โปรดทราบว่าแอปพลิเคชันไม่ใช่ภาษาการเขียนโปรแกรม😉)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.