While broadband internet has become prevalent across most parts of North America the quality and speeds are not always sufficient. My internet for the past 6+ years has been limited to 5 Mbps down & 512 Kbps upload, thankfully it has since increased to 15 Mbps down & 512 Kbps upload. Based on Speedtest.net I don't quite get the advertised download but I get a bit more than the advertised upload.

While you can easily browse the web and stream videos with this connection having multiple users connected at the same time sometimes slows this down to a crawl.

As a telecommuting mobile worker I've invested significant time over the last few years to optimize my connection. The first was to add a Pi-Hole whole home DNS based ad blocker. This has made significant improvements by blocking ad traffic by sending the requests off to a blackhole on your local network instead of relying on a browser add-in. The second improvement was to implement QOS settings for Skype for Business and Microsoft Teams.

What is QOS?

Quality of service (QOS) is the ability to provide different priority to different applications, users, or data flows, or to guarantee a certain level of performance to a data flow. Quality of service is particularly important for the transport of traffic with special requirements.

While some home routers support QOS not all provide the same level of customization. For example the Linksys Velop mesh router I have provides the ability to prioritize up to 3 devices on the network it doesn't allow any further customization. Thankfully the ADSL modem provided by my ISP provides the ability to configure per port customization and the ability to specify how much bandwidth should be reserved.

Getting started

By implementing these setting on the ISP router in my case it applys to all computers connecting to Skype for Business Online or Microsoft Teams services. Before implementing any settings though we need to first identify what ports and protocols need to be configured to allow optimal connectivity to the cloud.

For Skype for Business online the ports & protocols are:

  • UDP: 3478 - 3481
  • Voice: 50,000 - 50,019 TCP/UDP
  • Video: 50,020 - 50,039 TCP/UDP
  • Application/Screen Sharing: 50,040 - 50,059 TCP/UDP

For more information see: https://support.microsoft.com/en-ca/help/2409256/you-can-t-connect-to-skype-for-business-online-or-certain-features-don

For Microsoft Teams the ports & protocols are:

  • Voice: 50,000 - 50,019 TCP/UDP
  • Video: 50,020 - 50,039 TCP/UDP
  • Application/Screen Sharing: 50,040 - 50,059 TCP/UDP

For more information see: https://docs.microsoft.com/en-us/microsoftteams/qos-in-teams-clients

Implementation

My ISP uses a Actiontec GT784WNV ADSL modem which offers port based QoS for both IPv4 and IPv6. The steps to implement Teams & Skype for Business QoS are:

  1. Log into the router
  2. Click on Advanced Setup
  3. Under QoS Settings click on IPv4 QoS Upstream
  4. Under Check the boxes below to enable QoS and to enable QoS in Trusted Mode. Then, name the Rule. select Enable
  5. Under Select Default Qos or Custom Qos Below. choose Custom
  6. Under Name the custom rule below. Then, set the desired priority and reserved bandwidth for the applications. specify a Name for the rule, select High for the Queue Priority and then specify how much bandwidth to reserve. In my case I reserved 100 Kbps for Audio and then 400 Kbps for Video & Desktop Sharing.
  7. Under Select the Protocol and TOS BIT value. select TCP or UDP as appropriate and leave the TOS BIT Value as the default.
  8. Under Select Source IP information. specify the appropriate port range for the rule being created.
  9. Under Select Destination IP information. specify the appropraite port range for teh rule being created.
  10. Once the rule details have been entered click Apply

In my configuration I ended up with the following rules:

Wrapping things up

Since implementing these QoS settings the only time I've noticed an issue is when connecting with the Skype for Business or Teams web clients which is expected as the traffic is over TCP port 443. I didn't implement QoS on 443 as this would then affect almost all web traffic going out over the internet. Additionally my family can watch Netflix while I'm on calls without causing any issues to my work calls.