Category: Software Development
Keep-Alive but i’m dead
จากโพสเดิมเขียนเรื่องการหาสาเหตุของปัญหาโดยใช้ tcpdump และ wireshark วันนี้เจอโจรแล้ว เจ้าโจรที่ว่าคือการ set connection ใน header ของ HTTP ในสมัยก่อนยุค HTTP 1.0 เราจะเปิด request ใด ๆ จะต้องทำ connection ไปยังปลายทางทุก ๆ ครั้งไปเช่นในเว็บเพจหนึ่งมี html หนึ่งเพจ 10 รูป เราจำเป็นต้องเปิด connection ไม่ต่ำกว่า 11 ครั้งเพื่อให้ได้ข้อมูลที่เราต้องการ ต่อมาจึงได้มีการพัฒนาโปรโตคอล HTTP ขึ้นมาเป็นยุค HTTP 1.1 ซึ่งมีความสามารถเพิ่มขึ้นมาคือ Keep-Alive connection ซึ่งทำให้เราลด bandwidth และ latency ที่เกิดขึ้นได้อย่างมากเพราะเราสามารถเปิด connection ค้างไว้และทำการ req/ack กันได้ตลอดโดยไม่จำเป็นต้อง syn กันบ่อย ๆ ที่มาของปัญหาคือว่าร้อยปีร้อยชาติโปรแกรมผมก็ไม่เคยต้องไป override [...]
Problem Diagnosis with TCPDump and Wireshark
อาทิตย์ก่อนระบบ Application ที่กำลังพัฒนาอยู่มีปัญหาเกี่ยวกับ การรับสิ่งข้อมูลระหว่างระบบสองระบบไม่ถูกต้อง คือได้รับแจ้งว่า Logging ต้นทางนั้นไม่สามารถส่งข้อมูลมาถึง Server ที่กำลังพัฒนาอยู่ได้ สิ่งแรกที่เช็กก่อนเลยคือเช็ก Access Log ของ Apache เองว่าเจอ request ไหม แต่เนื่องจากระบบมี Transactions เยอะมากและข้อมูลส่งมาอยู่ในรูปแบบ HTTP POST จึงไม่สามารถตรวจเช็กได้ ปัญหาชักจะเริ่มซับซ้อนแล้วสิ คงต้องทำการเช็ก packet ในระดับล่าง ๆ ว่าทาง Server มองเห็นข้อมูลใดบ้างและมี packet ไหนที่ตกหล่นไปทำให้ Server ไม่ได้รับ เครื่องมือแรกที่เราจำเป็นต้องมีคือ TCPDump เป็นโปรแกรมขนาดเล็กที่สาธารณะประโยชน์มาก ใช้ในการตรวจจับ tcp packet ที่เราสนใจ คำสั่งที่ใช้คือ tcpdump -nnvvXSs 1514 -i bond0 port 8800 -w capture.log and src 10.x.x.33 [...]


