ไม่มีการตอบสนองต่อแพ็คเก็ต SYN บางตัวเมื่อเปิดใช้งานการประทับเวลา


9

ฉันมีเซิร์ฟเวอร์ TCP ฟังบนเครื่อง ("เซิร์ฟเวอร์") ที่ใช้งาน Ubuntu 12.04.3 (เคอร์เนล 3.8.0-31-generic) ได้รับการเชื่อมต่อจาก 2 เครื่องไคลเอนต์ที่แตกต่างกัน Machine A กำลังเรียกใช้ Ubuntu 12.04.4 (3.11.0-17-generic) และเครื่อง B กำลังเรียกใช้ Ubuntu 11.10 (3.0.0-32-server)

หากเปิดใช้งานการประทับเวลา TCP บนเซิร์ฟเวอร์ (sysctl net.ipv4.tcp_timestamps = 1) ดังนั้นบางครั้ง SYN แพ็กเก็ตจากเครื่อง A จะถูก "เพิกเฉย" การใช้ tcpdump บนเซิร์ฟเวอร์ (ในโหมดที่ไม่มี promiscuous) ฉันสามารถเห็น SYN มาถึงแล้วพร้อมกับ checksums ที่ถูกต้อง - ไม่มีการตอบสนอง - ไม่มี SYN / ACK และไม่มี RST เครื่อง A จะทำการส่งสัญญาณซ้ำอีกหลายครั้งก่อนที่จะยอมแพ้ ซอฟต์แวร์ไคลเอ็นต์ทำงานบนเครื่อง A (ลองใช้ในกรณีนี้) ลองใหม่ด้วยการเชื่อมต่อใหม่และทำสำเร็จได้รับ SYN / ACK ทันที

เครื่อง B ไม่มีปัญหากับเซิร์ฟเวอร์เดียวกันและการรับส่งข้อมูลดูปกติ - ใช้ตัวเลือก TCP เดียวกับเครื่อง A (จากสิ่งที่ฉันเห็นจากไฟล์จับภาพ) การปิดใช้งานการประทับเวลา TCP บนเซิร์ฟเวอร์ทำให้ทุกอย่างทำงานได้ตามปกติ

การประทับเวลาในแพ็คเก็ต SYN ที่ถูกละเว้นดูเหมือนว่าใช้ได้สำหรับฉัน แต่ฉันไม่แน่ใจว่าทำไมพวกเขาถึงก่อให้เกิดปัญหาหรือเป็นสาเหตุพื้นฐานเลย

ฉันได้ใส่ pcap anonyimised นี่https://www.dropbox.com/s/onimdkbyx9lim70/server-machineA.pcap มันถูกถ่ายบนเซิร์ฟเวอร์ (10.76.0.74) แสดงเครื่อง A (10.4.0.76) แสดง HTTP GET (แพ็คเก็ต 1 ถึง 10) สำเร็จแล้ว 1 วินาทีหลังจากนั้นพยายามดึง URL เดียวกันอีกครั้ง (แพ็คเก็ต 11 ถึง 17) แต่แทน SYN ของมันถูกเพิกเฉย แพ็คเก็ตที่ 18 ถึง 27 เป็นความสำเร็จอีกอย่างหนึ่ง

ฉันสงสัยว่านี่เป็นปัญหาที่คล้ายกับที่อธิบายไว้ใน " ทำไมเซิร์ฟเวอร์ไม่ส่งแพ็กเก็ต SYN / ACK เพื่อตอบสนองต่อแพ็คเก็ต SYN " และในขณะที่การปิดใช้งานการประทับเวลาเป็นวิธีแก้ปัญหาฉันต้องการทำความเข้าใจกับสิ่งที่เกิดขึ้น นี่เป็นเพียงข้อบกพร่องหรือไม่?

ไม่มีการเรียกใช้ไฟร์วอลล์ในเครื่อง เซิร์ฟเวอร์จัดการการเชื่อมต่อ TCP ค่อนข้างน้อย (ประมาณ 32K ในแต่ละครั้ง) แต่มีหน่วยความจำ / CPU มากมาย ในช่วงเวลาของการทดสอบที่แสดงใน pcap ไม่มีการเชื่อมต่อ TCP อื่น ๆ ระหว่างเครื่อง A และเซิร์ฟเวอร์ ไม่มีสัญญาณว่าคิวการยอมรับของแอปพลิเคชันเซิร์ฟเวอร์นั้นเต็มไปด้วย (นอกจากนั้นควรส่งผลกระทบต่อลูกค้าทั้งสองที่ฉันจะเข้าใจ) เมื่อแพ็กเก็ตดูโอเคใน pcap ที่ถ่ายบนเซิร์ฟเวอร์ดูเหมือนว่าอุปกรณ์เน็ตเวิร์กที่เข้ามาแทรกแซงจะแตกหัก

ฉันโพสต์ครั้งแรกนี้ในฟอรั่มอูบุนตู แต่ในความเข้าใจย้อนหลังนี่อาจเป็นตำแหน่งที่เหมาะสมกว่า หวังว่าจะได้เบาะแส

คำตอบ:


5

ในกรณีของฉันคำสั่งต่อไปนี้แก้ไขปัญหาที่หายไปตอบกลับ SYN / ACK จากเซิร์ฟเวอร์ Linux:

sysctl -w net.ipv4.tcp_tw_recycle=0

ฉันคิดว่ามันถูกต้องมากกว่าการปิดใช้งานการประทับเวลา TCP เนื่องจากการประทับเวลา TCP มีประโยชน์หลังจากทั้งหมด (PAWS การปรับขนาดหน้าต่าง ฯลฯ )

เอกสารเกี่ยวกับการtcp_tw_recycleระบุไว้อย่างชัดเจนว่าไม่แนะนำให้เปิดใช้งานเนื่องจากเราเตอร์ NAT หลายคนรักษาเวลาประทับดังนั้นPAWSจึงเตะเข้าเนื่องจากการประทับเวลาจาก IP เดียวกันไม่สอดคล้องกัน

   tcp_tw_recycle (Boolean; default: disabled; since Linux 2.4)
          Enable fast recycling of TIME_WAIT sockets.  Enabling this
          option is not recommended for devices communicating with the
          general Internet or using NAT (Network Address Translation).
          Since some NAT gateways pass through IP timestamp values, one
          IP can appear to have non-increasing timestamps.  See RFC 1323
          (PAWS), RFC 6191.

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