Gretings! I have developed simple utility using Berkly sockets interface:
So, what do I?
$ ifconfig lo mtu 1500
$ make
//run netcat
$ ./target 127.0.0.1 5555 1460 1000000 #mss: 1460, loop sleep: 1s
On other virtual terminal:
$ netcat -l 127.0.0.1 -p 5555
On third virtual terminal:
# tcpdump -i lo -n -t
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags , seq 453033050, win 29200, options [mss 1460,sackOK,TS val 53605642 ecr 0,nop,wscale 7], length 0
IP 127.0.0.1.5555 > 127.0.0.1.54707: Flags [S.], seq 1575152534, ack 453033051, win 28960, options [mss 1460,sackOK,TS val 53605642 ecr 53605642,nop,wscale 7], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [.], ack 1, win 229, options [nop,nop,TS val 53605642 ecr 53605642], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [.], seq 1:4345, ack 1, win 229, options [nop,nop,TS val 53605642 ecr 53605642], length 4344
IP 127.0.0.1.5555 > 127.0.0.1.54707: Flags [.], ack 4345, win 295, options [nop,nop,TS val 53605642 ecr 53605642], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [P.], seq 4345:4381, ack 1, win 229, options [nop,nop,TS val 53605642 ecr 53605642], length 36
IP 127.0.0.1.5555 > 127.0.0.1.54707: Flags [.], ack 4381, win 295, options [nop,nop,TS val 53605642 ecr 53605642], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [.], seq 4381:8725, ack 1, win 229, options [nop,nop,TS val 53607142 ecr 53605642], length 4344
IP 127.0.0.1.5555 > 127.0.0.1.54707: Flags [.], ack 8725, win 346, options [nop,nop,TS val 53607142 ecr 53607142], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [P.], seq 8725:8761, ack 1, win 229, options [nop,nop,TS val 53607142 ecr 53605642], length 36
IP 127.0.0.1.5555 > 127.0.0.1.54707: Flags [.], ack 8761, win 346, options [nop,nop,TS val 53607142 ecr 53607142], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [.], seq 8761:13105, ack 1, win 229, options [nop,nop,TS val 53608642 ecr 53607142], length 4344
IP 127.0.0.1.5555 > 127.0.0.1.54707: Flags [.], ack 13105, win 346, options [nop,nop,TS val 53608642 ecr 53608642], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [P.], seq 13105:13141, ack 1, win 229, options [nop,nop,TS val 53608642 ecr 53607142], length 36
IP 127.0.0.1.5555 > 127.0.0.1.54707: Flags [.], ack 13141, win 346, options [nop,nop,TS val 53608642 ecr 53608642], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [F.], seq 13141, ack 1, win 229, options [nop,nop,TS val 53609460 ecr 53608642], length 0
IP 127.0.0.1.5555 > 127.0.0.1.54707: Flags [F.], seq 1, ack 13142, win 355, options [nop,nop,TS val 53609460 ecr 53609460], length 0
IP 127.0.0.1.54707 > 127.0.0.1.5555: Flags [.], ack 2, win 229, options [nop,nop,TS val 53609460 ecr 53609460], length 0
Question: Why TCP segment size has set to 1460, but tcp segments real size is: 4344 + 36 = 3*mss?
My OS: Linux 3.12.6-1-ARCH x86_64 GNU/Linux
Thanks in advance!
---------- Post updated 06-01-14 at 02:02 AM ---------- Previous update was 05-01-14 at 11:51 AM ----------
I have disable Generic\TCP Segmentation offload with
# ethtool -K lo gso off
# ethtool -K lo tso off
Solved!