1 00:00:00,000 --> 00:00:02,934 [MUSIC PLAYING] 2 00:00:02,934 --> 00:00:07,830 3 00:00:07,830 --> 00:00:10,950 So let's get started here with an introduction 4 00:00:10,950 --> 00:00:12,640 to segment routing. 5 00:00:12,640 --> 00:00:15,090 Now, what we're going to really be focusing on 6 00:00:15,090 --> 00:00:17,910 is, what does this give us that we 7 00:00:17,910 --> 00:00:21,540 don't get from traditional MPLS forwarding. 8 00:00:21,540 --> 00:00:24,220 The fact of the matter is at the end of the day, 9 00:00:24,220 --> 00:00:27,300 this really is MPLS forwarding. 10 00:00:27,300 --> 00:00:30,840 What changes a bit is how we're using the labels 11 00:00:30,840 --> 00:00:33,720 and how the labels get advertised to neighbors 12 00:00:33,720 --> 00:00:35,200 and things like that. 13 00:00:35,200 --> 00:00:37,530 So that's the purpose of this video 14 00:00:37,530 --> 00:00:40,560 just to get some of the concepts and a little bit of terminology 15 00:00:40,560 --> 00:00:41,620 out of the way. 16 00:00:41,620 --> 00:00:44,410 And then, of course, in the later videos, 17 00:00:44,410 --> 00:00:47,220 we'll be jumping into most of these topics 18 00:00:47,220 --> 00:00:48,790 in a bit more detail. 19 00:00:48,790 --> 00:00:50,580 So let's go ahead and get started 20 00:00:50,580 --> 00:00:55,200 with a good introduction to segment routing. 21 00:00:55,200 --> 00:00:59,660 So again, keep in mind that segment routing is really 22 00:00:59,660 --> 00:01:04,430 just building on top of the basic or traditional MPLS 23 00:01:04,430 --> 00:01:06,110 forwarding paradigm. 24 00:01:06,110 --> 00:01:07,970 We're still using labels. 25 00:01:07,970 --> 00:01:09,740 We're still forwarding our traffic 26 00:01:09,740 --> 00:01:13,070 and doing label switching based on those labels. 27 00:01:13,070 --> 00:01:15,710 However, the way we use them and the way 28 00:01:15,710 --> 00:01:18,960 that they're going to be learned is slightly different. 29 00:01:18,960 --> 00:01:22,850 But again, the data plane, at the end of the day, 30 00:01:22,850 --> 00:01:25,620 still using MPLS. 31 00:01:25,620 --> 00:01:27,860 So that part's not changing. 32 00:01:27,860 --> 00:01:29,360 The headers don't change. 33 00:01:29,360 --> 00:01:31,760 The label structure itself doesn't change. 34 00:01:31,760 --> 00:01:34,880 Everything here as far as the MPLS side 35 00:01:34,880 --> 00:01:40,070 is exactly the same as traditional or legacy MPLS. 36 00:01:40,070 --> 00:01:43,490 The major difference between the segment routing 37 00:01:43,490 --> 00:01:46,460 and the legacy or traditional, or you 38 00:01:46,460 --> 00:01:52,460 could say LDP-based MPLS, lies in the control plane. 39 00:01:52,460 --> 00:01:56,620 And that main difference is we're going to see as we go. 40 00:01:56,620 --> 00:01:59,820 We're going to be getting rid of the LDP. 41 00:01:59,820 --> 00:02:02,010 We're not going to be using label distribution 42 00:02:02,010 --> 00:02:04,150 protocol any longer. 43 00:02:04,150 --> 00:02:07,150 So what does that really mean at the end of the day? 44 00:02:07,150 --> 00:02:11,400 Well, it means that we're going to be changing things in sort 45 00:02:11,400 --> 00:02:13,630 of two significant ways. 46 00:02:13,630 --> 00:02:16,470 The first is the labels are usually going 47 00:02:16,470 --> 00:02:19,200 to be having identical values. 48 00:02:19,200 --> 00:02:22,800 And because of this, in the SR domain, 49 00:02:22,800 --> 00:02:26,340 these labels are going to have global value 50 00:02:26,340 --> 00:02:32,110 because it'll be the same label for the prefix on every device. 51 00:02:32,110 --> 00:02:34,050 And as we sort of already mentioned, 52 00:02:34,050 --> 00:02:37,290 our second big change here is that the labels 53 00:02:37,290 --> 00:02:43,140 are going to be advertised not by LDP but by our IGP, which 54 00:02:43,140 --> 00:02:47,040 would be either OSPF or IS-IS. 55 00:02:47,040 --> 00:02:49,500 Of course, these two protocols will 56 00:02:49,500 --> 00:02:51,970 need to be modified to support this, 57 00:02:51,970 --> 00:02:54,630 and we'll be talking about how they're modified 58 00:02:54,630 --> 00:02:56,910 as we move through this skill. 59 00:02:56,910 --> 00:02:59,460 So those are some changes to the operation, 60 00:02:59,460 --> 00:03:01,680 but what is this really all about? 61 00:03:01,680 --> 00:03:03,720 What are we trying to achieve here? 62 00:03:03,720 --> 00:03:06,630 Well, there's really two major concepts 63 00:03:06,630 --> 00:03:09,550 that surround the idea of segment routing. 64 00:03:09,550 --> 00:03:14,310 The first is this is a form of source routing. 65 00:03:14,310 --> 00:03:16,740 In case you're not familiar with source routing, what 66 00:03:16,740 --> 00:03:21,330 this means is that the source, or the ingress router, 67 00:03:21,330 --> 00:03:26,280 is the one that actually chooses the path that is then 68 00:03:26,280 --> 00:03:28,830 encoded into the actual packet. 69 00:03:28,830 --> 00:03:32,940 This is going to be done in an ordered list of segments, 70 00:03:32,940 --> 00:03:35,880 or we can also call these labels. 71 00:03:35,880 --> 00:03:40,080 And then the rest of the network simply executes 72 00:03:40,080 --> 00:03:42,270 those encoded instructions. 73 00:03:42,270 --> 00:03:44,670 In other words, we're going to forward the traffic 74 00:03:44,670 --> 00:03:48,630 along the path specified by the source. 75 00:03:48,630 --> 00:03:52,270 Then of course, we have the segments themselves. 76 00:03:52,270 --> 00:03:55,080 Now, like we said, the segment is a label, 77 00:03:55,080 --> 00:03:58,950 but that segment or label can mean different things 78 00:03:58,950 --> 00:04:01,450 or be used for different things. 79 00:04:01,450 --> 00:04:05,910 The segment can really identify any type of instruction. 80 00:04:05,910 --> 00:04:07,830 It can be a service. 81 00:04:07,830 --> 00:04:13,980 It can be a context, a locator, an IGP-based forwarding 82 00:04:13,980 --> 00:04:17,970 construct, a BGP-based forwarding construct. 83 00:04:17,970 --> 00:04:21,899 It can be a local value or a global index. 84 00:04:21,899 --> 00:04:25,380 Now, of course, we're going to talk about more of these things 85 00:04:25,380 --> 00:04:28,020 as we go through the rest of this skill as well. 86 00:04:28,020 --> 00:04:30,150 We're not going to cover all of these, 87 00:04:30,150 --> 00:04:32,340 but we'll cover the major ones that are 88 00:04:32,340 --> 00:04:34,420 involved in segment routing. 89 00:04:34,420 --> 00:04:37,890 So each of these segments is actually identified 90 00:04:37,890 --> 00:04:43,080 by a segment ID, or what we generally call the SID. 91 00:04:43,080 --> 00:04:47,590 Those SIDs also come in two different types. 92 00:04:47,590 --> 00:04:51,930 So the two different types of segments, or SIDs, 93 00:04:51,930 --> 00:04:55,380 are first we have the global segment. 94 00:04:55,380 --> 00:04:59,220 The global segment represents a node, 95 00:04:59,220 --> 00:05:02,430 also known as a prefix-SID. 96 00:05:02,430 --> 00:05:06,990 This is really any node in the SR domain 97 00:05:06,990 --> 00:05:11,310 that can interpret an associated instruction. 98 00:05:11,310 --> 00:05:15,840 Each node in the SR domain then installs 99 00:05:15,840 --> 00:05:19,530 that associated instruction into the forwarding table. 100 00:05:19,530 --> 00:05:21,030 This, of course, is what we're going 101 00:05:21,030 --> 00:05:25,800 to be using in MPLS to actually forward the traffic then. 102 00:05:25,800 --> 00:05:28,980 Now, one interesting thing here about segment routing 103 00:05:28,980 --> 00:05:36,240 is these prefix-SIDs have a label value that is manually 104 00:05:36,240 --> 00:05:41,250 assigned from what's called the Segment Routing Global Block, 105 00:05:41,250 --> 00:05:43,710 or the SRGB. 106 00:05:43,710 --> 00:05:48,060 Now, we'll be talking about this manual assignment and the SRGB 107 00:05:48,060 --> 00:05:50,590 in more detail here coming up. 108 00:05:50,590 --> 00:05:54,120 Now, since this is a manual assignment essentially 109 00:05:54,120 --> 00:05:58,200 identifying a prefix, much like IP addresses, 110 00:05:58,200 --> 00:06:03,150 this cannot be duplicated in the SR domain. 111 00:06:03,150 --> 00:06:05,590 This must be a unique value. 112 00:06:05,590 --> 00:06:09,990 So keep that in mind when we're assigning prefix-SIDs. 113 00:06:09,990 --> 00:06:12,520 What we're actually talking about here 114 00:06:12,520 --> 00:06:16,540 are the labels that we're going to be using for our destination 115 00:06:16,540 --> 00:06:17,480 networks. 116 00:06:17,480 --> 00:06:21,580 So typically, client-facing networks, loopback interfaces 117 00:06:21,580 --> 00:06:25,150 on PE routers, things like this, those 118 00:06:25,150 --> 00:06:28,450 are the things that are going to get prefix-SIDs identified 119 00:06:28,450 --> 00:06:30,070 or assigned to them. 120 00:06:30,070 --> 00:06:31,840 We're not going to be assigning these 121 00:06:31,840 --> 00:06:35,890 to every prefix in our routing table, just the prefixes 122 00:06:35,890 --> 00:06:38,710 that we're going to be using as destinations. 123 00:06:38,710 --> 00:06:43,450 The next type of SID we're going to have is a local segment. 124 00:06:43,450 --> 00:06:46,340 This represents a link. 125 00:06:46,340 --> 00:06:50,230 This is known as the adjacency SID. 126 00:06:50,230 --> 00:06:55,670 And here, this is only going to be for devices on the segment. 127 00:06:55,670 --> 00:06:58,330 So only the segment originating nodes 128 00:06:58,330 --> 00:07:01,750 can interpret the associated instruction on this type 129 00:07:01,750 --> 00:07:04,270 because it's for connected neighbors. 130 00:07:04,270 --> 00:07:08,920 This label, much like traditional MPLS labels, 131 00:07:08,920 --> 00:07:11,680 are still going to be dynamically allocated 132 00:07:11,680 --> 00:07:14,660 from the dynamic block, so in other words, 133 00:07:14,660 --> 00:07:17,020 the same block that MPLS would normally 134 00:07:17,020 --> 00:07:18,670 be pulling its labels from. 135 00:07:18,670 --> 00:07:23,800 Now, this does vary a little bit on iOS XE versus iOS XR, 136 00:07:23,800 --> 00:07:27,070 but we'll cover that more when we get to implementation. 137 00:07:27,070 --> 00:07:29,500 And again, since this is an adjacency, 138 00:07:29,500 --> 00:07:33,130 this is going to be allocated to physical links 139 00:07:33,130 --> 00:07:35,030 in our environment. 140 00:07:35,030 --> 00:07:36,700 So now that we have sort of a rough idea 141 00:07:36,700 --> 00:07:38,650 here of these two different segment types, 142 00:07:38,650 --> 00:07:43,640 let's focus in a little bit on that SRGB. 143 00:07:43,640 --> 00:07:46,250 So the Segment Routing Global Block 144 00:07:46,250 --> 00:07:49,790 defines the actual label range that we're 145 00:07:49,790 --> 00:07:52,970 going to be using for segment routing. 146 00:07:52,970 --> 00:07:54,830 This has to, of course, be defined 147 00:07:54,830 --> 00:07:57,410 on all of the devices in the environment, 148 00:07:57,410 --> 00:08:02,480 and then it gets distributed as a combination 149 00:08:02,480 --> 00:08:07,490 of the label range itself, as well as an index number 150 00:08:07,490 --> 00:08:09,410 for things like the prefix-SID. 151 00:08:09,410 --> 00:08:12,450 152 00:08:12,450 --> 00:08:22,020 Now, on iOS XR, this defaults to 16,000 through 23,999. 153 00:08:22,020 --> 00:08:26,220 Now, this range is going to be reserved on iOS XR 154 00:08:26,220 --> 00:08:29,910 even if segment routing is not enabled. 155 00:08:29,910 --> 00:08:35,010 The IGP will register this range when 156 00:08:35,010 --> 00:08:37,169 segment routing is enabled. 157 00:08:37,169 --> 00:08:39,690 We'll, of course, see this in action 158 00:08:39,690 --> 00:08:42,780 when we get to our implementation skill. 159 00:08:42,780 --> 00:08:45,630 So ultimately, this is all put together. 160 00:08:45,630 --> 00:08:50,100 The assigned label to a particular prefix 161 00:08:50,100 --> 00:08:55,810 will be the prefix index number plus the SRGB base. 162 00:08:55,810 --> 00:08:59,080 So let's discuss a little bit about what that means. 163 00:08:59,080 --> 00:09:03,000 Let's say that we have a prefix that we have, we'll say, 164 00:09:03,000 --> 00:09:07,320 10.1.1.1-32. 165 00:09:07,320 --> 00:09:11,670 We want to give this a label in segment routing. 166 00:09:11,670 --> 00:09:15,090 Well, there's actually two ways to do that. 167 00:09:15,090 --> 00:09:17,730 We could say that the absolute value is say, 168 00:09:17,730 --> 00:09:22,070 for example, 16,010. 169 00:09:22,070 --> 00:09:28,800 Or as another choice, we could say that it's an index of 10. 170 00:09:28,800 --> 00:09:31,670 So what it'll do is take this index number 171 00:09:31,670 --> 00:09:37,160 and add to that the base of the label range, which again, 172 00:09:37,160 --> 00:09:43,760 remember is 16,000 by default. So it would add 16,000 to this. 173 00:09:43,760 --> 00:09:46,820 And ultimately, of course, we're going to end up 174 00:09:46,820 --> 00:09:51,410 with the same label 16,010. 175 00:09:51,410 --> 00:09:54,650 So as we're configuring this, we can actually 176 00:09:54,650 --> 00:09:56,060 configure either one. 177 00:09:56,060 --> 00:09:59,150 We can configure this as an absolute value, 178 00:09:59,150 --> 00:10:02,420 or we can configure it as an index. 179 00:10:02,420 --> 00:10:05,840 It really doesn't matter as long as we end up with the label 180 00:10:05,840 --> 00:10:09,450 that we want to use for each given prefix. 181 00:10:09,450 --> 00:10:12,410 Now, as far as the rest of the label range, 182 00:10:12,410 --> 00:10:16,650 the range above the 24,000 is still 183 00:10:16,650 --> 00:10:19,710 going to be used for dynamic labels, 184 00:10:19,710 --> 00:10:23,490 such as the adjacency set and any other MPLS 185 00:10:23,490 --> 00:10:27,130 labels that might be used on this particular device. 186 00:10:27,130 --> 00:10:34,530 So again, just keep in mind that 16,000 to 23,999 is on iOS XR, 187 00:10:34,530 --> 00:10:36,850 that default label range. 188 00:10:36,850 --> 00:10:39,330 Now again, we'll see as we jump into this, 189 00:10:39,330 --> 00:10:43,620 iOS XE acts just a little bit differently here as far 190 00:10:43,620 --> 00:10:45,360 as the SRGB goes. 191 00:10:45,360 --> 00:10:46,920 But we'll see how that works when 192 00:10:46,920 --> 00:10:48,690 we get into implementation. 193 00:10:48,690 --> 00:10:52,950 Just to point it out, it simply doesn't reserve the range 194 00:10:52,950 --> 00:10:57,660 automatically and by default and start the dynamic range 195 00:10:57,660 --> 00:10:59,970 above 24,000. 196 00:10:59,970 --> 00:11:02,640 It actually starts the dynamic range 197 00:11:02,640 --> 00:11:08,070 at 16, which is above the reserved MPLS labels of 0 198 00:11:08,070 --> 00:11:09,160 through 15. 199 00:11:09,160 --> 00:11:15,210 So it just doesn't pre-reserve the SRGB range on iOS XE. 200 00:11:15,210 --> 00:11:18,840 But again, we'll see that when we get to implementation. 201 00:11:18,840 --> 00:11:21,120 Now, something else pretty cool here 202 00:11:21,120 --> 00:11:25,620 is since segment routing is still just using 203 00:11:25,620 --> 00:11:29,340 MPLS for the data plane, that means 204 00:11:29,340 --> 00:11:34,740 that segment routing and traditional or legacy MPLS 205 00:11:34,740 --> 00:11:38,310 can be mixed with no problems, which 206 00:11:38,310 --> 00:11:40,770 means these can easily coexist. 207 00:11:40,770 --> 00:11:47,160 Now, if they do coexist, and we have both LDP and SR 208 00:11:47,160 --> 00:11:54,090 labels, by default LDP is still going to be preferred. 209 00:11:54,090 --> 00:11:56,580 Now, we're going to see when we get to implementation 210 00:11:56,580 --> 00:11:58,660 we can, of course, change that. 211 00:11:58,660 --> 00:12:02,160 But if they do both exist, the default behavior 212 00:12:02,160 --> 00:12:04,830 is still to prefer LDP. 213 00:12:04,830 --> 00:12:07,930 That behavior may change in the future. 214 00:12:07,930 --> 00:12:10,350 However, the way it is right now, this 215 00:12:10,350 --> 00:12:12,510 is actually very, very convenient 216 00:12:12,510 --> 00:12:16,030 when it comes to doing things like migration. 217 00:12:16,030 --> 00:12:20,070 This means that you can have your LDP functional environment 218 00:12:20,070 --> 00:12:24,700 continue operating while you implement segment routing, 219 00:12:24,700 --> 00:12:27,930 and then at some point in the future, simply 220 00:12:27,930 --> 00:12:29,850 change this preference right here 221 00:12:29,850 --> 00:12:34,350 and switch over and start using segment routing. 222 00:12:34,350 --> 00:12:37,910 So as we've mentioned, a segment is simply 223 00:12:37,910 --> 00:12:41,840 encoded as an MPLS label. 224 00:12:41,840 --> 00:12:44,990 An ordered list of segments that we want to traverse 225 00:12:44,990 --> 00:12:49,590 is going to be encoded as an MPLS label stack. 226 00:12:49,590 --> 00:12:52,790 We know that MPLS can support more than one label. 227 00:12:52,790 --> 00:12:56,570 Each label is simply put in the order of the segments 228 00:12:56,570 --> 00:12:58,070 that we wish to cross. 229 00:12:58,070 --> 00:13:01,190 That's how the source-based routing operates. 230 00:13:01,190 --> 00:13:04,410 Once that segment is actually used, in other words, 231 00:13:04,410 --> 00:13:07,520 once we're past that segment in the forwarding, 232 00:13:07,520 --> 00:13:10,590 that segment is then removed from the stack 233 00:13:10,590 --> 00:13:13,400 so that the next label for the next segment 234 00:13:13,400 --> 00:13:15,500 is then the top label, and that's 235 00:13:15,500 --> 00:13:17,250 how we do our forwarding. 236 00:13:17,250 --> 00:13:19,190 So our final thing to cover here, 237 00:13:19,190 --> 00:13:22,820 how does a node decide whether it should impose 238 00:13:22,820 --> 00:13:26,150 a prefix-SID label on a packet? 239 00:13:26,150 --> 00:13:28,950 And the answer has a couple of things. 240 00:13:28,950 --> 00:13:33,080 First, the destination itself or the next hop 241 00:13:33,080 --> 00:13:36,290 that the destination resolves on matches 242 00:13:36,290 --> 00:13:39,260 a forwarding equivalency class that has 243 00:13:39,260 --> 00:13:41,820 a prefix-SID assigned to it. 244 00:13:41,820 --> 00:13:46,900 Also, the downstream neighbor has to be SR-enabled. 245 00:13:46,900 --> 00:13:50,640 It will, of course, know this from the IGP. 246 00:13:50,640 --> 00:13:55,890 Also, the node has to be configured to prefer the SR 247 00:13:55,890 --> 00:13:59,160 label over the LDP label. 248 00:13:59,160 --> 00:14:02,190 Now, of course, we only have to prefer one 249 00:14:02,190 --> 00:14:04,290 if LDP is configured. 250 00:14:04,290 --> 00:14:07,770 The other option would be LDP is not configured. 251 00:14:07,770 --> 00:14:09,190 So guess what. 252 00:14:09,190 --> 00:14:13,380 It doesn't even have an LDP label. 253 00:14:13,380 --> 00:14:15,600 If it doesn't have an LDP label, then there's 254 00:14:15,600 --> 00:14:16,840 nothing to fight with. 255 00:14:16,840 --> 00:14:20,550 And if we have an SR label, then that's clearly the one 256 00:14:20,550 --> 00:14:22,330 that we would use. 257 00:14:22,330 --> 00:14:25,980 So in this video, we jumped in and got an introduction 258 00:14:25,980 --> 00:14:27,630 to segment routing. 259 00:14:27,630 --> 00:14:30,780 We talked about how it uses source-based routing 260 00:14:30,780 --> 00:14:34,860 and a label stack with prefix-SIDs to get traffic 261 00:14:34,860 --> 00:14:36,250 to the destination. 262 00:14:36,250 --> 00:14:38,970 We also talked a bit about how the control 263 00:14:38,970 --> 00:14:41,340 plane is going to be replaced. 264 00:14:41,340 --> 00:14:44,040 We're no longer going to use LDP. 265 00:14:44,040 --> 00:14:47,130 And instead, we're going to use the IGP. 266 00:14:47,130 --> 00:14:49,470 Now, that change in the control plane 267 00:14:49,470 --> 00:14:52,890 is, of course, going to take a more detailed look 268 00:14:52,890 --> 00:14:54,660 to understand how it works. 269 00:14:54,660 --> 00:14:57,010 And that's exactly what we're going to do next. 270 00:14:57,010 --> 00:15:00,330 Until then, I hope this has been informative for you, 271 00:15:00,330 --> 00:15:03,410 and I'd like to thank you for viewing. 272 00:15:03,410 --> 00:15:07,000