The Definitive Dark Souls (PC) Network Connectivity Guide
1. Summoning rules:
The host must be human (The client can be human or undead) and WITHIN 15% + 10 Whole Number Soul Levels above or below the client. (i.e. SL 65 could summon SL 83, but not SL 84(9.75+10=19.75+65=84.75)) The area boss must still be alive.
2. Dark Souls creates a P2P IP Pool of other players as you play the game:
Dark Souls connects to GFWL (18.104.22.168, 22.214.171.124 and 126.96.36.199) for authentication and then Data.exe communicates with a single GFWL ip (188.8.131.52, for me) and starts adding player ip's into your P2P ip pool. This begins at the title screen. It continues to feed you a new ip every few seconds to several minutes. This appears to not be prioritized by location, but seems to be completely randomly selected as I've been connected with Canada, Finland, Australia, the UK, and just now Sweden, long before I've been connected to someone in the US. In addition, since IPs start being added when you are at the title screen and are not dropped when you raise your soul level significantly, I doubt it's based on in-game area or soul level. (Can others verify if their game uses an ip different than 184.108.40.206 to get ips once the game finished making its initial authentication checks?)
What the Dark Souls P2P IP Pool looks like in Comodo Firewall
3. Just because GFWL says you have OpenNAT and are using UPnP does not mean you will have no problem summoning or being summoned:
You can check connections by installing Comodo Firewall, and opening the Active Connections menu from Firewall Page. If all is working correctly you should see the game (Data.exe) making UDP IN and UDP OUT communications to various other player's ips after a few minutes. Check the above link of a healthy IP pool for a reference to verify connections.
GFWL does not always use port 3074 on the local side, but will uncommonly select a dynamic port in the 0-65535 range. In the example IP Pool above, my local port used by GFWL is 38413. If you do not or cannot use UPnP you may have to forward this "random" port to 3074 (The dynamic port is always the same port for your computer). I am thinking this happens if GFWL detects multiple instances of itself on the LAN. You can use CurrPorts or Comodo Firewall to find the UDP port Data.exe is choosing.
Note: Even if you do the above, you will still get summoning failed, I will go into detail on the causes of this later.
4. Dark Souls uses your IP Pool to create a P2P web which sends messages and souls signs throughout the player base:
It takes roughly 10-15 minutes to reach a healthy IP Pool (~10 ip connections) and this begins when you hit the title screen. Quiting to the title screen will purge your ip pool. Changing areas, will not. Anyone you summon or anyone who invades you is added to your IP pool, this is why it's much easier to summon someone once you have done it once, however, the delay on repeat invasions prevents you from invading the same person immediately. (Unless they use the dried finger) Messages, bloodstains, summon signs and invasions are sent through the P2P network through direct IP connections, but are not necessarily from someone directly connected to you.
5. Nearly all the summoning advice you've read is wrong:
Spamming summon signs, "Join Session in Progress", and sitting at bonfires, do nothing and soul sign spamming actually hurts.
When you drop your soul sign, it is sent to all of the clients in your ip pool, then it is sent to each client they are connected to until it reaches someone who wants to summon you. Therefore, the bigger your ip pool, the higher the chance you will be summoned. Spamming your soul sign is actually counter-productive as it sends false signals throughout the P2P network. When trying to play with someone specific, doing anything but waiting tends to be counterproductive. Once you have about 10 ips each, their summon sign will usually begin to show up. You will probably get summoning failed during your first attempt to summon them.
6. Why do I get summoning failed?
There are a number of causes for summoning failed. Obvious ones being that the player disconnected, the player was summoned, the player died, the player left the valid summon area, the player is soul sign spamming, or your firewall is blocking inbound UDP traffic. However, the most common cause is what I call P2P echoes. As mentioned above, when your sign is placed it must travel across direct ip connections to reach another player. Since it may have to travel from Germany to Australia before it gets to you, there is quite a bit of lag involved (on average ~15-23 seconds) The summon sign sends out pulses for about 30 seconds before disappearing. Thus, when it pops up in your game, it's actually no longer a valid connection as the pulse has ended. You will notice that the summon sign will usually disappear within seconds after a summon attempt which fails. This works the same way with invasions. The best thing you can do is wait for the summon sign to show up again and keep trying. You will usually get the summon to work within 2-5 attempts. Having the client spam soul signs just makes the problem worse, and quitting the game/re-loading completely purges your P2P IP Pool, making you start from scratch.
There is one more cause of summoning failed. I have no idea what causes it, but if both the host and client have an ip pool that is nearly full (~20 connections), you will sometimes get summoning failed over and over again. You generally know this is happening if the summon sign sticks around long enough for you to summon the same failed sign again before it disappears and you receive the summon failed message. In this one instance, I advise the host or client (not both) to reload their game and purge their ip pool. After a few minutes you will re-establish your ip pool and your partners summon sign will show up. After that, the first or second summon attempt should work. I'm theorizing that this problem is caused because the P2P summon sign echoes completely override the actual summon sign, but figuring this out will require more testing by manually clearing the ip pool rather than purging it.
Using the above guidelines, I can reliably summon a friend in around 5-10 minutes on average.
Best way to summon a friend:
Use Comodo firewall to make sure the game is making UDP IN and OUT connections. Make sure host is human, the boss is alive and you're within SL Range. If you've both just opened the game it will take around 20 minutes to create your P2P ip pool. For best results, leave the game idling in the background an hour or so before your co-op session. If you get summoning failed multiple times in a row before your partner's sign disappears, quit to the title screen and re-load on either the host or client computer, but not both.
Summoning takes 5-10 minutes on average.
Under no circumstances should you spam your summon sign.
(Please note that everything in this guide is based on my own observation of Dark Souls network data and may be subject to change at any time)
Last edited by jonaswashe: 10-08-2012 at 05:07 PM.