Comcast: Simulating shitty network connections so you can build better systems
github.com
github.com
It'd be neat to include options to simulate other pathological conditions often encountered in the field like:
- Multiple layers of NAT - overlapping un-synchronized timeouts are one thing ... but the REAL fun comes in when intermediate layers have the same IP ranges as IPs you are trying to reach on the "outside" of the NAT sandwich. All kinds of "interesting" things can happen, like the "software laser": http://catb.org/jargon/html/S/software-laser.html
- Stateful NATs/firewalls with bizarrely short connection / UDP association timeouts or that randomly forget connection state
- Shitty NATs/routers that go into bizarre failure modes when there are too many open connections, like forgetting early ones because they remember connections via a small ring buffer
- People who block all ICMP "because security."
- NAT + short DHCP leases = musical external IP addresses
- Small MTUs (<1500) like those imposed by PPPoE and other nasty encapsulation protocols, sometimes without ICMP errors for big packets because some jackhole blocked ICMP "because security."
All these things are common in the field. WHYWHYWHYWHYWHY
- Randomly block specific ports "because security"
- Limit RPC port ranges to some random small number.
- Strange network optimizations. Example: Optimize TCP Window Size to support NT4 clients on 56k frame relay circuits.
- Very Slow DNS response
- Optimize core switching rules to fully utilize switch CPU. Avoid configurations that take place in an asic.
- Long DHCP Leases + Undersized DHCP scopes.
Skype has abandoned P2P, though I'm not sure why. One possibility is that MS now has middle boxes deployed at so many interchange and peering points that there's no benefit in maintaining the added complexity. Another is that it was to comply with surveillance/tapping requirements.
EDIT: [I can't reply to the comment below, so I'll add here] It's most likely not a technological problem, but rather than data usage is limited on mobile and you don't want your user to pay for traffic they didn't use.
Primer concept: http://en.wikipedia.org/wiki/Interrupt_coalescing
Pricing: Most people in the US are charged for the data they use on their mobile devices, and thus would not want P2P used on their phone because it costs them money.
Spectrum: P2P is not a very efficient distribution model in a world where most clients are on asynchronous connections. Asynchronous connections exist because transmission spectrum is limited, so to maximize spectrum usage, telcos allocate more spectrum for downstream transmissions than upstream. But if everyone's phone is chattering all the time with P2P traffic, you're going to saturate the spectrum and reduce overall data speeds. This is why mobile is still charged on a usage basis: it discourages overly chatty applications.
Verizon and AT&T monitor for super-chatty apps and in some cases can rate-limit or otherwise impair them.
The big hurdles I see are (in no particular order):
- Connection maintenance and keep alive. Basically this is bad, so you want to be more aggressive about shutting down unnecessary P2P links on mobile than you need to on desktop/server. Keep alive requirements generally suck anyway, and are one way NAT murders kittens.
- Restrictions around background tasks on mobile OSes (iOS is particularly onerous).
- Squelching inbound traffic from badly behaved or broken peers to avoid inbound flooding.
- Battery life and related concerns.
I understand it this way: cellular networks currently have their own "netiquette." It includes things like don't be too chatty, try to coalesce instead of spewing packets at excessively random times, etc. These things are less important on wired networks since they don't have the same resource constraints or bandwidth issues.
I guess a related question is why you would do P2P and not backhaul to the cloud? I can think of many:
- Reduced latency for things like AR and VR where latency matters a lot.
- Reduced bandwidth cost due to lack of back-haul, and back-hauling a pic being sent between two people in the same city 2000 miles to a cloud server is just offensively stupid anyway.
- Privacy and security.
- With P2P you could have a more open app model where apps aren't wedded to proprietary cloud infrastructure. They still work even without someone's cloud, etc.
P2P over non-cellular (i.e. Wi-Fi or Bluetooth) where you can actually make a direct device-to-device connection seems like it may have some use cases (messaging apps, etc.) But they're edge cases and by no means a common use case because it just isn't reliable enough.
So you might request ports 4000-4100, and find that 4007 is blocked, "because security".
I'm pretty sure the reality was that the firewall rules were a big hairball, and they were stepping in some other rule out in place a long time ago.
Juniper leads to gin?
Are there any network administrators who don't consider NAT traversal to be a security breach? Making it difficult would seem to be a feature, not a bug, in most enterprises.
Startup landing pages could learn a lot from that single gif.
We need to see more work in the areas of mesh networking, layer-3 routing, and consumer networking in general. This tool is a good step. Personally I'm hacking on some openwrt routers right now -- I recommend everyone try it. The documentation is dense, with a friendly community writing it.
Unfortunately i suspect they will just send a trademark claim to Github to get it removed.
Although if I were Comcast, I would ignore this entirely. I wouldn't want to risk the Streisand Effect bringing attention to this type of thing.
But their internet service has been very reliable and very fast for several years for me. I rarely have internet outages.
Btw, they had raised the price of my 5 static IPs to $24.95 (from $9.95). I have to lease their modem ($12.95) because of the static IPs. I did research and found out that my registrar (namecheap.com) has free dynamic dns, so I'm going to switch to that and give up my static IPs.
So, after the $40 discount I got yesterday, plus the extra $38 for the modem/IPs, I should be down to a reasonable rate again.
I fucking hate Comcast.
This isn't actually true, assuming you are on the consumer side of the fence. No experience on a business line though.
Source: Has extra IPs on his owned modem, after fighting with them for a couple weeks.
For any devops / sysadmin / systems engineer: I highly suggest reading this if not only to understand failure conditions better:
The entire "Call Me Maybe" blog series is because that is Carly Rae Jepsen's stupid pop song, for which he named his test suite after. That and Kyle's posts are absolutely hilarious to read. Seriously, read them.
If Comcast wanted to take this down, it would be through a trademark infringement claim.
(IANAL, etc, etc)
If GitHub agrees, then it would be a violation of their Terms of Service [1], section A.8:
"You may not use the Service for any illegal or unauthorized purpose. You must not, in the use of the Service, violate any laws in your jurisdiction (including but not limited to copyright or trademark laws)."
[1] https://help.github.com/articles/github-terms-of-service/
> you can use tc which supports some additional options.
$ tc qdisc add dev eth0 root netem delay 50ms 20ms distribution normal
$ tc qdisc change dev eth0 root netem reorder 0.02 duplicate 0.05 corrupt 0.01
> To reset: $ tc qdisc del dev eth0 root netem> On Linux, we use iptables and tc. Comcast is merely a thin wrapper around these controls.
$ sudo ping -i 0.02 8.8.8.8
[...]
64 bytes from 8.8.8.8: icmp_seq=578 ttl=53 time=15.5 ms
^C
--- 8.8.8.8 ping statistics ---
579 packets transmitted, 364 received, 37% packet loss, time 13854ms
rtt min/avg/max/mdev = 15.009/19.308/50.884/6.152 ms, pipe 2 --- 8.8.8.8 ping statistics ---
615 packets transmitted, 612 packets received, 0.5% packet loss
round-trip min/avg/max/stddev = 21.332/35.875/95.576/11.248 ms
I have never seen it be anything different.If you parse this statement literally, it has amusing consequences.
``` --- 8.8.8.8 ping statistics --- 538 packets transmitted, 530 packets received, 1.5% packet loss round-trip min/avg/max/stddev = 13.706/27.511/101.208/11.207 ms
I'm in the process of writing a library at work that is basically implementing the CoAP protocol from the ground up and having something that I can script to force the same packets to be lost or delayed is something that I would find very useful for testing. I've been using Apple's network link conditioner, but when I do discover a problem, it can take a long time for the same scenario to happen again which makes testing the fix quite difficult.
I'm currently trying to think through how I'd write this to make the filters easy to setup [0], but if anyone knows of something that already exists, please let me know.
Access device mode by clicking the smartphone icon on the top left of the Developer Tools (F12) right next to the Elements tab.
This could have been named `--i-am-in-india`
Called it "the molasses network", which is what they should change the name to before Comcast smokes them.
ipdadm - administer the Internet packet disturber
How's this better/different than Crapify?
I do have to wonder if the name won't cause you trouble though...
Can we stop shitting on cool things just because the technology being used is "trendy", or you're sick of hearing about it?
"This is fucking awesome"