I write an application which open TCP socket and send a lot of buffer with size 5*1440 bytes for each buffer, in lwipopt.h i set TCP_MSS = 1440 and TCP_SND_BUF = 6*1500.
What i captured in log file as below:
tcp_input: packed for LISTENing connection. tcp_input: packed for LISTENing connection. tcp_parseopt: MSS tcp_parseopt: NOP tcp_parseopt: other tcp_parseopt: NOP tcp_parseopt: NOP tcp_parseopt: other
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+ tcp_receive: ACK for 6511, unacked->seqno 6510:6511 tcp_receive: removing 6510:6511 from pcb->unacked Sending data... +-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 9391, unacked->seqno 6511:7951 tcp_receive: removing 6511:7951 from pcb->unacked tcp_receive: removing 7951:9391 from pcb->unacked +-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 12271, unacked->seqno 9391:10831 tcp_receive: removing 9391:10831 from pcb->unacked tcp_receive: removing 10831:12271 from pcb->unacked 0:.+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 15151, unacked->seqno 12271:13711 tcp_receive: removing 12271:13711 from pcb->unacked tcp_receive: removing 13711:15151 from pcb->unacked +-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 18031, unacked->seqno 15151:16591 tcp_receive: removing 15151:16591 from pcb->unacked tcp_receive: removing 16591:18031 from pcb->unacked +-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 20911, unacked->seqno 18031:19471 tcp_receive: removing 18031:19471 from pcb->unacked tcp_receive: removing 19471:20911 from pcb->unacked .+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 23791, unacked->seqno 20911:22351 tcp_receive: removing 20911:22351 from pcb->unacked tcp_receive: removing 22351:23791 from pcb->unacked +-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 26671, unacked->seqno 23791:25231 tcp_receive: removing 23791:25231 from pcb->unacked tcp_receive: removing 25231:26671 from pcb->unacked .+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 29551, unacked->seqno 26671:28111 tcp_receive: removing 26671:28111 from pcb->unacked tcp_receive: removing 28111:29551 from pcb->unacked +-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+
tcp_receive: ACK for 32431, unacked->seqno 29551:30991 tcp_receive: removing 29551:30991 from pcb->unacked tcp_receive: removing 30991:32431 from pcb->unacked .pathien.do_writemore: available: 6120, len: 7200
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+ tcp_receive: ACK for 38191, unacked->seqno -1058603008:-1058601567 tcp_receive: removing -1058603008:-1058601567 from pcb->unacked
tcp_receive: removing 33871:35311 from pcb->unacked tcp_receive: removing 35311:36751 from pcb->unacked tcp_receive: removing 36751:38191 from pcb->unacked tcp_input: packet discarded due to failing checksum 0x3ee8
.pathien.do_writemore: available: 4680, len: 7200 +-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+ tcp_receive: ACK for 43951, unacked->seqno -1058603008:-1058601567 tcp_receive: removing -1058603008:-1058601567 from pcb->unacked
tcp_receive: removing 39631:41071 from pcb->unacked tcp_receive: removing 41071:42511 from pcb->unacked tcp_receive: removing 42511:43951 from pcb->unacked .pathien.do_writemore: available: 3240, len: 7200
+-+-+-+-+-+-+-+-+-+-+-+-+-+- tcp_input: flags -+-+-+-+-+-+-+-+-+-+-+-+-+-+ tcp_receive: ACK for 48631, unacked->seqno 52591:54031
I have two questions:
1. Why i always receive ACK packets after 2 packets data sending? is there any setting to change it (for example: after 5, 6... packets sending i will receive ACK)?
2. How unacked->seqno is created? and why sometime this value less than 0 as above log?
i spent one month to try understanding it, but still can not. I greatly appreciate any answer.