
1
00:00:00,340 --> 00:00:02,260
Hello, and welcome to the transport 
layer. 

2
00:00:02,260 --> 00:00:06,0
We are working our way up from the bottom 
of our four layer architecture up through 

3
00:00:06,0 --> 00:00:09,290
the top. 
So we're kind of at the half way point. 

4
00:00:09,290 --> 00:00:12,306
We have covered the link layer, like 
ethernet, and then we covered the 

5
00:00:12,306 --> 00:00:16,120
internetwork layer which is kind of like 
the postcard layer. 

6
00:00:16,120 --> 00:00:19,890
So lets, lets review the magic of IP, 
right. 

7
00:00:19,890 --> 00:00:24,375
The Magic IP is this postcard layer that 
bounces these packets with From addresses 

8
00:00:24,375 --> 00:00:28,600
and To addresses, through you know, 15 or 
so hops, getting them their, getting 

9
00:00:28,600 --> 00:00:33,150
packets to their destination network from 
one network to another network as well as 

10
00:00:33,150 --> 00:00:37,893
it can. 
And then when it gets to the destination 

11
00:00:37,893 --> 00:00:40,379
network it finds the final computer on 
that network. 

12
00:00:43,20 --> 00:00:48,780
The magic of this is there is no interim 
long term storage inside the network. 

13
00:00:48,780 --> 00:00:52,530
All the long term storage is outside, and 
now we're going to talk about that. 

14
00:00:52,530 --> 00:00:55,430
So one of the things that makes IP so 
fast is that it is not demanded to be 

15
00:00:55,430 --> 00:00:58,280
perfect, it is not demanded to, to 
deliver data in order, and it's not 

16
00:00:58,280 --> 00:01:04,190
demanded to, it, it's, there's no 
requirement that it doesn't lose data. 

17
00:01:04,190 --> 00:01:07,390
Its fast and barely ever loses data and 
when it does there is a layer to recover 

18
00:01:07,390 --> 00:01:10,295
and that's we are going to talk about 
next. 

19
00:01:10,295 --> 00:01:15,805
So the internet protocol is this 
multi-hop packets can take multiple 

20
00:01:15,805 --> 00:01:22,710
paths, they can make use of all kinds of 
crazy links. 

21
00:01:22,710 --> 00:01:25,840
But now, we're going to move up one, 
right? 

22
00:01:25,840 --> 00:01:32,8
We're going to move up to the TCP layer. 
So the TCP layer is both simple and 

23
00:01:32,8 --> 00:01:35,291
complex. 
The purpose of the TCP layer is to 

24
00:01:35,291 --> 00:01:39,260
compensate for the possible errors in the 
IP layer as well as make best use of 

25
00:01:39,260 --> 00:01:45,550
available resources. 
So if the network, if the overall network 

26
00:01:45,550 --> 00:01:50,200
from the overall network from here to 
here is extremely fast we want to send 

27
00:01:50,200 --> 00:01:55,386
data really fast right. 
If on the other hand the overall network 

28
00:01:55,386 --> 00:01:58,610
from here to here is really slow we want 
to send data slowly and be efficient 

29
00:01:58,610 --> 00:02:04,112
cause remember part of the goal of the. 
TCP IP networking is to share effectively 

30
00:02:04,112 --> 00:02:08,620
and so we need to be aware of whether our 
network is fast or slow. 

31
00:02:08,620 --> 00:02:11,150
And those are the kind of problems we 
solve with a TSP layer. 

32
00:02:11,150 --> 00:02:16,64
How fast is the underlying network, how 
reliable is it and if something goes 

33
00:02:16,64 --> 00:02:23,706
wrong what do we do to deal with that. 
So the key idea in TCP/IP is that when we 

34
00:02:23,706 --> 00:02:29,380
send some data, we break it into packets 
and then we send each one. 

35
00:02:29,380 --> 00:02:34,645
And then we keep them until they get an 
acknowledgement from the other side and 

36
00:02:34,645 --> 00:02:41,394
then and only then do we throw them away. 
And at some point, if a packet gets lost 

37
00:02:41,394 --> 00:02:45,682
It can be sent again, and again, and 
again until it finally is acknowledged in 

38
00:02:45,682 --> 00:02:51,410
the destination system. 
And so that's basically what TCP does, is 

39
00:02:51,410 --> 00:02:58,120
it figures out which packets have or have 
not made it across the Internet layer. 

40
00:02:58,120 --> 00:03:01,237
So here's an example scenario. 
So we got a message that's broken up into 

41
00:03:01,237 --> 00:03:04,564
five packets. 
We've got sort of the first hundred 

42
00:03:04,564 --> 00:03:09,422
characters, the, the, you know, first 
characters, the second, and third packet. 

43
00:03:09,422 --> 00:03:16,330
Now, what TCP does, is it speculatively 
sends a few packets. 

44
00:03:16,330 --> 00:03:19,782
Says okay, let's get ahead. 
Cause if you sent one and waited Then you 

45
00:03:19,782 --> 00:03:22,914
might not make best use of the network, 
so you kind of guess and dump a few 

46
00:03:22,914 --> 00:03:27,6
packets out there. 
And so you send, let's say we send three 

47
00:03:27,6 --> 00:03:30,790
packets, cue them up for sending. 
And as fast as we can send them out the 

48
00:03:30,790 --> 00:03:35,90
back of our network, we start spooling 
them out the back of their network. 

49
00:03:35,90 --> 00:03:38,290
And somehow, two of them make it across 
the internet, to the destination, but 

50
00:03:38,290 --> 00:03:41,540
somehow that poor second packet, just 
like every time I'm doing a lecture, the 

51
00:03:41,540 --> 00:03:46,257
poor second packet never gets it. 
You don't want to be the second packet in 

52
00:03:46,257 --> 00:03:49,90
one of my lectures, 'cause you're 
going to get it. 

53
00:03:49,90 --> 00:03:54,74
But somehow, the second packet has gotten 
vaporized. 

54
00:03:54,74 --> 00:03:58,791
Now, time passes. 
And[COUGH], the receiver gets this s-, 

55
00:03:58,791 --> 00:04:04,520
s-, this sensation that maybe, maybe, 
maybe something's missing. 

56
00:04:04,520 --> 00:04:08,178
And so it sends and acknowledgement back, 
and it says, I'm going to send a note 

57
00:04:08,178 --> 00:04:13,463
back that says, look, I'm ready for 200. 
I do have 100, and I'm, I'm ready for 

58
00:04:13,463 --> 00:04:16,385
200. 
Matter of fact I might even through away 

59
00:04:16,385 --> 00:04:20,877
300 cause it's been so long. 
So I want you to start me over at 200. 

60
00:04:20,877 --> 00:04:23,680
[COUGH] But sender all of a sudden knows 
that 100 has been sent. 

61
00:04:23,680 --> 00:04:28,450
And so it knows that is can throw this 
one away now right it's been 

62
00:04:28,450 --> 00:04:33,268
acknowledged. 
So there's an acknowledgement stream 

63
00:04:33,268 --> 00:04:37,684
going back and forth, so now the sender 
sends 200 and 300 and then they make it a 

64
00:04:37,684 --> 00:04:45,150
cost, the receiver says I have got 200. 
Thus the 300 and then they send 400 

65
00:04:45,150 --> 00:04:50,170
speculatively. 
300 makes it, 400 makes it and receiver 

66
00:04:50,170 --> 00:04:54,70
says. 
I got 400, which means now it can cross 

67
00:04:54,70 --> 00:04:58,670
off 300 and 400, right? 
Check those off and throw them away, and 

68
00:04:58,670 --> 00:05:03,80
then send 500 cross, and at some point 
check those off. 

69
00:05:03,80 --> 00:05:07,250
It's got 500, and now the sender can sort 
of like empty, check everything off. 

70
00:05:07,250 --> 00:05:10,140
Everything's been sent, and it's been 
acknowledged, and we know. 

71
00:05:10,140 --> 00:05:14,361
And so that's kind of an oversimplified 
view of the kind of bookkeeping It's 

72
00:05:14,361 --> 00:05:18,380
going on, on both sides of a TCP 
connection. 

73
00:05:18,380 --> 00:05:24,906
And so this, right here is in a sense the 
genius of the internet. 

74
00:05:24,906 --> 00:05:30,210
The storage requirements in the middle, 
the routers, this is the IP basically the 

75
00:05:30,210 --> 00:05:37,470
network of networks, they, we didn't 
design these to require a lot of storage. 

76
00:05:37,470 --> 00:05:40,980
We wanted them to be fast, we wanted them 
to be agile, we wanted to be dynamic, we 

77
00:05:40,980 --> 00:05:45,20
wanted to be clever, but we also gave the 
right to fail. 

78
00:05:45,20 --> 00:05:48,684
So we didn't demand storage. 
We didn't say, hey, hold on to packets, 

79
00:05:48,684 --> 00:05:53,132
you know, all over the place. 
Just, store up piles of packets, piles of 

80
00:05:53,132 --> 00:05:57,90
packets and pile up in these, we don't 
ask that. 

81
00:05:57,90 --> 00:06:00,716
No router has to keep the packets. 
As a matter of fact, routers are supposed 

82
00:06:00,716 --> 00:06:04,728
to throw packets away to communicate back 
and forth between the system that maybe 

83
00:06:04,728 --> 00:06:10,300
things aren't working so well and, don't 
use me to get to California. 

84
00:06:10,300 --> 00:06:14,128
On the other hand, with hundreds, maybe, 
you know, hundreds of thousands or 

85
00:06:14,128 --> 00:06:19,230
millions of routers but billions of 
computers on the outside. 

86
00:06:19,230 --> 00:06:23,20
So we need a way to make this reliable. 
So we need to have memory to store the 

87
00:06:23,20 --> 00:06:26,980
packets while they're in flight so we can 
retransmit but we store the packets in 

88
00:06:26,980 --> 00:06:32,142
the computers that are outside. 
And there are billions of these 

89
00:06:32,142 --> 00:06:37,85
computers, there are billions of them. 
Every computer that you can carry around, 

90
00:06:37,85 --> 00:06:41,880
every laptop. 
come here. 

91
00:06:41,880 --> 00:06:47,48
Every time we add another computer to the 
network, we add storage for packets that 

92
00:06:47,48 --> 00:06:51,820
are being sent. 
So when your computer or, or phone is 

93
00:06:51,820 --> 00:06:58,460
sending across the network, it is 
responsible for retaining its own copies. 

94
00:06:58,460 --> 00:07:01,782
It does not expect the inner part of the 
network to do so. 

95
00:07:01,782 --> 00:07:08,986
And that is absolutely brilliant, so it's 
what really makes this work. 

96
00:07:08,986 --> 00:07:14,600
And so that's kind of a great 
oversimplification of what's going on. 

97
00:07:14,600 --> 00:07:21,30
And it turns out that there is still a 
lot of engineering to make that happen. 

98
00:07:21,30 --> 00:07:25,125
So I'd like to introduce you to a, to 
another of the innovators in the, that we 

99
00:07:25,125 --> 00:07:29,155
meet in this class his name is Van 
Jacobson, and I met up with him at Xerox 

100
00:07:29,155 --> 00:07:33,575
Park he did the work we're going to talk 
about while he was at Berkley, and[COUGH] 

101
00:07:33,575 --> 00:07:37,800
In the late 1980's there was this 
prediction that the internet was going to 

102
00:07:37,800 --> 00:07:44,790
die. 
And it seems obvious that it was, it's a 

103
00:07:44,790 --> 00:07:48,870
good idea now, but back then there was a 
bunch of folks that felt like academics 

104
00:07:48,870 --> 00:07:54,620
weren't smart enough to make a network. 
And 

105
00:07:54,620 --> 00:07:58,268
And they were like IBM and digital 
equipment that thought they, the vendors, 

106
00:07:58,268 --> 00:08:03,300
should make the network, and we should 
just pay them to use their network. 

107
00:08:03,300 --> 00:08:06,716
And as the NSF net was coming up, and 
more and more computers were being 

108
00:08:06,716 --> 00:08:11,835
connected in the background, the backbone 
was so slow it started to fail. 

109
00:08:11,835 --> 00:08:15,245
And it looked like the predictions of all 
of the computer vendors that said 

110
00:08:15,245 --> 00:08:20,128
academics couldn't build a robust 
scaleable network were going to be true. 

111
00:08:20,128 --> 00:08:24,483
And so Van Jacobson tells the story very 
differently but the way I saw the story 

112
00:08:24,483 --> 00:08:29,450
happening and unfolding in 1987 is Van 
Jacobson saved us. 

113
00:08:29,450 --> 00:08:33,938
the network was crashing, and we all 
installed Van Jacobson patches and the 

114
00:08:33,938 --> 00:08:39,408
network got better. 
And in my recollection this was the last 

115
00:08:39,408 --> 00:08:44,680
time it appeared that the entire internet 
was going to crash. 

116
00:08:44,680 --> 00:08:48,880
So we named it the Van Jacobson protocol. 
And he doesn't like to call it the Van 

117
00:08:48,880 --> 00:08:53,10
Jacobson protocol because he's a shy and 
unassuming guy. 

118
00:08:53,10 --> 00:08:59,85
But I, I think he saved us. 
And so this interview is him describing 

119
00:08:59,85 --> 00:09:02,985
sort of that moment back in the late 80's 
where he invented the slow start 

120
00:09:02,985 --> 00:09:07,210
algorithm that really is part and parcel 
of every T C P implementation that you 

121
00:09:07,210 --> 00:09:11,370
have on every computer that you use as a 
matter of fact it's being used to float 

122
00:09:11,370 --> 00:09:18,680
control on this lecture right this second 
as we speak. 

123
00:09:18,680 --> 00:09:20,663
So here's Van Jacobson. 

