MTU/MSS issue in TCP connection
hello everyone,
heres my setup:
host1 [x86 client, MTU= 1500]
|
router [mips, nat'ed,MTU=1000 dropping http/https packets]
|
host2 [x86, nat'ed, MTU=1500,sniffing packets]
|
INTERNET
I am facing some problem in opening any site on the Internet through the router (MTU=1000) and my host1 MTU is 1500. when i put my host1 MTU as < 1000 the problem disappears.
with host1 MTU > 1000, when i try to browse any site, on the ethereal on Host2 (ethereal running on interface connected to router) shows that the TCP connection establishment negotiation takes places with router proposing MSS=1460 and the other end replies back with MSS=1430, subsequently when the site sends some data containing packets (with aggregate / assembled MTU = 1418), the router drops the packet saying:
Port 1 receive error code 2, packet dropped
error code 2 seems like "PIP: PIP calculated bad CRC" (from file linux-2.6.16/arch/mips/cavium-octeon/setup.c)
now can anybody please tell me that MSS clamping is done by whom i.e is it the network layer or the driver does it. Putting a Firewall rule to do the MSS clamping does solves the problem but thats just a work around. Why i am asking this question is because i have already scanned some extent of the driver code and was not able to find if that is doing the clamping part and this brings me to the aforesaid fundamental question.
any pointer in this regard will be appriciated.
PS: i had previously posted the related issue but couldn't get any effective help. This time posting my query bit refined.
|