Hello! I have written an application that intensively sends and receives data from socket. But when I have captured network traffic I have seen that empty ACK (without data) is sent for every packet arrived. My application's response time for queries is low and I am wondered why empty ACK was sent first and data packet (that acknowledges the same was sent a little later). What about "delayed ACKs"? What am I doing wrong? Here is example of a telnet connection to web-server on the same host. # Syn 20:12:49.115180 b.h.net.1028 > b.h.net.www: S [tcp sum ok] 3508780041:3508780041(0) win 32767 <mss 16396,sackOK,timestamp 912509 0,nop,wscale 0> (DF) [tos 0x10] (ttl 64, id 20596, len 60) # Syn + ACK 20:12:49.115248 b.h.net.www > b.h.net.1028: S [tcp sum ok] 3510633226:3510633226(0) ack 3508780042 win 32767 <mss 16396,sackOK,timestamp 912509 912509,nop,wscale 0> (DF) (ttl 64, id 0, len 60) # ACK 20:12:49.115301 b.h.net.1028 > b.h.net.www: . [tcp sum ok] 1:1(0) ack 1 win 32767 <nop,nop,timestamp 912509 912509> (DF) [tos 0x10] (ttl 64, id 20597, len 52) # "GET /" 20:12:51.180634 b.h.net.1028 > b.h.net.www: P [tcp sum ok] 1:8(7) ack 1 win 32767 <nop,nop,timestamp 912715 912509> (DF) [tos 0x10] (ttl 64, id 20598, len 59) # ACK for "GET /" 20:12:51.180681 b.h.net.www > b.h.net.1028: . [tcp sum ok] 1:1(0) ack 8 win 32767 <nop,nop,timestamp 912715 912715> (DF) (ttl 64, id 61302, len 52) # Web server response "<!DOCTYPE ..." + ACK for "GET /" 20:12:51.184314 b.h.net.www > b.h.net.1028: P 1:1457(1456) ack 8 win 32767 <nop,nop,timestamp 912716 912715> (DF) (ttl 64, id 61303, len 1508) # ACK for "<!DOCTYPE ..." 20:12:51.184359 b.h.net.1028 > b.h.net.www: . [tcp sum ok] 8:8(0) ack 1457 win 32767 <nop,nop,timestamp 912716 912716> (DF) [tos 0x10] (ttl 64, id 20599, len 52) # Fin 20:12:51.185377 b.h.net.www > b.h.net.1028: F [tcp sum ok] 1457:1457(0) ack 8 win 32767 <nop,nop,timestamp 912716 912716> (DF) (ttl 64, id 61304, len 52) # Fin + ACK for Fin 20:12:51.189326 b.h.net.1028 > b.h.net.www: F [tcp sum ok] 8:8(0) ack 1458 win 32767 <nop,nop,timestamp 912716 912716> (DF) [tos 0x10] (ttl 64, id 20600, len 52) # ACK for FIN 20:12:51.189364 b.h.net.www > b.h.net.1028: . [tcp sum ok] 1458:1458(0) ack 9 win 32767 <nop,nop,timestamp 912716 912716> (DF) (ttl 64, id 61305, len 52) So, why empty ack for "GET /" is sent? The time difference between client request and server response is only 0.00368 seconds. Why not to delay ACK? Thanks! - : send the line "unsubscribe linux-net" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html