MTU and PPPoE

MTU and PPPoE

Are you using a LinkSys router, running DSL PPPoE and having trouble serving *some* clients on ftp, http, smtp, IRC-DCC, VNC or anything else requiring forwarded ports? Read on for a very possible cure…

The easiest solution is to set the server PC to an MTU of 1492. If this doesn’t work, try less (1362 seems to be another PPPoE value). If an MTU of 200 doesn’t work, look elsewhere for the problem.

Doctor TCP used to alter MTU in the registry of a Windows PC is a great tool for doing just this. Get it right here in the tweaks section.

You’ll notice this problem on only *some* clients. The problem clients should be mostly from company LANs and cable modems – they run MTU=1500. Other PPPoE users and dialup connections will be the ones that have no problem. IF YOU SEE THIS PATTERN YOU PROBABLY HAVE THIS EXACT PROBLEM.

Some things I found…

Recent LinkSys firmware (1.38.5 and above for BEFSRx1 I think it was) now includes an MTU setting. Unfortunately, this seems to only affect outbound connections, not inbound (like for servers).

Some DSL modems also do not seem to enforce their MTU. This may also depend on the local equipment or setup or network but there’s no reason everyone would have the problem. Some may never see this.

Background

MTU is “Maximum Transmissible Unit” – the maximum size a packet can be in a network.

When a TCP connection is made a SYN/SYN-ACK exchange is the first thing done. The client sends the SYN and the server replies with the SYN-ACK. In these messages the MTUs are included so each can send packets of the right size to the other end. Actually MSS (Maximum Segment Size) is sent but for TCPIP that’s a value that excludes TCPIP headers and is always 40 less (MTU=1492 is MSS=1452).

On outbound connections the LinkSys will actually change this MSS value on-the-fly to be what the setting is. You could say the LinkSys “enforces” the MTU that is set. Even if the PC sends MTU=1500 the LinkSys changes it in the SYN packet – this is how the other end *really* sees 1492 (if that is what the LinkSys is set to). This is desirable since you can run your LAN at 1500 MTU yet go out to the net at 1492 automatically!

But server connections don’t seem to get this help. Not only that, the ISP equipment and/or the DSL modem lets these SYNs come in saying they’re 1500 MTU! The LinkSys does no alteration (it’s INbound not OUTbound). The PC is happy (it’s 1500 MTU after all) so these 2 ends try 1500 MTU…. BUT THAT DOESN’T WORK ON PPPoE!

The result is large packets (above 1492 MTU) will not transfer well at all and usually just hangs the TCP stack.

One funny thing you WILL see… small data transfers of, for example, small directories or small html files DO get through OK. This is because the packet size never reaches a fatal value.

The MTU and FTP

This MTU mismatch may also show it’s ugly head on FTP connections – but for clients not servers. This is because a regular (not PASV) FTP connection on port 21 includes an inbound connection to the client. There’s no reason this inbound (data) connection wouldn’t have the same darn problem (since it *is* a server by definition).

Most everyone with a router that uses FTP has seen the inability to list directories. This MTU mismatch can be yet another possible cause of this.

By Bill_MI, information from DSL Reports Message Boards, reproduced with permission.