Client and Server see different lowest MSS?
I am learning to use wireshark to analyze a TCP traffic and I saw something weird to me:
client capture: ( public ip 166.1.1.1, private ip 172.16.8.4 )
1 172.16.8.4 40.1.1.1 TCP [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=1963683730 TSecr=0 SACK_PERM=1
2 40.1.1.1 172.16.8.4 TCP [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1440 SACK_PERM=1 TSval=568182194 TSecr=1963683730 WS=128
Server capture: ( public ip 40.1.1.1, private ip 10.240.1.10)
1 166.1.1.1 10.240.1.10 TCP [SYN] Seq=0 Win=65535 Len=0 MSS=1452 WS=64 TSval=1963683730 TSecr=0 SACK_PERM=1
2 10.240.1.10 166.1.1.1 TCP [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=568182194 TSecr=1963683730 WS=128
My question is about MSS. Client send MSS 1460, Server see it as 1452; Server send 1460, client see it as 1440. I understand MSS can be changed by a router between them, but is it normal MSS is changed to different value?
Now server will use MSS 1452 and client will use MSS 1440. I thought this could break the communication immediately since server will send tcp payload with MSS 1452, which could be dropped if the router between server and client only allow MSS 1440, but it didn't happen.
Is this normal?
Found a article mentioned similar case: https://www.imperva.com/blog/mtu-mss-...
So it could happen the client and server use different MSS. Probably will only happen with asymmetric routing, and in a customer environment with special requirement ( GRE, VPN, etc), typical Internet router shouldn't do this kind of adjustment?