If there is one thing that I have learned in my career it's that network connectivity is not a binary state. A network connection goes through many different transitions when setting up the connection, transmitting data, and closing down the connection. In most cases, a client side mobile or desktop application can simply send the network request and if the client application is offline the request will immediately fail and the application can update the user accordingly (See article here). However, the
The landscape of mobile connectivity has become highly complex over the last 10 years. Our modern society has been built around the need to always be up and connected. And in most cases mobile connectivity works very seamlessly when driving, flying, transferring between cell towers, or even just going on a run - you stay connected. 10 year ago this type of connectivity was not that seamless, cellular voice transmission worked well, but cellular data transmission, and GPS coordination were often a challenge.
One topic that I have seen come up a lot over the last couple of years is how to detect internet connectivity in an iOS or macOS application. This is a topic that really interests me so I thought I would take some time and write a tutorial on how I and Apple recommend that client applications determine network connectivity. To start, I thought I would provide some context on where this network connectivity model might be applicable. The main use case is in a traditional client to server communication setting where a client is sending either a GET or POST request to a server, and the serv
TCPdump is one of my favorite network packet analysis tools in existence today. In the past year I have enjoyed TCPdump so much that I have wanted to learn more about the project. So, I thought a good place to start would be to get involved contributing on GitHub. My contributions are not much, but they help me learn the ins and outs of the project and how to use some of the more advanced features as I come up in issues or pull requests. During my time thus far I have noticed that a lot of filtering questions tend to come up on how to use filters or how to interpret the documentation fo
As a long time mobile and server side engineer I have been involved in many different types of projects over the years. Some small, and some large, but all with one recurring trend; the mobile clients need to consume data from a server to perform a task. Sometimes this data being consumed is small, and other times the application needs to continuously poll or be notified of new data to keep the application up to date it real time. So far, this is probably nothing out of the ordinary, right?
Python just received a minor version update to Python 3.7 with many new performance enhancements, added features, and module improvements to the language. One of the existing Python modules in 3.7 that received some nice new enhancements is the ssl module. The updated ssl module now has enhanced hostname support, updates to how blacklisting and whitelisting work, but most importantly, conditional support for TLS 1.3 connections.
As you may have heard Apple’s World Wide Developer Conference was last week in San Jose, California showcasing all of the latest updates across all of the Apple platforms. Since Apple and Unix technologies are something I am heavily invested in I thought I would take a few minutes and provide an overview of the Siri and Networking updates that came out of WWDC 2018 that I found interesting.
In the last couple of months I have found myself in situations where I have needed to diagnose transport security issues from from the context of an iOS application. This often can be difficult from the client side perspective as you may not know anything about the minimum TLS version, preferred cipher suite, or the certificate in use on the server. Often, the best move you have, if you do not have a direct line to the server side team, is to test different settings to diagnose what works and what does not.
Debugging network activity on an iOS device can be challenging. There are fantastic tools built into Xcode that allow you to to see the data flowing in and out of the device, but troubleshooting network activity at the TCP level can be difficult. Often the best option you have is to perform a packet capture at the router level, but this presents it’s own set of challenges.
Debugging network issues no matter what platform you are on can be challenging. Often, the deeper you dig into the operating system the harder it can be to analyze and accurately interpret the network traffic you are seeing. And working with iOS is no different. Debugging iOS traffic from a device to a router or from a device to a server can present many challenges.