WEBVTT

00:00.090 --> 00:01.020
杰森：在本课中,

00:01.020 --> 00:03.480
我们将讨论IP协议类型,

00:03.480 --> 00:10.020
包括TCP､ UDP以及无连接方法和面向连接方法的概念｡

00:10.020 --> 00:12.300
什么是TCP？

00:12.300 --> 00:15.270
TCP是一种传输控制协议｡ 

00:15.270 --> 00:17.340
它是一种面向连接的协议,

00:17.340 --> 00:22.080
这意味着它是在我们的网络中传输数据段的可靠方式｡

00:22.080 --> 00:23.580
现在, 如果一个数据段被丢弃,

00:23.580 --> 00:26.603
协议实际上每次都会要求确认｡

00:26.603 --> 00:28.890
如果它没有得到确认,

00:28.890 --> 00:31.530
它将重新发送这条信息｡

00:31.530 --> 00:34.410
这就是为什么我们称之为全连接协议, 因为它具有这种双向类型的信息,

00:34.410 --> 00:43.170
我向您发送信息, 我通过收听您收到的信息来验证您是否确实收到了它, 然后您给我一个响应｡

00:43.170 --> 00:46.230
现在让我们看一下屏幕上的这个小图表｡

00:46.230 --> 00:48.210
您将看到我在左边有一个客户端,

00:48.210 --> 00:49.800
在右边有一个服务器｡

00:49.800 --> 00:54.510
现在, 客户端将向服务器发送所谓的syn数据包,

00:54.510 --> 00:55.950
或同步数据包｡

00:55.950 --> 00:58.170
现在, 当服务器得到这个消息时,

00:58.170 --> 01:00.720
它将向客户端发回一个同步确认,

01:00.720 --> 01:02.580
称为syn ack｡

01:02.580 --> 01:04.740
现在, 当客户端收到确认时,

01:04.740 --> 01:07.380
它将向服务器发回自己的确认｡

01:07.380 --> 01:09.060
这被称为ACK｡ 

01:09.060 --> 01:11.940
现在, 当我们这样做syn, syn ack,

01:11.940 --> 01:15.030
ack时, 这就是我们所说的三次握手｡

01:15.030 --> 01:16.807
从本质上讲, 这是客户端去,

01:16.807 --> 01:21.367
“嘿, 服务器, 你准备好得到一些信息？ ”服务员说：“当然｡

01:21.367 --> 01:21.367
为什么不呢？

01:21.367 --> 01:22.920
“给我发点资料｡  客户说, “好吧,

01:22.920 --> 01:27.630
来了｡ 然后传输就要开始了, 因为我们已经建立了三次握手,

01:27.630 --> 01:32.737
我们知道双方都准备好了进行通信｡

01:32.737 --> 01:33.937
“现在, 你准备好了吗？ “是的,

01:33.937 --> 01:36.810
我是｡ “来了｡

01:36.810 --> 01:36.810
现在,

01:36.810 --> 01:40.710
每次通过网络发送这些数据（我们称之为数据段）时,

01:40.710 --> 01:46.980
都会收到一个确认消息, 告诉我们双向通信成功｡

01:46.980 --> 01:48.600
现在, 如果这个服务器期望得到100条信息,

01:48.600 --> 01:50.370
但它只得到了其中的98条,

01:50.370 --> 01:53.587
它会对客户端说, “嘿, 你告诉我你要给我发送100条信息,

01:53.587 --> 01:58.177
“但你只给我发送了98条｡

01:58.177 --> 02:02.730
“把我缺少的那两样东西送过来｡  然后, 发生重传｡

02:02.730 --> 02:03.563
通过这种方式,

02:03.563 --> 02:07.470
通信可以为我们进行, 我们可以始终确保我们得到了我们应该得到的,

02:07.470 --> 02:10.920
因为我们可以通过网络重新发送数据包｡

02:10.920 --> 02:16.830
现在, 它用于所有需要确保到达其最终目的地的网络数据｡

02:16.830 --> 02:19.470
我喜欢把它想象成挂号信｡ 

02:19.470 --> 02:22.440
例如, 如果我想给国税局发一条信息, 我想确保他们收到了,

02:22.440 --> 02:25.620
而且不会在邮件中丢失｡

02:25.620 --> 02:29.160
所以我可能会多付一点钱, 得到一个认证的收据,

02:29.160 --> 02:31.080
当它到达那里, 他们必须签署它,

02:31.080 --> 02:32.820
并被邮寄回我｡

02:32.820 --> 02:34.740
这样, 当我拿回收据时,

02:34.740 --> 02:37.500
我就知道国税局收到了我的邮包｡

02:37.500 --> 02:39.960
这就是TCP的工作方式｡ 

02:39.960 --> 02:41.220
现在, 另一方面,

02:41.220 --> 02:44.250
我们有另一个称为UDP的协议｡

02:44.250 --> 02:47.250
UDP是我们所说的无连接协议,

02:47.250 --> 02:49.770
这意味着它不必等待连接｡

02:49.770 --> 02:52.830
UDP是User Datagram Protocol的缩写｡ 

02:52.830 --> 02:54.270
我们之所以称之为数据报,

02:54.270 --> 02:57.750
是因为如果你使用UDP, 你就使用了这种类型的数据｡

02:57.750 --> 02:59.220
它叫做数据报｡ 

02:59.220 --> 03:01.317
现在, 当我们谈论UDP时,

03:01.317 --> 03:05.490
UDP是不可靠的, 它传输称为数据报的段｡

03:05.490 --> 03:06.510
如果它们被丢弃了,

03:06.510 --> 03:09.000
发送者永远不会知道它发生了｡

03:09.000 --> 03:12.300
为什么我要把东西寄到发件人不知道的地方,

03:12.300 --> 03:14.220
我也没有收到任何收据？

03:14.220 --> 03:17.850
UDP非常适合音频和视频流, 因为您发送大量数据,

03:17.850 --> 03:19.920
并且使用UDP时的开销要少得多,

03:19.920 --> 03:30.840
因为我们没有恒定的三次握手来建立它, 并且我们没有使用TCP相关的所有检查和平衡｡

03:30.840 --> 03:32.520
因此, 通过使用UDP,

03:32.520 --> 03:35.190
您可以真正提高网络的性能,

03:35.190 --> 03:37.800
因为您将有零重传｡

03:37.800 --> 03:39.870
你最后只会泄露信息

03:39.870 --> 03:41.490
这不是坏事吗

03:41.490 --> 03:43.530
我们为什么要放弃信息？

03:43.530 --> 03:45.300
对某些应用来说,

03:45.300 --> 03:46.740
这并不重要｡

03:46.740 --> 03:49.440
例如, 您正在播放此视频｡ 

03:49.440 --> 03:53.520
如果我消失了1/100秒, 你会注意到吗？

03:53.520 --> 03:54.960
嗯, 你可能不会, 这就是为什么UDP如此好,

03:54.960 --> 04:03.120
因为我们可以在这里丢弃1/100的时间, 你真的永远不会注意到它, 而且不会有重新传输｡

04:03.120 --> 04:04.740
但是使用TCP, 这将导致更多的缓冲,

04:04.740 --> 04:07.440
因为你必须等待, 然后让它重新发送给你,

04:07.440 --> 04:11.250
然后把它放在正确的地方, 然后播放它｡

04:11.250 --> 04:13.770
因此, 由于这种确认和开销,

04:13.770 --> 04:15.870
对于这个视频的每一秒,

04:15.870 --> 04:17.880
它最终会使它变得更大,

04:17.880 --> 04:19.830
并使用更多的带宽｡

04:19.830 --> 04:24.660
这就是我们使用UDP进行视频流和音频流的重要原因之一｡

04:24.660 --> 04:28.740
现在, 让我们快速总结一下TCP和UDP｡ 

04:28.740 --> 04:31.410
因为这是一个非常非常重要的概念｡ 

04:31.410 --> 04:33.600
事实上, 如果你现在有笔记, 我会写下这个图表,

04:33.600 --> 04:38.520
我现在要告诉你, 因为我们谈论TCP和UDP｡

04:38.520 --> 04:40.770
因为这真的很重要｡ 

04:40.770 --> 04:43.380
首先, TCP是可靠的, 它有三次握手,

04:43.380 --> 04:47.040
而UDP不是很可靠｡

04:47.040 --> 04:48.540
这是一个不可靠的协议,

04:48.540 --> 04:51.180
因为没有三次握手｡

04:51.180 --> 04:55.560
TCP是我们所说的面向连接或完全连接的协议,

04:55.560 --> 04:57.960
因为我们在应答中有三次握手,

04:57.960 --> 05:00.660
但UDP是无连接的｡

05:00.660 --> 05:02.550
这是一个火和忘记的方法｡ 

05:02.550 --> 05:04.200
我只是开始发送信息,

05:04.200 --> 05:06.660
希望你能得到它｡

05:06.660 --> 05:12.030
TCP使用段重传和通过窗口处理的流量控制｡

05:12.030 --> 05:13.230
另一方面, UDP没有重传,

05:13.230 --> 05:16.230
也没有窗口｡

05:16.230 --> 05:17.160
使用TCP,

05:17.160 --> 05:20.820
我们对所有不同的段进行了分段｡

05:20.820 --> 05:23.370
使用UDP, 没有排序｡ 

05:23.370 --> 05:25.530
这意味着, 当我把所有的东西都发送出去的时候,

05:25.530 --> 05:28.710
我会按照正确的顺序, 从1到100发送出去｡

05:28.710 --> 05:31.260
我将对TCP和UDP都这样做｡ 

05:31.260 --> 05:32.910
现在, 如果你错过了其中的一些片段,

05:32.910 --> 05:34.350
或者它们以不同的顺序到达,

05:34.350 --> 05:36.480
因为它们在网络上采取了不同的路径,

05:36.480 --> 05:42.420
使用TCP, 它们会排序, 所以它知道你有1到1000, 它会把它们放回正确的顺序｡

05:42.420 --> 05:44.850
使用UDP, 无论它们以什么形式进来,

05:44.850 --> 05:46.650
这就是它将如何广播它｡

05:46.650 --> 05:48.030
所以, 它可以是1,

05:48.030 --> 05:49.230
50, 2, 500,

05:49.230 --> 05:50.910
3, 4, 5, 6,

05:50.910 --> 05:55.230
20, 以任何随机的顺序｡

05:55.230 --> 05:56.580
你就得这么听｡ 

05:56.580 --> 05:59.010
对于视频, 你可能会听到一点跳动,

05:59.010 --> 06:00.780
或者一点尖锐的尖叫声,

06:00.780 --> 06:01.740
或者类似的声音,

06:01.740 --> 06:04.320
因为其中一帧可能出了问题｡

06:04.320 --> 06:05.550
现在, 当我们回到TCP时,

06:05.550 --> 06:08.010
它将确认每个数据段｡

06:08.010 --> 06:09.780
所以我们有了认知｡ 

06:09.780 --> 06:10.680
如果我没有得到它,

06:10.680 --> 06:11.513
我知道我没有得到它,

06:11.513 --> 06:15.000
我可以让它重新传输给我, 然后再得到它｡

06:15.000 --> 06:17.190
使用UDP, 没有确认｡ 

06:17.190 --> 06:20.220
同样, UDP的开销要少得多,

06:20.220 --> 06:21.540
因为它没有连接､

06:21.540 --> 06:26.610
没有窗口､ 没有重传､ 没有排序和没有确认｡

06:26.610 --> 06:28.620
现在, 如果你必须得到一些东西,

06:28.620 --> 06:34.590
你想确保这个人得到了它, 你真的必须使用TCP作为你选择的协议｡

06:34.590 --> 06:36.930
这就是为什么我们真的要把TCP用于银行､

06:36.930 --> 06:40.770
网站和电子商务等领域｡

06:40.770 --> 06:42.900
但是, 如果我们有很多数据, 比如音频或视频流,

06:42.900 --> 06:44.550
UDP确实可以很好地处理,

06:44.550 --> 06:49.320
因为我们不需要获取该文件的每一部分｡

06:49.320 --> 06:50.880
我们可以在这里和那里跳过一点,

06:50.880 --> 06:52.510
这没关系｡

06:52.510 --> 06:54.570
- ：现在, 当谈到TCP和UDP时,

06:54.570 --> 07:00.510
我们谈到了这两种协议是全连接或面向连接的协议, 以及无连接协议｡

07:00.510 --> 07:02.190
让我给你们举几个使用TCP或UDP协议的例子,

07:02.190 --> 07:07.680
这样你们就能理解为什么我们要使用每一种协议｡

07:07.680 --> 07:12.750
首先, 让我们看看TCP和我们的面向连接或全连接协议｡

07:12.750 --> 07:17.520
这包括SSH､ HTTP或HTTPS｡ 

07:17.520 --> 07:20.940
那么, 为什么我们在这些情况下需要面向连接呢？

07:20.940 --> 07:23.490
好吧, 在使用SSH之类的东西的情况下,

07:23.490 --> 07:25.710
我正在进行双向通信和远程服务器或远程工作站的控制,

07:25.710 --> 07:30.390
并且能够通过端口22来实现｡

07:30.390 --> 07:34.920
我想确保我是以一种面向连接或完全连接的方式这样做的｡

07:34.920 --> 07:38.190
这样, 当我发出一个命令并说, 重新启动服务器时,

07:38.190 --> 07:40.080
我知道该命令实际上到达了那里,

07:40.080 --> 07:42.060
服务器将重新启动｡

07:42.060 --> 07:44.820
类似地, 当我们处理HTTPS时,

07:44.820 --> 07:50.040
我们希望确保我们使用TCP的是完全连接或面向连接的协议｡

07:50.040 --> 07:51.120
这样做的原因是,

07:51.120 --> 07:54.690
我们想确保我们发送的信息确实被接收到了｡

07:54.690 --> 07:58.500
这可能包括我们试图使用用户名和密码登录网站时的身份验证,

07:58.500 --> 08:06.180
或者可能是我们从该网站获取的信息, 例如我们的帐户余额和银行信息｡

08:06.180 --> 08:07.013
现在, 另一方面,

08:07.013 --> 08:08.970
如果我们使用UDP作为我们的协议,

08:08.970 --> 08:11.400
我们是在一个无连接的方式处理｡

08:11.400 --> 08:12.390
现在, 我已经提到了一个事实,

08:12.390 --> 08:15.600
我们一直在使用它来处理音频和视频流｡

08:15.600 --> 08:16.680
但除此之外,

08:16.680 --> 08:23.130
我们还将其用于DHCP和普通文件传输协议（称为TFTP）等｡

08:23.130 --> 08:24.030
现在, 如果你还记得,

08:24.030 --> 08:30.660
DHCP被用作动态主机控制协议, 它在端口67和68上运行｡

08:30.660 --> 08:32.310
现在, 当您加入网络时,

08:32.310 --> 08:40.650
如果您的设备设置为动态分配其IP地址, 则会在该网络上发送广播消息, 以查找DHCP服务器｡

08:40.650 --> 08:43.860
这就是为什么我们把它用作无连接协议｡ 

08:43.860 --> 08:49.530
因为如果信息被发送出去而没有人回应, 你的客户会简单地再次发送,

08:49.530 --> 08:51.510
希望其他人会在那里｡

08:51.510 --> 08:53.070
这就是DHCP的工作原理｡ 

08:53.070 --> 08:55.080
它会允许广播消息出去,

08:55.080 --> 08:57.090
然后等待响应回来｡

08:57.090 --> 08:59.340
如果在一定的时间内没有得到响应,

08:59.340 --> 09:01.560
它将简单地重新广播它的消息,

09:01.560 --> 09:04.590
并再次寻找新的DHCP服务器｡

09:04.590 --> 09:09.060
现在, 类似地, 当我们有TFTP或简单文件传输协议时,

09:09.060 --> 09:15.690
它在端口69上运行, 它将以无连接的方式使用UDP作为其传输｡

09:15.690 --> 09:16.680
这样做的原因是因为TFTP是简单的文件传输协议,

09:16.680 --> 09:29.190
因此, 我们不需要保证每个数据包都是通过这些确认发送和接收的, 如果我们使用TCP, 这会产生更多的开销｡

09:29.190 --> 09:30.600
因此, 通过使用UDP,

09:30.600 --> 09:32.430
当我们使用TFTP之类的协议时,

09:32.430 --> 09:34.500
我们可以更快地传输文件, 而不是使用更多的连接完整协议,

09:34.500 --> 09:38.163
如FTP｡
