Seems that this problem is still around. Got bored so I started poking around forums. So here is a more technical (broken down for people to understand...at least attempting to) explanation:
Note: I could be completely wrong in everything that I'm saying and EA/DICE could have created a perfectly functioning game...Or I could be right and EA/DICE didn't do enough quality control / testing and will probably deflect all issues. Oh and you may have other issues with the game...I'm only posting about network related in the below. In all honesty building and completely resolve issues before market launch for multiplayer games (most games for that matter) are not easy. However I do believe that the developer has been lazy about resolve issues in a timely manner.
BF4 by design uses UPnP however their design is flawed. All BF4 clients want to request port 3659 from their UPnP enabled router / gateway. If your router does not support UPnP then you will need to manually port forward from the router. If for some reason your network architecture has you behind multiple UPnP devices, then you will also have issues. I have verified that this request is made and assigned on my router a few years ago during my original post.
This design of all BF4 clients requesting port 3659 (via UPnP) really affects the players that share the same LAN (private network), behind the same public IP (internet accessible network), as other players who are attempting to play the game at the same time. What ends up happening is when a client [PC] begins to connect to a server, the client sends a request to it's local router (via UPnP) asking for a port forward mapping of 3659. As the BF4 client communicates with the BF4 server this mapping will continue to stay up.
Now image a second player behind the same LAN wants to play BF4 as well. Now it's client will send a request to it's local router to request a port forward mapping of 3659. So what do you think ends up happening? Client 1 and Client 2 will be competing for port 3659.
It is known that BF4 servers send data back to clients via 3659, the outbound port is not exactly significant (to players) and I'll explain why later. So what happens to the data being sent back to those 2 clients in the example above? Well it depends on who currently has the active 3659 port forwarding. If Client 2 sends data and expects return data on 3659 while Client 1 has the port assignment, then Client 1 will receive Client 2's data. Client 1 may process that data, which would not correspond with the data it's supposed to be receiving. This could cause abnormal behavior such as dropping out of the game or game crashes (it depends on how much error detection was put into the game). Client 2 would then believe that the server had timed out since it never received the data it was expecting causing client 2 to drop out.
So you hear people talk about the Smart Port Forwarding application that you can download. All that does is send UPnP requests for whichever port you assign for your client. Again this doesn't help in the case of multiple clients running at the same time on the same LAN behind the same public IP. For those of you that cannot get UPnP to work via normal launching of the game or through an application, you might want to look at if your behind a double UPnP or if your router even supports it. If not, you can access your router and manually port forward.
What Needs to happen:
A patch needs to be made to both client side and server side applications to use a port range rather single specific ports (their current design is fine assuming 1 player per public IP). However there are many households with multiple systems and perhaps multiple players so their design in that case would fail. I cannot fathom why a multiplayer game like this would be designed with all clients requesting the same exact port.
Why outbound client port doesn't matter:
The reason why outbound client port doesn't matter is due to the fact that it is probably hard coded like the inbound port 3659 and the fact that the server is most likely looking for a specific inbound port (same as client outbound). Why do servers not require a dynamic port like the clients? Well all the server needs is to listen on 1 port for traffic from clients. It is processing data from multiple clients like player location, stats, etc. It does however need to know how to send data back (which uses your public IP) and whichever specified port your client requires (in the case of BF4 port 3659). So the server sends data back to your public IP address with corresponding port. Your router will then forwards that traffic to whichever machine it's port forwarding rule was set for. Again not a problem for single players behind a public IP, but a big problem for multiple players behind the same public IP.
Think about how webpages are accessed. Webpages are by default using TCP port 80. You want go to to a website and so you type in the address. The server receives your request on 80 and then sends you data back on a randomized open port. Well why can multiple users behind the same public IP access webpages? Like I stated, return traffic from the server back to you is via a randomized open port. There are 65,535 available ports. With that said there are standards that are widely used so application developers don't want to just use any. Regardless of what ports are already "assigned" to current standards, there are lots of ports available. What are the chances of an average user(s) behind a public IP having all 65,535 ports being used at the exact same time non-stop...pretty slim. If all those ports are being accessed/used...you're probably getting attacked or have some malicious code on your computer in which case...you shouldn't be worried about playing games if you can even operate.
What can you do as a user:
Option 1: Don't play while others are playing the same game (or any game using the same port).
Option 2: Play the game while others are playing the same game (or any game using the same port) and live with the chances of not connecting, timing out, kicking each other out of games while to competing for the same port.
Option 3: Complain to the developer only to get ignored.
Why you should not put your IP in a DMZ:
First off what is a DMZ? Here I'll give you the wiki link so you can read: (http://en.wikipedia.org/wiki/DMZ_%28computing%29). In a nutshell it is not a place where an average user wants to place their machine. Essentially you are allowing the router to bypass it's firewall rules and you will be open to the world (kind of). You're computer has it's own firewall (usually...and enabled unless you or malicious code disabled it). In a nutshell...its a bad place unless you know what you are doing...or maybe you don't care...if that's the case, go ahead...what was your IP again? >🙂
For those of you that don't know, private IPs are locally significant to your network. Meaning other people can have the same exact private IP network built behind their public IP (internet accessible IP). If you are unsure as to whether or not your local IP is public or private look at the below listing:
Private IP address ranges:
10.0.0.0/8 IP addresses: 10.0.0.0 -- 10.255.255.255.
172.16.0.0/12 IP addresses: 172.16.0.0 -- 172.31.255.255
192.168.0.0/16 IP addresses: 192.168.0.0 – 192.168.255.255
My original post on this topic
http://battlelog.battlefield.com/bf4/forum/threadview/2955065670121728864/