WEBVTT 0:00:05.000000 --> 0:00:08.980000 So previously in the previous videos I've talked about how Ethernet originally 0:00:08.980000 --> 0:00:12.640000 came out with just a single speed and a single duplex. 0:00:12.640000 --> 0:00:17.220000 Basically 2.94 megabits per second and half duplex. 0:00:17.220000 --> 0:00:21.980000 But over time, Ethernet speeds have greatly increased and Ethernet duplex 0:00:21.980000 --> 0:00:27.820000 also changed from half duplex to full duplex where in today's modern networks 0:00:27.820000 --> 0:00:32.600000 if you have your laptop per PC directly connected to a switch, which most 0:00:32.600000 --> 0:00:36.620000 people do. Now you can do full duplex operation, meaning that you can 0:00:36.620000 --> 0:00:38.360000 transmit bits to the switch. 0:00:38.360000 --> 0:00:43.080000 At the exact same time, it's transmitting bits to you, which means you 0:00:43.080000 --> 0:00:46.420000 don't have to do CSMA CD anymore. 0:00:46.420000 --> 0:00:51.600000 So a couple of decades ago, Ethernet adapters started coming out that 0:00:51.600000 --> 0:00:54.100000 were what were called dual speed adapters. 0:00:54.100000 --> 0:00:58.120000 They could do 10 megabits per second or fast Ethernet 100 megabits per 0:00:58.120000 --> 0:01:02.400000 second. And now we have triple speed adapters that can do 10, 100, 1000 0:01:02.400000 --> 0:01:06.500000 Ethernet. And also these adapters were capable of either doing half duplex 0:01:06.500000 --> 0:01:11.060000 or full duplex. So someone thought, you know what? 0:01:11.060000 --> 0:01:15.260000 We should come up with some way that when you plug in your Ethernet cable 0:01:15.260000 --> 0:01:19.200000 and that cables plugged into two different things, they can negotiate 0:01:19.200000 --> 0:01:24.860000 between each other the fastest speed and the best duplex that they support. 0:01:24.860000 --> 0:01:29.220000 Hence auto negotiation came into play. 0:01:29.220000 --> 0:01:33.280000 So auto negotiation falls originally when it's first developed under the 0:01:33.280000 --> 0:01:39.000000 802.3u specification under the clause 28 section. 0:01:39.000000 --> 0:01:42.160000 And here's how auto negotiation basically worked. 0:01:42.160000 --> 0:01:48.280000 So before auto negotiation existed, back in the days of just 10 megabit 0:01:48.280000 --> 0:01:51.300000 per second Ethernet, old style Ethernet. 0:01:51.300000 --> 0:01:55.620000 What would happen is as soon as you plugged in the cable to either end, 0:01:55.620000 --> 0:01:59.140000 the NIT card connected that cable would start sending out a little pulse, 0:01:59.140000 --> 0:02:04.240000 a little harpy. It was just a single electrical pulse every few milliseconds. 0:02:04.240000 --> 0:02:07.880000 It was every 16 milliseconds as pulse would go out. 0:02:07.880000 --> 0:02:12.260000 And that was called a normal link pulse or an NLP. 0:02:12.260000 --> 0:02:17.660000 So if I had my 10 megabit per second PC connected to a 10 megabit per 0:02:17.660000 --> 0:02:23.240000 second switch, when my green light came on, when my green LED came on 0:02:23.240000 --> 0:02:27.600000 on my NIT card, that's because my NIT card was receiving these normal 0:02:27.600000 --> 0:02:31.020000 link pulses every 10 milliseconds. 0:02:31.020000 --> 0:02:35.460000 Then when fast Ethernet came out, they instead started sending out 16 0:02:35.460000 --> 0:02:39.140000 of these pulses every 16 milliseconds, every 16 milliseconds, every 16 0:02:39.140000 --> 0:02:42.140000 milliseconds, boom, boom, boom, boom, boom, boom, boom, boom, boom, right? 0:02:42.140000 --> 0:02:48.480000 These 16, this was called a fast link pulse burst, a fast link pulse burst. 0:02:48.480000 --> 0:02:52.960000 And then the 802.3U work group, they said, you know what? 0:02:52.960000 --> 0:02:58.520000 Why don't we make use of this existing thing called a fast link pulse 0:02:58.520000 --> 0:03:03.800000 burst and actually give it meaning above and beyond a simple heartbeat? 0:03:03.800000 --> 0:03:07.700000 Let's turn this thing into what's called an auto negotiation message. 0:03:07.700000 --> 0:03:12.140000 And so now, every single bit within that fast link pulse, whether it's 0:03:12.140000 --> 0:03:16.620000 set to a zero or a one, will actually indicate what the supported speeds 0:03:16.620000 --> 0:03:21.680000 are, what the supported capabilities are, if there's any faults, if we're 0:03:21.680000 --> 0:03:26.120000 doing flow control using layer two pause frames. 0:03:26.120000 --> 0:03:32.100000 So now this auto negotiation message was developed and it was based off 0:03:32.100000 --> 0:03:39.300000 of this existing 16-bit sort of pulse called the fast link pulse burst. 0:03:39.300000 --> 0:03:43.660000 Auto negotiation these days is on pretty much everything. 0:03:43.660000 --> 0:03:50.100000 So any knit card you get on a laptop or a PC or a router or a switch is 0:03:50.100000 --> 0:03:55.800000 most likely at minimum going to be a 10, 100 knit card, cable of 10 or 0:03:55.800000 --> 0:04:01.140000 100. Many of them these days are 10, 100, 1000. 0:04:01.140000 --> 0:04:05.100000 And how they are able to negotiate is by sending out this fast link pulse 0:04:05.100000 --> 0:04:09.300000 message. And you can see here, here's an example of the 16 bits where 0:04:09.300000 --> 0:04:15.280000 you can see the first five bits are reserved of 0001 and then the remaining 0:04:15.280000 --> 0:04:19.680000 spaces can indicate what kind of speed and what kind of duplex you can 0:04:19.680000 --> 0:04:23.520000 do. Now this is the original auto negotiation message that was 16 bits 0:04:23.520000 --> 0:04:28.340000 long. If you're using a gigabit adapter, it's actually bigger than this. 0:04:28.340000 --> 0:04:32.320000 It actually utilizes that 15th bit there, that one on the far right, setting 0:04:32.320000 --> 0:04:36.960000 that to a one, which means there's another page, there's a next page present, 0:04:36.960000 --> 0:04:40.740000 which means there's more auto negotiation bits to follow. 0:04:40.740000 --> 0:04:45.140000 So when your knit card first comes up, it sends this and then it should 0:04:45.140000 --> 0:04:50.040000 get within a maximum of sending three of these, it should get an acknowledgement 0:04:50.040000 --> 0:04:53.160000 back. Meaning it should get an auto negotiation message back from the 0:04:53.160000 --> 0:04:57.980000 peer with the acknowledgement bit set, acknowledging what supported speeds 0:04:57.980000 --> 0:05:01.180000 and duplexes your peer is capable of doing. 0:05:01.180000 --> 0:05:05.360000 And then based on that, you can negotiate to the highest speed and the 0:05:05.360000 --> 0:05:09.860000 best duplex. Now an auto negotiation first was developed and this was 0:05:09.860000 --> 0:05:14.240000 a while ago, this is like 20 plus years ago probably. 0:05:14.240000 --> 0:05:20.300000 And when it was in as infancy, it wasn't necessarily all that stable. 0:05:20.300000 --> 0:05:25.820000 And the thing with auto negotiation was if you had two devices, like for 0:05:25.820000 --> 0:05:31.520000 example, let's say that you had a switch that was capable of auto negotiation 0:05:31.520000 --> 0:05:37.420000 connected to an older knit card on a server and that server did not support 0:05:37.420000 --> 0:05:38.780000 auto negotiation. 0:05:38.780000 --> 0:05:42.780000 Now let's say that knit card on the server was a fast ethernet knit card. 0:05:42.780000 --> 0:05:48.040000 So all it could do was fast ethernet, 100 megabits per second and it was 0:05:48.040000 --> 0:05:52.940000 capable of full duplex or half duplex, but you had to set that manually. 0:05:52.940000 --> 0:05:55.880000 So you think to yourself, oh, okay, well, on my server, I'm going to manually 0:05:55.880000 --> 0:05:59.700000 set it for full duplex because after all it's connecting to a switch, 0:05:59.700000 --> 0:06:01.380000 shouldn't be a problem. 0:06:01.380000 --> 0:06:03.420000 Well, here's the problem that you would run into. 0:06:03.420000 --> 0:06:08.000000 You plug it into the switch, the switch starts sending out its auto negotiation 0:06:08.000000 --> 0:06:11.500000 message. What's it getting back from the server? 0:06:11.500000 --> 0:06:15.440000 It's getting back just a regular fast link pulse burst, basically a pulse 0:06:15.440000 --> 0:06:17.760000 of like all zeros or all ones. 0:06:17.760000 --> 0:06:21.400000 I'm not sure which one it was, but it wasn't this combination of ones 0:06:21.400000 --> 0:06:25.100000 and zeros. It was like 16 pulses all looking the same. 0:06:25.100000 --> 0:06:31.340000 So the switch said, huh, okay, well, based on the fact that I got 16 of 0:06:31.340000 --> 0:06:35.200000 those pulses and based on sort of the electrical energy used and the signal 0:06:35.200000 --> 0:06:39.620000 and the encoding, I know that what I'm connected to is a fast ethernet 0:06:39.620000 --> 0:06:44.140000 device. So the switch said, even though I can do 10 and 100, I know I 0:06:44.140000 --> 0:06:47.560000 should be doing 100 because if that device I'm connected to was only a 0:06:47.560000 --> 0:06:51.700000 10 megabit knit card, I would have only gotten a single pulse, a single 0:06:51.700000 --> 0:06:54.880000 normal link pulse and that's not what I received. 0:06:54.880000 --> 0:06:57.560000 So I can all, I can, the switch says I can figure out the speed. 0:06:57.560000 --> 0:06:58.940000 I got the speed nailed down. 0:06:58.940000 --> 0:07:04.440000 He's doing 100. But that device I'm connected to, I don't know what it 0:07:04.440000 --> 0:07:08.060000 is. I know it's a knit card capable of fast ethernet, but is it a knit 0:07:08.060000 --> 0:07:14.500000 card in a laptop, in a PC, in a hub, another switch, no idea. 0:07:14.500000 --> 0:07:20.060000 And that device I'm connected to isn't telling me what duplex it can do. 0:07:20.060000 --> 0:07:24.040000 So the auto negotiation device would say, hmm, since he's not telling 0:07:24.040000 --> 0:07:28.860000 me, I'm just going to play it safe and I'm going to go down to half duplex. 0:07:28.860000 --> 0:07:34.000000 And so in the early days of auto negotiation, when it first came out, 0:07:34.000000 --> 0:07:37.160000 you would see a lot of white papers and documents that would say, oh, 0:07:37.160000 --> 0:07:41.060000 just turn it off, statically hard code your speed and your duplex on both 0:07:41.060000 --> 0:07:44.460000 sides. Because if you don't do that, you might end up with a situation 0:07:44.460000 --> 0:07:47.940000 where you get half duplex instead of full duplex. 0:07:47.940000 --> 0:07:49.720000 And that's not what you want. 0:07:49.720000 --> 0:07:54.460000 But these days, here we are, 20 plus years later, auto negotiations very 0:07:54.460000 --> 0:07:59.220000 stable. It's on everything and you don't have to worry about it. 0:07:59.220000 --> 0:08:03.000000 It just works. So this is one of those things that just works in the background. 0:08:03.000000 --> 0:08:06.160000 But if you're like me and you're wondering, okay, well, how does my knit 0:08:06.160000 --> 0:08:10.220000 card know what speed it should select or what duplex it should select? 0:08:10.220000 --> 0:08:11.640000 It's because of this. 0:08:11.640000 --> 0:08:13.700000 It's because of auto negotiation. 0:08:13.700000 --> 0:08:16.740000 And that concludes this particular video on auto negotiation. 0:08:16.740000 --> 0:08:20.480000 In the next video, we're going to talk about the Ethernet frame structure.