<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:podcast="https://podcastindex.org/namespace/1.0"
xmlns:rawvoice="https://blubrry.com/developer/rawvoice-rss/"
>

<channel>
	<title>WRITTEN &#8211; rule 11 reader</title>
	<atom:link href="https://rule11.tech/category/content-type/written/feed/" rel="self" type="application/rss+xml" />
	<link>https://rule11.tech</link>
	<description>culture eats technology for breakfast</description>
	<lastBuildDate>Sat, 09 Aug 2025 11:24:31 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://i0.wp.com/rule11.tech/wp-content/uploads/cropped-rule11-logo-square.png?fit=32%2C32&#038;ssl=1</url>
	<title>WRITTEN &#8211; rule 11 reader</title>
	<link>https://rule11.tech</link>
	<width>32</width>
	<height>32</height>
</image> 
	<atom:link rel="hub" href="https://pubsubhubbub.appspot.com/" />
	<podcast:locked>yes</podcast:locked>
	<itunes:author>Russ White</itunes:author>
	<itunes:explicit>false</itunes:explicit>
	<itunes:image href="https://rule11.tech/wp-content/plugins/powerpress/itunes_default.jpg" />
	<itunes:type>episodic</itunes:type>
	<itunes:owner>
		<itunes:name>Russ White</itunes:name>
	</itunes:owner>
	<copyright>Russ White</copyright>
	<podcast:license>Russ White</podcast:license>
	<podcast:medium>podcast</podcast:medium>
	<image>
		<title>WRITTEN &#8211; rule 11 reader</title>
		<url>https://rule11.tech/wp-content/plugins/powerpress/rss_default.jpg</url>
		<link>https://rule11.tech/hedge</link>
	</image>
	<itunes:category text="Technology" />
	<rawvoice:rating>TV-G</rawvoice:rating>
	<rawvoice:frequency>Weekly</rawvoice:frequency>
	<podcast:person role="Host" href="https://linkedin.com/in/riw777">Russ White</podcast:person>
	<podcast:podping usesPodping="true" />
<site xmlns="com-wordpress:feed-additions:1">73371701</site>	<item>
		<title>Fast Following Fails</title>
		<link>https://rule11.tech/fast-following-fails/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Sat, 09 Aug 2025 11:24:31 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=1019920</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/fast-following-fails.png" alt="" width="400" class="alignnone" />

Fast following fails.

Whenever I hear a leader in a technology business say, “We’re going to fast follow because it’s the most profitable place to be,” I know I’m looking at a failed organization. I didn’t come to this conclusion by thinking about it. I came to this conclusion by observing it repeatedly.]]></description>
										<content:encoded><![CDATA[<p><strong>Fast following fails.</strong></p>
<p>Whenever I hear a leader in a technology business say, “We’re going to fast follow because it’s the most profitable place to be,” I know I’m looking at a failed organization. I didn’t come to this conclusion by thinking about it. I came to this conclusion by observing it repeatedly.</p>
<p>After observing it, however, I wanted to understand why this particular strategy fails so consistently and spectacularly. Why? To understand my theory, we need to start in a somewhat different place than business—we need to start with the nature of goals and humans.</p>
<p><strong>You can place goals into two buckets: first things and second things.</strong></p>
<p><em>First things are foundational.</em> If you are a technology company, the first thing is building a stable, resilient, and flexible platform (or foundation). The products you sell will only be as stable as your platform. The innovation you achieve will only be as consistent as your platform is.</p>
<p><em>Second things are goals you can only achieve once you’ve built the first things. </em></p>
<p>Here’s the hard truth no one wants to hear: <em>Generating revenue is a second thing. </em></p>
<p><strong>Humans become what they do.</strong></p>
<p>We all want to believe we can become what we desire—but we actually become what we do. In Aristotelian philosophy, this is called the <em>virtue ethic.</em> You become physically virtuous by exercising your body. You become intellectually virtuous by thinking about hard things.</p>
<p>Companies are the same way. A company can only become innovative by innovating. Innovating becomes a habit—or it doesn’t.</p>
<p><strong>What does this have to do with fast following?</strong></p>
<p>The theory of the “fast follower” is: “I’m going to let other people spend money on research and development, I’m going to let them carry the burden of innovating and making all the mistakes, then I’m going to jump in and scoop up their innovation.”</p>
<p>This seems sound at first glance. It’s a compelling story.</p>
<p>It doesn’t work, however, because you are chasing another organization’s success without building their platform. You’ve placed a second thing—revenue generation—in first place, and first things—building a platform and innovating—in second place.</p>
<p>When you put building a platform and innovating on top of that platform in second place—when you “fast follow”—you lose the habit of building a solid platform <em>and</em> the habit of innovating.</p>
<p>Building a platform on which you can actually ship innovative products—no matter who invented them—and cultivating a mindset that seeks out good innovation creates a culture of innovation. When you build the mental habit of waiting until someone else’s innovation succeeds and then building “just enough platform to make it work here, too,” you are building an unstable platform and killing innovation.</p>
<p><strong>“But what about all those fast-following success stories?”</strong></p>
<p>One reason “fast following” success stories abound is that you <em>can </em>make a lot of money for a little while with the fast-following strategy. Another is that when an organization first moves to fast following, they have the leftover platform and innovation culture to carry them for a little while.</p>
<p>But time will out all fast following organizations. When the market shifts, fast followers will have neither the platform to shift with it nor the innovation to change with the market.</p>
<p>By putting second things first, the fast follower loses the first things that make the second thing possible.</p>
<p><strong>“But I’ll make a lot of money until it fails, right? I don’t care about the future, just making a lot of money quickly!”</strong></p>
<p>Sure, if that’s the life you want to lead, go for it. If you want to live a life devoid of community, and you want to lie on your deathbed and say, “I don’t care what damage I caused,” if sheer wealth is all that matters, feel free to fast follow.</p>
<p>If you want to build something, however, go build it.</p>
<p>Fast following gives up building platforms and innovating for immediate success, and winds up failing to innovate or succeed.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1019920</post-id>	</item>
		<item>
		<title>Architecture and Process</title>
		<link>https://rule11.tech/architecture-and-process/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Fri, 12 Apr 2024 14:37:52 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=17972</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/arch-process.png" alt="" width="400" height="160" />

Driving through some rural areas east of where I live, I noticed a lot of collections of buildings strung together being used as homes. The process seems to start when someone takes a travel trailer, places it on blocks (a foundation of sorts) and builds a spacious deck just outside the door. Over time, the deck is covered, then screened, then walled, becoming a room.

Once the deck becomes a room, a new deck is built, and the process begins anew. At some point, the occupants decide they need a place to store some sort of equipment, so they build a shed. Later, the shed is connected to the deck, the whole thing becomes an extension of the living space, and a new shed is built.
]]></description>
										<content:encoded><![CDATA[<p>Driving through some rural areas east of where I live, I noticed a lot of collections of buildings strung together being used as homes. The process seems to start when someone takes a travel trailer, places it on blocks (a foundation of sorts) and builds a spacious deck just outside the door. Over time, the deck is covered, then screened, then walled, becoming a room.</p>
<p>Once the deck becomes a room, a new deck is built, and the process begins anew. At some point, the occupants decide they need a place to store some sort of equipment, so they build a shed. Later, the shed is connected to the deck, the whole thing becomes an extension of the living space, and a new shed is built.</p>
<p>These &#8230; interesting &#8230; places to live are homes to the people who live in them. They are often, I assume, even happy homes.</p>
<p>But they are not <em>houses</em> in the proper sense of the word. There is no unifying theme, no thought of how traffic should flow and how people should live. They are a lot like the paths crisscrossing a campus—built where the grass died.</p>
<p>Our networks are like these homes—they are not <em>houses</em> so much as historical records of every new idea and vendor marketing drive. There is no <em>architecture,</em> there are <em>many architectures</em> strung together with a set of tightly wound and closely followed processes.</p>
<p>We need to support some new application or service? Throw a new overlay on top. There was a massive failure last night? Let’s spend hours closely examining our process and find some way to prevent the failure by adding a few new steps.</p>
<p>We never ask if our goals are realistic because we don’t have any goal beyond: “Let’s solve this problem right now.” We never ask if there is some future goal might be better served by using this solution or that—the future will take care of itself.</p>
<p>Why do we fail to attend to architecture?</p>
<p><em>Architecture is hard,</em> and we often fail to correctly anticipate the future. This perceives <em>architecture</em> as a detailed plan—but there’s no reason it should be. An architecture can be a rough, and slow-changing, outline of how the network is laid out, a set of services the network supports, and a set of technologies the network will use to support those services. An architecture recognizes and defines limits as well as capabilities.</p>
<p><em>Processes are comforting.</em> When things fail, we can always take comfort in saying: “I followed the process!”</p>
<p>We live in a <em>culture of now.</em> All problems take two hours, two days, two weeks, or too long. There is no history, there is no future, there is only an ever-present <em>now.</em> If I cannot have it now, it is not worth having at all.</p>
<p>These problems are hard to solve because they are cultural rather than technical—and the network engineering world has a strong bias towards “don’t tell me how it works, tell me how to configure it.” We present this as a <em>problem-solving mentality,</em> even though it causes more problems than it solves.</p>
<p>We need to rebalance the way we think about architectures and processes—perhaps we would get better results by combining lightweight architectures with lightweight processes, instead of relying on heavy processes with no architecture to build maintainable networks and sustainable lives.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">17972</post-id>	</item>
		<item>
		<title>AI Assistants</title>
		<link>https://rule11.tech/ai-assistants/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 18 Mar 2024 14:13:04 +0000</pubDate>
				<category><![CDATA[SECURITY]]></category>
		<category><![CDATA[SKILLS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=17901</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/ai-assistants.png" alt="" width="400" height="160" />

<a href="https://mindmatters.ai/2023/08/meet-mediocrates-when-ai-does-all-the-heavy-mental-lifting/">I have written elsewhere about the danger of AI assistants leading to mediocrity.</a> Humans tend to rely on authority figures rather strongly (see <em>Obedience to Authority</em> by Stanley Milgram as one example), and we often treat “the computer” as an authority figure.]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" fetchpriority="high" decoding="async" class="alignnone" src="https://i0.wp.com/rule11.tech/wp-content/uploads/ai-assistants.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" /></p>
<p><a href="https://mindmatters.ai/2023/08/meet-mediocrates-when-ai-does-all-the-heavy-mental-lifting/">I have written elsewhere about the danger of AI assistants leading to mediocrity.</a> Humans tend to rely on authority figures rather strongly (see <em>Obedience to Authority</em> by Stanley Milgram as one example), and we often treat “the computer” as an authority figure.</p>
<p>The problem is, of course, Large Language Models—and AI of all kinds—are mostly pattern-matching machines or <em>Chinese Rooms.</em> A pattern-matching machine can be pretty effective at many interesting things, but it will always be, in essence, a summary of “what a lot of people think.” If you choose the right people to summarize, you might get close to the truth. Finding the right people to summarize, however, is beyond the powers of a pattern-matching machine.</p>
<p>Just because many “experts” say the same thing does not mean the thing is true, valid, or useful.</p>
<p>AI assistants can make people more productive, at least in terms of sheer output. Someone using an AI assistant will write more words per minute than someone who is not. Someone using an AI assistant will write more code daily than someone who is not.</p>
<p>But is it just more, or is it better?</p>
<p>Measuring the mediocratic effect of using AI systems, even as an assistant, is difficult. We have the example of drivers using a GPS, never really learning how to get anyplace (and probably losing all larger sense of geography), but these things are hard to measure.</p>
<p><a href="https://dl.acm.org/doi/10.1145/3576915.3623157">However, a recent research paper on programming and security has shown at least one place where this effect can be measured.</a> Noting that most kinds of social research are problematic (they are hard to replicate, it’s hard to infer valid results accurately, etc.), this one seems well set up and executed, so I’m inclined to put at least some trust in the results.</p>
<p>The researchers asked programmers worldwide to write software to perform six different tasks. They constructed a control group that did not use AI assistants and a test group that did.</p>
<p>The result? In almost every case, participants using the AI assistant wrote much less secure code, including mistakes in building encryption functions, creating a sandbox, allowing SQL injection attacks, local pointers, and integer overflows. Participants made about the same number of mistakes in randomness—a problem not many programmers have taken the time to study—and fewer mistakes in buffer overflows.</p>
<p>It is possible, of course, for companies to create programming-specific AI assistants that might resolve these problems. Domain-specific AI assistants will always be more accurate and useful than general-purpose assistants.</p>
<p>Relying on AI assistants improves productivity but also seems to create mediocre results. In many cases, mediocre results will be “good enough.”</p>
<p>But what about when “good enough” isn’t … good enough?</p>
<p>Humans are creatures of habit. We do what we practice. If you want to become a better coder, you need to practice coding—and remember that practice does <em>not</em> make perfect. <em>Perfect practice makes perfect.</em></p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">17901</post-id>	</item>
		<item>
		<title>On Writing Complexity</title>
		<link>https://rule11.tech/on-writing-complexity/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 05 Feb 2024 22:57:06 +0000</pubDate>
				<category><![CDATA[SKILLS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=16967</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/writing-complexity.png" alt="" width="400" height="160" class="alignnone" />

I've been on a bit of a writer's break after finishing the CCST book, but it's time to rekindle my "thousand words a day" habit. As always, one part of this is thinking about how I write—is there anything I need to change? Tools, perhaps, or style?
]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/writing-complexity.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" class="alignnone" /></p>
<p>I&#8217;ve been on a bit of a writer&#8217;s break after finishing the CCST book, but it&#8217;s time to rekindle my &#8220;thousand words a day&#8221; habit. As always, one part of this is thinking about how I write—is there anything I need to change? Tools, perhaps, or style?</p>
<p>What about the grade level complexity of my writing? I&#8217;ve never really paid attention to this, but I&#8217;m working on contributing to a site regularly that does. So maybe I should.</p>
<p>I tend to write to the tenth or eleventh-grade level, even when writing &#8220;popular material,&#8221; like blog posts. The recommended level is around the eighth-grade level. Is this something I need to change?</p>
<p>It seems the average person considers anything above the eighth-grade reading level &#8220;too hard&#8221; to read, so they give up. Every reading level calculation I&#8217;ve looked at essentially uses word and sentence length as proxies for complexity. Long words and sentences intimidate people.</p>
<p>On the other hand, measuring the reading grade level can seem futile. There are plenty of complex concepts described by one- and two-syllable words. Short sentences can still have lots of meaning.</p>
<p>Further, the reading grade level does not tell you if the sentence makes sense. A famous politician recently said, &#8220;… it’s time for us to do what we have been doing, and that time is every day.&#8221; The reading grade level of this sentence is in the sixth grade—but saying nothing is still saying nothing, even if you say it at a sixth-grade level.</p>
<p>While reading level complexity might be important, it is more important to <em>say something.</em></p>
<p>Sometimes, using long words and sentences stops people from paying attention to your words. However, replacing long words and sentences with shorter ones sometimes removes your words&#8217; real meaning (or at least flavor). I am not, at this point, certain how to balance these. I suspect I will have to consider the tradeoff in every situation.</p>
<p>When you write—and if you are doing your job as a network engineer well, you do write—you might want to consider the complexity of your writing. I will use the grade level as &#8220;another tool&#8221; in my set, which means I&#8217;ll be thinking about writing complexity more—but I&#8217;m not going to allow it to drive my writing style. If I can reduce the complexity of my writing without losing meaning, I may &#8230; sometimes &#8230; or I might not. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60a.png" alt="😊" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Looking at the other side of the coin—what about reading grade level from a <em>reader&#8217;s</em> point of view? Should we only read easy-to-read things? The answer should be obvious: <em>no.</em></p>
<p>There is a bit of a feeling that text above a certain reading level is &#8220;sheer nonsense.&#8221; Again, though, the grade level has nothing to do with the value of the content. Sometimes, saying complex things just requires complex text. Readers (all of us) need to learn to read complex text.</p>
<p>Reading grade level is a good tool in many situations—but it is one tool among many.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">16967</post-id>	</item>
		<item>
		<title>Making Networking Cool Again? (2)</title>
		<link>https://rule11.tech/making-networking-cool-again-2/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 16 Jan 2024 18:00:03 +0000</pubDate>
				<category><![CDATA[CAREER]]></category>
		<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=16897</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/networking-cool.jpg" alt="" width="400" height="160" class="alignnone" />

Network engineering is not “going away.” Network engineering is not less important than it was yesterday, last year, or even a decade ago.

But there still seems to be a gap somewhere. There are fewer folks interested than we need. We need more folks who want to work as full-time network engineers, and more folks with network engineering skills diffused within the larger IT community. More of both is the right answer if we’re going to continue building large-scale systems that work. The real lack of enthusiasm for learning network engineering is hurting all of IT, not just network engineering.

How do we bridge this gap? We’re engineers. We solve problems. This seems to be a problem we might be able to solve <em]]></description>
										<content:encoded><![CDATA[<p>Network engineering is not “going away.” Network engineering is not less important than it was yesterday, last year, or even a decade ago.</p>
<p>But there still seems to be a gap somewhere. There are fewer folks interested than we need. We need more folks who want to work as full-time network engineers, and more folks with network engineering skills diffused within the larger IT community. More of both is the right answer if we’re going to continue building large-scale systems that work. The real lack of enthusiasm for learning network engineering is hurting all of IT, not just network engineering.</p>
<p>How do we bridge this gap? We’re engineers. We solve problems. This seems to be a problem we might be able to solve <em>(unlike human nature).</em> Let’s try to solve it.</p>
<p>As you might have guessed, I have some ideas. These are not the only ideas in the world—feel free to think up more!</p>
<p>If you walk into a robotics class, even an introductory robotics class, you see people … building robots. If you walk into a coding class, even an introductory one, you see people … writing software. If you walk into a network network engineering class you see … someone lecturing about the OSI model, packet formats, or how to configure BGP.</p>
<p>What problems are people learning to solve robotic engineering? How to build a robot and get it to <em>do something</em> to solve a real-world problem. What problems are people learning to code solving? How to tackle some real-world problem.</p>
<p>Sure, the problems being solved at an introductory level might be trivial, like: “Read this file and spit out a sum of the numbers in the fourth column.” But they are still starting, right from the beginning, by taking requirements and converting them into solutions.</p>
<p>What problems are network engineers learning how to solve? How to choose hardware, string it all together, and configure BGP.</p>
<p>Do you see the difference?</p>
<p>All engineers solve problems—it’s the nature of engineering. But are we creating a mindset in prospective network engineers, or even adjacent fields, that we solve real-world problems? Or are we giving them the impression that we solve whiteboard problems by talking about bits, bytes, configurations, and cable types?</p>
<p>Have you ever seen the glazing over of eyes while explaining how you put four transport protocols on top of one another <em>(look at all the pretty tunnels)?</em> How about when you create a chart showing how TCP and QUIC can be “kind-of sort-of” forced into the OSI model? Or when you spin out your BGP packet format charts, showing how we’ve (mis)used address families to carry everything anyone can imagine?</p>
<p>I’ve been teaching this stuff for years <em>(okay, decades).</em> Over time, I’ve moved away from teaching configurations and packet formats. I’ve gone from <em>Advanced IP Network Design</em> to <em>Computer Networking Problems and Solutions.</em> These are very different ways of looking at network engineering.</p>
<p>Focusing on real-world problems would help connect business and other IT folks to the network, connect theory to practice, and people to network engineering. Going home at the end of the day saying, “I solved a problem,” can be satisfying. Going home at the end of the day saying, “I configured BGP?”</p>
<p>Another thing adopting the mindset of solving real-world problems might do is help us lose unnecessary complexity. I know complexity is necessary to build resilient systems; we cannot build what we build without creating and encountering complexity.</p>
<p>But we often run ourselves into the ditch on both sides of the road.</p>
<p>We unintentionally build too complex because we try to make it too simple. Quick, which is simpler: building a data center fabric with one routing protocol or two? A single chassis system or several smaller fixed format devices? A proprietary system or something built on open standards?</p>
<p>How many balloons fit in a bag? <em>(thanks, Don)</em></p>
<p>Failing to start with the tradeoffs, and thinking through what problem we’re actually trying to solve, leads to unnecessary complexity. Such designs might not immediately fail, but they will fail, and “it’s so complex” just isn’t an excuse.</p>
<p>Don’t even try to tell me there aren’t any tradeoffs. If you think there aren’t any tradeoffs, that just means you haven’t looked hard enough. Go find them, think about them, and document them.</p>
<p>We also build complex things because we think it offers job security, or it’s neat, or we like to feel like the kid who says to the world, “look what I built!”</p>
<p>I know it’s exciting to hear stories about that time someone rescued a network from a major failure—after all, that’s solving a real-world problem. Building a network that just works might be “boring,” but it solves many more real-world problems than raising a network from the dead.</p>
<p>We love our fashionable capes, but … capes can get caught in a nearby jet engine. Lose the cape. In the long run, it’ll make network engineering more attractive as a career field and field of knowledge.</p>
<p><strong>The Bottom Line</strong></p>
<p>No, the sky is not falling. We still need networks, and we still need network engineers.</p>
<p>Yes, there is a problem. Too many companies are going “to the cloud” because they cannot find people qualified to build and maintain their very complex networks. There’s too much centralization and too little oppeness.</p>
<p>So maybe let’s stop saying “we don’t need network engineers.” And maybe let’s really think about how we’re building things. And maybe let’s focus on solving real-world problems, starting from day one in network engineering classrooms.</p>
<p>Network engineering is still cool—let’s go out there believing—and selling—that idea to the world.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">16897</post-id>	</item>
		<item>
		<title>Making Networking Cool Again? (1)</title>
		<link>https://rule11.tech/making-networking-cool-again-1/</link>
					<comments>https://rule11.tech/making-networking-cool-again-1/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 09 Jan 2024 18:00:31 +0000</pubDate>
				<category><![CDATA[CAREER]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=16860</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/networking-cool.jpg" alt="" width="400" height="160" class="alignnone" />

Is network engineering still cool?

It certainly doesn’t seem like it, does it? College admissions seem to be down in the network engineering programs I know of, and networking certifications seem to be down, too. Maybe we’ve just passed the top of the curve, and computer networking skills are just going the way of coopering. Let’s see if we can sort out the nature of this malaise and possible solutions. Fair warning—this is going to take more than one post.]]></description>
										<content:encoded><![CDATA[<p>Is network engineering still cool?</p>
<p>It certainly doesn’t seem like it, does it? College admissions seem to be down in the network engineering programs I know of, and networking certifications seem to be down, too. Maybe we’ve just passed the top of the curve, and computer networking skills are just going the way of coopering. Let’s see if we can sort out the nature of this malaise and possible solutions. Fair warning—this is going to take more than one post.</p>
<p>Let’s start here: It could be that computer networking is a solved problem, and we just don’t need network engineers any longer.</p>
<p>I’ve certainly heard people say these kinds of things—for instance, one rather well-known network engineer said, just a few years back, that network engineers would no longer be needed in five years. According to this view, the entire network should be like a car. You get in, turn the key, and it “just works.” There shouldn’t be any excitement or concern about a commodity like transporting packets. Another illustration I’ve heard used is “network bandwidth should just be like computer memory—if you need more, add it.”</p>
<p>Does this really hold, though? Even if we accept the car and computer memory illustrations and individual routers like these things, is an entire network system like a car? A closer analogy for a network in the world of cars would be an entire transportation system.</p>
<p>You have different kinds of physical transport (rail, over-the-road trucks, air travel, ships, etc.), each with its characteristics, and all of which must be connected to move physical objects from one place to another. There must be some kind of “control plane” that coordinates, shared addressing, formatting rules, etc.</p>
<p>While a single car might, in some sense, be a commodity at this point (and I’ll bet there aren’t many car owners who would wholly agree with that characterization), I don’t see how we could call an entire transportation system a commodity—especially if we want to say “the skills needed to build a transportation system just aren’t needed any longer, there’s nothing more to learn, this is so … boring …”</p>
<p>Let’s dispense with this idea that networks just aren’t needed any longer. We must still build networks that carry traffic between servers, cities, countries, and continents. Building these networks is still a hard problem. Even if there is less room to improve these things than ten or twenty years ago, the problems are still hard. Even if many problems are solved at a broad level, not every problem is solved in every network in the universe.</p>
<p>A more reasonable take on this perspective is that networking skills are diffusing into a larger information technology (IT) skill set. Perhaps IT, in its relative “youth,” divided too sharply and finely—we created too many career fields. What is happening right now, then, is just a kind of right sizing in the market.</p>
<p>Network engineering skills, in fact, do seem to be dispersing to one degree or another. But let’s put this in perspective.</p>
<p>The first point is I’m not convinced there are fewer network engineers. Instead, it’s more likely there are just as many network engineers as there ever have been, if not more. Perhaps, though, “real” network engineering has been growing linearly while all the other IT fields have been growing at a rate faster than linear (I don’t want to say exponential, just something more than linear).</p>
<p>In a world that counts lack of growth as a failure, networking growing at a slower pace than, say, programming seems like a failure from the outside. People like to follow winners; growing is winning; network engineering is not growing as fast as other things, so network engineering is failing.</p>
<p>I dislike the modern progressive mindset—but while I’m working on something in this area, this isn’t the time or place to dive into this topic. Let’s agree that we must let go of the idea: “Growing slower is a failure.”</p>
<p>Returning to the idea of transportation—I will just about bet automobile designers built entire departments in the early days of car manufacturing. Today, there might be just as many automobile designers as ever. They’re just buried in large car manufacturing, servicing, etc., companies, so it feels like there are a lot fewer than there were.</p>
<p>Just because most new engineers must learn many different things, and network engineering skills are diffusing into many different areas of IT, does not mean network engineering is dying, regardless of what it might look like from the outside.</p>
<p>Second, there is nothing wrong with network engineering skills diffusing into the larger IT skill set. Has anyone reading this ever really been a “pure” network engineer? If so, I don’t know whether to envy or feel sorry for you.</p>
<p>When building networks in the military, I had to deal with all the politics of customer relationships and understanding mission needs. When taking cases in technical support, I had to deal with time management and customer-facing skills—and I needed to learn or use coding skills to be an effective network engineer. Today, I do network engineering, like I always have, but I work on security, privacy, DNS, coding, and all sorts of other things.</p>
<p>I cannot think of a time in my career when I would have considered myself a “pure network engineer.” I’ve always had to find and build adjacent skills to design, build, and maintain networks. I would say this is truer today than ever, but I do not believe my skills as a network engineer are any less useful than they have ever been.</p>
<p>Where does all of this leave us?</p>
<p>Let&#8217;s continue the discussion in part 2 next week.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/making-networking-cool-again-1/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">16860</post-id>	</item>
		<item>
		<title>Simple or Complex?</title>
		<link>https://rule11.tech/simple-or-complex/</link>
					<comments>https://rule11.tech/simple-or-complex/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 19 Sep 2023 19:00:22 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=16490</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/simple-or-complex.png" alt="" width="400" height="160" />

A few weeks ago, Daniel posted a piece about using different <a href="https://lostintransit.se/2023/08/29/is-one-protocol-simpler-than-two/">underlay and overlay protocols in a data center fabric. </a>He says:

<blockquote>There is nothing wrong with running BGP in the overlay but I oppose to the argument of it being simpler.</blockquote>

One of the major problems we often face in network engineering—and engineering more broadly—is confusing that which is <em>simple</em> with that which has <em>lower complexity.</em> Simpler things are not always less complex. Let me give you a few examples, all of which are going to be controversial.]]></description>
										<content:encoded><![CDATA[<p>A few weeks ago, Daniel posted a piece about using different <a href="https://lostintransit.se/2023/08/29/is-one-protocol-simpler-than-two/">underlay and overlay protocols in a data center fabric. </a>He says:</p>
<blockquote><p>There is nothing wrong with running BGP in the overlay but I oppose to the argument of it being simpler.</p></blockquote>
<p>One of the major problems we often face in network engineering—and engineering more broadly—is confusing that which is <em>simple</em> with that which has <em>lower complexity.</em> Simpler things are not always less complex. Let me give you a few examples, all of which are going to be controversial.</p>
<p>When OSPF was first created, it was designed to be a simpler and more efficient form of IS-IS. Instead of using TLVs to encode data, OSPF used fixed-length fields. To process the contents of a TLV, you need to build a case/switch construction where each possible type a separate bit of code. You must count off the correct length for the type of data, or (worse) read a length field and count out where you are in the stream.</p>
<p>Fixed-length fields are just much easier to process. You build a structure matching the layout of the fixed-length fields in memory, then point this structure at the packet contents in-memory. From there, you can just use the structure’s contents to directly access the data.</p>
<p>Over time, however, as new requirements have been pushed into IGPs, OSPF has become much more complex while IS-IS has remained relatively constant (in terms of complexity). IS-IS went through a bit of a mess when transitioning from narrow to wide metrics, but otherwise the IS-IS we use today is the same protocol we used when I first started working on networks (back in the early 1990s).</p>
<p>OSPF’s simplicity, in the end, did not translate into a less complex protocol.</p>
<p>Another example is the way we transport data in BGP. A lot of people do not know that BGP’s original design allowed for carrying information other than straight reachability in the protocol. BGP speakers can negotiate multiple sessions, with each session carrying a different kind of information. Rather than using this mechanism, however, BGP has consistently been extended using address families—because it is simpler to create a new address family than it is to define a new kind of data parallel with address families.</p>
<p>This has resulted in AFs that are all over the place, magic numbers, and all sorts of complexity. The AF solution is simpler, but ultimately more complex.</p>
<p>Returning to Daniel’s example, running a single protocol for underlay and overlay is <em>simpler,</em> while running two different protocols is <em>less simple.</em> However, I’ve observed—many times—that running different protocols for underlay and overlay is <em>less complex.</em></p>
<p>Why? Daniel mentions a couple of reasons, such as each protocol has a separate purpose, and we’re pushing features into BGP to make it serve the role of an IGP (which is, in the end, going to cause some major outages—if it hasn’t already).</p>
<p>Consider this: is it easier to troubleshoot infrastructure reachability separately from vrf reachability? The answer is obvious<em>—yes!</em> What about security? Is it easier to secure a fabric when the underlay never touches any attached workload? Again<em>—yes!</em></p>
<p>We get this tradeoff wrong all the time. A lot of times this is because we are afraid of what we do not know. Ten years ago I struggled to convince large operators to run BGP in their networks. Today no-one runs anyone other than BGP—and they all say “but we don’t have anyone who knows OSPF or IS-IS.” I’ve no idea what happened to old-fashioned network engineering. Do people really only have one “protocol slot” in their brains? Can people really only ever learn one protocol?</p>
<p>Or maybe we’ve become so fixated on learning features that we no longer no protocols?</p>
<p>I don’t know the answer to these questions, but I will say this—over the years I’ve learned that simpler is not always less complex.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/simple-or-complex/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">16490</post-id>	</item>
		<item>
		<title>Route Servers and Loops</title>
		<link>https://rule11.tech/route-servers-and-loops/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 16 Aug 2022 17:00:15 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=15309</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/route-servers-loops.png" alt="" width="400" height="160" class="alignnone size-full" />

From the question pile: <em>Route servers (as opposed to route reflectors) don't change anything about a BGP route when re-advertising it to a peer, whether iBGP or eBGP. Why don't route servers cause routing loops (or other problems) in a BGP network?</em>

Route servers are often used by Internet Exchange Points (IXPs) to distribute routes between connected BGP speakers. BGP route servers

<ul>
<li>Don't change anything about a received BGP route when advertising the route to its peers (other BGP speakers)</li>
<li>Don't install routes received through BGP into the local routing table</li>
</ul>

Shouldn't using route servers in a network&#8212;pontentially, at least&#8212;cause routing loops or other BGP routing issues?]]></description>
										<content:encoded><![CDATA[<p>From the question pile: <em>Route servers (as opposed to route reflectors) don&#8217;t change anything about a BGP route when re-advertising it to a peer, whether iBGP or eBGP. Why don&#8217;t route servers cause routing loops (or other problems) in a BGP network?</em></p>
<p>Route servers are often used by Internet Exchange Points (IXPs) to distribute routes between connected BGP speakers. BGP route servers</p>
<ul>
<li>Don&#8217;t change anything about a received BGP route when advertising the route to its peers (other BGP speakers)</li>
<li>Don&#8217;t install routes received through BGP into the local routing table</li>
</ul>
<p>Shouldn&#8217;t using route servers in a network&#8212;pontentially, at least&#8212;cause routing loops or other BGP routing issues? Maybe a practical example will help.</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/route-server-01.png?resize=800%2C342&#038;ssl=1" alt="" width="800" height="342" class="alignnone" /></p>
<p>Assume <em>b, e,</em> and <em>s</em> are all route servers in their respective networks. Starting at the far left, <em>a</em> receives some route, 101::/64, and sends it on to <em>b,</em>, which then sends the unmodified route to <em>c.</em> When <em>c</em> receives traffic destined to 101::/64, what will happen? Regardless of whether these routers are running iBGP or eBGP, <em>b</em> will not change the next hop, so when <em>c</em> receives the route, <em>a</em> is still the next hop. If there&#8217;s no underlying routing protocol, <em>c</em> won&#8217;t know how to reach A, so it will ignore the route and drop the traffic. Even if there is an underlying routing protocol, <em>c&#8217;s</em> route to 101::/64&#8217;s route passes through <em>b,</em> and <em>b</em> isn&#8217;t installing any routing information learned from BGP into its local routing table (because it&#8217;s a route server). <em>b</em> is going to drop traffic destined to 101::/64.</p>
<p>We can solve this simple problem by adding a new link between the two clients of the route server, as shown in the center diagram. Here, <em>d</em> sends 101::/64 to <em>e,</em> which then sends the unchanged route to <em>g.</em> Since <em>g</em> has a direct connection to <em>d,</em> we can assume <em>g</em> will send traffic destined to 101::/64 directly to <em>d,</em> where it will be forwarded to the destination. Why wouldn&#8217;t <em>d</em> and <em>g</em> peer directly instead of counting on <em>e</em> to carry routes between them? In most cases this kind of indirect peering is done to increase network scale. If there are thousand routes like <em>d</em> and <em>g,</em> it will be simpler for them all to peer to <em>e</em> than to build a full mesh of connections. </p>
<p>Why not use a route reflector rather than a route server in this situation? Route reflectors can only be used to carry routes between iBGP peers. If <em>d, e,</em> and <em>g</em> are all in different autonomous systems, route reflectors cannot be used to solve this problem.</p>
<p>But this brings us back to the original question&#8212;route reflectors use the <em>cluster list</em> to prevent loops within an AS (the cluster list is similar in form and function to the AS path carried between autonomous systems, but it uses router ID&#8217;s rather than AS numbers to describe the path)? </p>
<p>If you have multiple route servers connected to one another you can, in fact, form routing loops.</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/route-server-02.png?resize=600%2C478&#038;ssl=1" alt="" width="600" height="478" class="alignnone" /></p>
<p>In this network, <em>a</em> is sending 101::/64 to <em>b,</em> which is then sending the route, unmodified, to <em>e.</em> Because of some local policy, <em>e</em> is choosing the path through <em>a,</em> which means <em>e</em> forwards traffic destined to 101::/64 to <em>c.</em> At the same time, <em>e</em> is advertising 101::/64 to <em>b,</em> which is then sending the route (unmodified) to <em>a,</em> and <em>a</em> is choosing the path through <em>c.</em> In this case, a permanent (persistent) routing loop is formed through the control plane, primarily because no single BGP speaker has a complete view of the topology. The two route servers, by hiding the real path to 101::/64, makes is possible to form a routing loop.</p>
<p>The deploy route servers without forming these kinds of loops&#8212;</p>
<ul>
<li>BGP speakers learning routes from route servers should be directly connected&#8212;there should not be destinations reachable via some &#8220;hidden&#8221; intermediate hop</li>
<li>Route servers should send <em>all</em> the routes they learn from clients; they should not use bestpath to choose which routes to send to clients</li>
</ul>
<p>These restrictions prevent routing loops from forming when deploying route servers&#8212;but they also restrict the use of route servers to situations like carrying routes between BGP speakers connected to a single fabric. </p>
<p><em>Cisco <a href="https://patents.google.com/patent/US20120281539">filed a patent </a>some time back describing a method to prevent routing loops when using BGP route servers; it makes interesting reading for folks who want to dive a little deeper.</em></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">15309</post-id>	</item>
		<item>
		<title>RFC9199: Lessons in Large-scale Service Deployment</title>
		<link>https://rule11.tech/rfc9199-lessons-in-large-scale-service-deployment/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 08 Aug 2022 18:51:55 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[STANDARDS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=15284</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/rfc9199.png" alt="" width="400" height="160" class="alignnone" />

While RFC9199 (are we really in the 9000's?) is targeted at large-scale DNS deployments--specifically root zone operators--so it might seem the average operator won't find a lot of value here. 

This is, however, far from the truth. Every lesson we've learned in deploying large-scale DNS root servers applies to any other large-scale user-facing service. Internally deployed DNS recursive servers are an obvious instance, but the lessons here might well apply to a scheduling, banking, or any other multi-user application accessed from a lot of places by a lot of different users. There are some unique points in DNS, such as the relatively slower pace of database synchronization across nodes, but the network-side lessons can still be useful for a lot of applications. ]]></description>
										<content:encoded><![CDATA[<p>While RFC9199 (are we really in the 9000&#8217;s?) is targeted at large-scale DNS deployments&#8211;specifically root zone operators&#8211;so it might seem the average operator won&#8217;t find a lot of value here. </p>
<p>This is, however, far from the truth. Every lesson we&#8217;ve learned in deploying large-scale DNS root servers applies to any other large-scale user-facing service. Internally deployed DNS recursive servers are an obvious instance, but the lessons here might well apply to a scheduling, banking, or any other multi-user application accessed from a lot of places by a lot of different users. There are some unique points in DNS, such as the relatively slower pace of database synchronization across nodes, but the network-side lessons can still be useful for a lot of applications. </p>
<p>What are those lessons?</p>
<p><strong>First,</strong> using <em>anycast</em> dramatically improves performance for these kinds of services. For those who aren&#8217;t familiar with the concept, anycase turns an IP address into a service identifier. Any host with a copy (or instance) or a given service advertises the same address, causing the routing table to choose the (topologically) closest instance of the service. If you&#8217;re using anycast, traffic destined to your service will automatically be forwarded to the closest server running the application, providing a kind of load sharing among multiple instances through routing. If there are instances in New York, California, France, and Taipei, traffic from users in North Carolina will be routed to New York and traffic from users in Singapore will be routed to Taipei. </p>
<p>You can think of an anycast address something like a cell tower; users within a certain desintance will be &#8220;captured&#8221; by a particular instance. The more copies of the service you deploy, the smaller the geographic region the service will support. Hence you can control the number of users using a particular copy of the service by controlling the number and location of service copies.</p>
<p>To understand where and how to deploy service instances, create <em>anycast catchment maps.</em> Again, just like a wifi signal coverage map, or a cellphone tower coverage map, it&#8217;s important to understand which users will be directed to which instances. Using a catchment map will help you decide where new instances need to be deployed, which instances need the fastest links and hardware, etc. The RIPE ATLAS pobes and looking glass servers are good ways to start building such a map. If the application supports a large number of users, you might be able to convince the application developer to include some sort of geographic information in requests to help build these maps.</p>
<p><strong>Third,</strong> when deploying service instance, pay as much attention to routing and connectivity as you do the <em>number</em> of instances deployed. As the authors note, sometimes eight instances will provide the same level of service as several thousand instances. The connectivity available into each instance of the service&#8211;bandwidth, delay, availability, etc.&#8211;still has a huge impact on service speed.</p>
<p><strong>Fourth,</strong> reduce the speed at which the database needs to be synchronized where possible. Not every piece of information needs to be synchronized at the same rate. The less data being synchronized, the more consistent the view from multiple users is going to be.</p>
<p>RFC9199 is well worth reading, even for the average network engineer.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">15284</post-id>	</item>
		<item>
		<title>Learning to Ride</title>
		<link>https://rule11.tech/learning-to-ride/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 01 Aug 2022 17:00:06 +0000</pubDate>
				<category><![CDATA[CAREER]]></category>
		<category><![CDATA[SKILLS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=15256</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/learn-to-ride.png" alt="" width="400" height="160" class="alignnone" />

Have you ever taught a kid to ride a bike? Kids always begin the process by shifting their focus from the handlebars to the pedals, trying to feel out how to keep the right amount of pressure on each pedal, control the handlebars, and keep moving … so they can stay balanced. During this initial learning phase, the kid will keep their eyes down, looking at the pedals, the handlebars, and . . . the ground.

After some time of riding, though, managing the pedals and handlebars are embedded in “muscle memory,” allowing them to get their head up and focus on where they’re going rather than on the mechanical process of riding. After a lot of experience, bike riders can start doing wheelies, or jumps, or off-road riding that goes far beyond basic balance.
Network engineer—any kind of engineering, really—is the same way.]]></description>
										<content:encoded><![CDATA[<p>Have you ever taught a kid to ride a bike? Kids always begin the process by shifting their focus from the handlebars to the pedals, trying to feel out how to keep the right amount of pressure on each pedal, control the handlebars, and keep moving … so they can stay balanced. During this initial learning phase, the kid will keep their eyes down, looking at the pedals, the handlebars, and . . . the ground.</p>
<p>After some time of riding, though, managing the pedals and handlebars are embedded in “muscle memory,” allowing them to get their head up and focus on where they’re going rather than on the mechanical process of riding. After a lot of experience, bike riders can start doing wheelies, or jumps, or off-road riding that goes far beyond basic balance.<br />
Network engineer—any kind of engineering, really—is the same way.</p>
<p>At first, you need to focus on what you are doing. How is this configured? What specific output am I looking for in this show command? What field do I need to use in this data structure to automate that? Where do I look to find out about these fields, defects, etc.?</p>
<p>The problem is—it is easy to get stuck at this level, focusing on configurations, automation, and the “what” of things. </p>
<p>You’re not going to be able to get your head up and think about the longer term—the trail ahead, the end-point you’re trying to reach—until you commit these things to muscle memory.<br />
The point, with technology, is learning to stop focusing on the pedals, the handlebars, and the ground, and start focusing on the goal—whether its nailing this jump or conquering this trail or making it there.</p>
<p>Transitioning is often hard, of course, but its just like riding a bike. You won’t make the transition until you trust your muscle memory a bit at a time. </p>
<p>Learning the theory of how and why things work the way they are is a key point in this transition. Configuration is just the intersection of “how this works” with “what am I trying to do…” If you know how (and why) protocols work, and you know what you’re trying to do, configuration and automation will become a matter of asking the right questions.</p>
<p>Learn the theory, and riding the bike will become second nature—rather than something you must focus on constantly. </p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">15256</post-id>	</item>
		<item>
		<title>On Building a Personal Brand</title>
		<link>https://rule11.tech/on-building-a-personal-brand/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 13 Jun 2022 17:00:02 +0000</pubDate>
				<category><![CDATA[CAREER]]></category>
		<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=15045</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/being-dedicated.png" alt="" width="400" height="160" class="alignnone" />

How do you balance loyalty to yourself and loyalty to the company you work for? 

This might seem like an odd question, but it's an important component of work/life balance many of us just don't think about any longer because, as Pete Davis says in <em>Dedicated,</em> we live in a world of infinite browsing. We're afraid of sticking to one thing because it might reduce our future options. If we dedicate ourselves to something bigger than ourselves, then we might lose control of our direction. In particular, we should <em>not</em> dedicate ourselves to any single company, especially for too long.]]></description>
										<content:encoded><![CDATA[<p>How do you balance loyalty to yourself and loyalty to the company you work for? </p>
<p>This might seem like an odd question, but it&#8217;s an important component of work/life balance many of us just don&#8217;t think about any longer because, as Pete Davis says in <em>Dedicated,</em> we live in a world of infinite browsing. We&#8217;re afraid of sticking to one thing because it might reduce our future options. If we dedicate ourselves to something bigger than ourselves, then we might lose control of our direction. In particular, we should <em>not</em> dedicate ourselves to any single company, especially for too long. As a recent (excellent!) blog post over at the ACM says:</p>
<blockquote><p><a href="https://cacm.acm.org/blogs/blog-cacm/261340-career-care-for-engineers/fulltext">Loyalty is generally a good trait, but extreme loyalty to the organization or mission may cause you to stay in the same job for too long.</a></p></blockquote>
<p>The idea that we should control our own destiny, never getting lost in anything larger than ourselves, is ubitiquos like water is to a fish. We don&#8217;t question it. We don&#8217;t argue. It is just true. We assume there are three people who are going to look after &#8220;me:&#8221; me, myself, and I.</p>
<p>I get it. Honestly, I do. I&#8217;ve been there more times than I want to think about. I was the scapegoat in an argument between people far above my pay grade early in my career, causing much angst and pain. <a href="https://rule11.tech/what-i-learned-by-being-laid-off/">I&#8217;ve been laid off,</a>&#8212;I cared about a company that simply didn&#8217;t care about me. Most recently, the family I&#8217;d dedicated more than twenty years of my life to ended through a divorce.</p>
<p>I can see why you might ask yourself hard questions about dedicating yourself to anything or anyone.</p>
<p>The problem, as Pete Davis points out, is that the human person was not designed for the kind of digital nomad life represented by the phrase &#8220;live for yourself.&#8221; We can try to substitute an online community. We can try to replace community with a string of novel experiences. But the truth is <em>it will eventually catch up with you.</em> When you&#8217;re young it&#8217;s hard to see how it will ever catch up with you, <em>but it will.</em></p>
<p>Returning to the top&#8212;the author of the ACM article advises balancing between dedicating yourself to a company and dedicating yourself to your career. This is wise advice, but it leaves me wondering &#8220;how?&#8221; Let me lay out some thoughts here. They may not be all of the answer, but they will, I hope, point in the right direction.</p>
<p><strong>First,</strong> resist seeing these two choices as orthogonal. They might be at odds in some companies&#8212;there are publishers who want your content to build their brand, and they specifically work at preventing you from building your brand. There are companies that explicitly want to own &#8220;your whole professional life.&#8221; They don&#8217;t want you blogging, going to conferences to speak, etc. Avoid these companies.</p>
<p>Instead, find companies that understand your personal brand is an <em>asset</em> to the company. Having a lot of people with strong personal brands in a company makes the company stronger, not weaker. People with strong brands will form communities around themselves. This community is a pool of people from which to recruit top-flight talent. This community allows them to collect new ideas that can be directly applied to problems in the organization. People with strong personal brands will have greater influence when they walk into a room to meet with a customer, a supplier, or just about anyone else. A company full of people with strong personal brands is stronger than one where everyone is faceless, consumed by/hiding behind the company logo.</p>
<p><strong>Second,</strong> learn to manage your time effectively. I understand it&#8217;s possible to spend so much time building your brand that you don&#8217;t get your job done. As an individual, you need to be sensitive to this and learn how to manage your time effectively.</p>
<p><strong>Third,</strong> seek out the win/win. Don&#8217;t think of every situation through the lens of &#8220;it&#8217;s either my brand or my employer&#8217;s.&#8221; There may be times when you cannot do something because, while it would help your brand immensely, it would harm your company&#8217;s. There may be times where you need to have a delicate discussion with your manager because you&#8217;ve been asked to do something that would be great for the company but would harm your brand. There is almost always a win/win, you just have to find it. </p>
<p><strong>Fourth,</strong> seek out a community that&#8217;s not attached to work and dedicate yourself to it. Find something larger than yourself. A community that&#8217;s not tied to work will be your lifeline when things go wrong.</p>
<p><strong>Finally,</strong> expect to get hurt. I know I have (an old saying in my community&#8212;never trust a man who doesn&#8217;t walk with a limp). You can be the nicest, humblest person in the world. Someone is still going to take advantage of you. In fact, the nicer and humbler you are&#8212;the more you care, the more likely it is people are going to take advantage of you. I am amazed at how much people seem to enjoy hurting one another when they believe there won&#8217;t be any consequences.</p>
<p>But &#8230; if you expect your life to be perfect, you were born in the wrong world. Build up the mental reserves to deal with this. Build a community that will help carry you through. There is nothing better than sitting down and sharing your hurt over a cup of coffee with a good friend (except I don&#8217;t drink coffee).</p>
<p><strong>I get it</strong>&#8212;the world has moved into a YOLO/FOMO phase. If you don&#8217;t &#8220;grab it,&#8221; and <em>right now!</em> you risk missing something really important. We pile up alternative possibilities in our minds, wondering what might have happened if we&#8217;d chosen otherwise. We have deep angst over our personal brand, overthinking the concept to the point of diminishing returns.</p>
<p>The solution, though, is not to draw into yourself, to become self-centered. The solution is to find the balance, seek the win/win, dedicate yourself to something bigger than yourself, and <em>find the right way to build your personal brand.</em></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">15045</post-id>	</item>
		<item>
		<title>Revisiting BGP Convergence</title>
		<link>https://rule11.tech/revisiting-bgp-convergence/</link>
					<comments>https://rule11.tech/revisiting-bgp-convergence/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 06 Jun 2022 17:00:16 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=15004</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/revisit-bgp-convergence.png" alt="" width="400" height="160" class="alignnone" />

My video on BGP convergence elicited a lot of . . . feedback, mainly concerning the difference between convergence in a data center fabric and convergence in the DFZ. Let's begin here&#8212;BGP hunt and the impact of the MRAI are very real in the DFZ. Withdrawing a route can take several minutes.

What about the much more controlled environment of a data center fabric?

Several folks pointed out that the MRAI is often set to 0 in DC fabrics (and many implementations by default). Further, almost all implementations will use an MRAI of 0 for the first received update, holding the second and subsequent advertisements by the MRAI. Several folks also pointed out that all the paths through a DC fabric are the same length, so the second part of the equation is also very small.

These are good points—how do they impact BGP convergence? Let's use the network below, a small slice of a five-stage butterfly fabric, to think it through. Assume every router is in a different AS, so all the peering sessions are eBGP.]]></description>
										<content:encoded><![CDATA[<p><a href="https://rule11.tech/how-bgp-really-converges/">My video on BGP convergence</a> elicited a lot of . . . feedback, mainly concerning the difference between convergence in a data center fabric and convergence in the DFZ. Let&#8217;s begin here&#8212;BGP hunt and the impact of the MRAI are very real in the DFZ. Withdrawing a route can take several minutes.</p>
<p>What about the much more controlled environment of a data center fabric?</p>
<p>Several folks pointed out that the MRAI is often set to 0 in DC fabrics (and many implementations by default). Further, almost all implementations will use an MRAI of 0 for the first received update, holding the second and subsequent advertisements by the MRAI. Several folks also pointed out that all the paths through a DC fabric are the same length, so the second part of the equation is also very small.</p>
<p>These are good points&#8212;how do they impact BGP convergence? Let&#8217;s use the network below, a small slice of a five-stage butterfly fabric, to think it through. Assume every router is in a different AS, so all the peering sessions are eBGP.</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/five-stage-slice.png?resize=799%2C421&#038;ssl=1" alt="" width="799" height="421" class="alignnone" /></p>
<p>Start with A losing its connection to 101::/64—</p>
<ul>
<li>T1: A withdraws its route from B and C</li>
<li>T2: B withdraws its route from D and E, C withdraws its route from F and G</li>
<li>T3: D and E withdraw their routes from H, F and G withdraw their routes from K</li>
<li>T4: H and K withdraw their routes from L</li>
</ul>
<p>Note that L cannot receive <em>one</em> withdraw to remove the route from its local table; it must receive withdraws from both H and K. There&#8217;s no way at L to tell whether a withdraw from H means 101::/64 is no longer reachable at all or it is no longer reachable through H. For path-vector protocols, like distance-vector, the neighbor through each path must be considered independently.</p>
<p>What does an MRAI of 0 do? Each of the routers in the network will process the withdraw as soon as they receive it and send a withdraw to their peers as soon as they&#8217;re done processing it. The process still takes the same number of steps <em>but each step is much faster.</em></p>
<p>What is the impact of all the paths&#8217; equal length? So long as every router processes the withdraw at around the same speed, there is no hunt. If H and K send their withdraws simultaneously, L should receive them simultaneously and remove the route to 101::/64 from its table rather than switching from one path to the other. Even if they send their withdraws at different times, L removes entries from its ECMP table until it receives the last withdrawal.</p>
<p>If MRAI slows down convergence, why set it to anything other than 0? Because it&#8217;s improbable that every router in the network will process each withdraw simultaneously.</p>
<p>Before 101::/64 is withdrawn, H will be using the paths through D and E for ECMP, but it is only going to be advertising one of these two routes to L&#8212;say the path through E. When B sends withdraws to D and E, assume E processes the withdraw just a little faster than D. When H receives D&#8217;s withdraw, it will send an implicit withdraw to L, updating the AS path to include D rather than E. A few moments later, D sends a withdraw. H processes this withdraw and sends a withdraw to L.</p>
<p>L has received one implicit withdraw and one withdraw from H because of processing time differentials. In a larger fabric, with a much larger fan-out, the likelihood of differences in timing is much higher and spread across a broader range of possibilities. You can (generally) expect H to send about half as many implicit withdraws as it has paths towards the destination before sending an actual withdraw. If there are eight paths between B and H, H would likely send 3 or 4 implicit withdraws before sending a withdraw.</p>
<p>What if the MRAI were set to 1 second at H? H would receive E&#8217;s withdrawal and set the MRAI timer. Assuming D&#8217;s withdraw arrives within that 1-second MRAI, H will receive D&#8217;s withdraw, squash the implicit withdraw, and send a single withdraw to L instead. Setting the MRAI to something other than 0 reduces the number of updates and reduces processing.</p>
<p>Setting the MRAI to 1 second, and forcing it to trigger across all updates, might improve convergence time—or not. Without experimenting with setting the MRAI to different values at different places in a real network, it is hard to know. Replacing the routers, link speeds, changing processor load, and increasing memory can all have an impact on the &#8220;best&#8221; settings for optimal convergence.</p>
<p><strong>the bottom line</strong></p>
<p>There will be no hunt in BGP convergence in a network with multiple equal-length/equal-cost paths. This is what we should expect. Because the maximum path length minus the best (current) path length will always be 0, the network will converge as quickly as each router can process and advertise withdraws, bounded by the MRAI.</p>
<p>Setting the MRAI to 0 improves convergence speed at the cost of additional updates, especially in wide fan-out data center fabrics. It&#8217;s hard to know whether setting the MRAI to 0 or 1 will give you better convergence speeds; you have to try it to see.</p>
<p>I <em>still</em> think we should be moving away from BGP as our underlay protocol in all but the largest data center fabrics. IGPs (like IS-IS and RIFT) will converge more quickly, are easier to configure and manage, and using different protocols for the underlay and overlay breaks up failure and security domains in useful ways. I know I&#8217;m tilting at a windmill on this point, but still &#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/revisiting-bgp-convergence/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">15004</post-id>	</item>
		<item>
		<title>BGP Policy (Part 7)</title>
		<link>https://rule11.tech/bgp-policy-part-7/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 09 May 2022 17:00:52 +0000</pubDate>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14924</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/bgp-policy-7.png" alt="" width="400" height="160" class="alignnone" />

<em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I'm going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em>

There are cases where an operator does not traffic to be forwarded to them through some specific AS, whether directly connected or multiple hops away. For instance, AS65001 and AS65005 might be operated by companies in politically unfriendly nations. In this case, AS65001 may be legally required to reject traffic that has passed through the nation in which AS65005 is located. There are at least three mechanisms in BGP that are used, in different situations, to enforce this kind of policy.

]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-policy-7.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" class="alignnone" /></p>
<p><em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I&#8217;m going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em></p>
<p>In this post&#8212;the last post in this series&#8212;I&#8217;m going to cover <em>do not transit</em> options from the perspective of AS65001 in the following network—</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-network.png?w=600&#038;ssl=1" alt=""  /></p>
<p>There are cases where an operator does not traffic to be forwarded to them through some specific AS, whether directly connected or multiple hops away. For instance, AS65001 and AS65005 might be operated by companies in politically unfriendly nations. In this case, AS65001 may be legally required to reject traffic that has passed through the nation in which AS65005 is located. There are at least three mechanisms in BGP that are used, in different situations, to enforce this kind of policy.</p>
<p><strong>Do Not Advertise Communities (Provider Specific)</strong></p>
<p>Many providers supply communities a customer can use to block the advertisement of their routes to a particular AS. For instance, if AS65002 were NTT, <a href="https://www.gin.ntt.net/support-center/policies-procedures/routing/">according to the NTT customer communities site, if AS65001 advertises 100::/64 with the community 65500:65005, NTT would advertise 100::/64 to all its other peers, but not to AS65005.</a></p>
<p><em>Note: NTT is not AS65002; this is only used as an illustration of using a community to block advertisement to a peer’s peer.</em></p>
<p>The operator at AS65001 might reasonably expect that blocking AS65002 from advertising 100::/64 to AS65005 will block all traffic traveling through AS65005—but the vagaries of the global Internet routing table may well cause traffic to be forwarded through AS65005 anyway in some instances.</p>
<p>If AS65006 has a default route pointing to AS65005, traffic destined to 100::/64 may still be forwarded to AS65005. If AS65005 happens to have a covering aggregate route, or learned of the route via AS65004, it might still carry traffic destined for 100::/64.</p>
<p>It is almost impossible to block all traffic to a given reachable destination from being forwarded through a given autonomous system.</p>
<p><strong>AS Path Injection</strong></p>
<p>An alternate, widely used mechanism is to intentionally inject an AS Path loop when advertising a route to prevent some AS from accepting the route. For instance, AS65001 might advertise 100::/64 with the AS Path [65005,65001] to AS65002. AS65005 would then reject this advertisement because the local AS is already in the AS Path.<br />
While this might appear to “break the rules” of BGP, the reality is the AS Path was never really intended to be a “true record” of the path of an “update” (in fact, there is no such thing as an “update” that travels from one router to the next—the “update” is constructed at each hop based on local tables). This technique is problematic in providing “path security” in BGP, but it does not intrinsically break any BGP rules.</p>
<p><a href="https://rule11.tech/the-hedge-82-jared-smith-and-route-poisoning/"><em>Note: For more information about this technique, refer to this episode of the Hedge.</em></a></p>
<p>Again, note it is almost impossible to block all traffic to a given reachable destination from being forwarded through a given autonomous system.</p>
<p><strong>Do Not Advertise Communities (Well Known)</strong></p>
<p>Three further well-known communities, although they are not widely used, are worth considering.</p>
<p>When a route is marked with <em>NO-PEER,</em> the AS should only advertise the route to its customers and never its peers. For instance, if AS65001 advertises 100::/64 to AS65003 with NO-PEER, AS65003 will advertise the destination to AS6507 and AS65008 (assuming these are customers), and not to AS65002 or AS65004 (because both of these autonomous systems transit traffic to and from AS65003).</p>
<p>When a route is marked with <em>NO-EXPORT,</em> the AS should not advertise the reachable destination to any other AS. For instance, if AS65001 advertises 100::/64 to AS65003 with NO-EXPORT, AS65003 will not advertise this reachable destination to any other AS, including AS65007, AS65008, AS65002, or AS65004.</p>
<p>When a route is marked with <em>NO-ADVERTISE,</em> the receiving BGP speaker should not advertise the route to any other BGP speaker, including internal and external connections.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14924</post-id>	</item>
		<item>
		<title>BGP Policy (Part 6)</title>
		<link>https://rule11.tech/bgp-policy-6/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 03 May 2022 17:00:43 +0000</pubDate>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14887</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/bgp-policy-6.png" alt="" width="400" height="160" class="alignnone" />

<em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I'm going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em>

In this post I'm going to cover local preference via communities, longer prefix match, and conditional advertisement from the perspective of AS65001 in the following network—
]]></description>
										<content:encoded><![CDATA[<p><em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I&#8217;m going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em></p>
<p>In this post I&#8217;m going to cover local preference via communities, longer prefix match, and conditional advertisement from the perspective of AS65001 in the following network—</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-network.png?w=600&#038;ssl=1" alt=""  /></p>
<p><strong>Communities an Local Preference</strong><br />
As noted above, MED is the tool “designed into” BGP for selecting an entrance point into the local AS for specific reachable destinations. MED is not very effective, however, because a route’s preference will always win over MED, and because it is not carried between autonomous systems.<br />
Some operators provide an alternate for MED in the form of communities that set a route’s preference within the AS. For instance, assume 100::/64 is geographically closer to the [65001,65003] link than either of the [65001,65002] links, so AS65001 would prefer traffic destined to 100::/64 enter through AS65003.<br />
In this case, AS65001 can advertise 100::/64 with a community that makes AS65001 prefer the route through AS65003 over the direct route to AS65001 (see 2914:450 on NTT’s list of customer set communities as an example).</p>
<p>Note: Many of the communities described here have regional versions for more specific use cases. These operate on the same principles, just in a more restricted topological or geographical area.</p>
<p><strong>Longer Prefix Match</strong></p>
<p>While MED is often not effective, and using communities is both restricted in range and complex to configure and manage, advertising a longer-prefix match always works, is simple to configure, and easy to deploy.</p>
<p>For instance, if AS65001 would like traffic destined to 100::/64 to only enter from AS65003, it may advertise an aggregated route, say 2001:db8:3e8100::/63 to both AS65003 and AS65002, and then advertise 100::/64 only to AS65003. Because all routing systems will select the prefix with the longest match first, the /64 through AS65003 will be selected over the /63 through AS65003 and AS65003, so the traffic always enters AS65001 the way the operator desires.<br />
The overlapping, or covering, aggregate is advertised to provide backup reachability. If the [AS65001,AS65003] link (or peering) fails for any reason, traffic destined to 100::/64 will follow the /63 route, entering from AS65002. This is not optimal from the perspective of AS65001, but it keeps connectivity in place while any problems can be traced down and repaired.<br />
According to Geoff Huston, a large percentage of the routes in the current global table are advertised for traffic engineering—to manipulate the point at which traffic destined to specific reachable destinations enters an AS.</p>
<p>Note: The use of longer prefix routes to control inbound route flows represents a “tragedy of the commons” problem to the global Internet. Work has been put into various mechanisms designed to remove these more specific routes from the routing table when they are no longer needed, but little progress has been made in implementing them, not have any of these solutions achieved widespread adoption and deployment.</p>
<p><strong>Conditional Advertisement</strong></p>
<p>What if AS65001 has signed a contract with AS65003 to carry traffic only if both its links to AS65002 fails? In this case, AS65001 could advertise many more longer prefix specifics through AS65002 and one shorter covering route through AS6503.</p>
<p>This strategy, however, has two flaws. First, it requires AS6501 to manage the more specifics and covering routes as a set, making certain the pairs are correctly configured. Second, it could be that AS65001 does not want anyone to know about this backup arrangement unless and until it is used. This is sometimes the case when two competitors agree to back one another up, and neither wants anyone to know what their backup arrangements are.</p>
<p>To resolve these (and other) policy problems, operators can use conditional advertisement.</p>
<p>Conditional advertisement is conceptually simple; if a router does not have some route, x, in its routing table, it advertises some other route (given the route is in the local tables so it can be advertised). For instance, AS65001 might configure the router at C to advertise 100::/64 only when it does not have some other route.<br />
The hardest part of configuring conditional advertisement is knowing when to trigger the advertisement of the alternate path. Using the lack of reachability to the destination itself (100::/64 in this case) as the trigger will fail in some circumstances, and will always require the global table to converge before the alternate path is advertised. Instead, conditional advertisement is often triggered by the lack of a route to between the BGP speakers being “watched” (in this case, the two [65001,65002] links) learned through from within the AS (within AS65001, rather than through the global routing table).</p>
<p>Triggering on the internal state of a link directly connected to a router managed by the local operator, and carried through internal convergence, removes external convergence from the time required to begin advertising the alternate path.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14887</post-id>	</item>
		<item>
		<title>BGP Policies (Part 5)</title>
		<link>https://rule11.tech/bgp-policies-part-5/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 25 Apr 2022 17:00:54 +0000</pubDate>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14863</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/bgp-policy-5.png" alt="" width="400" height="160" class="alignnone" />

<em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I'm going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em>

In this post I'm going to cover AS Path Prepending from the perspective of AS65001 in the following network—
]]></description>
										<content:encoded><![CDATA[<p><em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I&#8217;m going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em></p>
<p>In this post I&#8217;m going to cover AS Path Prepending from the perspective of AS65001 in the following network—</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-network.png?w=600&#038;ssl=1" alt=""  /></p>
<p>Since the length of the AS Path plays a role in choosing which path to use when forwarding traffic towards a given reachable destination, many (if not most) operators prepend the AS Path when advertising routes to a peer. Thus an AS Path of [65001], when advertised towards AS65003, can become [65001,65001] by adding one prepend, [65001,65001,65001] by adding two prepends, etc. Most BGP implementations allow an operator to prepend as many times as they would like, so it is possible to see twenty, thirty, or even higher numbers of prepends.<br />
Note: The usefulness of prepending is generally restricted to around two or three, as the average length of an AS Path in the global Internet is around 4 hops.</p>
<p>If AS65001 would like traffic destined to 100::/64 to enter from AS65003 rather than AS65002, it can prepend the AS Path at every peering point with AS65002 (A and B) with two hops (sending [65001,65001,65001] to AS65002). If preference, MED, and all other metrics are equal, AS65002 would then prefer the path with the shorter AS Path through AS65003, rather than the path directly into AS65001 (either through A or B).</p>
<p>That all metrics are equal is not likely, however. AS65002 will probably have preference set so routes learned directly from customers (such as AS65001) are selected over routes learned from peers (such as AS65003). The impact of prepending on route selection by directly connected peers is, therefore, uncertain.</p>
<p>Moving one step out in the network, consider the routes received by AS65004 to reach 100::/64. There will be one route along [65002,65001,65001,65001], and another with an AS Path of [65003,65001]. All other things being equal (same preference, etc.), AS65004 will choose to send traffic destined to 100::/64 through AS65003 rather than AS65002. How likely is it all the other BGP metrics will be equal at AS65004? So long as the peering between AS65004, AS65003, and AS65002 are all of the same type, the odds are high—so prepending can help move some (not all) traffic from one inbound link to another.</p>
<p>Because AS Path prepending has variable results over time, operators using this technique often “just try it” to see what the effect will be. There’s no real way to predict how effective prepending any number of times will be in moving traffic from one inbound link to another.</p>
<p>What if AS65001 does not want traffic destined to 100::/64 to traverse AS6505? For instance, suppose AS6506 s on across an ocean, mountain range, or other difficult-to-cross geographic feature. AS65005 crosses this geography via a satellite link, while AS65004 crosses the same geography via an optical cable. Sine optical cable runs can provide better delay and jitter than a satellite link, AS65001 may desire to choose which of these two autonomous systems is traversed to reach 100::/64.</p>
<p>This cannot be directly accomplished using AS Path prepend, as both AS65004 and AS65005 will both receive the same prepended path.</p>
<p>To express this kind of policy, some operators allow their customers to set communities that cause the operator to remotely prepend a given route advertisement. <a href="https://www.gin.ntt.net/support-center/policies-procedures/routing/">For instance, NTT allows their customers to set a community</a> that will cause NTT to prepend specific routes when those routes are advertised to specific autonomous systems—in this case, AS65001 could add the community 65421:65005 to the advertisement for 100::/64, which would cause NTT to prepend AS65001 when advertising 100::64 to AS65005, and not prepend anything when advertising 100::/64 to AS65004.</p>
<p>This technique is subject to the same caveats as using AS Path prepend locally—it may work in some situations, or it may not—because the local operator does not have visibility into the policies of the operators they are trying to influence.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14863</post-id>	</item>
		<item>
		<title>BGP Policies (Part 4)</title>
		<link>https://rule11.tech/bgp-policies-part-4/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 04 Apr 2022 18:57:16 +0000</pubDate>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14784</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/bgp-policies-04.png" alt="" width="400" height="160" class="alignnone" />

<em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I'm going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em>

In this post, I'll cover the first of a few ways to give surrounding autonomous systems a hint about where traffic should <em>enter</em> a network. Note this is one of the most vexing problems in BGP policy, so there will be a lot of notes across the next several posts about why some solutions don't work all that well, or when they will and won't work.

There are at least three reasons an operator may want to control the point at which traffic enters their network, including:
]]></description>
										<content:encoded><![CDATA[<p><em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I&#8217;m going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em></p>
<p>In this post, I&#8217;ll cover the first of a few ways to give surrounding autonomous systems a hint about where traffic should <em>enter</em> a network. Note this is one of the most vexing problems in BGP policy, so there will be a lot of notes across the next several posts about why some solutions don&#8217;t work all that well, or when they will and won&#8217;t work.</p>
<p>There are at least three reasons an operator may want to control the point at which traffic enters their network, including:</p>
<ul>
<li>Controlling the inbound load on each link. It might be important to balance inbound and outbound load to maintain settlement-free peering, or to equally use all available inbound bandwidth, or to ensure the quality of experience is not impacted by overusing a single link.</li>
<li>Accounting for geographically dispersed entry points. For instance, while the two entry points into AS65001 might appear to be topologically close, they might be geographically diverse, with one being in South America and the other being in North America.</li>
<li>Ensuring flows requiring symmetric paths are properly handled. A common use case is the use of stateful packet filters or port address translators, both of which require inbound and outbound traffic to be routed through a single device.</li>
</ul>
<p>All these reasons apply to all kinds of network operators, so this section will examine the various techniques used to control traffic entry points from the perspective of AS65001 in the following network—</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-network.png?w=600&#038;ssl=1" alt=""  /></p>
<p>&nbsp;</p>
<p>Policies designed to control the point at which traffic <em>enters</em> an operator’s network will often conflict with policies designed to control the point at which traffic <em>exits</em> some other operator’s network. For instance, AS65001’s policy that all traffic destined to 100::/64 enter the network from AS65002 may conflict with AS6500’2 policy that all traffic destined to 100::/64 leave its network by being forwarded to AS65003.</p>
<p>This effect is not just seen between directly connected autonomous systems. For instance, AS65001’s policy that all traffic destined to 100::/64 enter the network through AS65002 may conflict with AS65004’s policy that all traffic to that same destination exit the network by being forwarded to AS65003.</p>
<p>The original intent of BGP policy was the policy of the sender overrides the policy of the receiver, as expressed in the design of the metrics (the <em>multiple exit discriminator,</em> or MED, has a lower priority than the preference). In real deployments, however, exit and entry policies are more fluid and entangled. These relationships will be considered in each of the sections below, each of which describes a different way to influence or control how traffic destined to a single reachable destination.</p>
<p>Let&#8217;s begin with the <strong>Multiple Exist Discriminator,</strong> or MED.</p>
<p>MED is a <em>suggestion</em> or <em>request</em> to neighboring autonomous systems to forward traffic for reachable destination along a particular path. For instance, AS65001 may desire for traffic being sent to 100::/64 be sent to B in the network diagram, rather than to A or through its link to AS65003.</p>
<p>However, the MED is <em>not a transitive attribute</em> of a BGP route. This means that if AS65001 sets the MED so that entry B is preferred, and sends this MED to AS65003, AS65003 will strip (or reset) the MED before advertising 100::/64 to either AS65004 or AS65002.</p>
<p>MED, in this case, would be useful to help AS65002 determine whether to send this traffic to A or B, but not whether to send the traffic to AS65001 or AS65003. AS65002 will, instead, rely on local policy, primarily preference, to determine which exit point to use. If AS65002 determines the best path to 100::/64 is through one of its direct connections to AS65001 (either A or B), and there is no other reason for AS65002 to choose one path over the other, the MED will be used to determined which path to use.</p>
<p>Because AS65003 only has one connection to AS65001, the MED will not impact its bestpath decision at all. Because AS65001’s MED has been reset or stripped in all the routes to 100::/64 AS65004 receives, AS65001’s MED will not play a role in any bestpath decision there, either (AS65002 or AS65003 may set the MED when sending routes to AS65004, which may influence the path AS65004 chooses, but again only when choosing between multiple connections to the same peering AS).</p>
<p>Because MED is only considered nominally useful, it is often stripped off routes when they are received from another AS.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14784</post-id>	</item>
		<item>
		<title>BGP Policies (Part 3)</title>
		<link>https://rule11.tech/bgp-policies-part-3/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 28 Mar 2022 17:00:27 +0000</pubDate>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14756</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/bgp-policy-3.png" alt="" width="400" height="160" class="alignnone" />

Assume AS65001 is some form of content provider, which means it offers some service such as bare metal compute, cloud services, search engines, social media, etc. Customers from AS65006 are connecting to its servers, located on the 100::/64 network, which generates a large amount of traffic returning to the customers. From the perspective of AS hops, it appears the path from AS65001 to AS65006 is the same length—if this is true, AS65001 does not have any reason to choose one path or another (given there is no measurable performance difference, as in the cases described above from AS65006’s perspective). However, the AS hop count does not accurately describe the geographic distances involved...


]]></description>
										<content:encoded><![CDATA[<p><em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I&#8217;m going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em></p>
<p>There are many reasons an operator might want to select which neighboring AS through which to send traffic towards a given reachable destination (for instance, 100::/64). Each of these examples assumes the AS in question has learned multiple paths towards 100::/64, one from each peer, and must choose one of the two available paths to forward along. </p>
<p>In the following network&#8212;</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-network.png?w=600&#038;ssl=1" alt=""  /></p>
<p><strong>From AS65001’s perspective</strong></p>
<p>Assume AS65001 is some form of content provider, which means it offers some service such as bare metal compute, cloud services, search engines, social media, etc. Customers from AS65006 are connecting to its servers, located on the 100::/64 network, which generates a large amount of traffic returning to the customers.<br />
From the perspective of AS hops, it appears the path from AS65001 to AS65006 is the same length—if this is true, AS65001 does not have any reason to choose one path or another (given there is no measurable performance difference, as in the cases described above from AS65006’s perspective). However, the AS hop count does not accurately describe the geographic distances involved:</p>
<ul>
<li>The geographic distance between 100::/64 and the exit towards AS65003 is very short</li>
<li>The geographic distance between AS100::/64 and the exits towards AS65002 is very long</li>
<li>The total geographic distance packets travel when following either path is about the same</li>
</ul>
<p>In this case, AS65001 can either choose to hold on to packets destined to customers in AS65006 for a longer or shorter geographic distance.<br />
While carrying the traffic over a longer geographic distance is more expensive, AS65001 would also like to optimize for the customer’s quality of experience (QoE), which means AS65001 should hold on to the traffic for as long as possible.</p>
<p>Because customers will use AS65001’s services in direct relation to their QoE (the relationship between service usage and QoE is measurable in the real world), AS65001 will opt to carry traffic destined to customers as long as possible—another instance of cold potato routing.<br />
This is normally implemented by setting the preference for all routes equal and relying on the IGP metric part of the BGP bestpath decision process to control the exit point. IGP metrics can then be tuned based on the geographic distance from the origin of the traffic within the network and the exit point closest to the customer.</p>
<p>An alternative, more active, solution would be to have a local controller monitor the performance of individual paths to a given reachable destination, setting the preferences on individual reachable destinations and tuning IGP metrics in near-real-time to adjust for optimal customer experience.<br />
Another alternative is to have a local controller monitor the performance individual paths and use MPLS, segment routing, or some other mechanism to actively engineer or steer the path of traffic through the network.</p>
<p>Some content providers may directly peer with transit and edge providers to reach customers more quickly, to reduce costs, and to increase their control over customer-facing traffic. For instance, if AS65001 is a content provider that transits traffic through [65002,65005] to reach customers in AS65006. To avoid transiting multiple autonomous systems, AS65001 can run a link directly to AS65005. </p>
<p>In some cases, content providers will build long-haul fiber optics <a href="https://www.submarinecablemap.com">(including undersea cable operations, see this site for examples)</a> to avoid transiting multiple autonomous systems. </p>
<p>While the operator can end up paying a lot to build and operate long-haul optical links, this cost is offset is offset by decreasing paying transit providers for high levels of asymmetric traffic flows. Beyond this, content providers can control user experience more effectively the longer they control the user’s traffic. Finally, content providers can gain more information by connecting closer to users, feeding into Kai-Fu Lee’s virtuous cycle. </p>
<p>Note: content providers peering directly with edge providers and through IXPs is one component of the centralization of the Internet.</p>
<p>A failed alternative to the techniques described here was the use of automatic disaggregation at the content provider’s autonomous system borders. For instance, if a customer connected to a server in 100::/64 by sending traffic via the [65003,65001] link, an automated system will examine the routing table to see which route is currently being used to reach the customer’s reachable destination. If traffic forwarded to this customer’s address would normally pass through one of the [65001,65002] links, a local host route is created and distributed into AS65001 to draw this traffic to the exit connected to AS65003.</p>
<p>The theory behind this automatic disaggregation was that the customer will always take the shortest path from their perspective to reach the service. This assumption fails, in practice, however, so this scheme was ultimately abandoned.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14756</post-id>	</item>
		<item>
		<title>BGP Policies (Part 2)</title>
		<link>https://rule11.tech/bgp-policies-part-2/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 14 Mar 2022 17:00:50 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14697</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/bgp-policies-2.png" alt="" width="400" height="160" class="alignnone" />

<em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I'm going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em>

There are many reasons an operator might want to select which neighboring AS through which to send traffic towards a given reachable destination (for instance, 100::/64). Each of these examples assumes the AS in question has learned multiple paths towards 100::/64, one from each peer, and must choose one of the two available paths to forward along.  This post wil consider selecting an exit point from the perspective of two more autonomous systems.]]></description>
										<content:encoded><![CDATA[<p><em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I&#8217;m going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em></p>
<p>There are many reasons an operator might want to select which neighboring AS through which to send traffic towards a given reachable destination (for instance, 100::/64). Each of these examples assumes the AS in question has learned multiple paths towards 100::/64, one from each peer, and must choose one of the two available paths to forward along.</p>
<p>In the following network—</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-network.png?w=600&#038;ssl=1" alt=""  /></p>
<p><strong>From AS65004’s perspective&#8230;</strong></p>
<p>Transit providers primarily choose the most optimal exit from their AS to reduce the amount of peering settlement they are paying by using and maintaining settlement-free peering where possible and reducing the amount of time and distance traffic is carried through their network (through hot potato routing, discussed in more detail below).<br />
If, for instance, AS65004 has a paid peering relationship with AS65002, and a contract with AS65003 which is settlement-free so long as the traffic between AS65004 and AS65003 is roughly symmetric. AS65004 has two roughly equal-cost paths (both have the same AS Path length) towards 100::/64. In this situation, AS 65004 is going to direct traffic towards AS65003 to maintain symmetrical traffic flows and direct any remaining traffic towards AS65002.</p>
<p>This kind of balancing is normally done through a controller or network management system that monitors the balance of traffic with AS65003, adjusting the preference of sets of routes to attain the correct balance with AS65003 while reducing the costs of using the link to AS65002 to the minimum possible.</p>
<p><strong>From AS65005’s perspective&#8230;</strong></p>
<p>AS65005 can either send traffic originating in AS65001, received from AS65002, and destined to AS65006, to either AS65004—a peer—or AS65006—a customer. The internal path between the entry point for this traffic is longer if the traffic is carried to AS65006, and shorter if the traffic is carried to AS65004. These longer and shorter paths give rise to the concepts of hot and cold potato routing.</p>
<p>If AS65006 is paying AS65005 for transit, AS65005 would normally carry traffic across the longer path to its border with AS65006. This is cold potato routing. AS65005’s reason for choosing this option is to maximize revenue from the customer. First, as the link between AS65005 and AS65006 becomes busier, AS65006 is likely to upgrade the link, generating additional revenue for AS65005. Even if the traffic level is not increasing, steady traffic flow encourages the customer to maintain the link, which protects revenue. Second, AS65005 can control the quality-of-service AS65006 receives by keeping the traffic within its network for as long as possible, improving the customer’s perception of the service they are receiving.<br />
Cold potato routing is normally implemented by setting the preference on routes learned from customers, so these routes are preferred over all routes learned from peers.<br />
If AS6006 is not paying AS65005 for transit, it is to AS65005’s advantage to carry the traffic as short a distance as possible. In this case, although AS65005 is directly connected to AS65006, and the destination is in AS65006, AS65005 will choose to direct the traffic towards its border with AS65004 (because there is a valid route learned for this reachable destination from AS65004).</p>
<p>This is hot potato routing—like the kids’ game, you want to hold on to the traffic for as short an amount of time as possible. Hot potato routing is normally implemented by setting the preference on routes to the same and relying on the IGP metric component of the BGP bestpath decision process to find the closest exit point.</p>
<p><em>Next week I&#8217;ll continue this series on BGP interdomain policies&#8230; feel free to leave a comment if you think I&#8217;ve explained something incorrectly, etc.</em></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14697</post-id>	</item>
		<item>
		<title>BGP Policies (part 1)</title>
		<link>https://rule11.tech/bgp-policies-part-1/</link>
					<comments>https://rule11.tech/bgp-policies-part-1/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 07 Mar 2022 18:00:43 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14685</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/bgp-policies-01.png" alt="" width="400" height="160" class="alignnone" />

<em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I'm going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em>]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-policies-01.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" class="alignnone" /></p>
<p><em>At the most basic level, there are only three BGP policies: pushing traffic through a specific exit point; pulling traffic through a specific entry point; preventing a remote AS (more than one AS hop away) from transiting your AS to reach a specific destination. In this series I&#8217;m going to discuss different reasons for these kinds of policies, and different ways to implement them in interdomain BGP.</em></p>
<p>In the following network&#8212;</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/bgp-network.png?w=600&#038;ssl=1" alt=""  /></p>
<p>There are many reasons an operator might want to select which neighboring AS through which to send traffic towards a given reachable destination (for instance, 100::/64). Each of these examples assumes the AS in question has learned multiple paths towards 100::/64, one from each peer, and must choose one of the two available paths to forward along. </p>
<p>Examining this from AS65006’s Perspective &#8230;</p>
<p>Assuming AS65006 is an edge operator (commonly called enterprise, but generally just originating and terminating traffic, and never transiting traffic), there are several reasons the operator may prefer one exit point (through an upstream provider), including: </p>
<ul>
<li>An automated system may determine AS65004 has some sort of brownout; in this case, the operator at 65006 has configured the system to prefer the exit through AS65005</li>
<li>The traffic destined to 100::/64 may require a class of service (such as video transport) AS65004 cannot support (for instance, because the link between AS65006 and 65005 has low bandwidth, high delay, or high jitter)</li>
</ul>
<p>The most common way this kind of policy would be implemented is by setting the BGP LOCAL_PREFERENCE (called <em>preference</em> throughout the rest of this document) on routes learned from AS65005 higher than the preference on routes learned from AS65004.</p>
<p><strong>Another common case is AS65006 would prefer to send traffic to AS65005 only when the destination is in an AS directly connected to AS65005 itself,</strong> while sending all other traffic through AS65004. This is common when a one provider has good local and poor global coverage, while the other provider has good global but poor local coverage.</p>
<p>For instance, if AS65006 is in a somewhat isolated part of the world, such as some parts of the South Pacific or Central America, there may be a local provider, such as AS65004, that has solid connectivity to most of the other edge operators in the local geographic region but charges a high cost for transiting to the rest of the global Internet. A second provider, such as AS65005, charges less to reach destinations beyond the local geographic region but is relatively expensive to use when sending traffic to other edge operators within the local region.</p>
<p>Preference, by itself, would be difficult to use in this case, because the operator would need to distinguish between geographically local and geographically distant routes. To implement this kind of policy, the operator would accept partial routes from the geographically local provider (AS65004 in this case) and set a high preference on these routes. Partial routes are typically those the local provider learns only from other directly connected autonomous systems, and hence would only include operators in the local geographic region. The operator would then accept full routes, or the entire Internet global routing table, from the second provider (AS65005 in this case) and set a lower preference.</p>
<p><strong>An alternative way to implement geographic preference is using communities.</strong> Many transit providers mark individual reachable destinations with information about where the route originated. NTT, for instance, describes their geographic marking here. An operator can create filters using regular expressions to change the preference of a route based on its geographic origin. </p>
<p>This is not a common way to solve the problem because the filtering rules involved can become complex—but it might be deployed if local providers do not offer partial routes for some reason.</p>
<p><strong>Another alternate to implement geographic preference is to use a regular expression filter</strong> to set the preference for each reachable destination based on the length of the AS Path. Theoretically, routes originating within the local region should have an AS Path of one or two hops, while those originating outside a region should have longer AS Paths.<br />
This generally does not work for two reasons. First, the average length of an AS Path (after prepending is factored out) is about 4 hops in the entire global Internet—and it is easy to reach four hops even within a local region in some situations. Second, many operators prepend the AS Path to manage inbound entry point preference; these prepended hops must be factored out to use this method.</p>
<p>Next week I&#8217;ll continue this series on BGP interdomain policies&#8230; feel free to leave a comment if you think I&#8217;ve explained something incorrectly, etc.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/bgp-policies-part-1/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14685</post-id>	</item>
		<item>
		<title>Quality is (too often) the missing ingredient</title>
		<link>https://rule11.tech/quality/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 03 Jan 2022 18:00:32 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14476</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/quality.png" alt="" width="400" height="160" class="alignnone" />

Software Eats the World?

I’m told software is going to eat the world very soon now. Everything already is, or will be, software based. To some folks, this sounds completely wonderful, but—leaving aside the privacy issues—I still see an elephant in the room with this vision of the future.

<strong>Quality.</strong>

Let me give you some recent examples.

First, ceiling fans. Modern ceiling fans, in case you didn’t know, don’t rely on the wall switch and pull chains. Instead, they rely on remote controls. This is brilliant—you can dim the light, change the speed of the fan, etc., from a remote control. No unsightly chains hanging from the ceiling.
]]></description>
										<content:encoded><![CDATA[<p>Software Eats the World?</p>
<p>I’m told software is going to eat the world very soon now. Everything already is, or will be, software based. To some folks, this sounds completely wonderful, but—leaving aside the privacy issues—I still see an elephant in the room with this vision of the future.</p>
<p><strong>Quality.</strong></p>
<p>Let me give you some recent examples.</p>
<p>First, ceiling fans. Modern ceiling fans, in case you didn’t know, don’t rely on the wall switch and pull chains. Instead, they rely on remote controls. This is brilliant—you can dim the light, change the speed of the fan, etc., from a remote control. No unsightly chains hanging from the ceiling.</p>
<p>Well, it’s brilliant so long as it works. I’ve replaced three of the four ceiling fans in my house. Two of the remote controls have somehow attached themselves to two of the three fans. It’s impossible to control one of the fans without also controlling the other. They sometimes get into this entertaining mode where turning one fan off turns the other one on.</p>
<p>For the third one—the one hanging from a 13-foot ceiling—the remote control sometimes operates one of the other fans, and sometimes the fan its supposed to operate. Most of the time it doesn’t seem to do much of anything.</p>
<p>The fan manufacturer—a large, well-known company—mentions this situation in their instructions and points to a FAQ that doesn’t exist. Searching around online I found instructions for solving this problem that involve unwiring the fans and repeating a set of steps 12 times for each fan to correct the situation. These instructions, needless to say, don’t work.</p>
<p>There is no way to reset the remote, nor the connection between the remote and the fan. There is no way to manually select some dip switch so the remote has a specific fan it talks to. Just some mystical software that’s supposed to work (but doesn’t) and no real instructions on how to resolve the problem. The result will be a multi-hour wait on a customer support line, spending hours of my time to sort the problem out, and the joy of climbing (tall) ladders to unwire and wire ceiling fans in four different rooms.</p>
<p>Thinking through possible problems and building software interfaces that take those situations into account … might be a bit more important than we think they are if software is really going to eat the world.</p>
<p>Second, the retailer’s web site—a large retailer with thousands of physical stores across the United States. Twice I’ve ordered from this site, asking to have the item held in the local store so I can pick it up. The site won’t let you order the item for store pickup unless they have it in stock.</p>
<p>The first time they called me to say they couldn’t find the item I ordered, but they found a “newer model” that was a lot less expensive. It was a lot less expensive because it wasn’t the same item. They never did find the item I originally ordered.</p>
<p>The second time they called me to say they couldn’t find the item I ordered. I asked if they could just ship the item to my house when it’s back in stock. “I’m sorry, our system doesn’t allow us to do that …” Several hours later, they called back to tell me they found it, but they cannot reinstate my order—I must place a new order.</p>
<p>Again, software quality strikes … what should be a simple process just isn’t. There will always be mismatches between the state in software and the state in the real world—but design the system so it’s possible to adapt when this happens, rather than shutting down the process and starting over.</p>
<p>Third, I own a car that has all the “bells and whistles,” including an adaptive cruise control system. There are certain situations, however, where this adaptive control does the wrong thing, producing potentially dangerous results. There is no way to set the car to use the non-adaptive cruise control permanently (I called and waited on the phone for several hours to discover this). You can set the non-adaptive cruise control on a per-use basis by going through set of menus to change the settings … <em>while driving.</em></p>
<p>Software quality anyone?</p>
<p><em>Software eats the world</em> might be someone’s ultimate dream—but I suspect that software quality will always be the fly in the ointment. People are not perfect (even in crowds); software is created by people; hence software will always suffer from quality problems.</p>
<p>Maybe a little humility about our ability to make things as complex as we might like because “we can always have software do that bit” would be a good thing—even in the networking world.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14476</post-id>	</item>
		<item>
		<title>Thoughts on Auto Disaggregation and Complexity</title>
		<link>https://rule11.tech/auto-deaggregation/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 15 Nov 2021 18:00:54 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14379</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/auto-desummarization.png" alt="" width="400" height="160" class="alignnone" />

Way in the past, the EIGRP team (including me) had an interesting idea--why not aggregate routes automatically as much as possible, along classless bounds, and then deaggregate routes when we could detect some failure was causing a routing black hole? To understand this concept better, consider the network below.]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone" src="https://i0.wp.com/rule11.tech/wp-content/uploads/auto-desummarization.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" /></p>
<p>Way in the past, the EIGRP team (including me) had an interesting idea&#8211;why not aggregate routes automatically as much as possible, along classless bounds, and then deaggregate routes when we could detect some failure was causing a routing black hole? To understand this concept better, consider the network below.</p>
<p><img data-recalc-dims="1" decoding="async" class="alignnon" src="https://i0.wp.com/rule11.tech/wp-content/uploads/routing-black-hole.png?w=400&#038;ssl=1" alt=""  /></p>
<p>In this network, B and C are connected to four different routers, each of which is advertising a different subnet. In turn, B and C are aggregating these four routes into 2001:db8:3e8:10::/60, and advertising this aggregate towards A. From a control plane state perspective, this is a major win. The obvious gain is that the <em>amount</em> of state is reduced from four routes to one. The less obvious gain is A doesn&#8217;t need to know about any changes in the state for the four destinations aggregated into the /60. Depending on how often these links change state, the reduction in the rate of change is, perhaps, more important than the reduction in the amount of control plane state.</p>
<p>We always know there will be a tradeoff when reducing state; what is the tradeoff here? If C somehow loses its connection to one of the four routers, say the router advertising 11::/64, C&#8217;s 10::/60 aggregate will not change. Since A thinks C still has a route to every subnet within 10::/60, it will continue sending traffic destined to addresses in the 11::/64 towards both B and C. C will not have a route towards these destinations, so it will drop the traffic.</p>
<p>We have a routing black hole.</p>
<p><span style="color: #808080;"><em><a style="color: #808080;" href="https://learning.oreilly.com/videos/abstraction-in-computer/9780136449911">for more information on aggregation in networks, take a look at my livelesson on abstraction in computer networks</a></em></span></p>
<p>This much is pretty simple. The harder part is figuring out to eliminate this routing black hole. Our first choice is to just not aggregate these routes. While you might be cringing right now, this isn&#8217;t such a bad option in many networks. We often underestimate the amount of state and the speed of state change modern routing protocols running on modern processors can support. I&#8217;ve seen networks running IS-IS in a single flooding domain with tens of thousands of routes and thousands of nodes running &#8220;in the wild.&#8221; I&#8217;ve seen IS-IS networks with thousands of nodes and hundreds of thousands of routes running in lab environments. These networks still converge.</p>
<p>But what if we really think we need to reduce the amount and speed of state, so we really need to aggregate these routes?</p>
<p>One solution that has been proposed a number of times through the years is <em>auto disaggregation.</em></p>
<p>In this case, suppose D somehow realizes C cannot reach one of the components of a shared aggregate route. D could simply stop advertising the aggregate, advertising each of the components instead. The question here might be: <em>is this a good idea?</em> Looking at this from the perspective of the SOS triad, the aggregation replaced four routes with a single route. In the auto disaggregation case, the single route change is replaced by four route changes. The amount of state is variable, and in some cases the rate of change in state is actually higher than without the aggregation.</p>
<p>So&#8230;</p>
<p>I don&#8217;t hold that auto disaggregation is either good nor bad&#8212;it just presents a different set of challenges to the network designer. Instead of designing for average rates of change and given table sizes, you can count on much smaller tables, but you might find there are times when the rate of change is dramatically higher than you expect. A good question to ask, before deploying this kind of technology, might be: <em>can I forsee a chain of events that will cause a high enough rate of state change that auto disaggregation is actually more destabilizing than just not summarizing at all in this network?</em></p>
<p>A real danger with auto disaggregation, by the way, is using summarization to dramatically reduce table sizes without understanding how a <em>goldilocks</em> failure (what we used to call in telco a <em>mother&#8217;s day event,</em> or perhaps a <em>black swan)</em> can cascade into widespread failures. If you&#8217;re counting on particular devices in your network only have a dozen or two dozen table entries, but just the right set of failures can cause them to have several thousand entries because of auto disaggregation, what kinds of failures modes should you anticipate? Can you anticipate or mitigate this kind of problem?</p>
<p>The idea of automatically summarizing and disaggregating routes is an interesting study in complexity, state, and optimization. It&#8217;s a good <em>brain exercise</em> in thinking through what-if situations, and carefully thinking about when and where to deploy this kind of thing.</p>
<p>What do you think about this idea? When would you deploy it, where, and why? When and where would you be cautious about deploying this kind of technology?</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14379</post-id>	</item>
		<item>
		<title>Keith&#8217;s Law (1)</title>
		<link>https://rule11.tech/keiths-law-1/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 28 Sep 2021 18:23:04 +0000</pubDate>
				<category><![CDATA[SKILLS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14201</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/keith-pt1.png" alt="" width="400" height="160" class="alignnone" />

I sometimes reference Keith’s Law in my teaching, but I don’t think I’ve ever explained it. Keith’s Law runs something like this:

<blockquote>Any large external step in a system’s capability is the result of many incremental changes within the system.</blockquote>]]></description>
										<content:encoded><![CDATA[<p>I sometimes reference Keith’s Law in my teaching, but I don’t think I’ve ever explained it. Keith’s Law runs something like this:</p>
<blockquote><p>Any large external step in a system’s capability is the result of many incremental changes within the system.</p></blockquote>
<p>The reason incremental changes within a system appear as a single large step to outside observers is the smaller changes are normally hidden by abstraction. This is, in fact, the purpose of abstraction—to hide small changes inside a system from external view. Keith’s law is closely related to Clarke’s third law that “Any sufficiently advanced technology is indistinguishable from magic.” What looks like magic from the outside is really just a bunch of smaller things—each easier to understand on its own—combined into one single “thing” through abstraction.<br />
If you’ve read this far, you’re probably thinking—what does this have to do with network engineering?<br />
Well, several things, really.</p>
<p>First—the network is just an abstraction that moves packets to its users. Moving packets seems so … simple … to network users. You put data in here, and data comes out over there. All the little stuff that goes into making a network work are lost in the abstraction of the virtual connection between two hosts.</p>
<p>If you want users to understand why building a network is hard, you’re going to have to work hard at it. And you’re not likely to succeed—it’s often better just to live with the reality that users aren’t going to understand. Of course, this isn’t necessarily a bad thing, at least until it’s time to buy hardware and software to make all this magic work.</p>
<p>Second—no-one outside the network is ever going to understand the refactoring, simplification, and new features you’re trying to build into the network on their own. Users will only understand these things when they are related to some bigger picture, something they can see beyond the abstraction the network presents.</p>
<p>If you’re going to justify doing new things, you need to do so in terms of “larger things,” things that can be seen from outside the abstraction.</p>
<p>Third—no-one is going to pat you on the back for all the little things that need to be done to deploy a new major service. From the outside, that new service, or new cost savings, or whatever—it’s all just indistinguishable from magic.</p>
<p>Keith’s law is both good and bad. But it also means you need to learn how to frame your work in a way that users, who don’t have access to the inner workings of the network, can understand why you’re doing what you’re doing.</p>
<p>Turning this around, this also means you shouldn’t accept the “magic” of vendor products. That brilliant new capability your vendor is showing you is really made up of a lot of smaller components. The abstraction is just that—an abstraction. If you really want to understand the positive and negative consequences of deploying something new, you need to look beyond the abstraction.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14201</post-id>	</item>
		<item>
		<title>Thoughts on the Collapsed Spine</title>
		<link>https://rule11.tech/thoughts-on-the-collapsed-spine/</link>
					<comments>https://rule11.tech/thoughts-on-the-collapsed-spine/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 21 Sep 2021 17:00:25 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14173</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/collapsed-spine-fg.png" alt="" width="400" height="160" />

One of the designs I’ve been encountering a lot of recently is a “collapsed spine” data center network, as shown in the illustration below.

<img src="https://rule11.tech/wp-content/uploads/collapsed-spine.png" alt="" width="600" height="408" class="alignnone size-full wp-image-14175" />]]></description>
										<content:encoded><![CDATA[<p>One of the designs I’ve been encountering a lot of recently is a “collapsed spine” data center network, as shown in the illustration below.</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/collapsed-spine.png?resize=600%2C408&#038;ssl=1" alt="" width="600" height="408" class="alignnone size-full wp-image-14175" srcset="https://i0.wp.com/rule11.tech/wp-content/uploads/collapsed-spine.png?w=600&amp;ssl=1 600w, https://i0.wp.com/rule11.tech/wp-content/uploads/collapsed-spine.png?resize=400%2C272&amp;ssl=1 400w, https://i0.wp.com/rule11.tech/wp-content/uploads/collapsed-spine.png?resize=150%2C102&amp;ssl=1 150w, https://i0.wp.com/rule11.tech/wp-content/uploads/collapsed-spine.png?resize=588%2C400&amp;ssl=1 588w" sizes="auto, (max-width: 600px) 100vw, 600px" /></p>
<p>In this design, and B are spine routers, while C-F are top of rack switches. The terminology is important here, because C-F are just switches—they don’t route packets. When G sends a packet to H, the packet is switched by C to A, which then routes the packet towards F, which then switches the packet towards H. C and F do not perform an IP lookup, just a MAC address lookup. A and B are responsible for setting the correct next hop MAC address to forward packets through F to H.<br />
What are the positive aspects of this design? Primarily that all processing is handled on the two spine routers—the top of rack switches don’t need to keep any sort of routing table, nor do any IP lookups. This means you can use very inexpensive devices for your ToR. In brownfield deployments, so long as the existing ToR devices can switch based on MAC addresses, existing hardware can be used.</p>
<p>This design also centralizes almost all aspects of network configuration and management on the spine routers. There is little (if anything) configured on the ToR devices.<br />
What about negative aspects? After all, if you haven’t found the tradeoffs, you haven’t looked hard enough. What are they here?</p>
<p>First, I’m struggling to call this a “fabric” at all—it’s more of a mash-up between a traditional two-layer hierarchical design with a routed core and switched access. Two of the points behind a fabric are the fabric doesn’t have any intelligence (all ports are undifferentiated Ethernet) and all the devices in the fabric are the same.</p>
<p>I suppose you could say the topology itself makes it more “fabric-like” than “network-like,” but we’re squinting a bit either way.</p>
<p>The second downside of this design is that it impacts the scaling properties of the fabric. This design assumes you’ll have larger/more intelligent devices in the spine, and smaller/less intelligent devices in the ToR. One of my consistent goals in designing fabrics has always been to push as close to single-sku as possible—use the same device in every position in the fabric. This greatly simplifies instrumentation, troubleshooting, and supply chain management.</p>
<p>One of the primary points of moving from a network in the more traditional sense to a “true fabric” is to radically simplify the network—this design doesn’t seem like it’s as “simple,” on the network side of things, as it could be. Again, something of a “mash-up” of a simpler fabric and a more traditional two-layer hierarchical routed/switched network.</p>
<p>Scale-out is problematic in this design, as well. You’d need to continue pushing cheap/low-intelligence switches along the edge, and adding larger devices in the spine to make this work over time. At some point, say when you have eight or sixteen spines, you’d be managing just as much configuration—and configuration that’s necessarily more complex because you’re essentially managing remote ports rather than local ones—as you would by just moving routing down to the ToR devices. There’s some scale point here with this design where it’s adding overhead and unnecessary complexity to save a bit of money on ToR switches.</p>
<p>When making the choice between OPEX and CAPEX, we should all know which one to pick.</p>
<p>Where would I use this kind of design? Probably in a smaller network (small enough not to use chassis devices in the spine) which will never need to be scaled out. I might use it as a transition mechanism to a full fabric at some point in the future, but I would want a well-designed planned to transition—and I would want it written in stone that this would not be scaled in the future beyond a specific point.</p>
<p>There’s nothing more permanent in the world than temporary government programs and temporary network designs.<br />
If anyone has other thoughts on this design, please leave them in the comments below.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/thoughts-on-the-collapsed-spine/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14173</post-id>	</item>
		<item>
		<title>Russ&#8217; Rules of Network Design</title>
		<link>https://rule11.tech/the-rules-of-network-design/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 14 Sep 2021 17:00:54 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14143</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/rules-of-network-design.png" alt="" width="400" height="160" class="alignnone" />

<a href="https://datatracker.ietf.org/doc/html/rfc1925">We have the twelve truths of networking,</a> and <a href="https://spacecraft.ssl.umd.edu/akins_laws.html">possibly Akin's Laws, </a>but is there a set of rules for network design? I couldn't find one, so I decided to create one, containing 18 laws I've listed below. ]]></description>
										<content:encoded><![CDATA[<p><a href="https://datatracker.ietf.org/doc/html/rfc1925">We have the twelve truths of networking,</a> and <a href="https://spacecraft.ssl.umd.edu/akins_laws.html">possibly Akin&#8217;s Laws, </a>but is there a set of rules for network design? I couldn&#8217;t find one, so I decided to create one, containing 18 laws I&#8217;ve listed below. </p>
<p><strong>Russ&#8217; Rules of Network Design</strong></p>
<ol>
<li>If you haven&#8217;t found the tradeoffs, you haven&#8217;t looked hard enough.</li>
<li>Design is an iterative process. You probably need one more iteration than you&#8217;ve done to get it right.</li>
<li>A design isn&#8217;t finished when everything needed is added, it&#8217;s finished when everything possible is taken away.</li>
<li>Good design isn&#8217;t making it work, it&#8217;s making it fail gracefully.</li>
<li>Effective, elegant, efficient. All other orders are incorrect.</li>
<li>Don&#8217;t fix blame; fix problems.</li>
<li>Local and global optimization are mutually exclusive.</li>
<li>Reducing state always reduces optimization someplace.</li>
<li>Reducing state always creates interaction surfaces; shallow and narrow interaction surfaces are better than deep and broad ones.</li>
<li>The easiest place to improve or screw up a design is at the interaction surfaces.</li>
<li>The optimum is almost always in the middle someplace; eschew extremes.</li>
<li>Sometimes its just better to start over.</li>
<li>There are a handful of right solutions; there is an infinite array of wrong ones.</li>
<li>You are not immensely smarter than anyone else in networking.</li>
<li>A bad design with a good presentation is doomed eventually; a good design with a bad presentation is doomed immediately.</li>
<li>You can only know your part of the system and a little bit about the parts around your part. The rest is rumor and pop psychology.</li>
<li>To most questions the correct initial answer should be &#8220;how many balloons fit in a bag?&#8221;</li>
<li>Virtual environments still have hard physical limits.</li>
</ol>
<p><a href="https://rule11.tech/wp-content/uploads/rules-of-networking.pdf">You can find a handy printable version here.</a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14143</post-id>	</item>
		<item>
		<title>Marketing Wins</title>
		<link>https://rule11.tech/marketing-wins/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 30 Aug 2021 18:07:49 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[SECURITY]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14097</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/marketing-wins.png" alt="" width="400" height="160" />

Off-topic post for today …

In the battle between marketing and security, marketing always wins. This topic came to mind after reading an article on using email aliases to control your email—

<blockquote><a href="https://www.popsci.com/set-up-email-alias/">For example, if you sign up for a lot of email newsletters, consider doing so with an alias. That way, you can quickly filter the incoming messages sent to that alias—these are probably low-priority, so you can have your provider automatically apply specific labels, mark them as read, or delete them immediately.</a></blockquote>]]></description>
										<content:encoded><![CDATA[<p>Off-topic post for today …</p>
<p>In the battle between marketing and security, marketing always wins. This topic came to mind after reading an article on using email aliases to control your email—</p>
<blockquote><p><a href="https://www.popsci.com/set-up-email-alias/">For example, if you sign up for a lot of email newsletters, consider doing so with an alias. That way, you can quickly filter the incoming messages sent to that alias—these are probably low-priority, so you can have your provider automatically apply specific labels, mark them as read, or delete them immediately.</a></p></blockquote>
<p>One of the most basic things you can do to increase your security against phishing attacks is to have two email addresses, one you give to financial institutions and another one you give to “everyone else.” It would be nice to have a third for newsletters and marketing, but this won’t work in the real world. Why?</p>
<p>Because it’s very rare to find a company that will keep <em>two</em> email addresses on file for you, one for “business” and another for “marketing.” To give specific examples—my mortgage company sends me both marketing messages in the form of a “newsletter” as well as information about mortgage activity. They only keep one email address on file, though, so they both go to a single email address.</p>
<p>A second example—even worse in my opinion—is PayPal. Whenever you buy something using PayPal, the vendor gets the email address associated with the account. That’s fine—they need to send me updates on the progress of the item I ordered, etc. But they also use this email address to send me newsletters … and PayPal sends any information about account activity <em>to the same email address.</em></p>
<p>Because of the way these things are structured, I cannot separate information about my account from newsletters, phishing attacks, etc. Since modern Phishing campaigns are using AI to create the most realistic emails possible, and most folks can’t spot a Phish anyway, you’d think banks and financial companies would want to give their users the largest selection of tools to fight against scams.</p>
<p>But they don’t. Why?</p>
<p>Because—if your financial information is mingled with a marketing newsletter, you’ll open the email to see what’s inside … you’ll pay attention. Why spend money helping your users <em>not</em> pay attention to your marketing materials by separating them from “the important stuff?”</p>
<p>When it comes to marketing versus security, marketing always wins. Somehow, we in IT need to do better than this.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14097</post-id>	</item>
		<item>
		<title>It always takes longer than you think</title>
		<link>https://rule11.tech/it-always-takes-longer-than-you-think/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 23 Aug 2021 17:00:43 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14073</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/1925-rule9a.png" alt="" width="400" height="160" class="alignnone" />

Everyone is aware that it always takes longer to find a problem in a network than it should. Moving through the troubleshooting process often feels like swimming in molasses—you’re pulling hard, and progress is being made, but never fast enough or far enough to get the application back up and running before that crucial deadline. The “swimming in molasses effect” doesn’t end when the problem is found out, either—repairing the problem requires juggling a thousand variables, most of which are unknown, combined with the wit and sagacity of a soothsayer to work with vendors, code releases, and unintended consequences.
]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/1925-rule9a.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" class="alignnone" /></p>
<p>Everyone is aware that it always takes longer to find a problem in a network than it should. Moving through the troubleshooting process often feels like swimming in molasses—you’re pulling hard, and progress is being made, but never fast enough or far enough to get the application back up and running before that crucial deadline. The “swimming in molasses effect” doesn’t end when the problem is found out, either—repairing the problem requires juggling a thousand variables, most of which are unknown, combined with the wit and sagacity of a soothsayer to work with vendors, code releases, and unintended consequences.</p>
<p>It’s enough to make a network engineer want to find a mountain top and assume an all-knowing pose—even if they don’t know anything at all.<br />
The problem of taking longer, though, applies in every area of computer networking. It takes too long for the packet to get there, it takes to long for the routing protocol to converge, it takes too long to support a new application or server. It takes so long to create and validate a network design change that the hardware, software and processes created are obsolete before they are used.</p>
<p>Why does it always take too long? A short story often told to me by my Grandfather—a farmer—might help.<br />
One morning a farmer got early in the morning, determined to throw some hay down to the horses in the stable. While getting dressed, he noticed one of the buttons on his shirt was loose. “No time for that now,” he thought, “I’ll deal with it later.” Getting out to the barn, he climbed up the ladder to the loft, and picked up a pitchfork. When he drove the fork into the hay, the handle broke.</p>
<p>He sighed, took the broken pieces down the ladder, and headed over to his shed to replace the handle—but when he got there, he realized he didn’t have a new handle that would fit. Sighing again, he took the broken pieces to his old trusty truck and headed into town—arriving before the hardware store opened. “Well, I’m already here, might as well get some coffee,” he thought, so he headed to the diner. After a bit, he headed to the store to buy a handle—but just as he walked out past the door, the loose button caught on the handle, popping off. </p>
<p>It took a few minutes to search for the lost button, but he found it and headed over to the cleaners to have it sewn back on “real fast.” Well, he couldn’t wander around town in his undershirt, so he just stepped next door to the barber’s, where there were a few friendly games of checkers already in progress. He played a couple of games, then the barber came out to remind him that he needed a haircut (a thing barbers tend to do all the time for some reason), so he decided to have it done. “Might was well not waste the time in town now I’m here,” he thought.</p>
<p>The haircut finished, he went back to get his shirt, and realized it was just about lunch. Back to the diner again. Once he was done, he jumped in his truck and headed back to the farm. And then he realized—the horses were hungry, the hay hadn’t been pitched, and … his pitchfork was broken. </p>
<p>And this is why it always takes longer than it should to get anything done with a network. You take the call and listen to the customer talk about what the application is doing, which takes a half an hour. You then think about what might be wrong, perhaps kicking a few routers “just for good measure” before you start troubleshooting in earnest. You look for a piece of information you need to understand the problem, only to find the telemetry system doesn’t collect that data “yet”—so you either open a ticket (a process that takes a half an hour), or you “fix it now” (which takes several hours). Once you have that information, you form a theory, so you telnet into a network device to check on a few things… only to discover the device you’re looking at has the wrong version of code… This requires a maintenance window to fix, so you put in a request&#8230;</p>
<p>Once you even figure out what the problem is, you encounter a series of hurdles lined up in front of you. The code needs to be upgraded, but you have to contact the vendor to make certain the new code supports all the “stuff” you need. The configuration has to be changed, but you have to determine if the change will impact all the other applications on the network. You have to juggle a seemingly infinite number of unintended consequences in a complex maze of software and hardware and people and processes.</p>
<p>And you wonder, the entire time, why you just didn’t learn to code and become a backend developer, or perhaps a mountain-top guru.</p>
<p>So the next time you think it’s taking to long to fix the problem, or design a new addition to the network, or for the vendor to create that perfect bit of code, remember the farmer, and the button that left the horses hungry. </p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14073</post-id>	</item>
		<item>
		<title>The Centralization of the Internet</title>
		<link>https://rule11.tech/the-centralization-of-the-internet/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 16 Aug 2021 17:00:09 +0000</pubDate>
				<category><![CDATA[ON THE NET]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14044</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/internet-centralization.png" alt="" width="400" height="160" class="alignnone" />

My article on Internet centralization just published over at The Public Discourse&#8212;

<blockquote><a href="https://www.thepublicdiscourse.com/2021/08/77139/">Most of the Internet’s traffic now flows through the networks of a few large companies rather than a multitude of small transit providers, and the Internet’s physical infrastructure is being reshaped to meet this new reality. But relying on a few providers to host all the content on the Internet makes it possible for just a few companies to shut down entire services or control speech.</a></blockquote>

]]></description>
										<content:encoded><![CDATA[<p>My article on Internet centralization just published over at The Public Discourse&#8212;</p>
<blockquote><p><a href="https://www.thepublicdiscourse.com/2021/08/77139/">Most of the Internet’s traffic now flows through the networks of a few large companies rather than a multitude of small transit providers, and the Internet’s physical infrastructure is being reshaped to meet this new reality. But relying on a few providers to host all the content on the Internet makes it possible for just a few companies to shut down entire services or control speech.</a></p></blockquote>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14044</post-id>	</item>
		<item>
		<title>The Grass is Always Greener</title>
		<link>https://rule11.tech/the-grass-is-always-greener/</link>
					<comments>https://rule11.tech/the-grass-is-always-greener/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 09 Aug 2021 18:10:15 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=14015</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/grass-greener.png" alt="" width="400" height="160" class="alignnone" />

This last week I was talking to someone at a small startup that intends to eliminate all the complex routing from campus networks. In the past, when reading blog posts about Kubernetes, I've read about how it was designed to eliminate routing protocols because "routing protocols are so complex." 

Color me skeptical.]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/grass-greener.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" class="alignnone" /></p>
<p>This last week I was talking to someone at a small startup that intends to eliminate all the complex routing from campus networks. In the past, when reading blog posts about Kubernetes, I&#8217;ve read about how it was designed to eliminate routing protocols because &#8220;routing protocols are so complex.&#8221; </p>
<p>Color me skeptical.</p>
<p>There are two reasons for complexity in a design. The first is you&#8217;re solving a hard problem. The second is you&#8217;ve made bad design choices in the past, and you&#8217;re pasting complexity on top to solve some perceived problem (whether perceived or real).</p>
<p>The problem with all this talk about building something that&#8217;s &#8220;less complex&#8221; is people tend to see complexity of the first kind and think, &#8220;we can get rid of that complexity if we start over.&#8221; Failing to understand the past before building the future is a recipe for repeated failures of the same kind. Building a network without a distributed routing protocol hasn&#8217;t been tried before either, right? Well, yes, it has &#8230; We either forget how it turned out, or we say &#8220;well, that&#8217;s not the same thing I&#8217;m talking about here&#8221; (just like &#8220;real socialism hasn&#8217;t ever been tried&#8221;).</p>
<p>Even worse, they think they get rid of second and third kinds of complexity by <em>starting over,</em> or <em>getting the humans out of the decision-making loop,</em> or <em>focusing on the data.</em> Our modern penchant for relying &#8220;the data,&#8221; without ever thinking about the source of the data or how the data has been shaped and interpreted, is truly breathtaking.</p>
<p>They look over the horizon, see an unspoiled field, and think &#8220;the grass really is greener on the other side.&#8221; </p>
<p>Get rid of all those complex dynamic routing protocols &#8230; get rid of all those humans making decisions, so the decisions are &#8220;data driven&#8221; &#8230; and everything will be so much better.</p>
<p>Adding complexity to solve hard real-world problems is just the way things are, and they will always be, so the first reason for complexity will always be with us. People make mistakes, don&#8217;t see into the future perfectly, or just don&#8217;t have a perfect understanding of the system (technical debt), so the second kind of complexity will always be with us. You can&#8217;t &#8220;fix&#8221; people<em>&#8212;God save us from those who think they can.</em> The grass isn&#8217;t always greener&#8212;it just always looks that way. </p>
<p>What&#8217;s the practical upshot? Networks are always going to be complex. It&#8217;s just the nature of the problem being solved. </p>
<p>We add complexity because we fail to ask the right questions, we don&#8217;t understand the system, or we fail to do good design. The solution isn&#8217;t to seek out a greener field &#8220;out there,&#8221; but rather to make the field we currently live in greener by asking the right questions and reducing complexity through good design. Sometimes you might even need to start over with a new network &#8230; but when you start thinking about starting over with a newly designed set of protocols because the old ones are &#8220;too complex,&#8221; you need to ask how those old ones got that way, and how you&#8217;re going to stop the new ones from getting to the same place.</p>
<p>The grass is always greener because you looking at it through green-colored lenses just as the new grass is in its full flush, and before the weeds have had a chance to take over. </p>
<p>Learn how old things worked before you fall for some new &#8220;modern wonder&#8221; that&#8217;s going to solve every problem. The complexity in old things will show you where you can expect to find complexity grow up in new things.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/the-grass-is-always-greener/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">14015</post-id>	</item>
		<item>
		<title>It Always Takes Too Long</title>
		<link>https://rule11.tech/takes-too-long/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 02 Aug 2021 17:00:24 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13992</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/too-slow.png" alt="" width="400" height="160" class="alignnone" />

It always takes longer to find a problem than it should. Moving through the troubleshooting process often feels like swimming in molasses—it's never fast enough or far enough to get the application back up and running before that crucial deadline. The “swimming in molasses effect” doesn’t end when the problem is found out, either—repairing the problem requires juggling a thousand variables, most of which are unknown, combined with the wit and sagacity of a soothsayer to work with vendors, code releases, and unintended consequences.
]]></description>
										<content:encoded><![CDATA[<p>It always takes longer to find a problem than it should. Moving through the troubleshooting process often feels like swimming in molasses—it&#8217;s never fast enough or far enough to get the application back up and running before that crucial deadline. The “swimming in molasses effect” doesn’t end when the problem is found out, either—repairing the problem requires juggling a thousand variables, most of which are unknown, combined with the wit and sagacity of a soothsayer to work with vendors, code releases, and unintended consequences.</p>
<p>It’s enough to make a network engineer want to find a mountain top and assume an all-knowing pose—even if they don’t know anything at all.<br />
The problem of taking longer, though, applies in every area of computer networking. It takes too long for the packet to get there, it takes to long for the routing protocol to converge, it takes too long to support a new application or server. It takes so long to create and validate a network design change that the hardware, software and processes created are obsolete before they are used.</p>
<p>Why does it always take too long? A short story often told to me by my Grandfather—a farmer—might help.</p>
<p>One morning a farmer got early in the morning, determined to throw some hay down to the horses in the stable. While getting dressed, he noticed one of the buttons on his shirt was loose. “No time for that now,” he thought, “I’ll deal with it later.” Getting out to the barn, he climbed up the ladder to the loft, and picked up a pitchfork. When he drove the fork into the hay, the handle broke.</p>
<p>He sighed, took the broken pieces down the ladder, and headed over to his shed to replace the handle—but when he got there, he realized he didn’t have a new handle that would fit. Sighing again, he took the broken pieces to his old trusty truck and headed into town—arriving before the hardware store opened. “Well, I’m already here, might as well get some coffee,” he thought, so he headed to the diner. After a bit, he headed to the store to buy a handle—but just as he walked out past the door, the loose button caught on the handle, popping off.<br />
It took a few minutes to search for the lost button, but he found it and headed over to the cleaners to have it sewn back on “real fast.” Well, he couldn’t wander around town in his undershirt, so he just stepped next door to the barber’s, where there were a few friendly games of checkers already in progress. He played a couple of games, then the barber came out to remind him that he needed a haircut (a thing barbers tend to do all the time for some reason), so he decided to have it done. “Might was well not waste the time in town now I’m here,” he thought.</p>
<p>The haircut finished, he went back to get his shirt, and realized it was just about lunch. Back to the diner again. Once he was done, he jumped in his truck and headed back to the farm. And then he realized—the horses were hungry, the hay hadn’t been pitched, and … his pitchfork was broken. </p>
<p>And this is why it always takes longer than it should to get anything done with a network. You take the call and listen to the customer talk about what the application is doing, which takes a half an hour. You then think about what might be wrong, perhaps kicking a few routers “just for good measure” before you start troubleshooting in earnest. You look for a piece of information you need to understand the problem, only to find the telemetry system doesn’t collect that data “yet”—so you either open a ticket (a process that takes a half an hour), or you “fix it now” (which takes several hours). Once you have that information, you form a theory, so you telnet into a network device to check on a few things… only to discover the device you’re looking at has the wrong version of code… This requires a maintenance window to fix, so you put in a request&#8230;</p>
<p>Once you even figure out what the problem is, you encounter a series of hurdles lined up in front of you. The code needs to be upgraded, but you have to contact the vendor to make certain the new code supports all the “stuff” you need. The configuration has to be changed, but you have to determine if the change will impact all the other applications on the network. You have to juggle a seemingly infinite number of unintended consequences in a complex maze of software and hardware and people and processes.</p>
<p>And you wonder, the entire time, why you just didn’t learn to code and become a backend developer, or perhaps a mountain-top guru.</p>
<p>So the next time you think it’s taking to long to fix the problem, or design a new addition to the network, or for the vendor to create that perfect bit of code, remember the farmer, and the button that left the horses hungry. </p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13992</post-id>	</item>
		<item>
		<title>Leveraging Similarities</title>
		<link>https://rule11.tech/leveraging-similarities/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 26 Jul 2021 17:00:50 +0000</pubDate>
				<category><![CDATA[SKILLS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13959</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/leveraging-similarities.png" alt="" width="400" height="160" class="alignnone" />

We tend to think every technology and every product is roughly unique&#8212;so we tend to stay up late at night looking at packet captures and learning how to configure each product individually, and chasing new ones as if they are the brightest new idea (or, in marketing terms, the best thing since sliced bread). Reality check: <em>they aren't.</em> This applies across life, of course, but especially to technology.]]></description>
										<content:encoded><![CDATA[<p>We tend to think every technology and every product is roughly unique&#8212;so we tend to stay up late at night looking at packet captures and learning how to configure each product individually, and chasing new ones as if they are the brightest new idea (or, in marketing terms, the best thing since sliced bread). Reality check: <em>they aren&#8217;t.</em> This applies across life, of course, but especially to technology. From a recent article&#8212;</p>
<blockquote><p><a href="https://opensource.com/article/21/4/compare-programming-languages">Whenever I start learning a new programming language, I focus on defining variables, writing a statement, and evaluating expressions. Once I have a general understanding of those concepts, I can usually figure out the rest on my own. Most programming languages have some similarities, so once you know one programming language, learning the next one is a matter of figuring out the unique details and recognizing the differences.</a></p></blockquote>
<p>RFC1925 rule 11 states&#8212;</p>
<blockquote><p><a href="https://datatracker.ietf.org/doc/html/rfc1925">Every old idea will be proposed again with a different name and a different presentation, regardless of whether it works.</a></p></blockquote>
<p>Rule 11 isn&#8217;t just a funny saying&#8212;rule 11 is your friend. If want to learn new things quickly, learn rule 11 first. A basic understanding of the theory of networking will carry across all products, all marketing campaigns, and all protocols.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13959</post-id>	</item>
		<item>
		<title>Whatever it is, you need more (RFC1925 rule 9)</title>
		<link>https://rule11.tech/whatever-it-is-you-need-more-rfc1925-rule-9/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 19 Jul 2021 17:00:08 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13929</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/rfc1925-rule9.png" alt="" width="400" height="160" class="alignnone" />

There is never enough. Whatever you name in the world of networking, there is simply not enough. There are not enough ports. There is not enough speed. There is not enough bandwidth. Many times, the problem of “not enough” manifests itself as “too much”—there is too much buffering and there are too many packets being dropped. Not so long ago, the Internet community decided there were not enough IP addresses and decided to expand the address space from 32 bits in IPv4 to 128 bits in IPv6.]]></description>
										<content:encoded><![CDATA[<p>There is never enough. Whatever you name in the world of networking, there is simply not enough. There are not enough ports. There is not enough speed. There is not enough bandwidth. Many times, the problem of “not enough” manifests itself as “too much”—there is too much buffering and there are too many packets being dropped. Not so long ago, the Internet community decided there were not enough IP addresses and decided to expand the address space from 32 bits in IPv4 to 128 bits in IPv6. The IPv6 address space is almost unimaginably huge—2 to the 128<sup>th</sup> power is about 340 trillion, trillion, trillion addresses. That is enough to provide addresses to stacks of 10 billion computers blanketing the entire Earth. Even a single subnet of this space is enough to provide addresses for a full data center where hundreds of virtual machines are being created every minute; each /64 (the default allocation size for an IPv6 address) contains 4 billion IPv4 address spaces.</p>
<p>But… what if the current IPv6 address space simply is not enough? Engineers working in the IETF have created two different solutions over the years for just this eventuality. In 1994 RFC1606 provided a “letter from the future” describing the eventual deployment of IPv9, which was (in this eventual future) coming to the end of its useful lifetime because the Internet was running out of numbers. In RFC1606, it is noted that IPv9’s 49 levels of hierarchy had proven popular, but not all the levels had found a use. The highest level in use seems to be level 39, which was being used to address individual subatomic particles. Part of the dwindling address space considered in RFC1606 was the default allocation of about 1 billion addresses to each household. As the number of homes built increased globally, the IPv9 address space came under increasing pressure. The allocation of groups of addresses to recyclable items was not helpful, either, regardless of the ability to multicast “all cardboard items” in a recycling bin.</p>
<p>An alternate proposal, written many years later, is RFC8135, which considers <em>complex addressing</em> in IPv6. RFC8135 begins by describing the different ways in which a set of numbers, such as the 128-bit space in the IPv6 address, can be represented, including integers, prime, and composite. Each of these are considered in some detail, but eventually rejected for various reasons. For instance, integer (or fixed point) addresses are rejected because the location of a host is not fixed, so fixed point addresses are a poor representation of the host. Prime addresses are likewise rejected because they take too long to compute, and composite addresses are rejected because they are too difficult to differentiate from prime addresses.</p>
<p>RFC8135 proposes a completely different way of looking at the 128-bits available in the IPv6 address space. Rather than treating IPv6’s address space as a simple integer, this specification advocates for treating it as a floating number. This allows for a much larger space, particularly as aggregation can be indicated through scientific notation. The main problem the authors note with this proposal is users may believe that when they assign a floating address to their device, the device itself thereby becomes waterproof and <em>floating.</em> The authors advice users count on a <em>waterproofing app,</em> available in most app stores, for this function, rather than counting on the floating address. The authors also note duct tape can be used to permanently attach a floating address to a fixed device, if needed.</p>
<p>The danger, of course, is that in the quest for “more,” network designers, network operators, and protocol designers could end up embracing the ridiculous. It all brings to mind the point Andrew Tanenbaum made in a standard work on Networking, <em>Computer Networks.</em> Tanenbaum calculates the bandwidth of a station wagon full of magnetic tape (specifically VHS format) backups. After considering the amount of time it would take to drive the station wagon across the continental United States, he concludes the vehicle has more bandwidth than any link available at that time. A similar calculation could be made with a mid-sized shipping box available from any overnight package carrier, filled with SSD drives (or similar). The conclusion, according to Dr. Tanenbaum, is networks are a sop to human impatience.</p>
<p>As there is no bound to human impatience, no matter how much you have, as RFC1925 says, you will always need more.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13929</post-id>	</item>
		<item>
		<title>NATs, PATs, and Network Hygiene</title>
		<link>https://rule11.tech/nats-pats-and-network-hygiene/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 13 Jul 2021 17:00:14 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[SECURITY]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13906</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/nat-hygiene.png" alt="" width="400" height="160" class="alignnone" />

While reading a research paper on address spoofing from 2019, I ran into this on NAT (really PAT) failures—

<blockquote><a href="https://dl.acm.org/doi/10.1145/3319535.3354232">In the first failure mode, the NAT simply forwards the packets with the spoofed source address (the victim) intact … In the second failure mode, the NAT rewrites the source address to the NAT’s publicly routable address, and forwards the packet to the amplifier. When the server replies, the NAT system does the inverse translation of the source address, expecting to deliver the packet to an internal system. However, because the mapping is between two routable addresses external to the NAT, the packet is routed by the NAT towards the victim.</a></blockquote>]]></description>
										<content:encoded><![CDATA[<p>While reading a research paper on address spoofing from 2019, I ran into this on NAT (really PAT) failures—</p>
<blockquote><p><a href="https://dl.acm.org/doi/10.1145/3319535.3354232">In the first failure mode, the NAT simply forwards the packets with the spoofed source address (the victim) intact … In the second failure mode, the NAT rewrites the source address to the NAT’s publicly routable address, and forwards the packet to the amplifier. When the server replies, the NAT system does the inverse translation of the source address, expecting to deliver the packet to an internal system. However, because the mapping is between two routable addresses external to the NAT, the packet is routed by the NAT towards the victim.</a></p></blockquote>
<p>The authors state 49% of the NATs they discovered in their investigation of spoofed addresses fail in one of these two ways. From what I remember way back when the first NAT/PAT device (the PIX) was deployed in the real world (I worked in TAC at the time), there was a lot of discussion about what a firewall should do with packets sourced from addresses not indicated anywhere.</p>
<p>If I have an access list including 192.168.1.0/24, and I get a packet sourced from 192.168.2.24, what should the NAT do? Should it forward the packet, assuming it’s from some valid public IP space? Or should it block the packet because there’s no policy covering this source address?</p>
<p>This is similar to the discussion about whether BGP speakers should send routes to an external peer if there is no policy configured. The IETF (though not all vendors) eventually came to the conclusion that BGP speakers should not advertise to external peers without some form of policy configured.</p>
<p>My instinct is the NATs here are doing the right thing—these packets should be forwarded—but network operators should be aware of this failure mode and <em>configure their intentions explicitly.</em> I suspect most operators don’t realize this is the way most NAT implementations work, and hence they aren’t explicitly filtering source addresses that don’t fall within the source translation pool.</p>
<p>In the real world, there should also be a box just outside the NATing device that’s running unicast reverse path forwarding checks. This would resolve these sorts of spoofed packets from being forwarding into the DFZ—but uRPF is rarely implemented by edge providers, and most edge connected operators (enterprises) don’t think about the importance of uRPF to their security.</p>
<p>All this to say—if you’re running a NAT or PAT, make certain you understand how it works. Filters are tricky in the best of circumstances. NAT and PATs just make filters trickier.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13906</post-id>	</item>
		<item>
		<title>Details and Complexity</title>
		<link>https://rule11.tech/details-and-complexity/</link>
					<comments>https://rule11.tech/details-and-complexity/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 29 Jun 2021 01:00:49 +0000</pubDate>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13852</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/details-and-complexity.png" alt="" width="400" height="160" />

What is the first thing almost every training course in routing protocols begin with? <em>Building adjacencies.</em> What is considered the “deep stuff” in routing protocols? <em>Knowing packet formats and processes down to the bit level.</em> What is considered the place where the rubber meets the road? <em>How to configure the protocol.</em>

I’m not trying to cast aspersions at widely available training, but I sense we have this all wrong—and this is a sense I’ve had ever since my first book was released in 1999. It’s always hard for me to put my finger on why I consider this way of thinking about network engineering less-than-optimal, or why we approach training this way.]]></description>
										<content:encoded><![CDATA[<p>What is the first thing almost every training course in routing protocols begin with? <em>Building adjacencies.</em> What is considered the “deep stuff” in routing protocols? <em>Knowing packet formats and processes down to the bit level.</em> What is considered the place where the rubber meets the road? <em>How to configure the protocol.</em></p>
<p>I’m not trying to cast aspersions at widely available training, but I sense we have this all wrong—and this is a sense I’ve had ever since my first book was released in 1999. It’s always hard for me to put my finger on why I consider this way of thinking about network engineering less-than-optimal, or why we approach training this way.</p>
<p>This, however, is one thing I think is going on here—</p>
<blockquote><p><a href="https://ndupress.ndu.edu/Portals/68/Documents/jfq/jfq-92/jfq-92.pdf">The typical program aims to counter the inherent complexity of the decision by providing in-depth information. By providing such extremely detailed and complex information, these interventions try to enable people to make perfect decisions.</a></p></blockquote>
<p>We believe that by knowing ever-deeper reaches of detail about a protocol, we are not only more educated engineers, but we will be able to make better decisions in the design and troubleshooting spaces.</p>
<p>To some degree, we think we are <em>managing the complexity</em> of the protocol by “making our knowledge practical”—by knowing the bits, bytes, and configurations. This natural tendency to “dig in,” to learn more detail, turns out to be counterproductive. Continuing from the same article—</p>
<blockquote><p>The scientific opinion of many psychologists and behavioral scientists suggests the key to time-sensitive decision making in complex and chaotic situations is simplicity, not complexity. Simple-to-remember rules of thumb, or heuristics, speed the cognitive process, enabling faster decisionmaking and action. Recognizing that heuristics have limitations and are not a substitute for basic research and analysis, they nevertheless help break complexity-induced paralysis and support the development of good plans that can achieve timely and acceptable results. The best heuristics capture useful information in an intuitive, easy-to-recall way. Their utility is in assisting decision makers in complex and chaotic situations to make better and timelier decisions.</p></blockquote>
<p>Knowing why a protocol works the way it does—understanding what it’s doing and why—from an abstract perspective is, I believe, a more important skill for the average network engineer than knowing the bits and bytes—or the configuration.</p>
<p>Abstract correctly&#8212;but abstract more. Get back to the basics and know why things work the way they do. It&#8217;s easier to fill in the details if you know the how and why.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/details-and-complexity/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13852</post-id>	</item>
		<item>
		<title>It&#8217;s Most Complicated than You Think (RFC1925, Rule 8)</title>
		<link>https://rule11.tech/rfc9125-rule8/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 14 Jun 2021 17:00:47 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13810</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/rfc1925-8.png" alt="" width="400" height="160" />

It’s not unusual in the life of a network engineer to go entire weeks, perhaps even months, without “getting anything done.” This might seem odd for those who do not work in and around the odd combination of layer 1, layer 3, layer 7, and layer 9 problems network engineers must span and understand, but it’s normal for those in the field. For instance, a simple request to support a new application might require the implementation of some feature, which in turn requires upgrading several thousand devices, leading to the discovery that some number of these devices simply do not support the new software version, requiring a purchase order and change management plan to be put in place to replace those devices, which results in … The chain of dominoes, once it begins, never seems to end.]]></description>
										<content:encoded><![CDATA[<p>It’s not unusual in the life of a network engineer to go entire weeks, perhaps even months, without “getting anything done.” This might seem odd for those who do not work in and around the odd combination of layer 1, layer 3, layer 7, and layer 9 problems network engineers must span and understand, but it’s normal for those in the field. For instance, a simple request to support a new application might require the implementation of some feature, which in turn requires upgrading several thousand devices, leading to the discovery that some number of these devices simply do not support the new software version, requiring a purchase order and change management plan to be put in place to replace those devices, which results in … The chain of dominoes, once it begins, never seems to end.</p>
<p>Or, as those who have dealt with these problems many times might say, <em>it is more complicated than you think.</em> This is such a useful phrase, in fact, it has been codified as a standard rule of networking in RFC1925 (rule 8, to be precise).</p>
<p>Take, for instance, the problem of sending documents through electronic mail—in the real world, there are various mechanisms available to group documents, so the recipient understands what documents go together as a set, which ones are separate—staples, paperclips, binders, folders, etc. In the virtual world, however, documents are just a big blob of bits. How does anyone know which documents go with which in this situation? The obvious solution is to create electronic versions of staples and paperclips, as described in RFC1927. This only <em>seems</em> simple, however; it is more complicated than you think.</p>
<p>For instance, how do you know someone along the document transmission path has not altered the staples and/or paper clips? To prevent staple tampering, electronic staples must be cryptographically signed in some way. In the real world, paper clips (in particular) are removed from documents and re-used to save money and resources. Likewise, there must be some process to discover unused digital document sets so the paper clips may be removed and placed in some form of storage for reuse. Some people like to use differently colored staples or paperclips; how should these be represented in the digital world? RFC1927 describes MIME labels to resolve most of these problems, but there is one final problem that brings the complexity of grouping electronic documents to an entirely new level: metadata creep. What happens when the amount of data required to describe the staple or paperclip becomes larger than the documents being grouped?</p>
<p>Something as simple as representing characters in a language can often be more complex than it might initially seem. RFC5242 attempts to resolve the complexity of the many available encoding schemes with a single coding scheme. Rather than assigning each symbol within a language to a single number within a number space, like ASCII and UNICODE do, however, RFC5242 suggests creating a set of codes which describe how a character looks, rather than what it stands for. This allows the authors to use four principles—if it looks alike, it is alike; if it is the same thing, it is the same thing; san-serif is preferred; combine characters rather than creating new ones where possible—to create a simplified way to describe any possible character in virtually any “Latin” language. The result requires a bit more space to store in some cases, and is more difficult to process, but it is simpler at least from some perspective.</p>
<p>RFC5242 reminds me of a protocol custom-developed for an application I once had to troubleshoot—the entire protocol was sent in <em>actual ASCII text.</em> At least it was simpler to read on the network packet capture tool. There are, of course, many other examples of things being more complex than initially thought in the networking world—which is probably a good thing, because it means those many reports of the demise of the network engineer are probably greatly exaggerated.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13810</post-id>	</item>
		<item>
		<title>Illusory Correlation and Security</title>
		<link>https://rule11.tech/illusory-correlation-and-security/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 31 May 2021 17:00:53 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[SECURITY]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13771</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/illusory-correlation.png" alt="" width="400" height="160" class="alignnone" />

Fear sells. Fear of missing out, fear of being an imposter, fear of crime, fear of injury, fear of sickness … we can all think of times when people we know (or worse, a people in the throes of madness of crowds) have made really bad decisions because they were afraid of something. Bruce Schneier has documented this a number of times. For instance: <a href="https://www.schneier.com/essays/archives/2013/05/its_smart_politics_t.html">“it’s smart politics to exaggerate terrorist threats”</a>  and “<a href="https://www.schneier.com/blog/archives/2009/11/public_reaction.html">fear makes people deferential, docile, and distrustful, and both politicians and marketers have learned to take advantage of this.”</a>]]></description>
										<content:encoded><![CDATA[<p><strong>Fear sells.</strong> Fear of missing out, fear of being an imposter, fear of crime, fear of injury, fear of sickness … we can all think of times when people we know (or worse, a people in the throes of madness of crowds) have made really bad decisions because they were afraid of something. Bruce Schneier has documented this a number of times. For instance: <a href="https://www.schneier.com/essays/archives/2013/05/its_smart_politics_t.html">“it’s smart politics to exaggerate terrorist threats”</a>  and “<a href="https://www.schneier.com/blog/archives/2009/11/public_reaction.html">fear makes people deferential, docile, and distrustful, and both politicians and marketers have learned to take advantage of this.”</a> Here is a paper <a href="https://politicalscience.osu.edu/faculty/jmueller/bathtubs8APSA.pdf">comparing the risk of death in a bathtub to death because of a terrorist attack</a>—bathtubs win.</p>
<p>But while fear sells, the desire to appear unafraid also sells—and it conditions people’s behavior much more than we might think. For instance, we often say of surveillance “if you have done nothing wrong, you have nothing to hide”—a bit of meaningless bravado. What does this latter attitude—“I don’t have anything to worry about”—cause in terms of security?</p>
<p><a href="https://sauvikdas.com/uploads/paper/pdf/10/p1416-das.pdf">Several attempts at researching this phenomenon have come to the same conclusion:</a> average users will often intentionally <em>not</em> use things they see someone they perceive as paranoid using. According to this body of research, people will <em>not</em> use password managers because using one is perceived as being paranoid in some way. <a href="https://www.darkreading.com/endpoint/how-us-shady-geeks-put-others-off-security-/a/d-id/1340378">Theoretically, this effect is caused by illusory correlation, where people associate an action with a kind of person (only bad/scared people would want to carry a weapon).</a> Since we don’t want to be the kind of person we associate with that action, we avoid the action—even though it might make sense.</p>
<p>This is just the flip side of <em>fear sells,</em> of course. Just like we overestimate the possibility of a terrorist attack impacting our lives in a direct, personal way, we also underestimate the possibility of more mundane things, like drowning in a tub, because we either think can control it, or because we don’t think we’ll be targeted in that way, or because we want to signal to the world that we “aren’t one of <em>those people.”</em></p>
<p>Even knowing this is true, however, how can we counter this? How can we convince people to learn to assess risks rationally, rather than emotionally? How can we convince people that the perception of control should not impact your assessment of personal security or safety?</p>
<p>Simplifying design and use of the systems we build would be one—perhaps not-so-obvious—step we can take. The more security is just “automatic,” the more users will become accustomed to deploying security in their everyday lives. Another thing we might be able to do is stop trying to scare people into using these technologies.</p>
<p>In the meantime, just be aware that if you’re an engineer, your use of a technology “as an example” to others can backfire, causing people to <em>not</em> want to use those technologies.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13771</post-id>	</item>
		<item>
		<title>Is it really the best just because its the most common?</title>
		<link>https://rule11.tech/is-it-really-the-best-just-because-its-the-most-common/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 24 May 2021 17:00:38 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[SKILLS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13743</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/best-common-practices.png" alt="" width="400" height="160" class="alignnone" />

I cannot count the number of times I’ve heard someone ask these two questions—
<ul>
 	<li>What are other people doing?</li>
 	<li>What is the best common practice?</li>
</ul>
While these questions have always bothered me, I could never really put my finger on <em>why.</em> I ran across a journal article recently that helped me understand a bit better. The root of the problem is this—what does <em>best</em> <em>common</em> mean, and how can following the <em>best common </em>produce a set of actions you can be confident will solve <em>your</em> problem?]]></description>
										<content:encoded><![CDATA[<p>I cannot count the number of times I’ve heard someone ask these two questions—</p>
<ul>
<li>What are other people doing?</li>
<li>What is the best common practice?</li>
</ul>
<p>While these questions have always bothered me, I could never really put my finger on <em>why.</em> I ran across a journal article recently that helped me understand a bit better. The root of the problem is this—what does <em>best</em> <em>common</em> mean, and how can following the <em>best common </em>produce a set of actions you can be confident will solve <em>your</em> problem?</p>
<p>Bellman and Oorschot say <em>best common practice</em> can mean <em>this is widely implemented. </em>The thinking seems to run something like this: <em>the crowd’s collective wisdom will probably be better than my thinking… more sets of eyes will make for wiser or better decisions.</em> Anyone who has studied the madness of crowds will immediately recognize the folly of this kind of state. Just because a lot of people agree it’s a good idea to jump off a cliff does not mean it is, in fact, a good idea to jump off a cliff.</p>
<p>Perhaps it means something closer to <em>this is no worse than our competitors.</em> If that’s the meaning, though, it’s a pretty cynical result. It’s saying, “I don’t mind condemning myself to mediocrity so long as I see everyone else doing the same thing.” It doesn’t sound like much of a way to grow a business.</p>
<p>The authors do provide their definition—</p>
<blockquote><p><a href="https://arxiv.org/pdf/2004.12179.pdf">For a given desired outcome, a “best practice” is a means intended to achieve that outcome, and that is considered to be at least as “good” as the best of other broadly considered means to achieve that same outcome.</a></p></blockquote>
<p>The thinking seems to run something like this—<em>it’s likely that everyone else has tried many different ways of doing this; that they have all settled on doing this, this way, means all those other methods are probably not as good as this one for some reason.</em></p>
<p>Does this work? There’s no way to tell without further investigation. How many of the other folks doing “this” spent serious time trying alternatives, and how many just decided the cheapest way was the best no matter how poor the result might be? In fact, how can we know what the results of doing things “this way” have in all those other networks? Where would we find this kind of information?</p>
<p>&nbsp;</p>
<p>In the end, I can’t ever make much sense out of the question, “what is everyone else doing?” Discovering what everyone else is doing might help me eliminate possibilities (that didn’t work for them, so I certainly don’t want to try it), or it might help me understand the positive and negative attributes of a given solution. Still, I don’t understand why “common” should infer “best.”</p>
<p>The best solution for this situation is simply going to be the best solution. Feel free to draw on many sources, but don’t let other people determine what you should be doing.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13743</post-id>	</item>
		<item>
		<title>The Effectiveness of AS Path Prepending (2)</title>
		<link>https://rule11.tech/the-effectiveness-of-as-path-prepending-2/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 17 May 2021 17:00:02 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13715</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/as-path-prepending.png" alt="" width="400" height="160" class="alignnone" />

Last week I began discussing why AS Path Prepend doesn’t always affect traffic the way we think it will. <a href="https://doi.org/10.1145/3419394.3423642">Two other observations from the research paper I’m working off of were:</a>
<ul>
 	<li>Adding two prepends will move more traffic than adding a single prepend</li>
 	<li>It’s not possible to move traffic incrementally by prepending; when it works, prepending will end up moving most of the traffic from one inbound path to another</li>
</ul>
A slightly more complex network will help explain these two observations.]]></description>
										<content:encoded><![CDATA[<p>Last week I began discussing why AS Path Prepend doesn’t always affect traffic the way we think it will. <a href="https://doi.org/10.1145/3419394.3423642">Two other observations from the research paper I’m working off of are:</a></p>
<ul>
<li>Adding two prepends will move more traffic than adding a single prepend</li>
<li>It’s not possible to move traffic incrementally by prepending; when it works, prepending will end up moving most of the traffic from one inbound path to another</li>
</ul>
<p>A slightly more complex network will help explain these two observations.</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/aspp-02.png?w=400&#038;ssl=1" alt=""  class="alignnon" /></p>
<p>Assume AS65000 would like to control the inbound path for 100::/64. I’ve added a link between AS65001 and 65002 here, but we will still find prepending a single AS to the path won’t make much difference in the path used to reach 100::/64. Why?</p>
<p>Because most providers will have a local policy configured—using local preference—that causes them to choose any available customer connection over other paths. AS65001, on receiving the route to 100::/64 from AS65000, will set the local preference so it will prefer this route over any other route, including the one learned from AS65002. So while the cause is a little different in this case than the situation covered in the first post, the result is the same.</p>
<p>We can, of course, prepend <em>twice</em> onto the AS Path rather than once. What impact would that have here? It still won’t impact the traffic originating in 65005 because AS65001 is the only path available towards 100::64 from their perspective. <em>Prepending cannot change anything if there’s only one path.</em></p>
<p>However, if most of the traffic destined to 100::/64 coming from AS65006, 7, and 8 rather than from AS65005, prepending two times will allow AS65000 to shift the traffic from the path through AS65002 to the path through AS65001. This example might seem a little contrived. Still, it’s pretty similar to networks that have one connection to some local provider (a cable company or something similar) and one connection to a more prominent national or international provider. Any time you are connected to two different providers who have different ranges of connectivity, prepending two autonomous systems on the AS Path will probably be able to shift traffic from one inbound link to another.</p>
<p>What about prepending more than two hops to the AS Path? Each additional prepend going to shift smaller amounts of traffic. It makes sense that increasing the number of prepends doesn’t shift much more because the further away you get from the edge of the Internet, the more fully connected the autonomous systems are, and the more likely you are to run into some other policy that will override the AS Path in determining the best path. The average length of the AS Path in the Internet is around four; prepending more than this normally won&#8217;t have much of an effect on traffic flow</p>
<p>The second question above can also be answered by looking at this network. Why can’t you shift traffic incrementally by prepending onto the AS Path? Because the connectivity close to the edge is probably not meshy enough. You can’t shift over just the traffic from one AS or another; you can only shift traffic from the entire set of autonomous systems behind your upstream from one inbound link to another. You can adjust traffic on a per-prefix basis, however, which can be useful for balancing between two inbound links.</p>
<p>What can you do to control inbound traffic with more certainty? <a href="https://rule11.tech/prepend-fails-next-2/">Take a look at this older post for thoughts on using communities and de-aggregation to steer traffic.</a></p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13715</post-id>	</item>
		<item>
		<title>The Effectiveness of AS Path Prepending (1)</title>
		<link>https://rule11.tech/the-effectiveness-of-as-path-prepending-1/</link>
					<comments>https://rule11.tech/the-effectiveness-of-as-path-prepending-1/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 10 May 2021 17:00:53 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13687</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/as-path-prepending.png" alt="" width="400" height="160" class="alignnone" />

Just about everyone prepends AS’ to shift inbound traffic from one provider to another—but does this really work? First, a short review on prepending, and then a look at some recent research in this area.]]></description>
										<content:encoded><![CDATA[<p>Just about everyone prepends AS’ to shift inbound traffic from one provider to another—but does this really work? First, a short review on prepending, and then a look at some recent research in this area.</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone" src="https://i0.wp.com/rule11.tech/wp-content/uploads/aspp-01.png?resize=600%2C211&#038;ssl=1" alt="" width="600" height="211" /></p>
<p>What is prepending meant to do?</p>
<p>Looking at this network diagram, the idea is for AS6500 (each router is in its own AS) to steer traffic through AS65001, rather than AS65002, for 100::/64. The most common method to trying to accomplish this is AS65000 can <em>prepend</em> its own AS number on the AS Path Multiple times. Increasing the length of the AS Path will, in theory, cause a route to be less preferred.</p>
<p>In this case, suppose AS65000 prepends its own AS number on the AS Path once before advertising the route towards AS65001, and not towards AS65002. Assuming there is no link between AS65001 and AS65002, what would we expect to happen? What we would expect is AS65001 will receive one route towards 100::/64 with an AS Path of 2 and use this route. AS65002 will, likewise, receive one route towards 100::/64 with an AS Path of 1 and use this route.</p>
<p>AS65003, however, will receive two routes towards 100::/64, one with an AS Path of 3 through AS65001, and one with an AS Path of 2 through AS65002. All other things being equal (local preference, etc.), AS65003 will prefer the route with the shorter AS Path through AS65002, and select that path to reach 100::/64. AS65004 will only receive one path towards 100::/64, the one through AS65002, because AS65003 will only advertise its best path to AS65004.</p>
<p>The obvious question—<em>how much good does this really do?</em> The only impact on the best path is two hops away, as AS65003, and beyond. The route chosen by AS65001 and AS65002 will not be affected by the prepending.</p>
<p>A recent paper found—</p>
<blockquote><p><a href="https://doi.org/10.1145/3419394.3423642">We observe that the effectiveness of prepending can strongly depend on the location (for around 20% of cases, ASPP has moved no targets, while for another 20% , it moved almost all targets).</a></p></blockquote>
<p>You might expect As Path prepending to have a much more consistent effect on inbound traffic. Why doesn’t it?</p>
<p>What might not be obvious (the danger of simplified diagrams): <em>if autonomous systems directly attached to AS65001 originate most of the traffic destined to 100::/64, no amount of prepending is going to make any difference in the inbound traffic flow.</em> Assume AS5001 has a connection to some cloud service, AS65002 does not have a connection to the same cloud service, and 100::64 is a local server that communicates with this cloud service on a regular basis. Since AS65001 is the only AS transiting traffic from the cloud service to the server located on the 100::/64 subnet, and AS65001 only has one route to 100::/64, you are not going to be able to shift traffic off that single path no matter how many times you prepend.</p>
<p>The first rule of prepending is <em>location matters.</em> You have to know where the traffic you want to shift is originating, and whether or not it can be shifted.</p>
<p>In my next post on this topic, I’ll continue exploring AS path prepending more in light of the results of the research paper above.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/the-effectiveness-of-as-path-prepending-1/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13687</post-id>	</item>
		<item>
		<title>Ambiguity and complexity: once more into the breach</title>
		<link>https://rule11.tech/ambiguity-and-complexity-once-more-into-the-breach/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 03 May 2021 17:00:55 +0000</pubDate>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13651</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/complexity-ambiguity.png" alt="" width="400" height="160" class="alignnone" />

Recent research into the text of RFCs versus the security of the protocols described came to this conclusion—

<blockquote><a href="https://github.com/nccgroup/RFC-Security-Research/blob/main/NCC%20Group%20RFC%20Security%20Analysis%202021.txt">While not conclusive, this suggests that there may be some correlation between the level of ambiguity in RFCs and subsequent implementation security flaws.</a></blockquote>]]></description>
										<content:encoded><![CDATA[<p>Recent research into the text of RFCs versus the security of the protocols described came to this conclusion—</p>
<blockquote><p><a href="https://github.com/nccgroup/RFC-Security-Research/blob/main/NCC%20Group%20RFC%20Security%20Analysis%202021.txt">While not conclusive, this suggests that there may be some correlation between the level of ambiguity in RFCs and subsequent implementation security flaws.</a></p></blockquote>
<p>This should come as no surprise to network engineers—after all, complexity is the enemy of security. Beyond the novel ways the authors use to understand the shape of the world of RFCs (you should really read the paper; it’s really interesting), this desire to increase security by decreasing the ambiguity of specifications is fascinating. We often think that writing better specifications requires having better requirements, but down this path only lies despair. </p>
<p><strong>Better requirements are the one thing a network engineer can never really hope for. </strong></p>
<p>It’s not just that networks are often used as a sort of “complexity sink,” the place where every hard problem goes to be solved. It’s also the uncertainty of the environment in which the network must operate. What new application will be stuffed on top of the network this week? Will anyone tell the network folks about this new application, or just open a ticket when it doesn’t work right? What about all the changes developers are making to applications right now, and their impact on the network? There are link failures, software failures, hardware failures, and the mean time between mistakes. There is the pace of innovation (which I tend to think is a bit overblown—rule11, after all—we are often talking about new products rather than new ideas).</p>
<p>What the network is supposed to do—just provide IP transport between two devices—turns out to be hard. It’s hard because “just transporting packets” isn’t ever enough. These packets must be delivered consistently (jitter and drops) across an ever-changing landscape. </p>
<p>To this end—</p>
<blockquote><p><a href="http://faculty.nps.edu/dlalders/docs/AldersonDoyle-tsmca-July2010.pdf">[C]omplexity is most succinctly discussed in terms of functionality and its robustness. Specifically, we argue that complexity in highly organized systems arises primarily from design strategies intended to create robustness to uncertainty in their environments and component parts.</a></p></blockquote>
<p>Uncertainty is the key word here. <em>What can we do about all of this? </em></p>
<p>We can reduce uncertainty. There are three ways to reduce uncertainty. First, you can obfuscate it—this is harmful. Second, you can reduce the scope of the job at hand, throwing some of the uncertainty (and therefore complexity) over the cubicle way. This can be useful in some situations, but remember that the less work you’re doing, the less value you add. Beware of self-commodifying. </p>
<p>Finally, you can manage the uncertainty. This generally means using modularization intelligently to partition off problems into smaller sets. It’s easier to solve a set of well-scope problems with little uncertainty than to solve one big problem with unknowable uncertainty.</p>
<p>This might all sound great in theory, but how do we do this in real life? Where does the rubber hit the road? This is what Ethan and I tried to show in Problems and Solutions—how to understand the problems that need to be solved, and then how to solve each of those problems within a larger system. This is also what many parts of The Art of Network Architecture are about, and then again what Jeff and I wrote about in Navigating Network Complexity.</p>
<p>I know it often seems like it’s not worth learning the theory; it’s so much easier to focus on the day-to-day, the configuration of this device, or the shiny thing that vendor just created. It’s easier to assume that if I can just hide all the complexity behind intent or automation, I can get my weekends back.</p>
<p><strong>The truth is that we’re paid to solve hard problems, </strong>and solving hard problems involves complexity. We can either try to cover that up, or we can learn to manage it.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13651</post-id>	</item>
		<item>
		<title>Complexity Reduction?</title>
		<link>https://rule11.tech/complexity-reduction/</link>
					<comments>https://rule11.tech/complexity-reduction/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 19 Apr 2021 17:00:31 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13597</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/lie-reducing-complexity.png" alt="" width="400" height="160" class="alignnone" />

Back in January, I ran into an interesting article called <em><a href="https://ea.rna.nl/2021/01/10/the-many-lies-about-reducing-complexity-part-2-cloud/">The many lies about reducing complexity:</a></em>

<blockquote>Reducing complexity sells. Especially managers in IT are sensitive to it as complexity generally is their biggest headache. Hence, in IT, people are in a perennial fight to make the complexity bearable.</blockquote>]]></description>
										<content:encoded><![CDATA[<p>Back in January, I ran into an interesting article called <em><a href="https://ea.rna.nl/2021/01/10/the-many-lies-about-reducing-complexity-part-2-cloud/">The many lies about reducing complexity:</a></em></p>
<blockquote><p>Reducing complexity sells. Especially managers in IT are sensitive to it as complexity generally is their biggest headache. Hence, in IT, people are in a perennial fight to make the complexity bearable.</p></blockquote>
<p>Gerben then discusses two ways we often try to reduce complexity. <em>First,</em> we try to simply reduce the number of applications we&#8217;re using. We see this all the time in the networking world&#8212;if we could only get to a single pane of glass, or reduce the number of management packages we use, or reduce the number of control planes (generally to one), or reduce the number of transport protocols &#8230; but reducing the number of protocols doesn&#8217;t necessarily reduce complexity. Instead, we can just end up with one very complex protocol. Would it really be simpler to push DNS and HTTP functionality into BGP so we can use a single protocol to do everything? </p>
<p><em>Second,</em> we try to reduce complexity by hiding it. While this is sometimes effective, it can also lead to unacceptable tradeoffs in performance (we run into the <em>state, optimization, surfaces</em> triad here). It can also make the system more complex if we need to go back and leak information to regain optimal behavior. Think of the OSPF type 4, which just reinjects information lost in building an area summary, or even the complexity involved in the type7 to type 5 process required to create not-so-stubby areas. </p>
<p>It would seem, then, that you really can&#8217;t get rid of complexity. You can move it around, and sometimes you can effectively hide it, but you cannot get rid of it.</p>
<p>This is, to some extent, true. Complexity is a reaction to difficult environments, and networks are difficult environments. </p>
<p>Even so, there are ways to actually reduce complexity. The solution is not just hiding information because it&#8217;s messy, or munging things together because it requires fewer applications or protocols. You cannot eliminate complexity, but if you think about how information flows through a system you might be able to reduce the amount of complexity, and even create boundaries where state (hence complexity) can be more effectively hidden.</p>
<p>As an instance, <a href="https://rule11.tech/rethinking-bgp-on-the-dc-fabric-part-4/">I have argued elsewhere that building a DC fabric with distinct overlay and underlay protocols can actually create a simpler overall design than using a single protocol.</a> Another instance might be to really think about where route aggregation takes place&#8212;is it really needed at all? Why? Is this the right place to aggregate routes? Is there any way I can change the network design to reduce state leaking through the abstraction?</p>
<p>The problem is there are no clear-cut rules for thinking about complexity in this way. There&#8217;s no rule of thumb, there&#8217;s no best practices. You just have to think through each individual situation and consider how, where, and why state flows, and then think through the state/optimization/surface tradeoffs for each possible way of reducing the complexity of the system. You have to take into account that local reductions in complexity can cause the overall system to be much more complex, as well, and eventually make the system brittle.</p>
<p>There&#8217;s no &#8220;pat&#8221; way to reduce complexity&#8212;that there is, is perhaps one of the biggest lies about complexity in the networking world. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/complexity-reduction/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13597</post-id>	</item>
		<item>
		<title>Loose Lips</title>
		<link>https://rule11.tech/loose-lips/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 12 Apr 2021 17:00:57 +0000</pubDate>
				<category><![CDATA[SECURITY]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13560</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/loose-lips.png" alt="" width="400" height="160" class="alignnone" />

When I was in the military we were constantly drilled about the problem of <em>Essential Elements of Friendly Information,</em> or <em>EEFIs.</em> What are EEFis? If an adversary can cast a wide net of surveillance, they can often find multiple clues about what you are planning to do, or who is making which decisions. For instance, if several people married to military members all make plans to be without their spouses for a long period of time, the adversary can be certain a unit is about to be deployed. If the unit of each member can be determined, then the strength, positioning, and other facts about what action you are taking can be guessed. 
]]></description>
										<content:encoded><![CDATA[<p>When I was in the military we were constantly drilled about the problem of <em>Essential Elements of Friendly Information,</em> or <em>EEFIs.</em> What are EEFis? If an adversary can cast a wide net of surveillance, they can often find multiple clues about what you are planning to do, or who is making which decisions. For instance, if several people married to military members all make plans to be without their spouses for a long period of time, the adversary can be certain a unit is about to be deployed. If the unit of each member can be determined, then the strength, positioning, and other facts about what action you are taking can be guessed. </p>
<p>Given enough broad information, an adversary can often guess at details that you really do not want them to know.</p>
<p>What brings all of this to mind is a recent article in Dark Reading about how attackers take advantage of publicly available information to form Spear Phishing attacks&#8212;</p>
<blockquote><p><a href="https://www.darkreading.com/risk/publicly-available-data-enables-enterprise-cyberattacks/d/d-id/1340550">Most security leaders are acutely aware of the threat phishing scams pose to enterprise security. What garners less attention is the vast amount of publicly available information about organizations and their employees that enables these attacks.</a></p></blockquote>
<p>Going back further in time, during World War II, we have&#8212;</p>
<p><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/Loose_lips_might_sink_ships-scaled.jpg?w=600&#038;ssl=1" alt=""  class="alignnone" /></p>
<p>What does all of this mean for the average network engineer concerned about security? Probably nothing different than being just slightly paranoid about your personal security in the first place (way too much modern security is driven by an anti-paranoid mindset, a topic for a future post). Things like&#8212;</p>
<ul>
<li>Don&#8217;t let people know, either through your job description or anything else, that you hold the master passwords for your company, or that your account holds administrator rights.</li>
<li>Don&#8217;t always go to the same watering holes, and don&#8217;t talk about work while there to people you&#8217;ve just met, or even people you see there all the time.</li>
<li>Don&#8217;t talk about when and where you&#8217;re going on vacation. You can talk about it, and share pictures, once you&#8217;re back.</li>
</ul>
<p>If an attacker knows you are going to be on vacation, it&#8217;s a lot easier to create a fake &#8220;emergency,&#8221; tempting you to give out information about accounts, people, and passwords you shouldn&#8217;t. Phishing is primarily a matter of social engineering rather than technical acumen. Countering social engineering is also a social skill, rather than a technical one. You can start by learning to just say less about what you are doing, when you are doing it, and who holds the keys to the kingdom.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13560</post-id>	</item>
		<item>
		<title>Time and Mind Savers: RSS Feeds</title>
		<link>https://rule11.tech/time-and-mind-savers-rss-feeds/</link>
					<comments>https://rule11.tech/time-and-mind-savers-rss-feeds/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 05 Apr 2021 17:00:04 +0000</pubDate>
				<category><![CDATA[CAREER]]></category>
		<category><![CDATA[SKILLS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13521</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/rss-feeds.png" alt="" width="400" height="160" class="alignnone" />

I began writing this post just to remind readers this blog does have a number of RSS feeds&#8212;but then I thought ... well, I probably need to explain why that piece of information is important.

The amount of writing, video, and audio being thrown at the average person today is astounding&#8212;so much so that, according to a lot of research, most people in the digital world have resorted to relying on social media as their primary source of news. Why do most people get their news from social media? I'm pretty convinced this is largely a matter of "it saves time." The resulting feed might not be "perfect," but it's "close enough," and no-one wants to spend time seeking out a wide variety of news sources so they will be better informed.]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/rss-feeds.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" class="alignnone" /></p>
<p>I began writing this post just to remind readers this blog does have a number of RSS feeds&#8212;but then I thought &#8230; well, I probably need to explain why that piece of information is important.</p>
<p>The amount of writing, video, and audio being thrown at the average person today is astounding&#8212;so much so that, according to a lot of research, most people in the digital world have resorted to relying on social media as their primary source of news. Why do most people get their news from social media? I&#8217;m pretty convinced this is largely a matter of &#8220;it saves time.&#8221; The resulting feed might not be &#8220;perfect,&#8221; but it&#8217;s &#8220;close enough,&#8221; and no-one wants to spend time seeking out a wide variety of news sources so they will be better informed.</p>
<p>The problem, in this case, is that &#8220;close enough&#8221; is really a bad idea. We all tend to live in information bubbles of one form or another (although I&#8217;m fully convinced it&#8217;s much easier to live in a liberal/progressive bubble, being completely insulated from any news that doesn&#8217;t support your worldview, than it is to live in a conservative/traditional one). If you think about the role of social media and the news feed on social media services, this makes some kind of sense. The social media service tries to guess at what will keep you interested (engaged, and therefore coming back to the service), but at the same time each social media service also has a worldview they want to promote. The service largely attempts to both cater to what keeps you there and to pull you towards what the service, itself, believes.</p>
<p>The solution is <em>stop getting your news from social media.</em> <strong>period, full stop, end of sentence</strong> (although I&#8217;ve seen a recent paper indicating people find periods and other punctuation marks <em>offensive</em> in some way&#8212;when you find a period offensive, maybe it&#8217;s time to grow a little thicker skin).</p>
<p>So how should you get information instead? There are a lot of ways, from email based newsletters to watching television (please don&#8217;t, television turns everything into entertainment, including things that are not meant to entertain). My suggestion is, however, is through RSS feeds. Grab an account on Feedly or some other service, find the RSS feeds for the sites you find informative, and subscribe to their feeds. Some services have a learning mechanism that tries to accomplish the same thing as social media feeds&#8212;building intelligent filters to emphasize things you find important. I don&#8217;t tend to use these things; I have learned to just glance at the headline and first paragraph and make a quick decision about whether I think the post is worth reading.</p>
<p>Following RSS feeds can help you stop binging, jumping from place to place on a single site&#8212;essentially wasting time. It works against the mechanisms designers use to &#8220;increase engagement,&#8221; which often just means to consume more of your attention and time than you intended to give away. Following RSS feeds can also help you gain a broader view of the world <em>if</em> you intentionally subscribe to feeds from sites and people you don&#8217;t always agree with. It&#8217;s healthy to regularly read &#8220;the other side.&#8221; Following strong, well-written arguments from &#8220;the other side&#8221; will do much more for your mind than seeing just the facile, emotionally charged, straw-man arguments often presented (and allowed through the filters) on social media.</p>
<p>Further, services like feedly also allow you to follow lots of other things, including twitter accounts, youtube channels, and podcasts. I follow almost all podcasts through feedly, downloading the individual episodes I want to listen to, storing them in a cloud directory, and then deleting the files when I&#8217;m done. This gives me one list of things to listen to, rather than a huge playlist full of seemingly never-ending content.</p>
<p>All this said, this blog has a lot of different RSS feeds available. I don&#8217;t have a complete list, but these are a good place to start&#8212;</p>
<ul>
<li>The main feed (every post other than worth reading): <a href="https://rule11.tech/feed/">https://rule11.tech/feed/</a></li>
<li>Longer written pieces (no podcast, worth reading, posts on other sites, weekend reads, etc.): <a href="https://rule11.tech/category/content-type/written/feed/">https://rule11.tech/category/content-type/written/feed/</a></li>
<li>The Hedge: <a href="https://rule11.tech/category/hedge/feed/">https://rule11.tech/category/hedge/feed/</a></li>
<li>The History of Networking: <a href="https://rule11.tech/category/hon/feed/">https://rule11.tech/category/hon/feed/</a></li>
</ul>
<p>I keep these very same links on a page of RSS feeds you can find under the <em>about</em> menu. If you&#8217;re interested in the RSS feeds I follow, please reach out to me directly, as feedly no longer has any way to share your feeds other than pushing an OPML file (at least not that I can find).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/time-and-mind-savers-rss-feeds/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13521</post-id>	</item>
		<item>
		<title>The Insecurity of Ambiguous Standards</title>
		<link>https://rule11.tech/the-insecurity-of-ambiguous-standards/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 29 Mar 2021 17:00:49 +0000</pubDate>
				<category><![CDATA[SECURITY]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13485</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/ambiguous-standards.png" alt="" width="400" height="160" class="alignnone" />

Why are networks so insecure?

One reason is we don't take network security seriously. We just don't think of the network as a serious target of attack. Or we think of security as a problem "over there," something that exists in the application realm, that needs to be solved by application developers. Or we think the consequences of a network security breach as "well, they can DDoS us, and then we can figure out how to move load around, so if we build with resilience (enough redundancy) we're already taking care of our security issues." Or we put our trust in the firewall, which sits there like some magic box solving all our problems.]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/ambiguous-standards.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" class="alignnone" /></p>
<p>Why are networks so insecure?</p>
<p>One reason is we don&#8217;t take network security seriously. We just don&#8217;t think of the network as a serious target of attack. Or we think of security as a problem &#8220;over there,&#8221; something that exists in the application realm, that needs to be solved by application developers. Or we think the consequences of a network security breach as &#8220;well, they can DDoS us, and then we can figure out how to move load around, so if we build with resilience (enough redundancy) we&#8217;re already taking care of our security issues.&#8221; Or we put our trust in the firewall, which sits there like some magic box solving all our problems.</p>
<p>The problem is&#8211;none of this is true. In any system where <em>overall</em> security is important, defense-in-depth is <strong>the</strong> key to building a secure system. No single part of the system bears the &#8220;primary responsibility&#8221; for “security.” The network is certainly a part of any defense-in-depth scheme that is going to work.</p>
<p>Which means network protocols need to be secure, at least in some sense, as well. I don’t mean “secure” in the sense of privacy—routes are not (generally) personally identifiable information (there are always exceptions, however). But rather “secure” in the sense that they cannot be easily attacked. On-the-wire encryption should prevent anyone from reading the contents of the packet or stream all the time. Network devices like routers and switches should be difficult to break in too, which means the protocols they run must be “secure” in the fuzzing sense—there should be no unexpected outputs because you’ve received an unexpected input.</p>
<p>I definitely do <em>not</em> mean path security of any sort. Making certain a packet (or update or whatever else) has followed a specified path is a chimera in packet switched networks. It’s like trying to nail your choice of multicolored gelatin desert to the wall. Packet switched networks are <em>designed</em> to adapt to changes in the network by rerouting traffic. Get over it.</p>
<p>So why are protocols and network devices so insecure? I recently ran into an interesting piece of research that provides some of the answer. To wit—</p>
<p><a href="https://github.com/nccgroup/RFC-Security-Research/blob/main/NCC%20Group%20RFC%20Security%20Analysis%202021.txt">Our research saw that ambiguous keywords SHOULD and MAY had the second highest number of occurrences across all RFCs. We’ve also seen that their intended meaning is only to be interpreted as such when written in uppercase (whereas often they are written in lowercase). In addition, around 40% of RFCs made no use of uppercase requirements level keywords. These observations point to inconsistency in use of these keywords, and possibly misunderstanding about their importance in a security context. We saw that RFCs relating to Session Initiation Protocol (SIP) made most use of ambiguous keywords, and had the most number of implementation flaws as seen across SIP-based CVEs. While not conclusive, this suggests that there may be some correlation between the level of ambiguity in RFCs and subsequent implementation security flaws.</a></p>
<p>In other words, ambiguous language leads to ambiguous implementations which leads to security flaws in protocols.</p>
<p>The solution for this situation might be just this—specify protocols more rigorously. But simple solutions rarely admit reality within their scope. It’s easy to build more precise specifications—so why aren’t our specifications more precise?</p>
<p>In a word: politics.</p>
<p>For every RFC I’ve been involved in drafting, reviewing, or otherwise getting through the IETF, there are two reasons for each MAY or SHOULD therein. The first is someone has thought of a use-case where an implementor or operator might want to do something that would be otherwise not allowed by MUST. In these cases, everyone looks at the proposed MAY or SHOULD, thinks about how not doing it might be useful, and then thinks … “this isn’t so bad, the available functionality is a good thing, and there’s no real problem I can see with making this a MAY or SHOULD.” In other words, we can think of possible worlds where someone might want to do something, so we allow them to do it. Call this the “freedom principle.”</p>
<p>The second reason is that multiple vendors have multiple customers who want to do things different ways. When the two vendors clash in the realm of standards, the result is often a set of interlocking MAYs and SHOULDs that allow two implementors to build solutions that are interoperable in the main, but not along the edges, that satisfy both of their existing customer’s requirements. Call this the “big check principle.”</p>
<p>The problem with these situations is—the specification has an undetermined set of MAYs and SHOULDs that might interlock in unforeseen ways, resulting in unanticipated variances in implementations that ultimately show up as security holes.</p>
<p>Okay—now that I’ve described the problem, what can you do about it? One thing is to <em>simplify.</em> Stop putting everything into a small set of protocols. The more functionality you pour into a protocol or system, the harder it is to secure. Complexity is the enemy of security (and privacy!).</p>
<p>As for the political problems, these are human-scale, which means they are larger than any network you can ever build—but I’ll ponder this more and get back to you if I come up with any answers.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13485</post-id>	</item>
		<item>
		<title>It is Always Something (RFC1925, Rule 7)</title>
		<link>https://rule11.tech/it-is-always-something-rfc1925-rule-7/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 23 Mar 2021 17:00:17 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13464</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/rule-7.png" alt="" width="400" height="160" class="alignnone" />

While those working in the network engineering world are quite familiar with the expression “it is always something!,” defining this (often exasperated) declaration is a little trickier. The wise folks in the IETF, however, have provided a definition in RFC1925. Rule 7, “it is always something,” is quickly followed with a corollary, rule 7a, which says: “Good, Fast, Cheap: Pick any two (you can’t have all three).”]]></description>
										<content:encoded><![CDATA[<p>While those working in the network engineering world are quite familiar with the expression “it is always something!,” defining this (often exasperated) declaration is a little trickier. The wise folks in the IETF, however, have provided a definition in RFC1925. Rule 7, “it is always something,” is quickly followed with a corollary, rule 7a, which says: “Good, Fast, Cheap: Pick any two (you can’t have all three).”</p>
<p>You can either quickly build a network which works well and is therefore expensive, or take your time and build a network that is cheap and still does not work well, or… Well, you get the idea. There are many other instances of these sorts of three-way tradeoffs in the real world, such as the (in)famous CAP theorem, which states a database can be consistent, available, and partitionable (or partitioned). Eventual consistency, and problems from microloops to surprise package deliveries (when you thought you ordered one thing, but another was placed in your cart because of a database inconsistency) have resulted. Another form of this three-way tradeoff is the much less famous, but equally true, state, optimization, surface tradeoff trio in network design.</p>
<p>It is possible, however, to build a system which fails at all three measures—a system which is expensive, takes a long time to build, and does not perform well. The fine folks at the IETF have provided examples of such systems.</p>
<p>For instance, <a href="https://tools.ietf.org/html/rfc1149">RFC1149 describes a system of transporting IPv4 packets over avian carriers,</a> or pigeons. This is particularly useful in areas where electricity and network cabling are not commonly found. To quote the relevant part of the RFC:</p>
<p>The IP datagram is printed, on a small scroll of paper, in hexadecimal, with each octet separated by whitestuff and blackstuff. The scroll of paper is wrapped around one leg of the avian carrier. A band of duct tape is used to secure the datagram&#8217;s edges. The bandwidth is limited to the leg length.</p>
<p>The specification of duct tape is quite odd, however; perhaps the its water-resistant properties are required for this mode of transport. This mode of transport has been adapted for use with more the more modern (in relative terms only!) <a href="https://tools.ietf.org/html/rfc6214">IPv6 transport in RFC6214.</a> For situation where quality of service is critical, <a href="https://tools.ietf.org/html/rfc2549">RFC2549 describes quality of service extensions to the transport mechanism.</a></p>
<p>To further prove it is possible to build a network which is slow, expensive, and does not work well, <a href="https://tools.ietf.org/html/rfc4824">RFC4824 describes the transmission of packets through semaphore flag signaling, or SFSS.</a> Commonly used to signal between two ships when no other form of communication is available, SFSS consists of a sender who positions (waves) flags of particular shape and color in specific positions to signal individual characters. Rather than transmitting letters or other characters, RFC4824 describes using these flags to transmit 0’s, 1’s, and the framing elements required to transmit an IPv4 datagram over long distances. The advantage of such a system is, much like the avian carrier, that it will operate where there is no electricity. The disadvantage is the cost of encoding and decoding the packet’s contents may be many orders of magnitude more difficult than using existing SFSS specifications to signal messages.</p>
<p>Finally, <a href="https://tools.ietf.org/html/rfc7511">RFC7511 provides an option which allows the most use of resources on any network while</a> providing the slowest possible network performance by allowing senders to include a scenic route header on IPv6 packets. This header notifies routers and other networking devices that this packet would like to take the scenic route to its destination, which will cause paths including avian carriers (as described in RFC6214) to be chosen over any other available path.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13464</post-id>	</item>
		<item>
		<title>Slow Learning and Range</title>
		<link>https://rule11.tech/slow-learning-and-range/</link>
					<comments>https://rule11.tech/slow-learning-and-range/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 22 Mar 2021 17:00:15 +0000</pubDate>
				<category><![CDATA[CAREER]]></category>
		<category><![CDATA[SKILLS]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13456</guid>

					<description><![CDATA[<img class="alignnone " src="https://rule11.tech/wp-content/uploads/range.png" alt="" width="400" height="160" />

<em>Jack of all trades, master of none. </em>

This singular saying—a misquote of Benjamin Franklin (more on this in a moment)—is the defining statement of our time. An alternative form might be <em>the fox knows many small things, but the hedgehog knows one big thing.</em>
]]></description>
										<content:encoded><![CDATA[<p><em>Jack of all trades, master of none. </em></p>
<p>This singular saying—a misquote of Benjamin Franklin (more on this in a moment)—is the defining statement of our time. An alternative form might be <em>the fox knows many small things, but the hedgehog knows one big thing.</em></p>
<p>The rules for success in the modern marketplace, particularly in the technical world, are simple: <em>start early, focus on a single thing, and practice hard.</em></p>
<p>But when I look around, I find these rules rarely define actual success. Consider my life. I started out with three different interests, starting jazz piano lessons when I was twelve, continuing music through high school, college, and for many years after. At the same time, I was learning electronics—just about everyone in my family is in electronic engineering (or computers, when those came along) in one way or another.</p>
<p>I worked as on airfield electronics for a few years in the US Air Force <em>(one of the reasons I tend to be calm is I’ve faced death up close and personal multiple times, an experience that tends to center your mind),</em> including RADAR, radio, and instrument landing systems. Besides these two, I was highly interested in art and illustration, getting to the point of majoring in art in college for a short time, and making a living doing commercial illustration for a time.</p>
<p>You might notice that none of this really has a lot to do with computer networking. That’s the point.</p>
<p>I once thought I was a bit of an anomaly in this—in fact, I’m a bit of an anomaly throughout my life, including coming rather late to deep philosophy and theology (perhaps a bit too late!).</p>
<p>After reading <em><strong>Range</strong></em> by David Epstein, it turns out I’m wrong. I’m not the exception, I’m the rule. My case is so common as to be almost trivial.</p>
<p>Epstein not only destroys the common view—start early, stay focused, and practice hard—with reasoning, he also gives so many examples of people who have succeeded <em>because</em> they “wandered around” for many years before settling into a single “thing”—and sometimes just never “settling” throughout their entire lives. People who experience many different things, experimenting with ideas, careers, and paths, have what Epstein calls <em>range.</em></p>
<p>He gives several reasons for people with range succeeding. They learn how to fail fast, unlike those who are focused on succeeding at a single thing—he calls this “too much grit.” They also learn to think outside the box—they are not restricted by the “accepted norms” within any field of study. It also turns out that slower learning is much more effective, as shown by multiple experiments.</p>
<p>There are three warnings about becoming a person with range, however—the fox rather than the hedgehog, so-to-speak. First, it takes a long time. Slow learning is, after all <em>slow.</em> Second, range works best in a world full of specialist—like the world we live in right now. In a world full of generalists, specialists are likely to succeed more often than generalist. What is different stands out (both in bad and good ways, by the way). Third, people with range do better with wicked problems—problems that are not easily solved with repetition and linear thought.</p>
<p>Of course, computer networks are clearly wicked problems.</p>
<p>That original quote that bothers me so much? Franklin did not say: <em>jack of all trades, master of non.</em> Instead, he said: <em>jack of all trades, master of one.</em> What a difference a single letter makes.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/slow-learning-and-range/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13456</post-id>	</item>
		<item>
		<title>Complexity Bites Back</title>
		<link>https://rule11.tech/complexity-bites-back/</link>
					<comments>https://rule11.tech/complexity-bites-back/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 15 Mar 2021 17:00:47 +0000</pubDate>
				<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13345</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/signs-of-complexity.png" alt="" width="400" height="160" class="alignnone" />

What percentage of business-impacting application outages are caused by networks? According to a recent survey by the Uptime Institute, about 30% of the 300 operators they surveyed, 29% have experienced network related outages in the last three years—the highest percentage of causes for IT failures across the period.

A secondary question on the survey attempted to “dig a little deeper” to understand the reasons for network failure; the chart below shows the result.]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/rule11.tech/wp-content/uploads/signs-of-complexity.png?resize=400%2C160&#038;ssl=1" alt="" width="400" height="160" class="alignnone" /></p>
<p>What percentage of business-impacting application outages are caused by networks? <a href="https://journal.uptimeinstitute.com/network-problems-causing-ever-more-outages/">According to a recent survey by the Uptime Institute, about 30% of the 300 operators they surveyed, 29% have experienced network related outages in the last three years—the highest percentage of causes for IT failures across the period.</a></p>
<p>A secondary question on the survey attempted to “dig a little deeper” to understand the reasons for network failure; the chart below shows the result.</p>
<p>We can be almost certain the third-party failures, if the providers were queried, would break down along the same lines. Is there a pattern among the reasons for failure?</p>
<p>Configuration change—while this could be somewhat managed through automation, these kinds of failures are more generally the result of complexity. Firmware and software failures? The more complex the pieces of software, the more likely it is to have mission-impacting errors of some kind—so again, complexity related. Corrupted policies and routing tables are also complexity related. The only item among the top <em>preventable</em> causes that does not seem, at first, to relate directly to complexity is network overload and/or congestion problems. Many of these cases, however, might also be complexity related.</p>
<p>The Uptime Institute draws this same lesson, though through a slightly different process, saying: “Networks are complex not only technically, but also operationally.”</p>
<p>For years—decades, even—we have talked about the increasing complexity of networks, but we have done little about it. Yes, we have automated all the things, but automation can only carry us so far in covering complexity up. Automation also adds a large dop of complexity on top of the existing network—sometimes (not always, of course!) automating a complex system without making substantial efforts at simplification is just like trying to put a fire out with a can of gas (or, in one instance I actually saw, trying to put out an electrical fire with a can of soda, with the predictable trip to the local hospital.</p>
<p>We are (finally) starting to be “bit hard” by complexity problems in our networks—and I suspect this is the leading edge of the problem, rather than the trailing edge.</p>
<p>Maybe it’s time to realize making every protocol serve every purpose in the network wasn’t a good idea—we now have protocols that are so complex that they can only be correctly configured by machines, and then only when you narrow the use case enough to make the design parameters intelligible.</p>
<p>Maybe it’s time to realize optimizing for every edge use case wasn’t a good idea. Sometimes it’s just better to throw resources at the problem, rather than throwing state at the control plane to squeeze out just one more ounce of optimization.</p>
<p>Maybe it’s time to stop building networks around “whatever the application developer can dream up.” To start working as a team with the application developers to build a complete system that puts complexity where it most makes sense, and divides complexity from complexity, rather than just assuming “the network can do that.”</p>
<p>Maybe it’s time to stop thinking we can automate our way out of this.</p>
<p>Maybe it’s time to lay our superhero capes down and just start building simpler systems.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/complexity-bites-back/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13345</post-id>	</item>
		<item>
		<title>You Can Always Add Another Layer of Indirection (RFC1925, Rule 6a)</title>
		<link>https://rule11.tech/you-can-always-add-another-layer-of-indirection-rfc1925-rule-6a/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 09 Mar 2021 18:00:15 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13330</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/infinite-recursion.png" alt="" width="400" height="160" class="alignnone1" />

Many within the network engineering community have heard of the OSI seven-layer model, and some may have heard of the Recursive Internet Architecture (RINA) model. The truth is, however, that while protocol designers may talk about these things and network designers study them, very few networks today are built using any of these models. What is often used instead is what might be called the Infinitely Layered Functional Indirection (ILFI) model of network engineering. In this model, nothing is solved at a particular layer of the network if it can be moved to another layer, whether successfully or not.]]></description>
										<content:encoded><![CDATA[<p>Many within the network engineering community have heard of the OSI seven-layer model, and some may have heard of the Recursive Internet Architecture (RINA) model. The truth is, however, that while protocol designers may talk about these things and network designers study them, very few networks today are built using any of these models. What is often used instead is what might be called the Infinitely Layered Functional Indirection (ILFI) model of network engineering. In this model, nothing is solved at a particular layer of the network if it can be moved to another layer, whether successfully or not.</p>
<p>For instance, Ethernet is the physical and data link layer of choice over almost all types of physical medium, including optical and copper. No new type of physical transport layer (other than wireless) can succeed unless if can be described as “Ethernet” in some regard or another, much like almost no new networking software can success unless it has a Command Line Interface (CLI) similar to the one a particular vendor developed some twenty years ago. It’s not that these things are necessarily better, but they are well-known.</p>
<p>Ethernet, however, goes far beyond providing physical layer connectivity. Because many applications rely on using Ethernet semantics directly, many networks are built with some physical form of Ethernet (or something claiming to be like Ethernet), with IP on top of this. On top of the IP, there is some other transport protocol, such as VXLAN, UDP, GRE, or perhaps even MPLS over UDP. On top of these layers rides … Ethernet. On which IP runs. On which TCP or UDP, or potentially VXLAN runs. It turns out it is easier to add another layer of indirection to solve many of the problems caused by applications that expect Ethernet than it is to solve them with IP—or any other transport protocol. You’ve heard of turtles all the way down—today we have Ethernet all the way down.</p>
<p>Many other suggestions of this type have been made in network engineering and protocol design across the years, but none of them seem to have been as widely deployed as Ethernet over IP over Ethernet. <a href="https://tools.ietf.org/html/rfc3252">For instance, RFC3252 notes it has always been difficult to understand the contents of Ethernet, IP, and other packets as they are transmitted from host to host.</a> The eXtensible Markup Language (XML) is, on the other hand, designed to be both machine- and human-readable. A logical solution to the problem of unreadable packets, then, is to add another layer of indirection by formatting all packets, including Ethernet and IP, into XML. Once this is done, there would be no need for expensive or complex protocol analyzers, as anyone could simply capture packets off the wire and read them directly. Adding another layer, in this case, could save many hours of troubleshooting time, and generally reduce the cost of operating a network significantly.</p>
<p>Once the idea of adding another layer has been fully grasped, the range of problems which can be solved becomes almost limitless. Many companies struggle to find some way to provide secure remote access to their employees, contractors, and even customers. The systems designed to solve this problem are often complex, difficult to deploy, and almost impossible to troubleshoot. <a href="https://tools.ietf.org/html/rfc5514">RFC5514, however, provides an alternate solution:</a> simply layer an IPv6 transport stream on top of the social media networks everyone already uses. Everyone, after all, already has at least one social media account, and can already reach that social media account using at least one device. Creating an IPv6 stream across social media would provide universal cloud-based access to anyone who desires.</p>
<p>Such streams could even be encrypted to ensure the operators and users of the underlying social media network cannot see any private information transmitted across the IPv6 channel created in this way.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13330</post-id>	</item>
		<item>
		<title>On Using the Right Word</title>
		<link>https://rule11.tech/on-using-the-right-word/</link>
					<comments>https://rule11.tech/on-using-the-right-word/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 08 Mar 2021 18:00:36 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13319</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/using-the-right-word.png" alt="" width="400" height="160" />

A while back, I was sitting in a meeting where the presenter described switching from a “traditional, hierarchical data center fabric” to a spine-and-leaf (while drawing CLOS, in all capital letters, on the whiteboard). He pointed out that the spine-and-leaf design is simpler because it only has two tiers rather than three.

There is so much wrong with this I almost winced in physical pain. Traditional hierarchical designs are not fabrics. Spine-and-leaf fabrics are not CLOS, but Clos, fabrics. Clos fabrics have three stages, not two—even if we draw them “folded” so you only see two apparent levels to the fabric. In fact, all spine-and-leaf fabrics <em>always</em> have an odd number of stages, and they are <em>stages,</em> not <em>tiers.</em>]]></description>
										<content:encoded><![CDATA[<p>A while back, I was sitting in a meeting where the presenter described switching from a “traditional, hierarchical data center fabric” to a spine-and-leaf (while drawing CLOS, in all capital letters, on the whiteboard). He pointed out that the spine-and-leaf design is simpler because it only has two tiers rather than three.</p>
<p>There is so much wrong with this I almost winced in physical pain. Traditional hierarchical designs are not fabrics. Spine-and-leaf fabrics are not CLOS, but Clos, fabrics. Clos fabrics have three stages, not two—even if we draw them “folded” so you only see two apparent levels to the fabric. In fact, all spine-and-leaf fabrics <em>always</em> have an odd number of stages, and they are <em>stages,</em> not <em>tiers.</em></p>
<p>More recently, I heard someone talking about an operating system that was built using microservices. I thought—“that would be at neat trick.” To build something with microservices does <em>not</em> just mean a piece of software using modules—this would be modular application (or operating system) design. Microservices architectures break the application up into the most basic components possible and then scale each kind of component out (rather than up) by spinning new copies of each service as needed. I cannot imagine scaling an operating system out by spinning multiple copies of the same service, and then providing some sort way to spread load across the various copies. Would you have some sort of anycast IPC? An internal DNS server or load balancer?</p>
<p>You can have an OS that natively participates in a larger microservices-based architecture, but what would microservices <em>within</em> the operating system look like, precisely?</p>
<p>Maybe my recent studies in philosophy make me much more attuned to the way we use language in the network engineering world—or maybe I’m just getting old. Whatever it is, our determination to make every word mean everything is driving me nuts.</p>
<p>What is the difference between a router and a switch? There used to be a simple definition—routers rewrite the L2 header and switches don’t. But now that routers switch packets, and switches route packets, the only difference seems to be … buffer depth? Feature set? The line between router and switch is fuzzy to the point of being meaningless, leaving us with no real term to describe a real <em>switch</em> any longer (a device that doesn’t do routing).</p>
<p>What about <em>software defined networks?</em> We’ve been treated to software defined everything now, of course. And <em>intent?</em> I get the point of intent, but we’re already moving down the path of making the meaning so broad that it can even contain configuring the CLI on an old AGS+. And don’t get me started on <em>artificial intelligence,</em> which is often learned to describe something closer to <em>machine learning.</em> Of course <em>machine learning</em> is often used to describe things that are really nothing more than statistical inference.</p>
<p>Maybe it’s time for a general rebellion against the sloppy use of language in network engineering. Or maybe I’m just tilting at yet another windmill. Wake me up when we’ve gotten to the point that we can use any word interchangeably with any other word in the network engineering dictionary. I await the AI that routes packets by reading your mind (through intent) called a swouter… or something.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/on-using-the-right-word/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13319</post-id>	</item>
		<item>
		<title>Rethinking BGP on the DC Fabric (part 5)</title>
		<link>https://rule11.tech/rethinking-bgp-on-the-dc-fabric-part-5/</link>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Mon, 01 Mar 2021 18:00:48 +0000</pubDate>
				<category><![CDATA[CULTURE]]></category>
		<category><![CDATA[DESIGN]]></category>
		<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13300</guid>

					<description><![CDATA[<img src="https://rule11.tech/wp-content/uploads/bg-underlay.png" alt="" width="400" height="160" class="alignnone" />

BGP is widely used as an IGP in the underlay of modern DC fabrics. This series argues this is not the best <em>long-term</em> solution to the problem of routing in fabrics because BGP is not ideal for this use case. This post will consider the potential harm we are doing to the larger Internet by pressing BGP into a role it was not originally designed to fulfill—an underlay protocol or an IGP.

My last post described the kinds of configuration required to make BGP work on a DC fabric—it turns out that the configuration of each BGP speaker on the fabric is close to unique. It is possible to automate configuring each speaker—but it would be better if we could get closer to autonomic operation.
]]></description>
										<content:encoded><![CDATA[<p>BGP is widely used as an IGP in the underlay of modern DC fabrics. This series argues this is not the best <em>long-term</em> solution to the problem of routing in fabrics because BGP is not ideal for this use case. This post will consider the potential harm we are doing to the larger Internet by pressing BGP into a role it was not originally designed to fulfill—an underlay protocol or an IGP.</p>
<p>My last post described the kinds of configuration required to make BGP work on a DC fabric—it turns out that the configuration of each BGP speaker on the fabric is close to unique. It is possible to automate configuring each speaker—but it would be better if we could get closer to autonomic operation.</p>
<p>To move BGP closer to autonomic operation in a DC fabric, there are several things we can do. First, we can allow a BGP speaker to peer with any other BGP speaker it receives an open message from—this is often called <em>promiscuous mode.</em> While each router in the fabric will still need to be configured with the right autonomous system, at least we won’t need to configure the correct peers on each router (including the remote AS).</p>
<p>Note, however, that using this kind of promiscuous peering does come with a set of tradeoffs (if you’re reading this blog, you know there will be tradeoffs). BGP speakers running in promiscuous mode open a large attack surface on the control plane of the network. We can close this attack surface by configuring authentication on all BGP speakers … but we are now adding complexity to reduce complexity. We could also reduce the scope of the attack surface by never permitting BGP to peer beyond a single hop, and then filtering all BGP packets at the fabric edge. Again, just a bit more complexity to manage—but remember that the road to highly fragile and complex systems is always paved with individual steps that never, on their own, seem to add “too much complexity.”</p>
<p>The second thing we can do to move BGP closer to autonomic operation is to advertise routes to every connected peer without any policy configured. This does, again, introduce some tradeoffs, particularly in the realm of security, but let’s leave that aside for the moment.</p>
<p>Assume we can create a version of BGP that has these modifications—it always accepts any peer from any other AS, and it advertises all routes without any policy configured. Put these features behind a single knob which also includes setting the MRAI to 0 or 1, tightens up the dampening parameters, and adjusts a few other things to make BGP work better in a DC fabric.</p>
<p>As an experiment, let’s enable this <em>DC fabric knob</em> on a BGP speaker at the edge of a dual-homed “enterprise customer.” What will happen?</p>
<p>The enterprise network will automatically peer to any speaker that sends an open message—a huge security hole on the open Internet—and it will advertise every route it learns even though there is no policy configured. This second issue—advertising routes with no policy configured—can cause the enterprise network to become a transit between two much larger provider networks, crashing out some small corner of the Internet.</p>
<p>This might seem like a trivial issue. After all, just <em>don’t ever enable the DC fabric knob on an eBGP peering session upstream into the DFZ, or any other “real” internetwork.</em> Sure, and just don’t ever hit the brakes when you mean to hit the accelerator, or the accelerator when you mean to hit the brakes. If I had a dime for every time we “just don’t ever make that mistake …” Well, I wouldn’t be blogging, I’d be relaxing in the sun someplace (okay, I’m not likely to ever stop working to sit around and “relax” all the time, but you get the picture anyway).</p>
<p>Maybe—just maybe—it would really be better overall to use two different protocols for IGP and EGP work. Maybe—just maybe—it’s better not to mix these two different kinds of functions in a single protocol. Not only is the single resulting protocol bound to be really complex (most BGP implementations are now over 100,000 lines of code, after all), but it will end up being really easy to make really bad mistakes.</p>
<p>No tool is omnicompetent. If you found a tool that was, in fact, omnicompetent, it would also be the most dangerous tool in your toolbox.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13300</post-id>	</item>
		<item>
		<title>Technologies that Didn&#8217;t: Directory Services</title>
		<link>https://rule11.tech/technologies-that-didnt-directory-services-2/</link>
					<comments>https://rule11.tech/technologies-that-didnt-directory-services-2/#comments</comments>
		
		<dc:creator><![CDATA[Russ]]></dc:creator>
		<pubDate>Tue, 23 Feb 2021 18:00:39 +0000</pubDate>
				<category><![CDATA[TECH]]></category>
		<category><![CDATA[WRITTEN]]></category>
		<guid isPermaLink="false">https://rule11.tech/?p=13279</guid>

					<description><![CDATA[<img class="alignnone" src="https://rule11.tech/wp-content/uploads/directory-services.png" alt="" width="400" height="160" />

One of the most important features of the Network Operating Systems, like Banyan Vines and Novell Netware, available in the middle of the 1980’s was their integrated directory system. These directory systems allowed for the automatic discovery of many different kinds of devices attached to a network, such as printers, servers, and computers. Printers, of course, were the important item in this list, because printers have always been the bane of the network administrator’s existence. An example of one such system, an early version of Active Directory, is shown in the illustration below.]]></description>
										<content:encoded><![CDATA[<p>One of the most important features of the Network Operating Systems, like Banyan Vines and Novell Netware, available in the middle of the 1980’s was their integrated directory system. These directory systems allowed for the automatic discovery of many different kinds of devices attached to a network, such as printers, servers, and computers. Printers, of course, were the important item in this list, because printers have always been the bane of the network administrator’s existence. An example of one such system, an early version of Active Directory, is shown in the illustration below.</p>
<p><img data-recalc-dims="1" loading="lazy" decoding="async" class="alignnone" src="https://i0.wp.com/rule11.tech/wp-content/uploads/novel-dir-service.png?resize=624%2C453&#038;ssl=1" alt="" width="624" height="453" /></p>
<p>Users, devices and resources, such as file mounts, were stored in a tree. The root of the tree was (generally) the organization. There were Organizational Units (OUs) under this root. Users and devices could belong to an OU, and be given access to devices and services in other OUs through a fairly simple drag and drop, or GUI based checkbox style interface. These systems were highly developed, making it fairly easy to find any sort of resource, including email addresses of other uses in the organization, services such as shared filers, and—yes—even printers.</p>
<p>The original system of this kind was Banyan’s <em>Streetalk,</em> which did not have the depth or expressiveness of later systems, like the one shown above from Windows NT, or Novell’s Directory Services. A similar system existed in another network operating system called <em>LANtastic,</em> which was never really widely deployed (although I worked on a LANtastic system in the late 1980’s).</p>
<p>The usual “pitch” for deploying these systems was the ease of access control they brought into the organization from the administration side, along with the ease of finding resources from the user’s perspective. Suppose you were sitting at your desk, and needed to know who over in some other department, say accounting, you could contact about some sort of problem, or idea. If you had one of these directory services up and running, the solution was simple: open the directory, look for the accounting OU within the tree, and look for a familiar name. Once you have found them, you could send them an email, find their phone number, or even—if you had permission—print a document at a printer near their desk for them to pick up. Better than a FAX machine, right?</p>
<p>What if you had multiple organizations who needed to work together? Or you really wanted a standard way to build these kinds of directories, rather than being required to run one of the network operating systems that could support such a system? There were two industry wide standards designed to address these kinds of problems: LDAP and X.500.</p>
<p>The OUs, CNs, and other elements shown in the illustration above are actually an expression of the X.500 directory system. As X.500 was standardized starting in the mid-1990’s, these network operating systems changed their native directory systems to match the X.500 schema. The ultimate goal was to make these various directory services interoperate through X.500 connectors.</p>
<p>Given all this background, what happened to these systems? Why are these kinds of directories widely available today? While there are many reasons, two of these stand out.</p>
<p>First, these systems are complex and heavy. Their complexity made them very hard to code and maintain; I can well remember working on a large Netware Directory Service deployment where objects fell into the wrong place on a regular basis, drive mapping did not work correctly, and objects had to be deleted and recreated to force their permissions to reset.</p>
<p>Large, complex systems tend to be unstable in unpredictable ways. One lesson the information technology world has not learned across the years is that abstraction is not enough; the underlying systems themselves must be simplified in a way that makes the abstraction more closely resemble the underlying reality. Abstraction can cover problems up as easily as it can solve problems.</p>
<p>Second, these systems fit better in a world of proprietary protocols and network operating systems than into a world of open protocols. The complexity driven into the network by trying to route IP, Novell’s IPX, Banyan’s VIP, DECnet, Microsoft’s protocols, Apple’s protocols, etc., made building and managing networks ever more complex. Again, while the interfaces were pretty abstractions, the underlying network was also reminiscent of a large bowl of spaghetti. There were even attempts to build IPX/VIP/IP packet translators so a host running Vines’ could communicate with devices on the then nascent global Internet.</p>
<p>Over time, the simplicity of IP, combined with the complexity and expense of these kinds of systems drove them from the scene. Some remnants live on in the directory structure contained in email and office software packages, but they are a shadow of <em>Streettalk, NDS, </em>and the Microsoft equivalent. The more direct descendants of these systems are single sign-on and OAUTH systems that allow you to use a single identity to log into multiple places.</p>
<p>But the primary function of finding things, rather than authenticating them, has long been left behind. Today, if you want to know someone’s email address, you look them up on your favorite social medial network. Or you don’t bother with email at all.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://rule11.tech/technologies-that-didnt-directory-services-2/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">13279</post-id>	</item>
	</channel>
</rss>
