Category: Software Development

Keep-Alive but i’m dead

Keep-Alive but i’m dead

4 May 2009

จากโพสเดิมเขียนเรื่องการหาสาเหตุของปัญหาโดยใช้ 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

Problem Diagnosis with TCPDump and Wireshark

3 May 2009

อาทิตย์ก่อนระบบ 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 [...]