วิธีตีความเอาต์พุตของ netstat -o / netstat --timers


17

netstat -oรวมถึงข้อมูลตัวจับเวลาบางส่วนในผลลัพธ์ แต่ฉันไม่พบคำอธิบายของผลลัพธ์ในTimerคอลัมน์ที่ใดก็ได้
ใครสามารถอธิบายสิ่งนี้หรือชี้ไปที่คำอธิบายได้หรือไม่?

นี่คือสิ่งที่ ouptput ของ netstat -o ดูเหมือน (บน Ubuntu 8.04)

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       Timer
tcp        0      0 192.168.22.1:443        111.111.11.210:5804     ESTABLISHEDkeepalive (6176.47/0/0)
tcp        0      0 192.168.22.1:443        192.168.22.253:48379    TIME_WAIT  timewait (36.57/0/0)
tcp        0    924 192.168.22.1:47763      10.9.169.60:443         ESTABLISHEDon (0.34/0/0)
tcp        0      0 192.168.22.1:443        192.168.111.99:4059     ESTABLISHEDkeepalive (6963.60/0/0)
tcp        0      0 192.168.22.1:443        192.168.111.74:1729     ESTABLISHEDkeepalive (1393.60/0/0)
tcp        0      0 192.168.56.1:42204      10.9.169.60:443         ESTABLISHEDoff (0.00/0/0)
tcp        0      0 192.168.56.1:42207      10.9.169.60:443         ESTABLISHEDoff (0.00/0/0)
tcp        0    940 192.168.22.1:42186      10.9.169.60:443         ESTABLISHEDon (0.28/0/0)
tcp        0      0 192.168.22.1:443        192.168.22.253:48367    TIME_WAIT  timewait (31.57/0/0)
tcp        0      0 192.168.22.1:42234      10.9.169.60:443         ESTABLISHEDoff (0.00/0/0)
tcp        0      0 192.168.22.1:42209      10.9.169.60:443         ESTABLISHEDoff (0.00/0/0)

คำตอบ:


7

หมายเลขแรกคือตัวจับเวลานับถอยหลังอย่างชัดเจน ขึ้นอยู่กับประเภทสถานะเมื่อตัวจับเวลาหมดเวลาจะลองอีกครั้งและส่ง FIN อื่นหรือแพ็กเก็ตที่จำเป็นเพื่อลองอีกครั้ง ดังนั้นตัวเลขที่สองจึงติดตามจำนวนการลองใหม่ ขอให้สังเกตว่าตัวจับเวลาเพิ่มขึ้นเนื่องจาก TCP มีตัวจับเวลาแบ็คออฟในกรณีที่มีสภาพการจราจร ตัวจับเวลาถอยหลังเพื่อหลีกเลี่ยงการลองซ้ำบ่อยเกินไป ความล้มเหลวแต่ละครั้งส่งผลให้เกิดการแบ็คออฟที่ใหญ่ขึ้นและใหญ่ขึ้น แบ็คออฟอาจเป็นการเติบโตแบบเอ็กซ์โพเนนเชียลหรือแบบเชิงเส้นขึ้นอยู่กับสแต็ก TCP ฉันไม่ได้คิดออกว่ารูปที่ 3 สำหรับ ศูนย์ในจอแสดงผลของฉันเสมอ


31

คอลัมน์ตัวจับเวลามีสองฟิลด์ (จาก o / p ด้านบน):

keepalive (6176.47/0/0)  
<1st field> <2nd field>

1st fieldสามารถมีค่า:
keepalive- เมื่อจับเวลา keepalive อยู่สำหรับซ็อกเก็ต
on- เมื่อมีการจับเวลาการ retransmission อยู่สำหรับซ็อกเก็ต
off- ไม่มีการข้างต้นเป็น ON

2nd fieldมีสามฟิลด์:

(6176.47/0/0) -> (a/b/c)

a= ค่าตัวจับเวลา (a = ตัวจับเวลา keepalive เมื่อฟิลด์ที่ 1 = "keepalive"; = ตัวจับเวลา retransmission เมื่อฟิลด์ที่ 1 = "บน")
b= จำนวนการส่งสัญญาณที่เกิดขึ้น
c= จำนวนโพรบ Keepalive ที่ถูกส่งไป

ตัวอย่างเช่นฉันเปิดซ็อกเก็ตสองอันระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ (ไม่ใช่ลูปแบ็ค) การตั้งค่า keepalive คือ:

KEEPALIVE_IDLETIME   30
KEEPALIVE_NUMPROBES   4
KEEPALIVE_INTVL      10

และฉันได้ปิดเครื่องไคลเอ็นต์ดังนั้นที่ฝั่งเซิร์ฟเวอร์ฉันใช้ netstat & ผลลัพธ์คือ:

พอร์ต 1:

netstat -c --timer | grep "192.0.0.1:43245             192.0.68.1:49742"

tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (1.92/0/0)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (0.71/0/0)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (9.46/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (8.30/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (7.14/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (5.98/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (4.82/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (3.66/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (2.50/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (1.33/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (0.17/0/1)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (9.01/0/2)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (7.75/0/2)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (6.47/0/2)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (5.29/0/2)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (4.08/0/2)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (2.89/0/2)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (1.73/0/2)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (0.54/0/2)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (9.38/0/3)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (8.23/0/3)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (7.08/0/3)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (5.93/0/3)                                                                                                                               
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (4.76/0/3)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (3.62/0/3)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (2.48/0/3)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (1.32/0/3)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (0.13/0/3)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (8.98/0/4)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (7.78/0/4)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (6.62/0/4)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (5.45/0/4)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (4.29/0/4)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (3.14/0/4)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (1.99/0/4)
tcp        0      0 192.0.0.1:43245             192.0.68.1:49742            ESTABLISHED keepalive (0.85/0/4)

คุณสามารถเห็นข้างบนว่าเซิร์ฟเวอร์ส่งโพรบแบบ keepalive สี่ตัวหลังจากผ่านไป 10 วินาทีและเนื่องจากไม่ได้รับการตอบสนองใด ๆ จำนวนโพรบที่ส่งจำนวนโพรบจะเพิ่มขึ้นและหลังจาก 4 มันจะตัดการเชื่อมต่อจากไคลเอนต์

พอร์ต 2:

สำหรับการเชื่อมต่อครั้งที่ 2 ซ็อกเก็ตเหมือนกันยกเว้นแอปพลิเคชันของฉันที่ฝั่งเซิร์ฟเวอร์พยายามส่งข้อความบางอย่างหลังจากไคลเอนต์หยุดทำงานและก่อนที่ keepalive จะหมดอายุ:

 netstat -c --timer | grep "192.0.0.1:36483             192.0.68.1:43881"

tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (8.18/0/1)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (7.00/0/1)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (5.86/0/1)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (4.71/0/1)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (3.55/0/1)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (2.40/0/1)                                                                                                                               
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (1.21/0/1)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (0.05/0/1)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (8.91/0/2)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (7.75/0/2)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (6.56/0/2)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (5.39/0/2)
tcp        0      0 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED keepalive (4.14/0/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (0.21/2/2)  // <---- retransmission timer kicks in
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (0.68/3/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (2.74/4/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (1.59/4/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (0.43/4/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (2.28/5/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (1.11/5/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (2.95/6/2)

. . . . . 

tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (0.65/249/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (2.58/250/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (1.48/250/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (0.36/250/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (2.26/251/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (1.15/251/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (3.01/252/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (1.92/252/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (0.84/252/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (2.72/253/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (1.64/253/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (0.55/253/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (2.47/254/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (1.39/254/2)                                                                                                                                    
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (0.31/254/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (2.19/255/2)
tcp        0    210 192.0.0.1:36483             192.0.68.1:43881            ESTABLISHED on (1.12/255/2)

อย่างที่คุณเห็นในกรณีนี้สิ่งต่าง ๆ เล็กน้อย เมื่อไคลเอนต์หยุดทำงานเซิร์ฟเวอร์ของฉันเริ่มส่งข้อความแบบ keepalive แต่ในขณะที่ยังส่งข้อความแบบ keepalives เซิร์ฟเวอร์ของฉันพยายามส่งข้อความไปยังไคลเอนต์ เนื่องจากไคลเอ็นต์หยุดทำงานเซิร์ฟเวอร์ไม่สามารถรับ ACK ใด ๆ จากไคลเอ็นต์ดังนั้นการส่ง TCP ใหม่เริ่มต้นและเซิร์ฟเวอร์พยายามส่งข้อมูลอีกครั้งทุกครั้งที่เพิ่มจำนวนการส่งสัญญาณใหม่ (ฟิลด์ที่ 2) เมื่อตัวจับเวลาการส่งใหม่ (ครั้งที่ 1) ฟิลด์) หมดอายุแล้ว

หวังว่านี่จะอธิบายnetstat --timerตัวเลือกได้ดี


สวัสดี ถ้าคุณเปิดการเชื่อมต่อหนึ่งทำไม netstat แสดงรายการมากมาย
Marco Marsala

1
ธง '-c' ทำให้พิมพ์ข้อมูลนี้อย่างต่อเนื่องทุกวินาที
brokenfoot

1

สนามแรก: timewait/keepalive

เวลาเป็นวินาทีจากเมื่อข้อมูลล่าสุดถูกถ่ายโอนจนกว่าเมื่อโพรบ keepalive TCP ถัดไปจะถูกส่ง

โดยค่าเริ่มต้นนี้จะเริ่มต้นที่ 7200s และรีเซ็ตอีกครั้งทุกครั้งที่มีการส่งข้อมูลมากขึ้น หากค่าต่ำเช่นสำหรับ 4000 วินาทีหมายถึงการเชื่อมต่อที่มีชีวิตบางส่วนถูกแขวนหรือไม่ได้ทำอะไรเป็นเวลานาน

การเชื่อมต่อกับพร็อกซีภายในหรือกระบวนการภายในอื่นอาจหยุดทำงานนานขึ้น แต่สิ่งนี้ไม่ควรเกิดขึ้นกับการเชื่อมต่อผ่านเว็บ


2
เพียงเพื่อหลีกเลี่ยงความสับสนใน Linux: ตัวจับเวลาสามารถมองเห็นได้netstat -oแต่จะไม่รีเซ็ตมันนับเป็น 0 จากนั้นตรวจสอบว่ามีการส่งข้อมูลหรือไม่ ถ้าไม่ใช่มันจะส่งแพ็คเก็ตมิฉะนั้นจะคำนวณเวลาที่เหลืออยู่และเริ่มต้นอีกครั้ง ด้วยวิธีนี้มันไม่จำเป็นต้องเปลี่ยนจับเวลา
eckes

@eckes คุณช่วยอธิบายความหมายของคุณได้อย่างไร ไม่ค่อยเข้าใจ
Ionut Popa

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