So it's okay now?
Posts made by YouTheNoob
No offence to the guys at the ISP, but they just go through a checklist. They literally, don't have a clue. Anyone with any real knowledge of networking probably wouldn't be working in a call centre for an ISP. A good networking engineer could earn $800(US) a day, so no way are they going to sit in a call centre.
Things I would do:
Step one: work out if the ISP is using Global Carrier NAT. Check your router IP address to the ISP. You can get this by login into the router. To log into the router, go into command prompt and type "ipconfig". The default gateway is the address of your router on your network. Load up a browser and go to http://<the IP address> (might be https). Check to see what your public IP address is. Using that you should be able to see if you are using Global Carrier NAT.
Check the ISPs website to see if GC-NAT is used. It might not be.
Go to https://whatismyipaddress.com/ and get your public IP address. See if you can ping the address. it might be that your ISP doesn't respond to ICMP (ping requests) for security. Go into your router and try and enable ICMP requests under security settings. I'm not sure how the FAF adapter decides whether or not to use the relay.
Configure the DMZ of your router. This is a security risk. ALL TRAFFIC THAT GOES TO YOUR EXTERNAL IP ADDRESS WILL BE SENT TO THE DMZ ADDRESS! A DMZ stands for Demilitarized Zone. Any traffic that reaches your public IP address will be sent to this IP address. This means any vulnerabilities on your PC will be vulnerable, as it will be public-facing. Worth trying as a quick check though. It will guarantee that the router isn't the issue.
Check to see if your router has any built-in firewalls that are stopping services. I once had to disable a setting to allow VPNs.
Try pinging each others home IP addresses. There is a (small) chance that the ISP has some really bad routes to get from one Australian address to another. A few months ago, I was staying in a hotel and all the data was going via their HQ in Asia before it went a few km down the road. It's possible that the ISP has bad BGP routes. if you go into command prompt (cmd) type "tracert <destination IP address>" and it will show the route your traffic is taking.
These are my thoughts off the top of my head.
I really need to get in contact with Brutus and get some more information on this. I was trying to write some software to diagnose these issues.
So here is my understanding of what could cause the issues you are experiencing:
The pipe is too small. If someone is playing with a connection that is too slow (Mbs per second), the data will basically queue up until the other data is transmitted. Think of it like waiting it a queue of traffic. In my own testing a connection of 6Mb up and down the is minimum needed. Other people here that made the adapters say it will work with less but in my own testing 6Mb is the minimum. Even with 6Mb, if the person is doing something else like watching youtube, youtube will send micro bursts, which coupled with a poor router will increase ping times until the data is sent. In the UK I had a 300Mb connection and had no issues, but when trying with a 4Mb connection I could not play gap. Even if the speed test works great, well some ISPs do a thing called "traffic shaping". They degrade certain connections to prevent people using up too much of their network. I need to emphasis that the upload and download speed are both important. In Australia the connection speeds are awful. I'm currently limited to a 40Mb connection.
Ports. Everyone connects using a thing called NAT. NAT means a public IP address is shared by multiple PCs. Think of it like having an apartment block. Your public IP address is the street address, then you will have an address in your building. Some cheaper ISPs (and Russians) use a thing called Global Carrier NAT. It means that the ISP is also using NAT. When you connect using FAF, the ports should get opened, but that is not always the case. Re FAF'ing means the ports are normally opened from the previous attempt.
It is also possible that another service is using those ports, hence why the relay is used. Check to see whether the ISP uses GC NAT. I may be wrong but if GC NAT is used, the connection will go via Nuremberg as GC NAT IP addresses are not strictly Australian ones, so it doesn't register the IP address as being Australian. I believe that if you speak to your ISP you may be able to get GC-NAT disabled.
Firewalls. There are loads of things that can block the ports. Antivirus comes with firewalls, as does windows. Either one of those can interfere. This is similar to the above NAT. It is possible to try disabling the firewall completely, then try. If it fixes the problem, you can add exceptions to your firewall.
Wifi. If the signal gets interfered with, then the device will need to resend the information. Depending on what is around the device will mean that it might take a few hundred ms to get the information through. Make sure you only play games on ethernet.
To the chap that said his BBC ping was okay but others were peaking, well a thing called "Quality Of Service" will prioritise the ICMP packet (ping request), so if you connection is maxed out as you download your strange porn, the Ping should come back without the delay.
Glad its all working Honestly, if the game says its working at the refresh rate and resolution that you want, there's no reason to swap cables or get an adapter (that I can think of, off the top of my head).
C:\Program Files\Downlord's FAF Client
Is the other part of where the client is stored. Try deleting that folder
Your antivirus might be blocking it. It's not well-known software so it might think its iffy. Check the settings in that. If that doesn't work checking the windows event viewer to see what happens when you try to launch it.
C:\Program Files (x86)\Steam\steamapps\common\Supreme Commander Forged Alliance\
FAF makes a copy of the original game with different values to balance things. I think you need to delete both folders and then reinstall.
Use windows update to automatically update the drivers. There is a drop-down of optional drivers, don't forget to check them too (I missed them). I had an issue with my USB drivers that caused my game to crash after about 40 minutes. Automatically updating the drivers fixed it.
As mac said:
- check the HDMI specs on your monitor and on the laptop. It will drop down to the lower spec. There is limited bandwidth and 144Mhz is a huge amount of data on that resolution. It might be that the laptop or the monitor doesn't support that refresh rate and that resolution for that HDMI spec. The Mhz means that 144 screens are sent every single second. Dropping it to 60Mhz is not noticeable unless you are playing twitch games.
The cable thing might not be an issue in other games since they are probably overriding the default refresh rate to whatever they can manage.
Are you using the correct graphics drivers? Old drivers massively dropped the performance. The new ones have since fixed it. I believe the way to check for this would be to go into console ( ' ), then type d3d_WindowsCursor (Press enter). This will turn off the thing that was causing the performance hit.
Another option could be enabling compatibility mode on your games. This should drop the system down to an older standard when playing the game. Be aware that Forged Alliance changed the settings after it closes. To get around this, I made a file that changed the compatibility settings before I run FAF.
So still working on this. Wife isn't too happy because I get a bit obsessive and spend longer on these things than I really should.
So some technical questions:
- How does FAF decide whether to use a relay or a direct connection to the other users? Eg does it do it on ping responses? Is there a response from the client that is expected?
- If it is down to a response from the client, what is the best way to get a list of all the other IP addresses of the other users/how are the connections managed?
- Is there any documentation on how the FAF client/Ice adapter works? Apologies but I don't know Java and even if I did, looking through the whole project for find these facts might not be the most time-efficient.
- What is the best way to speak to someone involved in the actual project? I can see the Discord group has a list of developers and I get the feeling that I will have a lot more questions, at the same time I don't want to bother anyone by constantly asking questions, hence why I'm asking here.
The reason I need this information is I want my program to be able to advise the user on how to modify their system so the relay isn't needed (direct connection) and how to improve jitter. Living in Australia a user using the relay can add a lot of latency.
@askaholic Thanks for the info. I won't bore you with all the details but there are lots of little things that make this a bit more complicated.
C# has async methods too. They return an object called a Task, which creates a new thread for the method but I need to manually dispose of them due to hundreds of pings running at the same time and all returning a value after different timespans. In C# the issue becomes one of disposing of the task once itself has finished (received the ICMP response). What makes this more complicated is
- ensuring that a ping is sent every 100ms (no time drift)
- resources are cleared up
- ping responses are stored in an array with the correct position (accounts for misordered responses).
- Writes to disk the result once all the pings have been received or timed out.
Microsoft has some basic info here but the problem with these examples is that the tasks are done once. My tasks need to repeat without knowing when the response will be finished.
I think the way I will do this, is that I will have to stagger the tasks so that there are three threads doing this. One will be pinging, one will be waiting and one will be writing to disk and clearing up resources.
There might be a much much easier way to do this and I'm not seeing the wood for the forest.
I liked the fact you could ping after death. It meant you could still help your team even after you were dead. You could look for ACUs and watch for enemy positions. It made watching the game so much more enjoyable after you had died.
If there is no other way to fix this, then I guess that it has to be done
Famous last words... "it will take me a few days"....
To make sure people don't think that I've just forgotten about this, I'm still working on this but as a small project, it's actually a bit more complicated than I first thought. I am continuing with this but it's going to take me a bit longer to make something worthwhile.
FYI on the on challenges:
Checking for network jitter
- Creating a program to send out multiple pings a second to multiple IP addresses is actually a bit more complicated than I first thought. Sending a single ping is easy, sending 15 a second, to each hop, to a distant address, is far more complicated. It involves using multiple threads and then ensuring the task is disposed of after it has been run, otherwise, the program uses increasing resources. I understand why there are 0 freely available tools to diagnose this stuff, since it's not a 5-minute job.
Baby steps, the current target is to just ping the local gateway and a remote IP address 10 times a second, this should give a good indication of network jitter.
- So my code runs a windows WMI query to get driver details by searching for "Nvidia" but there are also audio drivers so working out which one is the graphics card is still something im pondering. I personally know my model so I can easily see it, however making sure this works with every Nvidia graphics card is something I still need to work out.
- I looked at having a small panel that would overlay the active game, showing network performance but this means that DirectX needs to be used directly, instead of using a simple Winform as Forged Alliance overrides the display to show the game.
Wifi or Cable
- Even this isn't a simple task. This involves more than a few things to get right. It's not as easy as just checking a network interface status, since you can have wifi and cables both connected. I have to write some code to look at the windows routing table to work out which interface is being used when both interfaces are on the same network.
So as a little project, this is still ongoing. The amount of time that it is taking, I might just learn Java.
Does anyone know how an easy way to get the other players IP address? I was looking at pinging the other player's IP addresses to confirm if they are still reachable.
Try updating your drivers. Win10 has an automatic updater. Search for updated drivers. There's a dropdown for optional ones too. Don't forget to update them too. I had an issue where about half of my games would crash. The entire PC would freeze. It was my USB port driver that needed to be updated.