<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Routing Freak!</title>
	<atom:link href="http://routingfreak.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://routingfreak.wordpress.com</link>
	<description>All About the Internet Routing Protocols and Related Technologies .. !</description>
	<lastBuildDate>Wed, 25 Jan 2012 04:49:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='routingfreak.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Routing Freak!</title>
		<link>http://routingfreak.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://routingfreak.wordpress.com/osd.xml" title="Routing Freak!" />
	<atom:link rel='hub' href='http://routingfreak.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Its time we retire Authentication Header (AH) from the IPsec Suite!</title>
		<link>http://routingfreak.wordpress.com/2012/01/02/its-time-we-retire-authentication-header-ah-from-the-ipsec-suite/</link>
		<comments>http://routingfreak.wordpress.com/2012/01/02/its-time-we-retire-authentication-header-ah-from-the-ipsec-suite/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 01:12:39 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[IP Routing]]></category>
		<category><![CDATA[IPsec]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[AH vs ESP-NULL]]></category>
		<category><![CDATA[Attacks]]></category>
		<category><![CDATA[Authentication Header (AH)]]></category>
		<category><![CDATA[Encapsulating Security Payload (ESP)]]></category>
		<category><![CDATA[ESP-NULL]]></category>
		<category><![CDATA[IP Header]]></category>
		<category><![CDATA[Routing]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=327</guid>
		<description><![CDATA[Folks who think Authentication Header (AH) is a manna from heavens need to read the Bible again. Thankfully you dont find too many such folks these days. But there are still some who thank Him everyday for blessing their lives with AH. I dread getting stuck with such people in the elevators &#8212; actually, i [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=327&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Folks who think <a href="http://tools.ietf.org/html/rfc4302" target="_blank">Authentication Header </a>(AH) is a manna from heavens need to read the Bible again. Thankfully you dont find too many such folks these days. But there are still some who thank Him everyday for blessing their lives with AH. I dread <a href="http://www.torinfo.com/justforlaughs/stuck_in_a_elevator.html" target="_blank">getting stuck with such people in the elevators</a> &#8212; actually, i dont think i would like getting stuck with anybody in an elevator, but these are definitely the worst kind to get stuck with.</p>
<p>So lets start from the beginning.</p>
<p><a href="http://en.wikipedia.org/wiki/IPsec" target="_blank">IPsec</a>, for reasons that nobody cares to remember now, decided to come out with two protocols &#8211; <a href="http://tools.ietf.org/html/rfc4303" target="_blank">Encapsulating Security Payload</a> (ESP) and AH, as part of the core architecture. ESP did pretty much what AH did, with the addition of providing encryption services. While both provided data integrity protection, AH went a step further and also secured a few fields from the IP header for you.</p>
<p>There are bigots, and i unfortunately met one a few days ago, who like to argue that AH provides greater security than ESP since AH covers the IP header as well. They parrot this since that&#8217;s what most textbooks and wannabe <a href="http://www.google.com/search?aq=f&amp;sourceid=chrome&amp;ie=UTF-8&amp;q=CCIE+blogs" target="_blank">CCIE blogs</a> and websites say. Lets see if securing the IP header really helps us.</p>
<p>When IPsec successfully authenticates the payload, we know that the packet came from someone who knew the authentication key. I would wager that that should be enough to accept the packet. The IP header is just required to route the packet to reach the recipient &#8211; its not meant to do anything else. Thats networking 101 really.</p>
<p>IPsec Security Associations are established based on the source and destination addresses and some L4 port information. The receiver matches the incoming packet&#8217;s against <a href="http://en.wikipedia.org/wiki/Security_Parameter_Index" target="_blank">SPI </a>and inbound selectors associated with the SA. Packet is only accepted if it came from the correct source and destination IP address. If an attacker somehow manages to change the IP header then there are high chances that it will get rejected by IPsec since it will fail the <a href="http://www.tcpipguide.com/free/t_IPSecSecurityAssociationsandtheSecurityAssociation.htm" target="_blank">Security Policy Database</a> (SPD) check.  So, what is protecting the header really giving us?</p>
<p>BTW ESP can also protect the IP header if its used in the tunnel mode. So, if someone is really keen on protecting the IP header then ESP in the tunnel mode can also be used. It should however be noted that ESP tunnel mode SA applied to an, say IPv6 flow,  results in at least 50 bytes of additional overhead per packet. This additional overhead may be undesirable for many bandwidth-constrained wireless and/or satellite communications networks, as these types of infrastructure are not over provisioned.</p>
<p>Packet overhead is particularly significant for traffic profiles characterized by small packet payloads (e.g., various voice codecs). If these small packets are afforded the security services of an IPsec tunnel mode SA, the amount of per-packet overhead is increased.</p>
<p>This issue will be alleviated by <a href="http://tools.ietf.org/html/rfc5856" target="_blank">header compression schemes</a> defined in the IETF.</p>
<p>I have recently published an <a href="http://www.ietf.org/id/draft-bhatia-ipsecme-avoiding-ah-00.txt" target="_blank">IETF draft</a> where i explicitly ask for AH to be retired since there is nothing useful that it does that cant be achieved with <a href="http://tools.ietf.org/html/rfc2410" target="_blank">ESP with NULL encryption algorithm</a>.</p>
<p>Please note that i have absolutely no complaints with AH and the claims that it makes. It does its job really well. Its just that its completely redundant and the world can certainly do with one less protocol to manage.</p>
<p>Retiring AH doesn&#8217;t mean that people have to stop using AH right now. It only means that in the opinion of the community there are now better alternatives. This will discourage new applications and protocols to mandate the use of AH. It however, does not preclude the possibility of new work to IETF that will require or enhance AH. It just means that the authors will have to do a real good job of convincing the community on why that solution is really needed and the reason why ESP with NULL encryption algorithm cannot be used instead.</p>
<p>The <a href="http://www.ietf.org/id/draft-bhatia-ipsecme-avoiding-ah-00.txt" target="_blank">IETF draft</a> that i have written aims to dispel several myths  surrounding AH and i show that in each case ESP with NULL encryption algorithm can be used instead, often with better results.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/327/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/327/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/327/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=327&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2012/01/02/its-time-we-retire-authentication-header-ah-from-the-ipsec-suite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>
	</item>
		<item>
		<title>Life of Crypto Keys employed in Routing Protocols</title>
		<link>http://routingfreak.wordpress.com/2011/12/24/life-of-crypto-keys-employed-in-routing-protocols/</link>
		<comments>http://routingfreak.wordpress.com/2011/12/24/life-of-crypto-keys-employed-in-routing-protocols/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 18:25:16 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[IP Routing]]></category>
		<category><![CDATA[IS-IS]]></category>
		<category><![CDATA[OSPF]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[AES]]></category>
		<category><![CDATA[CBC]]></category>
		<category><![CDATA[Cipher Block Chaining]]></category>
		<category><![CDATA[Cryptanalysis]]></category>
		<category><![CDATA[KARP]]></category>
		<category><![CDATA[key life times]]></category>
		<category><![CDATA[key size]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=317</guid>
		<description><![CDATA[Everyone knows that the cryptographic key used for securing your favorite protocol (OSPF, IS-IS, BGP TCP-AO, PIM-SM, BFD, etc)  must have a limited life time and the keys must be changed frequently. However, most people don&#8217;t understand the real reason for doing so. They argue that keys must be regularly changed since they are vulnerable to cryptanalysis attacks. Each [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=317&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Everyone knows that the cryptographic key used for securing your favorite protocol (OSPF, IS-IS, BGP TCP-AO, PIM-SM, BFD, etc)  must have a limited life time and the keys must be changed frequently. However, most people don&#8217;t understand the real reason for doing so. They argue that keys must be regularly changed since they are vulnerable to <a href="http://en.wikipedia.org/wiki/Cryptanalysis" target="_blank">cryptanalysis</a> attacks. Each time a crypto key is employed it generates a cipher text. In case of routing protocols the cipher text is the authentication data that is carried by the protocol packets. Its alleged that using the same key repetitively allows an attacker to build up a store of cipher texts which can prove sufficient for a successful <a href="http://en.wikipedia.org/wiki/Cryptanalysis" target="_blank">cryptanalysis</a> of the key value. It is also believed that if a routing protocol is transmitting packets at a high rate then the &#8221;long life&#8221; may be in order of a few hours. Thus it&#8217;s the amount of traffic that has been put on the wire using a specific key for authentication and not necessarily the duration for which the key has been in use that determines how long the key should be employed.</p>
<p>This was true in the Jurassic ages but not any more. The number of times a key can be used is  dependent upon the properties of the cryptographic mode than the algorithms themselves. In a <a href="http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation">cipher block chaining mode</a>, with a b-bit block, one can safely encrypt to around 2^(b/2) blocks. AES (<a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard" target="_blank">Advanced Encryption Standard</a>)  used worldwide has a fixed <a href="http://en.wikipedia.org/wiki/Block_size_(cryptography)" target="_blank">block size</a> of 128, which means that it can be safely used for 2^(64+4) bytes of routing data. If we assume a protocol that sends 1 Gig (!!) worth of control traffic *every* second, even then it is safe enough to be used for around 8700 *years* without changing the key! Hopefully, the system admin will remember to change the crypto key after 8700 years! <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>So, if the data is secure then why do we really need to change the crypto keys ever?</p>
<p>As a general rule, where strong cryptography is employed, physical, procedural, and logical access protection considerations often have more impact on the key life than do algorithm and key size factors. People need to change the keys when an operator who had access to the keys leaves the company. Using a key chain, a set of keys derived from the same keying material and used one after the other, also does not help as one still has to change all the keys in the key chain when an operator having access to all those keys leaves the company. Additionally, key chains will not help if the routing transport subsystem does not support rolling over to the new keys without bouncing the routing sessions and adjacencies.</p>
<p>Another threat against a long-lived key is that one of the systems storing the key, or one of the users entrusted with the key, could be subverted. So, while there may not be cryptographic motivations of changing the keys, there could be system security motivations for rolling or changing the key.</p>
<p>What complicates this further is that more frequent manual key changes might actually increase the risk of exposure as it is during the time that the keys are being changed that they are likely to be disclosed! In these cases, especially when very strong cryptography is employed, it may be more prudent to have fewer, well controlled manual key distributions rather than more frequent, poorly controlled manual key distributions.</p>
<p>To summarize, operators need to change their crypto keys because of social and political, rather than scientific or engineering driven reasons.</p>
<p>You can read more about this in the IETF draft that i have co-authored <a href="http://tools.ietf.org/html/draft-ietf-karp-design-guide" target="_blank">here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/317/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/317/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/317/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=317&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/12/24/life-of-crypto-keys-employed-in-routing-protocols/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>
	</item>
		<item>
		<title>Issues with how BFD is currently implemented over LAGs</title>
		<link>http://routingfreak.wordpress.com/2011/12/19/issues-with-how-bfd-is-currently-implemented-over-lags/</link>
		<comments>http://routingfreak.wordpress.com/2011/12/19/issues-with-how-bfd-is-currently-implemented-over-lags/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 05:09:11 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[BFD]]></category>
		<category><![CDATA[IP Routing]]></category>
		<category><![CDATA[IETF]]></category>
		<category><![CDATA[LACP]]></category>
		<category><![CDATA[LAGs]]></category>
		<category><![CDATA[Micro BFD session]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=291</guid>
		<description><![CDATA[The BFD standards dont explicitly talk about how BFD should be implemented on Link Aggregation Groups (LAGs). This leaves a lot of room for imagination and vendors have implemented their own proprietary mechanisms to make BFD work on LAGs. Now, there is only this much room for innovation and most vendors have naturally arrived at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=291&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The BFD standards dont explicitly talk about how BFD should be implemented on <a href="http://en.wikipedia.org/wiki/Link_aggregation" title="LAGs" target="_blank">Link Aggregation Groups</a> (LAGs). This leaves a lot of room for imagination and vendors have implemented their own proprietary mechanisms to make BFD work on LAGs. Now, there is only this much room for innovation and most vendors have naturally arrived at similar techniques to implement interoperable BFD over LAGs. So, what makes BFD so sticky to implement on LAGs?</p>
<p>BFD being an L3 protocol, is oblivious to the physical link that the BFD packets go out on. Usually, there is only one link associated with an L3 interface, and there is thus no ambiguity on the link that packet needs to go out on. However, when an IP interface is configured over a LAG, there are multiple constituent links that the packet can go out on, and BFD has to decide the link it wants to use for sending the packets out.</p>
<p>A LAG binds together several physical ports between two adjacent nodes so they appear to higher-layer protocols and applications as a single, higher bandwidth &#8220;virtual&#8221; pipe.  </p>
<p>The problem with running BFD over a LAG is that without internal knowledge of the LAG structure it is impossible for BFD to guarantee a detection of anything but a full LAG shutdown within the BFD timeout period.  The LAG shutdown is typically initiated by some LAG module. LAG timers are typically multiple times slower than the BFD detection timers (multiple 100ms vs. multiple 10ms of BFD).  There is thus a need to bring some sort of determinism in how BFD runs over a LAG. There is also a need to detect member link failures much faster than what Link Aggregation Control Protocol (LACP) allows.</p>
<p>Lets look at what implementations currently do to implement BFD on LAGs.</p>
<p>The simplest approach to run BFD on a LAG interface is to ignore the internal structure and treat the LAG as one &#8220;big, virtual pipe&#8221;.  </p>
<p>Because there is no standard, vendors have implemented their own proprietary mechanisms to run BFD over LAG interfaces.  Two examples are shown here.  </p>
<p>Some implementations send BFD packets only over the &#8220;primary&#8221; member link of the LAG. Others spray BFD packets over all member links of the LAG. There are issues with both these designs.</p>
<p>In the first design, BFD will remain Up as long as the primary link is alive. If the primary link goes down, and another link is not selected as the primary, before BFD times out (around 30-50ms), then the BFD session on the LAG comes crashing down. Problems arise as BFD, in this design, is oblivious to the presence of other member links in the LAG.  If a non-primary link goes down, the BFD session remains unaffected as it can still send and receive BFD packets over the primary link. Since the BFD session is Up, other routers in the network continue sending traffic meant to egress out of this interface. As expected from the LAG, all traffic egressing out of this interface gets load distributed on all LAG member links. Now, there is one link thats down. All traffic sent over that failed link gets dropped, till the LAG manager detects this and removes it from the LAG.</p>
<p>In the second design, BFD packets are sprayed over all the member links of a LAG.  This is done naively via round-robin, where each BFD packet is sent using the subsequent member link, in a round-robin fashion.  It solves the problem of BFD going down because of the primary link going down, but it still does not solve the problem of traffic getting lost when one of the member link goes down.  This is because, when a member link goes down, BFD remains up and traffic continues to go over the link that has failed till a higher layer protocol (usually LACP or the LAG Manager) detects this and removes the offending link from the LAG.</p>
<p>The above two designs defeat the core purpose of a BFD, which is to detect faults between the two forwarding engines. In each design traffic gets lost on a failed link till some protocol other than BFD detects this and removes that link from the LAG. The timers associated with the other protocol are an order of magnitude higher than BFD.</p>
<p>Operators have since long expressed a need to be able to detect the failed links fast so that their traffic doesnt get lost. The idea is to get BFD to take charge of the LAG and make it responsible for maintaining the list of active links in a LAG. This way we can use the BFD fast timers to quickly detect link failures.</p>
<p>One could argue that there are native Ethernet OAM mechanisms (.1ag, .3ah) that can be used to detect link failures in a LAG, and one need not rely on slow protocols like LACP or the LAG manager. The reality is that operators who have deployed BFD in their IP/MPLS networks want a common failure detection mechanism and dont want a mix of different technologies.</p>
<p>To solve the above mentioned issues I have co-authored an <a href="http://tools.ietf.org/html/draft-mmm-bfd-on-lags" target="_blank">IETF document</a> that proposes running BFD on each constituent link of the LAG. We call the BFD sessions running on each link a &#8220;micro BFD session&#8221;. We call this mode of BFD on LAGs as BLM &#8211; BFD on Lag Members.</p>
<p>BLM is an umbrella BFD session that contains information about the LAG (or the aggregated interface) that its running on. It consists of a set of micro BFD sessions that are running on each constituent link of the LAG. And it contains a state that we call the &#8220;Concluded State&#8221;, which describes the overall state of the LAG (Up, Down, AdminDown).</p>
<p>Each micro BFD session is a regular <a href="http://tools.ietf.org/rfc/rfc5880.txt">RFC 5880</a> and <a href="http://tools.ietf.org/rfc/rfc5881.txt">RFC 5881</a> compliant BFD session. Only Asynchronous mode is supported for the micro BFD sessions as the sole reason for running BFD on each member link is to verify the link connectivity.  The Echo function for the micro BFD sessions is not recommended as it requires   twice as many packets to achieve a particular Detection time as does the pure Asynchronous mode.  </p>
<p>At least one system MUST take the Active role (possibly both).  The micro BFD sessions on the member links are independent BFD sessions.  They use their own unique, local discriminator values, maintain their own set of state variables and have their own independent state machine.  Typically each micro BFD session will have the same timer values, however, nothing precludes the possibility of having different timer values among the different micro BFD sessions belonging to the same LAG.</p>
<p>A session begins with the periodic, slow transmission of BFD Control packets.  When bidirectional communication is achieved, the BFD session becomes Up.  The LAG manager is informed at this point, and the member link becomes an active link of the LAG.</p>
<p>If the micro session goes Down, the transmission of Control packets goes back to the slow rate.  The LAG Manager is informed which removes the member link from the LAG.</p>
<p>Once a session has been declared Down, it cannot come back up until the remote end first signals that it is down (by leaving the Upstate), thus implementing a three-way handshake.</p>
<p>A session MAY be kept administratively down by entering the AdminDown state and sending an explanatory diagnostic code in the Diagnostic field.</p>
<p>In short, its pretty much the same as a standard BFD session.</p>
<p>This solves the issues that i had described in the earlier two designs. The micro BFD sessions will quickly detect a failed link, and will instantly remove it from the LAG. Traffic that was earlier egressing out over the failed link, will now get hashed to a different link in the LAG. This results in zero traffic loss on the LAG.</p>
<p>You can read more about our proposal <a href="http://tools.ietf.org/html/draft-mmm-bfd-on-lags" title="BFD on LAGs" target="_blank">here</a>.</p>
<p>Recognizing the need for running BFD on all member links, various vendors support their own proprietary, un-interoperable implementation of BFD over LAGs. We&#8217;re hoping that our IETF proposal to standardize this behavior will bring some order to the chaos thats out there and a relief to the providers who are stuck with proprietary solutions.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/291/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/291/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/291/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=291&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/12/19/issues-with-how-bfd-is-currently-implemented-over-lags/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>
	</item>
		<item>
		<title>So what are inter-session Replay attacks?</title>
		<link>http://routingfreak.wordpress.com/2011/04/05/so-what-are-inter-session-replay-attacks/</link>
		<comments>http://routingfreak.wordpress.com/2011/04/05/so-what-are-inter-session-replay-attacks/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 02:22:07 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[BFD]]></category>
		<category><![CDATA[IP Routing]]></category>
		<category><![CDATA[OSPF]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=257</guid>
		<description><![CDATA[Inter-session replay attacks are extremely hard to fix and most IETF routing and signaling protocols are vulnerable to them. Lets first understand what an inter-session replay attack is before we delve deeper into how we can fix them. A reply attack is a type of an attack where the attacker captures the packets exchanged between [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=257&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Inter-session replay attacks are extremely hard to fix and most IETF routing and signaling protocols are vulnerable to them. Lets first understand what an inter-session replay attack is before we delve deeper into how we can fix them.</p>
<p>A reply attack is a type of an attack where the attacker captures the packets exchanged between two routers and later retransmits, or &#8220;replays&#8221;, this same packet back to the routers and thereby deceiving them into believing that this is a legitimate packet sent by their remote neighbor. Lets see how this will work:</p>
<p>Assume router A is sending an integrity protected (via some authentication mechanism) protocol packet to router B. The attacker can record the packet that A is sending. The attacker now waits for some time and retransmits this packet without any modification, back to B. B upon receiving this packet will as usual first try to verify the contents for any tampering. It will do this by verifying the authentication digest (usually Keyed-MD5 or HMAC-SHA) that the packet carries. Since the attacker has not modified the packet it will pass the integrity check as long as the key exchanged between the two routers remains unchanged. The integrity checks will pass on Router B and it will accept this packet as a legitimate packet sent by A.</p>
<p>This is a replay attack &#8211; So, how can it harm you?</p>
<p>Assume A was not advertising any route, or any neighbor reachability when the attacker had recorded this control packet.  In OSPF parlance, this could be a Hello without any neighbors or a RIPv2 packet without any routing information. Later when A learns some routes or neighbors it sends an updated protocol packet listing this information. B receives this packet and updates its protocol state and routing tables based on the information that A provides. Now the attacker replays the earlier recorded packet. B, upon receiving this &#8220;new&#8221; packet believes this to have come from A and updates its routing tables accordingly. This is incorrect as B will now update its forwarding tables based on stale information. If the replayed packet is an old OSPF Hello when A did not have any neighbors, B will, upon receiving this packet assume that A has now lost all its neighbors and will delete all routes via A. I had co-authored <a href="http://tools.ietf.org/html/rfc6039">RFC 6039</a> some time back which describes many such replay attacks in great detail.</p>
<p>So, how do IETF protocols protect themselves from such attacks?</p>
<p>Most protocols packets carry a Cryptographic Sequence Number that increases as each packet is sent. The receivers only accept a packet if it carries a sequence number that is higher than what it had received earlier from the same neighbor.</p>
<p>This fixes the problem that i had described earlier as the replayed packet will carry a sequence number that will be lower than what B would have last heard from A. B, upon receiving this replayed packet will not accept it and would thus prevent itself from such replay attacks.  Its appears that we have a solution against all replay attacks &#8211; do we?</p>
<p>Well it turns out that the answer to this question is a big NO!</p>
<p>The cryptographic sequence number can protect us from what i call the intra-session replay attacks. However, it cannot protect us against inter-session replay attacks. Let see why?</p>
<p>Assume that the cryptographic sequence number currently being used by router A for some specific routing protocol is 1000. This means that B will not accept any protocol packet if it comes with a sequence number less than 1000. This is fine, and this will protect us against some attacks. Now assume that the attacker captures and records this packet with sequence number 1000. No one will know about this as the attacker has silently recorded this packet.</p>
<p>Now the attacker has to wait patiently till the current session between the Router A and Router B goes down and a new one is established. This can happen if one of the routers reboots (could be planned or unplanned). When this happens the routers reset their cryptographic sequence number to 0 and start all over again. If the password key  between the two routers has not changed, and it usually doesn&#8217;t, then the packet that the attacker has captured is carrying a valid cryptographic digest. The attacker can replay this packet any time and this will get accepted by B if the current sequence number that its seeing in the new session from A is less than 1000. This is an inter-session replay attack and is extremely difficult to fix with the current IETF security and authentication mechanisms. Note that a trivial way to protect against inter-session replay attacks is by changing the key each time a new session is established. However changing the key requires manual intervention and thus cannot be easily done all the time.</p>
<p>So, how do you fix this issue?</p>
<p>Sam Hartman (Huawei), Dacheng (Huawei) and I have submitted two proposals in the IETF to fix this inter-session replay attacks that i have described above.</p>
<p>The first is extremely simple.</p>
<p>We propose to change the current cryptographic sequence number space from 32 bits to 64.  The least significant 32 bits would be the usual cryptographic sequence number that will monotonically increase with each fresh packet transmitted. The most significant 32 bits would indicate the number of times this router has cold booted. Thus when the router initially comes up for the first time its value would be 0. Next time when it reboots and comes up, its value would be 1.</p>
<p>Consider a state when the router has cold booted &#8220;n&#8221; times and its current cryptographic sequence number is &#8220;m&#8221;. The aggregated cryptographic sequence number that will be used by the routing protocols would be:</p>
<p>m &lt;&lt; 32 || n, where &lt;&lt; is the left shift operator and || is the bit-wise OR operation.</p>
<p>Now this router reboots (again planned or unplanned).</p>
<p>Now its cryptographic sequence space starts from:</p>
<p>(m+1) &lt;&lt; 32</p>
<p>Its trivial to see that the ((m+1) &lt;&lt; 32) &gt; ((m &lt;&lt; 32) || n) for all values of m and n where each m and n &gt; 0.</p>
<p>This mechanism will solve the inter-session replay attacks that have been described above. I will describe the second method in some other post. We have defined a generic mechanism that all protocols can use here in this <a href="http://tools.ietf.org/html/draft-bhz-karp-inter-session-replay-00">KARP draft</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/257/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/257/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/257/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=257&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/04/05/so-what-are-inter-session-replay-attacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>
	</item>
		<item>
		<title>Why providers still prefer IS-IS over OSPF when designing large flat topologies!</title>
		<link>http://routingfreak.wordpress.com/2011/03/05/why-providers-still-prefer-is-is-over-ospf-when-designing-large-flat-topologies/</link>
		<comments>http://routingfreak.wordpress.com/2011/03/05/why-providers-still-prefer-is-is-over-ospf-when-designing-large-flat-topologies/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 02:20:24 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[IP Routing]]></category>
		<category><![CDATA[IS-IS]]></category>
		<category><![CDATA[OSPF]]></category>
		<category><![CDATA[OSPF vs IS-IS]]></category>
		<category><![CDATA[ATM]]></category>
		<category><![CDATA[Cisco]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[IPX]]></category>
		<category><![CDATA[Leaf nodes in OSPF]]></category>
		<category><![CDATA[Mesh Groups]]></category>
		<category><![CDATA[NLSP]]></category>
		<category><![CDATA[Overload Mechanisms]]></category>
		<category><![CDATA[Router IDs]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[spf]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=230</guid>
		<description><![CDATA[I was recently interacting with our pre-sales team for a large MPLS deployment and was reading the network design that was proposed. I saw that they had suggested IS-IS over OSPF as the IGP to use at the core. One of the reasons cited was the inherent security that IS-IS provides by running natively over [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=230&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was recently interacting with our pre-sales team for a large MPLS deployment and was reading the network design that was proposed. I saw that they had suggested IS-IS over OSPF as the IGP to use at the core. One of the reasons cited was the inherent security that IS-IS provides by running natively over the Layer 2. Another was that IS-IS is more modular and thus easier to extend as compared to OSPF. OSPF, its alleged is very rigid and required a complete protocol rewrite to support something as basic as IPv6! <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Then there was this overload feature that IS-IS provides which can signal memory overload that does not exist in OSPF and finally a point about IS-IS showing superior scalability (faster convergence). In case you&#8217;re intrigued about the last point, as i clearly was, then it was explained that IS-IS uses just one Link State Packet (LSP) per level for exchanging the routing information. This LSP contains many TLVs, each of which represents a piece of routing information. OSPF on the other hand, needs to originate multiple LSAs, one for each type and thus is a lot more chatty and thus not suitable for large flat networks.</p>
<p>I personally dont agree to any one of the reasons listed above and anyone who favors IS-IS over OSPF for the above reasons is patently mistaken. These are all extremely weak arguments and have mostly been overtaken by reality. Lets look at each one by one.</p>
<p>Security &#8211; While its true that one cant lob an IS-IS packet from a distance without a tunnel it was never really a compelling reason for some one to pick up IS-IS over OSPF. The same holds good for OSPF multicast packets as well which cannot be launched by some script kidde sitting miles away from his personal laptop. Both the protocols have been extended to support stronger algorithms  (<a href="http://tools.ietf.org/rfc/rfc5310.txt" target="_blank">RFC 5310</a> for IS-IS and <a href="http://tools.ietf.org/rfc/rfc5709.txt" target="_blank">RFC5709</a> for OSPF) and have similar authentication mechanisms. I can say this with some degree of confidence as i have co-authored both these standards.</p>
<p>Modularity &#8211; While its somewhat easier to extend IS-IS in a backward compatible way this sort of thing doesnt happen much any more. Both protocols have been extended to support multiple instances, traffic engineering, multi-topology, graceful restart, etc. This isnt imo a showstopper for someone picking up OSPF as the IGP to use.</p>
<p>Overload Mechanism &#8211; IS-IS has the ability to set the Overload (OL) bit in its LSAs. This results in other routers in that area treating this router as a leaf router in their shortest path trees, which means that its only used for reaching the directly connected interfaces and is never placed on the transit path to reach other routers. So does this happen any more? No, it doesnt. This feature was required in the jurassic age when routers came with severely constrained memory, CPU power and the original intention of the OL mechanism is now mostly irrelevant. Most core routers today have enough memory and CPU that they will not get inundated by the IS-IS routes in any sane network design.</p>
<p>These days OL bit is used to prevent unintentional blackholing of packets in BGP transit networks. Due to the nature of these protocols, IS-IS and OSPF converge must faster than BGP. Thus there is a possibility that while the IGP has converged, IBGP is still learning the routes. In that case if other IBGP routers start sending traffic towards this IBGP router that has not yet completely converged it will start dropping traffic. This is because it isnt yet aware of the complete BGP routes. OL bit comes handy in such situations. When a new IBGP neighbor is added or a router restarts, the IS-IS OL bit is set. Since directly connected (including loopbacks) addresses on an &#8220;overloaded&#8221; router are considered by other routers, IBGP can be bought up and can begin exchanging routes. Other routers will not use this router for transit traffic and will route the packets out through an alternate path. Once BGP has converged, the OL bit is cleared and this router can begin forwarding transit traffic.</p>
<p>So how can we do this in OSPF since there is no OL bit in its LSAs?</p>
<p>Simple. We can set the metric of all transit links on an &#8220;overloaded&#8221; router to 0xffff in its Router LSAs. This will result in the router not being included as a transit node in the SPF tree.  Stub links can still be advertised with their normal metrics so that they are reachable even when the router is &#8220;overloaded&#8221;.  Thus this point against OSPF is also not valid.</p>
<p>Finally we come to the scalability and the convergence part. This one is slightly tricky and is not so easy. I wrote a few posts around 4 years back discussing this <a href="http://routingfreak.wordpress.com/2007/03/03/convergence-and-scalability-issues/">here</a> and <a href="http://routingfreak.wordpress.com/2007/03/03/database-granularity-in-ospf-vs-is-is/">here</a>. You might want to read these.</p>
<p>IMO one of the big reasons why most big providers use (or have used) IS-IS is because way back in 90s <a href="http://www.cisco.com/en/US/tech/tk365/technologies_white_paper09186a0080094e9e.shtml">Cisco OSPF</a> implementation was a disaster. The first big ISPs (<a href="http://en.wikipedia.org/wiki/UUNET">UUnet</a>, <a href="http://en.wikipedia.org/wiki/MCI_Inc.">MCI</a>) came to them and said &#8220;we want to build big infrastructures, should we use OSPF?&#8221; and Cisco basically said &#8220;No, thats not a good idea, use IS-IS instead&#8221;. <a href="http://www.arkko.com/tools/allstats/davekatz.html">Dave Katz</a> in Cisco had recently rewritten Cisco&#8217;s IS-IS implementation as a side effect of implementing <a href="http://support.novell.com/techcenter/articles/ana19940505.html">NetWare Link Services Protocol</a> &#8211; NLSP (basically IS-IS for Novel IPX) so Cisco was quite confident of its IS-IS implementation. The operators thus picked up IS-IS and continue using it even today as there is really no real difference between IS-IS and OSPF, so no motivation to move from one to the other.</p>
<p>IS-IS was also an advantage in the early days as a router vendor because it was an &#8220;open proprietary spec&#8221;.  It was out there, and published, but unless you had some background in OSI you didn&#8217;t know much about it and the spec was scary and weird.  This wasn&#8217;t on purpose, but it was handy.</p>
<p>It was also nice in the IETF because IS-IS was viewed, at least at the time, as the poor cousin of OSPF and so nobody really cared that much other than the handful of folks that were doing the work.  This made the extension of IS-IS a lot easier and a lot less political than OSPF.  In fact i have heard about a t-shirt which said &#8220;IS &#8211; IS = 0&#8243; that was distributed in one of the IETF meetings long time ago! Things however have changed and IS-IS is considered at par with OSPF today and both the working groups are quite active in the IETF.</p>
<p>There was one real technical advantage to IS-IS in common deployment scenarios of that day as well.  Back then, it was popular to build full meshes of ATM or Frame Relay as the Layer 2 topology for large backbones, because of the perception that healing faults at L2 would happen faster and cleaner than letting the IP routing protocols take care of it (arguably true at the time).  Full mesh topologies are the worst possible topologies for standard flooding protocols (IS-IS and OSPF both) and the cost of topology changes was huge.  However, IS-IS lent itself to the &#8220;<a href="http://tools.ietf.org/rfc/rfc2973.txt">mesh group</a>&#8221; hack by which you could manually prune the flooding topology to be a subset of the links.  OSPF doesn&#8217;t easily allow this because of details about the flooding model it uses.  Cisco apparently did implement a hack to get around this problem, but its probably more gross than the IS-IS &#8220;mesh groups&#8221; hack!</p>
<p>Another reason i believe people prefer IS-IS over OSPF is the belief that you can design large networks by building a single large Level 1 (L1) area without any hierarchies in IS-IS and still be able to manage &#8211; something that would be difficult with OSPF. There are issues with inter-area traffic engineering and such and most people would like to keep their network as a single area if the routing protocol can manage it.</p>
<p>I used to believe that operators can design big networks without hierarchies in IS-IS since all IP prefixes (i.e. network interfaces, routes aka reachabilities in ISO-speak) are considered as leaf nodes in the SPF for IS-IS. Thus a full SPF will not be triggered for an interface or a route flap in case of IS-IS. OSPF otoh, would go ballistic running SPF each time any IP information changes. The only time we dont run a full SPF in when a Type 5 LSA information changes, but thats hardly an optimization. Compared to this, the only time we run a full SPF in IS-IS is when an actual node goes down (which OSPF would also anyways do).</p>
<p>I was recently having a discussion with Dave Katz from Juniper on this and i realized that this really is an implementation choice. &#8220;The graph theory&#8221;, he very aptly pointed out, &#8220;is the same in both cases!&#8221;.  The IS-IS spec makes it easier to put an IS-IS reachability as leaf nodes as all routers are identified by a different set of TLVs. This information while its available in OSPF is slightly tricky as the node information is mixed with the link information. Thus while even a naive IS-IS implementation may be able to optimize SPF, it would require a good understanding of the spec to get it right in OSPF.</p>
<p>You could get the exact same optimization in OSPF as IS-IS if you realize that OSPF calculates the routes to the *router IDs* and not the addresses. The distinction between nodes and destinations is syntactically (and semantically) quite clear in OSPF as well. The spec considers the Router IDs which i concede look like IP addresses, something that most people miss.</p>
<p>Actual addresses and prefixes are quite distinct, even in OSPF.  So as long as you can keep track of what&#8217;s an address and what&#8217;s an ID, it&#8217;s not that hard, for what it&#8217;s worth.  The bigger problem is that only a handful of people really understand *why* things in the OSPF spec are done the way they are, and there are less and less of those folks because hardly anybody *needs* to understand it.</p>
<p>But having said all that, the cost of an SPF is so small on the scale of things that it&#8217;s not really the issue (which is also why I am not a big fan of partial-SPF optimizations:  &#8221;See how great it works when you have around O(50K) nodes and there is this one little node that goes down!&#8221; is sort of silly because lots of other things would break before a network ever got that big.)</p>
<p>Part of the SPF fear was I believe because Cisco&#8217;s original SPF implementation in OSPF was horribly inefficient (and everyone was using slow processors back then) and IOS was a non-preemptive, single threaded environment, and so an SPF (or any slow process) would block other things (like sending and receiving Hellos and other important bits) and would affect *everything*. I am btw sure that its changed now since i am aware of a couple of large Cisco deployments that are running OSPF in the core!  Overall system state management is a *much* bigger problem these days than the algorithmic efficiency of these protocols, particularly as we build larger and more distributed environments that require message passing internally.</p>
<p>Also what could have pushed providers back then to IS-IS was the deployment guidelines that Cisco used to publish (including the number of routes in an area) back then which were absurdly small. I am sure, its changed now.</p>
<p>There&#8217;s no technical reason why very large flat topologies can&#8217;t be supported by a good implementation of either protocol, but ISPs need to be conservative and suspicious of their vendors in order to survive.  ;-) I guess that nobody wants to be the first to deploy a large flat OSPF topology;  best practices tend to be sticky. However, there is no reason why you cant do it with OSPF today.</p>
<p>I suspect that, at this point, ISPs choose based on culture and familiarity and comfort rather than real technical differences. The perception still exists that while IS-IS can support large flat networks, OSPF cant. However, as i said its just a perception and is not really true any more.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/230/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/230/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/230/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=230&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/03/05/why-providers-still-prefer-is-is-over-ospf-when-designing-large-flat-topologies/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>
	</item>
		<item>
		<title>Catching Corrupted OSPF Packets!</title>
		<link>http://routingfreak.wordpress.com/2011/03/01/catching-corrupted-ospf-packets/</link>
		<comments>http://routingfreak.wordpress.com/2011/03/01/catching-corrupted-ospf-packets/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 00:58:04 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[IP Routing]]></category>
		<category><![CDATA[OSPF]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[CRC]]></category>
		<category><![CDATA[IETF]]></category>
		<category><![CDATA[Internet Checksum]]></category>
		<category><![CDATA[MD5]]></category>
		<category><![CDATA[OSPFv2]]></category>
		<category><![CDATA[OSPFv3]]></category>
		<category><![CDATA[Quagga]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=129</guid>
		<description><![CDATA[I was having a discussion with Paul Jakma (a friend, co-author in a few IETF drafts, a routing protocols expert, the guy behind Quagga, the list just goes on ..) some time back on a weird problem that he came across at a customer network where the OSPF packets were being corrupted in between being [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=129&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was having a discussion with <a href="http://pjakma.wordpress.com/" target="_blank">Paul Jakma</a> (a friend, co-author in a few IETF drafts, a routing protocols expert, the guy behind <a href="http://www.quagga.net/" target="_blank">Quagga</a>, the list just goes on ..) some time back on a weird problem that he came across at a customer network where the OSPF packets were being corrupted in between being read off the wire and having CRC and IP checksum verified and being delivered to OSPF stack. While the problem was repeatable within 30 minutes on that particular network, he could never reproduce it on his VM network (and neither could the folks who reported this problem).</p>
<p>Eventually, for some inexplicable reason, he asked them to turn on MD5 authentication (with a tweak to drop duplicate sequence number packets &#8211; duplicate packets as the trigger of the problems being a theory). With this, their problems changed from &#8220;weird&#8221; to &#8220;adjacencies just start dropping, with lots of log messages about MD5 failures&#8221;!</p>
<p>So it appears that the customer had some kind of corruption bug in custom parts of their network stack, on input, such that OSPF gets handed a good long sequence of corrupt packets &#8211; all of which  (we dont know how many) seem to pass the internet checksum and then cause very odd problems for OSPF.</p>
<p>So, is this a realistic scenario and can this actually happen? While i have personally never experienced this, there are chances of this happening because of any of the following reasons:</p>
<p>o PCI transmission error (PCI parallel had parity checks, but not always enabled, PCI express has a 32bit CRC though)</p>
<p>o memory bus error (though, all routers and hosts should use <a href="http://www.tech-faq.com/ecc-memory.html">ECC RAM</a>)</p>
<p>o bad memory (same)</p>
<p>o bad cache (CPUs don&#8217;t always ECC their caches &#8211; Sun its seems was badly bitten by this; While the last few generations of Intel and AMD CPU do this, what about all those embedded CPUs that we use in the routers?)</p>
<p>o logic errors, particularly in network hardware drivers</p>
<p>o finally, CRCs and the internet checksum are not very good and its not impossible for wire-corrupted packets to get past link, IP AND OSPF CRC/checksums.</p>
<p>The internet checksum, which is used for the OSPF packet checksum, is incredibly weak. There are various papers out there, <a href="http://portal.acm.org/citation.cfm?id=294357.294364">particularly ones by Partridge</a> (who helped author the <a href="http://tools.ietf.org/rfc/rfc1071.txt" target="_blank">internet checksum RFC</a>!) which cover this, basically it offers very little protection:</p>
<p>- it can&#8217;t detect re-ordering of 2-byte aligned words<br />
- it can&#8217;t detect various bit flips that keep the 1s complement sum the same (e.g. 0&#215;0000 to 0xffff and vice versa)</p>
<p>Even the <a href="http://conferences.sigcomm.org/sigcomm/2000/conf/paper/sigcomm2000-9-1.pdf" target="_blank">link-layer CRC also is not perfect</a>, and Partridge has co-authored papers detailling how corrupted packets can even get past both CRC and internet checksum.</p>
<p>So what choice do the operators have for catching corrupted packets in the SW?</p>
<p>Well, they could either use the incredibly poor <a href="http://tools.ietf.org/rfc/rfc1071.txt" target="_blank">internet checksum</a> that exists today or they could turn on cryptographic authentication (keyed MD5 with <a href="http://tools.ietf.org/rfc/rfc2328.txt" target="_blank">RFC 2328</a> or different HMAC-SHA variants with <a href="http://tools.ietf.org/rfc/rfc5709.txt" target="_blank">RFC 5709</a>) and catch all such failures. The former would not always work as there are errors that can creep in with these algorithms. The latter would work but there are certain disadvantages  is using cryptographic HMACs purely for integrity checking. The algorithms require more computation, which may be noticable on less powerful and/or energy-sensitive platforms. Additionally, the need to configure and synchronize the keying material is an additional administrative burden. I had <a href="http://seclists.org/nanog/2010/Oct/450" target="_blank">posted a survey</a> on <a href="http://www.nanog.org" target="_blank">Nanog </a>some time back where i had asked the operators if they had ever turned on crypto protection to detect such failures and i received a couple of responses offline where they alluded to doing this to prevent checksum failures.</p>
<p>Paul and I wrote a short <a href="http://www.ietf.org" target="_blank">IETF </a>draft some time back where we propose to change the checksum algorithm used for verifying OSPFv2 and <a href="http://www.rfc-editor.org/rfc/rfc5340.txt" target="_blank">OSPFv3</a> packets. We would only like to upgrade the very weak packet checksum with something thats more stronger without having to go with the full crypto hash protection way. You can find all the gory details <a href="http://tools.ietf.org/html/draft-jakma-ospf-integrity-00" target="_blank">here</a>!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/129/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/129/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/129/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=129&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/03/01/catching-corrupted-ospf-packets/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>
	</item>
		<item>
		<title>Hub and Spoke Multi-Point LSPs for Scalable VPLS Architecture</title>
		<link>http://routingfreak.wordpress.com/2011/02/27/hub-and-spoke-multi-point-lsps-for-scalable-vpls-architecture/</link>
		<comments>http://routingfreak.wordpress.com/2011/02/27/hub-and-spoke-multi-point-lsps-for-scalable-vpls-architecture/#comments</comments>
		<pubDate>Sun, 27 Feb 2011 11:40:07 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[MPLS]]></category>
		<category><![CDATA[VPLS]]></category>
		<category><![CDATA[GMPLS]]></category>
		<category><![CDATA[H-VPLS]]></category>
		<category><![CDATA[HSMP]]></category>
		<category><![CDATA[LSP]]></category>
		<category><![CDATA[P2MP]]></category>
		<category><![CDATA[P2P LSP]]></category>
		<category><![CDATA[RSVP-TE]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=188</guid>
		<description><![CDATA[Multiprotocol Label Switching (MPLS) and Generalized MPLS (GMPLS) provide a mechanism to set up point-to-multipoint (P2MP) LSPs which carry traffic from one ingress point (the root node) to several egress points (the leaf nodes), thus enabling multicast forwarding in an MPLS domain. However, there is no provision to provide a co-routed path back from the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=188&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://tools.ietf.org/html/rfc3031">Multiprotocol Label Switching</a> (MPLS) and <a href="http://tools.ietf.org/search/rfc3945">Generalized MPLS</a> (GMPLS) provide a mechanism to set up <a href="http://tools.ietf.org/html/rfc4461">point-to-multipoint</a> (P2MP) LSPs which carry traffic from one ingress point (the root node) to several egress points (the leaf nodes), thus enabling multicast forwarding in an MPLS domain. However, there is no provision to provide a co-routed path back from the egress points (the leaves) to the ingress node (the root). The only way to do this is by configuring Unidirectional point-to-point LSPs from the leaves back to the root node. This entails configuring each leaf node with an LSP back to the root which could be a configuration and management nightmare if the number of leaves are large. Second, it can also not guarantee a co-routed path back from the leaf to the node, as the process of setting up the Unidirectional P2P path is independent from setting up the P2MP path.</p>
<p>This post introduces the concept of a hub-and-spoke multipoint (HSMP) LSP that allows traffic from the root to the leaves via a P2MP LSP and back from the leaves to the root via a unidirectional co-routed LSP. The proposed technique targets one-to-many applications that require reverse one-to-one traffic flow (thus many one-to-one in the reverse direction).</p>
<p>Consider the figure shown below.</p>
<p><a href="http://routingfreak.files.wordpress.com/2011/02/p2mp-lsp.jpg"><img src="http://routingfreak.files.wordpress.com/2011/02/p2mp-lsp.jpg?w=490" alt="" title="HSMP LSP"   class="aligncenter size-full wp-image-195" /></a></p>
<p>PE1 is the ingress router for the <a href="http://tools.ietf.org/html/draft-jjb-mpls-rsvp-te-hsmp-lsp-00">HSMP LSP</a>. The egress routers (leaves) are PE2, PE3 and PE4. As can be seen from the figure, PE1 creates a single copy of each packet arriving from the data source. This packet carries the MPLS label value L1. P1 is an ordinary Label Switch Router (LSR) that swaps the incoming label L1 with L2. Lets now focus on the packet forwarding process on the node P2. </p>
<p>For each packet belonging to the HSMP LSP, P2 makes three copies (just like how its done for a P2MP LSP), each of which is sent to PE2, PE3 and PE4 respectively. Packets arrive at P2 with MPLS label L2. As shown in the above figure, P2&#8242;s ILM contains an entry for label L2 saying that one copy of the packet should be sent out on interface if1 with label L3, another copy on interface if2 with label L4 and a last copy on interface if3 with label L5. Since the LSR P2 is replicating the MPLS packets its called the branch node.</p>
<p>An obvious advantage of this scheme is the bandwidth optimization. If we had used unidirectional P2P LSPs instead of an HSMP LSP, PE1 would have sent three copies of each packet that it had received from the data source and thus congesting the links PE1-P1 and P1-P2.</p>
<p>What sets an <a href="http://tools.ietf.org/html/draft-jjb-mpls-rsvp-te-hsmp-lsp-00">HSMP LSP</a> apart from a regular P2MP LSP is the ability in the former to set up a path from the leaves back to the root. P2MP LSPs are unidirectional, so no traffic can flow from the leaf node routers to the ingress head end router along the P2MP LSP. In HSMP LSP, the leaf nodes can also send unidirectional traffic back to the root. This is shown in the figure below.</p>
<p><a href="http://routingfreak.files.wordpress.com/2011/02/reverse-traffic-hsmp.jpg"><img src="http://routingfreak.files.wordpress.com/2011/02/reverse-traffic-hsmp.jpg?w=490" alt="" title="reverse traffic HSMP"   class="aligncenter size-full wp-image-197" /></a></p>
<p>Because of the mechanisms defined in HSMP LSP, the branch node P2 advertises the same upstream label L1 for a given HSMP LSP to the nodes PE2, PE3 and PE4. It programs its ILM table as shown above, where it simply swaps L1 with L2 for all incoming MPLS packets and sends those towards P1. This way HSMP LSP is also able to provide a path back from the leaf nodes to the root node.</p>
<p>In the <a href="http://routingfreak.wordpress.com/2011/02/21/does-hierarchical-vpls-solve-all-scaling-issues-found-in-vpls/">last post</a> i had discussed issues that exist in VPLS. Lets see how HSMP LSP can solve them. I am using the same topology as was used there to demonstrate how HSMP LSP helps.</p>
<p><a href="http://routingfreak.files.wordpress.com/2011/02/hsmp-in-vpls1.jpg"><img src="http://routingfreak.files.wordpress.com/2011/02/hsmp-in-vpls1.jpg?w=490" alt="" title="HSMP in VPLS"   class="aligncenter size-full wp-image-205" /></a></p>
<p>The figure 3 above shows the same VPLS service that we had discussed in the <a href="http://routingfreak.wordpress.com/2011/02/21/does-hierarchical-vpls-solve-all-scaling-issues-found-in-vpls/">earlier post</a>.</p>
<p>PE1 knows through some out-of-band mechanism (could be via BGP, Radius, manual configs, etc) that PE2, PE3 and PE4 are the egress nodes that belong to the same VPLS domain. PE1 now needs to establish an HSMP LSP (can be trivially extended to support a pseudowire) to PE2, PE3 and PE4. Figure shows 3 HSMP LSPs that will be required in this arrangement. The red HSMP LSP has PE1 as the root node and PE2, PE3 and PE4 as the leaf nodes. The green HSMP LSP has been initiated by PE2 and has PE2 as the root, and PE1, PE3 and PE4 as the leaf nodes. The blue HSMP LSP has been initiated by PE3 and has PE1, PE2 and PE4 as the leaf nodes. There is another HSMP LSP thats required &#8211;  the one initiated by PE4 for the VPLS service to function. It has been omitted from the figure for the sake of clarity.</p>
<p>Thus all PE nodes in a VPLS service need to initiate an HSMP LSP (or a HSMP pseudowire) that terminates at the other PE routers.  </p>
<p>In VPLS all BUM (broadcast, unknown unicast and multicast) traffic is flooded to all PE nodes. Its only the learnt traffic thats sent unicast by one PE to the other PE.</p>
<p>As explained earlier, a single copy sent by PE1 over an HSMP LSP will reach PE2, PE3 and PE4 (due to its P2MP component). Also the PE routers PE2, PE3 and PE4 can use this HSMP LSP (terminating at them) to send unicast traffic back to PE1.</p>
<p>Thus PE1 sends all BUM traffic on the HSMP LSP it initiates and all learnt unicast over the HSMP LSP that terminates on it.</p>
<p>Going back to figure 3, we can see that PE1 can use the red HSMP LSP to send all BUM traffic. This way it only sends one copy, and all the PE routers receive this packet. If PE1 wants to send learnt unicast traffic back to PE2, it uses the green HSMP LSP that terminates on it. PE1 can use this to send traffic back to PE2, which is the root node for this HSMP LSP. Similarly, PE1 uses the blue HSMP LSP whenever it wants to send learnt unicast traffic back to PE3.</p>
<p>Lets look at LSPs that PE2 uses. Whenever it wants to send BUM traffic, it uses the green HSMP LSP that it has originated. Any packet sent over that LSP is received by all the leaf nodes (which in this case happen to be PE1, PE3 and PE4). Like PE1, if it has to send learnt unicast traffic back to PE1, it uses the red HSMP LSP that was originated by PE1 and terminates at PE2.</p>
<p>Thus for a VPLS to fully function, all PE nodes must establish an HSMP LSP with all the other participating PE routers. It can use the optimized HSMP LSP that it originates for the BUM traffic and the HSMP LSP that other PEs originate for unicast communication.</p>
<p><a href="http://routingfreak.files.wordpress.com/2011/02/comparision-with-hvpls.jpg"><img src="http://routingfreak.files.wordpress.com/2011/02/comparision-with-hvpls.jpg?w=490" alt="" title="Comparision with VPLS and HVPLS"   class="aligncenter size-full wp-image-208" /></a></p>
<p>The above table compares a VPLS service using HSMP LSPs with a regular VPLS service or Hierarchical VPLS (H-VPLS) service. Clearly, the former wins against the regular VPLS and H-VPLS on all counts. This may also perhaps be an answer to <a href="http://www.juniper.net/">Juniper&#8217;s</a> claim that <a href="www.juniper.net/us/en/local/pdf/app-notes/3500116-en.pdf">H-VPLS is not scalable</a>. Operators now need not implement H-VPLS; they can instead go in for VPLS services implemented using HSMP LSPs.</p>
<p>This post only briefly explains the idea behind HSMP LSPs. Its explained in detail <a href="http://tools.ietf.org/html/draft-jjb-mpls-rsvp-te-hsmp-lsp-00">here in this draft</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=188&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/02/27/hub-and-spoke-multi-point-lsps-for-scalable-vpls-architecture/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/p2mp-lsp.jpg" medium="image">
			<media:title type="html">HSMP LSP</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/reverse-traffic-hsmp.jpg" medium="image">
			<media:title type="html">reverse traffic HSMP</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/hsmp-in-vpls1.jpg" medium="image">
			<media:title type="html">HSMP in VPLS</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/comparision-with-hvpls.jpg" medium="image">
			<media:title type="html">Comparision with VPLS and HVPLS</media:title>
		</media:content>
	</item>
		<item>
		<title>Does Hierarchical VPLS solve all Scaling issues found in VPLS?</title>
		<link>http://routingfreak.wordpress.com/2011/02/21/does-hierarchical-vpls-solve-all-scaling-issues-found-in-vpls/</link>
		<comments>http://routingfreak.wordpress.com/2011/02/21/does-hierarchical-vpls-solve-all-scaling-issues-found-in-vpls/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 22:56:21 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[MPLS]]></category>
		<category><![CDATA[VPLS]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[H-VPLS]]></category>
		<category><![CDATA[HSMP LSP]]></category>
		<category><![CDATA[LAN]]></category>
		<category><![CDATA[MAC Learning]]></category>
		<category><![CDATA[Meshes]]></category>
		<category><![CDATA[P2MP LSPs]]></category>
		<category><![CDATA[Pseudowires]]></category>
		<category><![CDATA[RSVP-TE]]></category>
		<category><![CDATA[Scaling]]></category>
		<category><![CDATA[Spokes]]></category>
		<category><![CDATA[STP]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=147</guid>
		<description><![CDATA[Virtual Private Lan Service (VPLS) is a multipoint-to-multipoint ethernet bridging service over an IP/MPLS backbone and is used for connecting geographically separated customer sites by emulating a LAN segment. This post assumes that the reader is familiar with the basic concepts of VPLS and IP/MPLS and does not attempt explain them. VPLS requires a logical [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=147&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a title="Virtual Private Lan Service" href="http://tools.ietf.org/rfc/rfc4762.txt" target="_blank">Virtual Private Lan Service</a> (VPLS) is a multipoint-to-multipoint ethernet bridging service over an IP/MPLS backbone and is used for connecting geographically separated customer sites by emulating a LAN segment. This post assumes that the reader is familiar with the basic concepts of VPLS and IP/MPLS and does not attempt explain them.</p>
<p>VPLS requires a logical full mesh of all the participating Provider Edge (PE) routers since its emulating a LAN. This means that every PE router is connected to every other PE router by a pseudowire resulting in a full mesh infrastructure. VPLS solves the loop problem by using a split-horizon rule which states that member PE routers (PE1, PE2, PE3 and PE4 in the below Figure) must forward VPLS traffic only to the local attachment circuits when they receive the traffic from the other PE routers. Exchanging traffic learnt from one remote PE router to the other is not allowed. This prevents loops and also eliminates the need to run STP in the VPLS core network.</p>
<p><img class="aligncenter size-medium wp-image-167" title="VPLS Full Mesh" src="http://routingfreak.files.wordpress.com/2011/02/vpls-full-mesh4.jpg?w=300&#038;h=270" alt="" width="300" height="270" /></p>
<div>
<p>Consider a Video broadcast service (implemented as a VPLS service)  that uses a video codec and offers 200 channels of standard-definition content. Assuming around 2 Mbps for each channel it would require 400 Mbps of total standard-definition traffic. Add another 50 HDTV channels, each consuming around 10Mbps, the total network bandwidth approaches 1Gbps.</p>
<p>Assume that the source of the Video transmission falls behind PE1. In that case, PE1 needs to send 1Gbps worth of Video traffic to PE2, PE3 and PE4 respectively.</p>
<p><a href="http://routingfreak.files.wordpress.com/2011/02/vpls-physical-topology.jpg"><img class="aligncenter size-full wp-image-168" title="VPLS Physical Topology" src="http://routingfreak.files.wordpress.com/2011/02/vpls-physical-topology.jpg?w=490" alt=""   /></a></p>
<p>Figure 2 shows the physical topology where PE1 is connected to the other PE routers via LSRs P1 and P2. Since PE1 is in a full logical mesh with PE2, PE3 and PE4, it means that PE1 needs to replicate all BUM (Broadcast, Unknown Unicast and Multicast) traffic three times, so that each PE can receive a copy.</p></div>
<div>Thus PE1 needs to make three copies of all the Video traffic that it receives which means that the link PE1 &#8211; P1 and P1-P2 will be now carrying 3Gbps. The amount of traffic that these links will carry will increase linearly as the number of PEs that PE1 is in full mesh with. Clearly this is NOT scalable!</p>
<p>So, whats the solution?</p>
<p>The solution apparently lies in using Hierarchical VPLS, also popularly known as H-VPLS.</p>
<p>The original VPLS architecture requires all PEs to be in a full mesh. This however may not always be practical if the number of PE routers is too high. Provisioning a full meshed network may also in some instances not be an efficient network design, as was illustrated in the topology in Figure 2.</p>
<p><img class="aligncenter size-full wp-image-172" title="HVPLS" src="http://routingfreak.files.wordpress.com/2011/02/hvpls.jpg?w=490" alt=""   /></p>
<p>To fix these issues H-VPLS architecture introduces the concept of spoke-pseudowires. Unlike mesh-pseudowires, that are used in regular VPLS, spoke-pseudowires can exchange traffic with other pseudowires (both mesh and spoke), so they can relay traffic between PE routers.  Let us see how we can re-design the above network using H-VPLS.</p>
<p>To illustrate this, the figure above shows two H-VPLS architectures that can be used to break the logical full mesh that is required in the regular VPLS.</p>
<p>In the first there is a logical connection between PE1-PE2, PE2 &#8211; PE4 and PE1 &#8211; PE3. There is thus a VPLS service defined on PE1 which has just two spoke pseudowires and a connection to the local attachment circuit which is the source of the Video traffic. The first pseudowire connects PE1 to PE2 and the other connects it to PE3.  There is no pseudowire connecting PE1 to PE4.</p>
<p>In the other design, PE1, PE2, PE3 and PE4 are all connected in a ring. In this case PE1 is connected to PE2 and PE3 using spoke pseudowires; PE2 to PE1 and PE4; PE4 to PE3 and PE2 and PE3 to PE1 and PE4.</p>
<p>While the two examples that i have taken dont have a mesh pseudowire, there is nothing that precludes that from happening. The true potential of HVPLS is only exploited when the network is designed using a combination of spoke and mesh pseudowires.</p>
<p>The split-horizon rule &#8220;Do not relay traffic among mesh-pseudowires&#8221; is used to prevent forwarding loops in H-VPLS networks. The mesh pseudowires dont exchange traffic as in the regular VPLS architecture. The spoke pseudowires otoh do not obey the split-horizon rule &#8211; thus traffic arriving on a spoke pseudowire is forwarded to the other spokes, meshes and local attachment circuits if any. This requires the provider to run Spanning Tree Protocol (STP) in the core to keep it loop-free, something that the providers dont feel to happy about given the high convergence values of STP. Since the traffic can loop providers need to be extremely careful when planning where the spokes and mesh pseudowires are placed.</p>
<p>While H-VPLS solves the problems seen in VPLS, it introduces a few of its own.</p>
<p>Lets look at each design and see how ..</p>
<p><a href="http://routingfreak.files.wordpress.com/2011/02/hvpls-design-1.jpg"><img class="aligncenter size-full wp-image-176" title="HVPLS Design 1" src="http://routingfreak.files.wordpress.com/2011/02/hvpls-design-1.jpg?w=490" alt=""   /></a></p>
<p>In the first H-VPLS design (as shown above) the links PE1-P1 and P1-P2 are still carrying two copies of each BUM traffic, thus we have not gained significantly from the original VPLS design in terms of saving the bandwidth efficiency.</p>
<p>The second problem is that PE4 only gets the packets after they are relayed by PE2. If you go back to Figure 2, you will see that there is no physical connection between PE2 and PE4. Thus all packets go back to P2 before they reach P4, thus congesting this link. Its also introduces a single point of failure, where PE4 can get completely disconnected from the rest of the PEs if PE2 goes down. There is thus a huge amount of redundancy planned in H-VPLS, which can result in loops and thus using STP becomes extremely important here.</p>
<p>The third issue, and as per some critics, the biggest problem with H-VPLS is that PE2 now has to learn all the customer MACs that fall behind PE1 and P4. This is because all traffic from PE1 is terminated at PE2 and relayed to PE4. Similarly, all traffic coming from PE4 gets terminated at PE2 and is then forwarded to PE1. During this process PE2 has to learn all these MACs. This is primarily because H-VPLS implements the Hub-and-Spoke architecture in the data plane as against Route Reflectors in BGP that do it in the control plane.</p>
<p>Lets now look at the other H-VPLS design where all the PE routers are in a ring.</p>
<p><a href="http://routingfreak.files.wordpress.com/2011/02/hvpls-design-2.jpg"><img class="aligncenter size-full wp-image-177" title="HVPLS Design 2" src="http://routingfreak.files.wordpress.com/2011/02/hvpls-design-2.jpg?w=490" alt=""   /></a></p>
<p>Clearly we need to run STP to break the forwarding loop. Assume that STP puts the spoke pseudowire connecting PE1 &#8211; PE3 in a blocked state. In this case PE1 only has one pseudowire (PE1 &#8211; PE2) to send traffic to. This solves the bandwidth wastage problem on the links PE1-P1 and P1-P2 as they only carry one copy of the BUM traffic.</p>
<p>This however, doubles the traffic on the links PE2-P2 and P2-PE4 as each packet is first relayed by PE2 to PE4 and then later by PE4 to PE3. So, while we had saved bandwidth on some links, we ended up wasting it somewhere else!</p>
<p>Like before, PE2 and PE4 have to unnecessarily learn all the customer MACs exchanged between learnt traffic between PE1 and PE3.</p>
<p>Another issue is that the learnt traffic between PE1 and PE3 cannot pick up the most optimal IGP path since it has to necessarily get routed via PE2 and PE4. This is a direct consequence of H-VPLS implementing the Hub-Spoke architecture in the data plane.</p>
<p>Its thus easy to sum up the issues that exist in VPLS and H-VPLS.</p>
<p>(1) Bandwidth is wasted since traffic for different pseudowires is replicated on a shared physical path. This is a big issue as more and more multicast video traffic is sent using VPLS services.</p>
<p>(2) A full mesh of PE routers can result in a significant amount of control traffic.</p>
<p>(3) If one uses H-VPLS then operators need to ensure loop prevention and detection. This entails running STP which is not the most attractive choice.</p>
<p>(4) Learnt traffic may not follow the best and the most optimal path since it has to get relayed via multiple PE routers.</p>
<p>(5) Unnecessary MAC learning happens on all PE routers participating in H-VPLS.</p>
<p>So, do we have a solution to the above problems? Thankfully we do!</p>
<p>I have written a draft with Lizhong Jin from ZTE and Frederic Jounay from France Telecom where we have introduced a concept of a <a title="Hub-and-Spoke Multipoint LSPs" href="http://tools.ietf.org/id/draft-jjb-mpls-rsvp-te-hsmp-lsp-00.txt" target="_blank">Hub-and-Spoke Multipoint LSPs</a>. This can be trivially extended to a Hub-and-Spoke Multipoint Pseudowires which can solve the issues described above that exist in the regular VPLS and the H-VPLS architectures. More detail about Hub-and-Spoke Multipoint LSPs and how they solve all the issues described above in the <a href="http://routingfreak.wordpress.com/2011/02/27/hub-and-spoke-multi-point-lsps-for-scalable-vpls-architecture/">next post</a>!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/147/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=147&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/02/21/does-hierarchical-vpls-solve-all-scaling-issues-found-in-vpls/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/vpls-full-mesh4.jpg?w=300" medium="image">
			<media:title type="html">VPLS Full Mesh</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/vpls-physical-topology.jpg" medium="image">
			<media:title type="html">VPLS Physical Topology</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/hvpls.jpg" medium="image">
			<media:title type="html">HVPLS</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/hvpls-design-1.jpg" medium="image">
			<media:title type="html">HVPLS Design 1</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2011/02/hvpls-design-2.jpg" medium="image">
			<media:title type="html">HVPLS Design 2</media:title>
		</media:content>
	</item>
		<item>
		<title>Can we solve the inter-session replay attacks?</title>
		<link>http://routingfreak.wordpress.com/2011/02/05/can-we-solve-the-inter-session-replay-attacks/</link>
		<comments>http://routingfreak.wordpress.com/2011/02/05/can-we-solve-the-inter-session-replay-attacks/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 10:44:07 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[IP Routing]]></category>
		<category><![CDATA[OSPF]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=136</guid>
		<description><![CDATA[Most routing (OSPF, BFD, RIP, OSPFv3-AT, etc) and signalling (LDP, RSVP, etc) protocols defined by IETF have a cryptographic sequence number within the authentication data that increases monotonically with each new packet that the router originates. This protects the protocol from replay attacks as the receivers now keep track of the sequence numbers and ignore [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=136&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Most routing (OSPF, BFD, RIP, <a href="http://tools.ietf.org/html/draft-ietf-ospf-auth-trailer-ospfv3-03">OSPFv3-AT</a>, etc) and signalling (LDP, RSVP, etc) protocols defined by IETF have a cryptographic sequence number within the authentication data that increases monotonically with each new packet that the router originates. This protects the protocol from replay attacks as the receivers now keep track of the sequence numbers and ignore all packets that arrive with a number thats lower than the currently active one.</p>
<p>At worst, the attacker can keep replaying the last packet that was originated since most protocols accept packets with sequence number greater than or equal to what they had last received. This in my opinion is a hole that can be trivially plugged by mandating that protocols must only accept protocol packets if they come with a sequence number thats greater than what they have received till now.</p>
<p>So does this solve all replay attacks problem?</p>
<p>No, not really.</p>
<p>Imagine an attacker who captures a protocol packet when the cryptographic sequence number is say, 1000.  Now the next time this router cold boots it will reinitialize its sequence space to 1 and start sending packets from this value. The attacker can now replay the earlier captured packet &#8211; the one with the sequence number 1000. The receivers will accept the replayed packet since it comes with a sequence number thats higher than what they were currently seeing from the router. This is a vulnerability that most IETF protocols are susceptible to. This is not an issue with protocols that use an automated key management protocol (like IKEv2) as all the security parameters are renegotiated when a session bounces. However, most routing and signalling protocols DONT use an automated key management protocol and are thus exposed to this risk.</p>
<p>I call this as an inter-session replay attack where packets from the previous/stale sessions can be replayed. So, do we have a solution to this problem?</p>
<p>Well, there are a couple of things that we could do here. The most obvious solution is to update the last cryptographic sequence number in the non volatile memory of the router. Thus we update the memory each time we increment the sequence number. This can be read when the router cold boots and it can start using sequence numbers from this value. The problem with this solution is that this will involve frequent writes to the non volatile memory on the routers which is not recommended because of the limited life of such media.</p>
<p>The other solution is to use the clock (number of seconds elapsed since midnight UTC  January 1 1970) as the sequence numbers. In theory this time will always advance and we will thus never have a router issuing sequence numbers that will ever go back. This would ideally also work when the router reboots as the time would only have advanced. The problem with this solution is that we end up relying on NTP or 1588 and an assumption that clocks on a router will NEVER go back. This is unrealistic and cannot be the basis of a security system defined for any protocol. Its fragile and can be broken.</p>
<p>So what are we left with?</p>
<p>Sam Hartman, Dacheng Zhang and I start looking at this problem for OSPF and have written an<a href="http://tools.ietf.org/html/draft-bhatia-karp-ospf-ip-layer-protection"> IETF draft</a> that we think addresses this problem. It associates two scalars with a router &#8211; the Session ID and the Nonce, and uses these in combination with the cryptographic sequence numbers to protect OSPF routers against inter and intra replay attacks. The mechanism described in this <a href="http://tools.ietf.org/html/draft-bhatia-karp-ospf-ip-layer-protection">draft </a>can be easily generalized and extended to other routing and signalling protocols.</p>
<p>This is currently being discussed actively in the OSPF WG and the KARP WG mailing lists. I will in some other post explain how the concept of Nonce and Session ID helps in solving the inter-reply attacks which is the key problem that needs to be solved.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/136/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/136/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=136&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/02/05/can-we-solve-the-inter-session-replay-attacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>
	</item>
		<item>
		<title>2010 in review</title>
		<link>http://routingfreak.wordpress.com/2011/01/05/2010-in-review/</link>
		<comments>http://routingfreak.wordpress.com/2011/01/05/2010-in-review/#comments</comments>
		<pubDate>Wed, 05 Jan 2011 23:30:48 +0000</pubDate>
		<dc:creator>Manav</dc:creator>
				<category><![CDATA[OSPF vs IS-IS]]></category>

		<guid isPermaLink="false">http://routingfreak.wordpress.com/?p=131</guid>
		<description><![CDATA[The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here&#8217;s a high level summary of its overall blog health: The Blog-Health-o-Meter™ reads This blog is doing awesome!. Crunchy numbers A Boeing 747-400 passenger jet can hold 416 passengers. This blog was viewed about 19,000 times in 2010. That&#8217;s about [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=131&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here&#8217;s a high level summary of its overall blog health:</p>
<p><img style="border:1px solid #ddd;background:#f5f5f5;padding:20px;" src="http://s0.wp.com/i/annual-recap/meter-healthy2.gif" alt="Healthy blog!" width="250" height="183" /></p>
<p>The <em>Blog-Health-o-Meter™</em> reads This blog is doing awesome!.</p>
<h2>Crunchy numbers</h2>
<p><a href="http://routingfreak.files.wordpress.com/2008/03/network_diagram-final.jpg"><img style="max-height:230px;float:right;border:1px solid #ddd;background:#fff;margin:0 0 1em 1em;padding:6px;" src="http://routingfreak.files.wordpress.com/2008/03/network_diagram-final.jpg?w=288" alt="Featured image" /></a></p>
<p>A Boeing 747-400 passenger jet can hold 416 passengers.  This blog was viewed about <strong>19,000</strong> times in 2010.  That&#8217;s about 46 full 747s.</p>
<p>&nbsp;</p>
<p>In 2010, there were <strong>2</strong> new posts, growing the total archive of this blog to 33 posts.</p>
<p>The busiest day of the year was September 8th with <strong>183</strong> views. The most popular post that day was <a style="color:#08c;" href="http://routingfreak.wordpress.com/2007/03/03/designated-router-or-dis-concepts/">Designated Router (or DIS) concepts .. </a>.</p>
<h2>Where did they come from?</h2>
<p>Some visitors came searching, mostly for <strong>spf algorithm</strong>, <strong>ospf graceful restart</strong>, <strong>shortest path first</strong>, <strong>ospf vs isis</strong>, and <strong>ospf flooding</strong>.</p>
<h2>Attractions in 2010</h2>
<p>These are the posts and pages that got the most views in 2010.</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">1</div>
<p><a style="margin-right:10px;" href="http://routingfreak.wordpress.com/2007/03/03/designated-router-or-dis-concepts/">Designated Router (or DIS) concepts .. </a> <span style="color:#999;font-size:8pt;">March 2007</span><br />
1 comment</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">2</div>
<p><a style="margin-right:10px;" href="http://routingfreak.wordpress.com/2008/03/06/shortest-path-first-algorithm-demystified/">Shortest Path First (SPF) Algorithm Demystified ..</a> <span style="color:#999;font-size:8pt;">March 2008</span><br />
11 comments and 1 Like on WordPress.com,</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">3</div>
<p><a style="margin-right:10px;" href="http://routingfreak.wordpress.com/2008/03/04/shortest-path-first-calculation-in-ospf-and-is-is/">Shortest Path First (SPF) Calculation in OSPF and IS-IS</a> <span style="color:#999;font-size:8pt;">March 2008</span><br />
4 comments</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">4</div>
<p><a style="margin-right:10px;" href="http://routingfreak.wordpress.com/2007/03/06/hitless-restart-mechanisms-in-ospf-and-is-is/">Graceful Restart Mechanisms in OSPF and IS-IS ..</a> <span style="color:#999;font-size:8pt;">March 2007</span><br />
2 comments</p>
<div style="clear:left;float:left;font-size:24pt;line-height:1em;margin:-5px 10px 20px 0;">5</div>
<p><a style="margin-right:10px;" href="http://routingfreak.wordpress.com/2007/03/03/database-exchange-and-flooding-in-ospf-and-is-is/">Database Exchange and Flooding in OSPF and IS-IS .. </a> <span style="color:#999;font-size:8pt;">March 2007</span><br />
2 comments</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/routingfreak.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/routingfreak.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/routingfreak.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/routingfreak.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/routingfreak.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/routingfreak.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/routingfreak.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/routingfreak.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/routingfreak.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/routingfreak.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/routingfreak.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/routingfreak.wordpress.com/131/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/routingfreak.wordpress.com/131/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/routingfreak.wordpress.com/131/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=routingfreak.wordpress.com&amp;blog=834203&amp;post=131&amp;subd=routingfreak&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://routingfreak.wordpress.com/2011/01/05/2010-in-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/ec5c25923f0078a26aeb6a77a84f3e5b?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Manav</media:title>
		</media:content>

		<media:content url="http://s0.wp.com/i/annual-recap/meter-healthy2.gif" medium="image">
			<media:title type="html">Healthy blog!</media:title>
		</media:content>

		<media:content url="http://routingfreak.files.wordpress.com/2008/03/network_diagram-final.jpg?w=288" medium="image">
			<media:title type="html">Featured image</media:title>
		</media:content>
	</item>
	</channel>
</rss>
