Lanthanide
Another reason is that StarCraft needs all players in a game to be connected to each other; failing to communicate between any 2 players leads to well-known lags, where you have like 2 FPS. If you have your StarCraft port closed, you can only make outgoing connections. If 2 or more players in a game have their port closed, they can't communicate with each other, because none of them can accept incoming connections -> lags as described above. So, there can be only 1 player with closed port in a game. This matters if you play not only 1x1.
(c)
http://wiki.teamliquid.net/starcraft/Port_ForwardingThe concept they are describing is correct, however they are actually a bit wrong in what the implications of closed ports are (likely because of the 'simplified' language used by battle.net).
Yes, all players need to be able to communicate with all other players in the game. If one player does not have forwarded ports, this means they can only create outgoing connections, but not receive in-coming connections. You can have at most one such player in a game at a time, and these players cannot create games. You cannot have two such players in a game, because they have no way of creating a connection between themselves as neither one can receive an incoming connection.
What this means in practice is that if you have closed ports, there are many games on the list that will give you the "latency to the game creator is too high" error because that game already has one person in it that has closed ports. However if that person leaves the lobby, then you will be able to join and the "latency to the game creator" is suddenly not a problem. I myself experienced this as I had my port forwarding buggered up for several months when I was trying to play SC online.
So what the liquipedia is saying is that if you get 2 players with closed ports in a game, you will get really bad lag. But actually, it should not be possible for two players with closed ports to join a game in the first place.
I tested this a lot of times. For example, one of my tests was next: I had 2 friends (one from Kazakhstan, and another from Russia), and both of them cannot host games on iccup. I hosted a game (I am from Ukraine BTW), and when they joined to me - we received unplayable lags. But when one of them left the game - the lags disapear.
As you understand, Russia, Ukraine and Kazakhstan - cannot have same ISP.
This is a useful data point. In my brief attempts to track down what was going on (only 2-3 games), it was always in games with 5-6 people so it was difficult to pin down exactly who the culprits were, but I did see IP addresses from very close blocks so went with the 'same ISP' assumption as I'd previously seen other people mention this and 'NAT problems' as the cause of this issue.
Perhaps what is happening here is some sort of partial port forwarding or routing is allowing both of these players join the game when really only 1 of them should be able to, and as a result when the game starts it ends up reflecting all of the game packets through the 3rd player resulting in the massive lag. This would go in line with what the liquipedia is saying, although they aren't being explicit about the fundamental cause of the lag and don't describe the behaviour I mentioned above where normally both players should not be able to join the game at all.
I followed a link from the liquipedia discussion page to a Russian site with pictures of the networking topology for SC/War2 vs Diablo/D2/War3 and it mentions that the cause of the stuttering lag is if for some reason one player can't communicate with another, their traffic will be routed via the host, and if the host gets dropped then that player will also get dropped as they can no longer communicate with all other players. So this seems to be the likely sort of explanation for the lag. It doesn't explain how these people were able to join the game in the first place though - I wonder if they can join because they have their TCP ports forwarded (which b.net uses for chat and game lobbies) but don't have their UDP ports forwarded (which is used for game data)?
BTW:
2) You can change this port to any other, using system, registry (go to HKEY_CURRENT_USER\Software\Battle.net, go to the Configuration subkey, and create and new DWORD named "Game Data Port", then edit it, change the value type to decimal).
Also - this way you can use not only 611x ports
Is it true? Can you use any port (not from 6112-6119 range) for hosting games, using "system registry" method?
Sorry, I have no idea.
Post has been edited 1 time(s), last time on Jan 15 2013, 11:31 pm by Lanthanide.
None.