TCP MSS Issue

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!

MSS is related to MTU. I wrote it up very nicely years ago, so look here (come bits are AIX, but much is general):
http://davidgpickett.home.comcast.net/~davidgpickett/tips/
especially:
http://davidgpickett.home.comcast.net/~davidgpickett/tips/tcp_tuning.970513.txt

More modern TCP packets have extended headers, so you get less than 1460 payload from 1500 MTU. The extended header can do buffers over 65K and swap timestamps for tuning. Sometimes a TCP header carries an MTU setting, at least at first.