00:00
好,那我们接下来呢,就给大家来介绍一下TC pip协议里面它的一些具体的层。TC pip分成了四层,那关键的就是中间的两层,核心的就是两层。那么从下往下往上数链路层,我们平常用的是以太网。这个我们已经讲过了,它的针的结构。再往上就是Internet层,那么Internet层在O模型中咱们叫网络层,那么再往上叫传输层,这个是同名的。在TC pip协议里面叫传输层,在O模型中也叫传输层。那传输层,接下来我们就先来看看传输层它的技术细节。传输层,由于它和O模型的传输层功能是相匹配的,所以它就具有了O模型的传输层的功能。
01:10
咱们上次讲过传输层的功能实现的是什么功能?那它可以实现数据终端对终端的通讯,可以实现所谓的可靠或者非可靠的传输。所谓可靠,就是网络中数据报文发过去以后,我希望能够确保数据能安全到达,因为早期的网络环境是比较糟糕的。网络中传输数据。经常会遇到各种干扰,造成数据发送失败。
02:00
所以我怎么能安全的知道,确保这个数据报文对方收到了呢?那所以应该有个确认过程,就是我发过去了,你收到你得告诉我一声吧,你不告诉我咋知道成功还是没成功啊啊,那么另外我们还需要标识出我的上层应用协议是谁那种。因为传输层的上一层不就应用层了吗?那么应用层有很多呀,那你到底我这个数据报文收到了,我不要拆封装交给上层协议吗?那你要交给上层协议接收数据报文的接收方。那么它有一个解封装的过程,那么发送数据包文的时候,它有一个封装的过程。那么总之我们需要和上层进行进行沟通,那么在数据报文中应该有上层协议的类型。
03:03
那这些都是传输层来完成的,传输层有的时候还具有流量的控制功能,流量控制功能那就是那如果网络比较拥堵了,那咱们就稍微慢点跑吧。啊,你不能说不管网络的状态,就凭着自己的。啊,想法想怎么全速通讯啊,有多大的流量,多大的网速带宽全利用起来,这个是不合理的。所以这些功能通通都是传输层的功能,当然传输层基于不同的应用场景,它里面有两个重要的不同的,可以说区别很大的两个通讯协议。这两个通讯协议。能实现。终端对终端的通讯。但是他们的特点又差别很大,一个叫TCP,一个叫udp,那么TCP和udp有很多重要的区别,那这个图上呢,描述了他们的区别,比方说一个可靠,一个高性能啊,效率好,效率高,一个面向连接,一个非面向连接。
04:25
一个数据有序列,一个无序列。那么什么场景用TCP邮件文件共享下载?什么情况下用udp语音视频啊?这就是他的一个大概的一个表格,那接下来咱们就来详细来说一说TCP协议,UDB协议,那么到底什么叫可靠,什么叫面向连接,对吧?这都什么意思,那看一看。
05:00
那首先咱们来先说TCPTCP叫传输控制协议,这是它的全称,那么它的特点这列了一大堆。这些特点我们暂时先不看,因为直接给你说你也看不懂啊,我们直接来看它的数据报文的头部信息,那么说到这个头部信息,大家应该知道这个TCP的豹纹头是整个豹纹中的什么位置,这个呢希望大家能够先知道,那么它在什么位置呢?在。看这里面有没有提前画好挨字儿。在这儿。在哪呢?咱们之前说过以太网真这就是以太网真的帧结构,这是个针frame,大家记得前八个字节减讨信息对吧?最后是不是有四个字节的校验位啊,是不是目标地址,麦克地址对不对,这是六个吧,再就六个,这是不是上层协议类型啊,再往里这是不是我们都认为是数据了对吧?哎,但是我们说了这个数据实际上是在以太网真的眼里头是数据,实际上它并不都是数据,因为里面它的上一层是英太Internet层,英太层是不是有英太的头信息,那么再往英太层上是不是就是传输层,传输层是不是有传输层的头信息,然后传输层往上是不是应用层的协议,应用层协议实际上有可能应用层也有自己的头,然后再加上什么数据,所以实际上它是有很多很多。
06:36
各自的头的,这个呢,就是我们说的TCP的报文头部就在这个位置,看到了吗?中间我们待会说这个IP头,IP头啊,前面咱们已经说过这个以太网的头了,以太网的头啊,以太网的头这些。好,那么接下来我们来说说TCP的头,那么TCP的报文头部就相当于TCP封装了我们的数据,把应用层的数据给封装在里面,然后它是表现为一个头,那么这个报文头部它的结构是什么呢?这就是它的结构,大家看这个图。
07:11
那这个图是这样的,其中这一行是按照一位一位来画的,零到31。那零表示第一位31,自然就表示的是第32位,也是一行是32位,32位四八,32是不是四个字节。对吧,也就是说这是两个字节,这一半是两个字节,这是另外的两个字节,哎,这个是一个字节,这是一个字节,总共是三四个字节。这一行就是四个字节啊,那么其中。这个报文里面,它有必须拥有的固定的内容,有什么呢?前20个字节,大家看这前五行。
08:02
是固定的。前五行是每个TCP报文里面都必须有的,所以它叫固定守护。那是五行,而一行是四个字节,四五是不是就是20?就说20个字节大家都有,那么剩下的这些有没有就看情况了,因为可选项目可选的有或者没有。那所以我们这两边这个既然可选,它不是个固定有的,我们就不讨论了,我们只讨论上面固定拥有的20个字节。那么上面的固定20个字节,其中最前面的。这一行也就是前32位四个字节。它分成两部分,分成原端口,目标端口。啊,这个端口是干嘛的呢?实际上就是为了描述上层应用程序的。
09:04
标签啊上层协议,上层协议什么是用层协议,上层协议的用层协议很多呀,比方说我们是不是有HTTP协议啊,有什么FTB协议啊,有什么NFS协议啊,啊包括什么QQ,那那也算协议,微信也算协议吗?啊那么上层协议很多。那么在一个电脑上运行了很多应用程序。那么当你从网上发了一个数据报文过来以后,我是不是就得说清楚我的上层协议,到底我这个数据报文?应该交给谁呀?我是交给。浏览器还是交给QQ啊。那所以我们就需要区分应用程序,那怎么区分应用程序呢?靠端口号。这个端口号实际上就是上层协议的区分标签。
10:00
当然怎么区分,那这个靠两个端口,一个圆,一个目标,为什么源和目标呢?因为通讯双方是两个应用程序啊,虽然说跨网络吧,但是你和对方是不是各有自己的一个应用程序。哎,通讯比方说大家通过VNC看我的桌面,那么你的电脑上是不是运行了个VNC软件,我的机上是不是也有个NC软件,对不对,哎,所以这时候你在发送数据报文的时候,你呢,那个电脑上的VC软件占用了一个。源端口,那你的机器不给我发,你机器给我发,我是目标,你是圆,那么你这个圆这个地方是不是应该有一个源端口,表示你这个应用程序在你的机上的唯一标志。那么这个目标端口是在我的机上的每个应用程序的唯一标志。那就加以区分,那加以区分,这个原端口和目标端口都占16位,都占16位,你占16位,我占16位,那么理论上多少个端口啊。
11:09
那么最多也就是二的十六次方的端口,算下来是多少呢?65536啊,6536,那65536什么意思呢?就是说每一个应用程序和别人打交道,那么只要用TCP协议就得分一个端口号至少那一个端口号至少,那么就是最多有六万多个应用程序嘛。就是你在电脑上呢,你要采用TCVIP协议,那你得六万多个乱果号。六万多个端口号给最多给六万多个应用程序使用,当然够不够用啊。一般在一个电脑上,你能跑六万多个应用程序吗?对吧,所以通常是够用的啊,当然我们通常那就有不通常的型号啊,尤其互联网的情况,互联网的用户是不是访问量很大,这时候有可能就不够啊,所以这个我们一般够啊,一般够。
12:02
那么这个端口号呢,它是分成发送数据报文和接收数据报文应用程序的各自端口,一般的我们互联网上的网软件都是基于C和S结构,就是有专门的客户端软件,有专门的服务器端软件。比方说我们去打开一个网站,这个网站实际上背后就是一个服务器软件。当然我们去打开这个网站,CC是谁呀?C不就是浏览器吗?对吧,我们通过浏览器,比方说我这通过这个浏览器打开我的博客网站,那这个打开我的博客网站,那我这个浏览器就是我的客户端软件,那这个博客网站它对应的。就是我的服务器网站啊。那当然,背后它需要运行软件,但是不管是哪个软件,都需要有各自的唯一的端口,这个端口号记住它是在你这个机器上,要确保是唯一的,他要和别的不同的应用程序加以区分,两个应用程序不能使用相同的端口号,如果端口号冲突了,那自然就会导致应用程序运行失败啊,所以你要确保两个应用程序必须使用不同的端口,给它错开啊,错开。
13:29
那这个端口号对于不同的服务器软件,它有通常都有相应的端口号,刚才说了C结构,C是客户端,客户端一般来讲是访问服务器的服务器,它的端口号通常都是固定的,比方说对于HTTP这种协议的服务器,它的端口是TCP的八零端口。啊,所以我们现在实际上打开浏览器,你去访问这个网站的时候啊,这个地方实际上隐藏了一个八零,只不过我们由于它是默认的,我们都可以不用写,但是你要非写上也没问题,你可以在这个地方冒号后面跟上八零,这是可以的,因为它是默认的,所以我们都不写啊,也是可以的,他也不会报错啊,那当然有些时候可能这个网站他会把端口给改了,他没有用这个默认的,没有用默认的,那你就得人为的在这个地方写上了,比方说有一天我把这个逗号号给改成8080了,那这时候你就必须要写8080,因为客户端他可不知道你用什么端口,你他认为是默认的,知道吧,默认是默认的。
14:39
啊,所以这个端口号呢,啊,我们要记住这些。好。那这个端口号是服务器端是固定端口,而客户端相对来讲因为是访问别人,不需要别人访问它,所以它的端口是随机分配的,那么其中这个端口是有调,有一定的范围要求的,大家看这个端口号。
15:04
其中零到1023以内的这几个端口,那么它是特权端口。特权端口什么意思呢?就是给管理员给root有权限使用。这些端口号你不能普通人用,只能管理员root来使用。啊,其中我们著名的一些协议用的端口号,希望大家慢慢的把它都记住。比方说HDDVS是443,我们先用的SSH不就是22吗?啊,你看现在再来看你就知道了啊,我们现在通过我的Windows的叉share去连接了我的Windows的八这个机器,它实际上走的就是22端口,看这边写的那么好。那么我们看到这边的端口号,好像这个端口号是7638 7638是谁的端口啊,这是客户端的端口。
16:03
Windows嘛,这个IP地址不是Windows的IP吗?它是客户端,客户端端口是随机的,所以换句话说,我再开一个新的连接,然后比如说再开一个,你再开一个新的连接,它就会打开一个随机端口,大家看我这是不是开了一个10333端口。啊,客户端端口是随机的,而服务器端口是固定的啊,固定的这个应该就这样啊,你想服务器就有点像咱们一个。商店或者是一个这个是是一个对外营业的一个公司,这个营业的公司他必须有一个固定的联系方式啊,你要说三天了,我说老变,那客户都找不着你怎么跟你做生意呀啊。所以通常来讲,服务器都是个固定的端口号,而客户端那就无所谓了,客户端它是主动的去访问服务器的,所以它的端口可以随便。
17:04
不固定,不固定,如果固定也不好,为什么?比方说我这回用323678,我去访问SSHSHR,那如果我又访问了我的三七,这是不是就麻烦了,如果也用这个固定端口,3678已经被3S8占了,那么你再去访问367,你这个时候你用33678不就打架了吗?所以他客户端不能用固定端口,而必须用变化的端口,要不就会产生冲突,所以你看他这是不是肯定不会用3678,而用的是三呃7636啊7636看到没有,是不是不是一样的不一样,呃,客户端端口一定是要。变化的,这样才能适应啊适应。好。这个端口号,那现在大家知道,那其中1024~49151这个叫用户端口,这个用户端口通常也是给应用程序使用的,不过呢,他没那么严格,可以允许非root来使用啊,允许非root来使用,你看我们现在系统中有很多用户账号,那么这个用户账号你不能用这个1023以内的。
18:25
那么你可以用1024以后的这个端口,这是可以的啊,他有权限使用,那么其中那么看这些著名的端口号,希望大家以后都要记住了,比方说我们后面学习的数据库。MYCQ3306啊,当然说的是服务器端啊,那么还有微软的数据库SQL server Oracle数据库1521。啊,包括后面还要学习的一些其他软件都有各自的端口,这个端口你现在先不用记也行,反正后面我们学的时候天天用也就记住了啊,我们后面学的服务很多啊,学的服务很多,这端口号都记住了,那事实上这些服务器的端口,我们在系统中有一个文件,可以帮我们来学习或者查看哪个文件呢?就这个文件。
19:21
有一个叫service文件,这个service文件它里面列出了所有的常用服务,他们用的端口号,那比方说大家比较熟悉的HTTPHTP呢,用的是八零啊,八零啊这个端口太多了,那我们去对验一下吧,好,大家看你看22是不是有啊,22 22在哪呢?这。看到没,是不是22啊啊,比方说呃,TT23啊,包括咱们刚才说的TCP的HB,看八零是不是有啊啊都有。
20:03
啊,当然大家可能说,哎,这怎么还有udp啊,那udp也给他留下来了,但事实上我们不用啊,不用不用呢,这是给你预留的呗,预留的就这么多,那这些,当然这里面端口号很多啊,都要很多,那也不用都记啊,就是我们把咱们后续学到的每个服务,只要用到网络的这个固定端口,你到时候把它攒下来,慢慢记住就行了。这个面试经常问,包括现在你先记个小本是吧,专门总结一下常见服务的端口号啊,现在开始累积这些端口,累积这端口啊。好,这是刚才提到的端口号的功能。那么另外还有949152~6535这个呢,叫动态端口,动态端口当然给谁用啊,客户端呗。
21:00
啊,客户端也需要端口啊,啊,它的范围,客户端的端口这个范围49152~6535,但这个不不严格,我们一般来讲在Linux里面可以调整这个客户端端口,默认的端口范围在这。你可以用这个命令来看,这边有一个范围,这个范围就是定义了客户端的端口的工作范围,不过呢,这个是Linux里面它默认的范围,那这个范围可以改,比方说你发现32768~60999这个端口范围,那比方说我现在啊,现在我这个WINDOWS8,它和别的机器之间没有连接,就是和Windows有连接,但是Windows对于Windows来讲,它是服务器,它用的是22端口,那现在我怎么让八当客户端呢?那我可以这样,我可以连别人吗?比方说我连一下七,这我当我一连七,我是不是就成客户端了,那客户端它的端口是多少呢?你看一下知道了,在这边七上你看一下看见没。
22:11
用的是不是叫40753754,为什么4540754,因为这个地方有范围呀。你要求在这个范围内取一个端口,听懂了吧?哎,你在这个范围内就行了啊,不能超这个范围,但是看这个范围大概有多少端口啊,算来是不到3万吧,不到3万,那不到3万的端口,那也就是说在你的电脑上客户端软件。最多有3万左右的。应用程序,假设一个应用程序用一个端口,是不是就3万个应用程序对吧,3万个应用程序访问别人当客户端。但是这够不够啊,我们说一般够啊,那可能二班不够,二班不够那你就要改这个端口,所以有些生产环境中会把这个端口故意扩扩大啊,尤其我们后面讲反向代理,反向代理实际上他就是代理客户端请求的,说白了就是他代表着客户端去访问服务器,这时候他一个人要代替成千上万的客户端访问别人,这个端口号可能就不够了,不够了那么就要改这个范围,改这个范围怎么改呢?非常简单,Eo一下,比方说我们就从啊1万到。
23:27
六五。535啊,当然也可以少1.00啊,把它定义一下。这就改了,看改了没。这是不是一下子就是5万个端口出来了。是不是五万多个端口就可以用了啊,它范围是不是就加大了,这个可以调啊,这个可以调,当然我们这个调啊,是临时性调啊,这个不是永久保存,是临时性调整。
24:02
好,我们后面会给大家讲这个怎么去永久保存,永久保存啊,知道怎么调好,这就是端口的一个定义啊,那其中我们每个服务的端口号,尤其当服务器的端口都是要。固定端口的,呃,固定端口如果你用的不是标准的协议,比方说你自己研发了一个软件,你自己开发了一个软件,那么服务器的软件也需要有一个固定的端口,那这个端口用哪个一定。如果你的软件它不是采用了现有的这些协议,比方说不用HDP,不是HBS呀这些协议,你就自己开发了一个专有的软件,比方说你将来有一天自己专门做了一个类似的聊天工具。就类似于QQ啊腾讯这样的啊,比方说啊,起个名字叫啊马哥聊天工具是吧,这个马哥聊天工具呢,是自己的专门的软件,这个软件,那你得用自己的端口号。
25:06
那自己的段落号用哪个,你自己找一个没人用的就行了啊,找一个没人用的,那咋知道有人用,有人没没人用啊,那不是刚才有一个文件吗?那这个文件里面是不是就记录了哪些端口被占了。对吧,那所以你就找一个比方说,我喜欢这个端口,哎,9527。927这个数字有一定的意义,哎,我喜欢,所以我就用这个当端口号,当然了,有人用没用呢?诶没人用,没人用我就可以用吗?对不对?哎,没人用我就可以用,927大家听说过吧?没听说过呀,你们没看过那个唐伯虎点酒香吗?周星驰演的嘛,啊,唐伯虎啊,点点秋香嘛,那个周星星演的大片嘛,是吧?嗯,周星驰加入华府以后,他不是想泡人家去嘛,是吧?哎,想泡人家秋香,结果就冒充这个穷人是吧?哎,携带他是小强嘛,旺旺财,反正打了一仗,然后混入华府,呃,成为了华府的一个仆人,那仆人那为了管理他们是有编号的啊,就叫9527啊,9527。
26:25
吓人是吧?啊,管他吓人不吓人呢,最后成功的泡得这个秋香回来就行了,嗯啊9527,所以那这个数字将来你可以考虑在你的这个服务器软件里面,就用这个端口就好了啊好,那么这个软件的端口号,总之要确保唯一啊,只要在当前主机上和别人不冲突就可以。那这个端口号呢,我们这是可以通过一些方法来进行定义的,比方说我们这有个工具啊,叫NC这个工具,这个NC这个工具呢,它可以帮我们开启一个简单的聊天,你有人说我不会做软件开发,不会做软件开发你没关系,你可以用一些工具。
27:20
你可以做一个简单的聊天工具NC,这个NC呢,可以帮我们来实现聊天功能,比方说我们在七上和在八上把这个NC软件都给它装上。NC这个软件叫net cat啊,是号称网络界的瑞士军刀,瑞士军刀知道吧?啊,这个功能很丰富哈,嗯,瑞士军刀,那这个net cat这个工具呢,它的功能就是可以让我们进行网络连接,比方说我这举了一些例子啊。
28:03
啊,首先我们先让他监听在一个固定的端口,这个端口你可以自己指定,但这个端口一定不能和现有的服务的端口打架啊,比方说我现在看一下我的机器上有什么端口被占用了,那么这个命令可以查看你当前机器上TCP和udp各有哪些端口被占用了,那我们可以看到它有22端口被占了,有25被端口被占了,323端口是UDB协议也被占了,那么占了那你就不能用,那不能用,如果你用了就会出现错误,比方说我故意的非用22端口。这个命令就是让他监听在22端口,结果22端口被人已经占了,他就会提示错误,看到没,是不是错误了说。Already in use是不是已经被用了,不能用,那不能用你就找一个比方说,哎,9527不是没人用吗?那么就9527 9527单位执行,诶你看好像没反应了,没反应了,那我们在另外一个终端上来看一看,它是不是坚定在了9527,看见了没?
29:19
出来了吧,9527,这个是IPV6地址的9527啊,你不用管它,现在我们就可以连接,在现在这边就开了个服务器,现在你自己做了个软件,这个软件监听在9527就等着你们来访问了,就这意思,那现在我们在NOS7上就可以连它的9527了,怎么连呢?这用那个命令后面跟上IP地址加端口号就行了,诶NCNC这个软件既能当服务器又能当客户端,哎,所以呃,瑞士军刀嘛,啥都能干啊,那现在我们就连一下八这个机器的9527。哎,能不能连上呢?啵,诶好像没错,看那应该是连上了啊,应该是连上了,连上以后呢,两者之间就可以开心的聊天了,比方说打个招呼吧,哈喽是吧,我是。
30:11
嗯,隔壁的王老师王teacher是吧,Teacher王隔壁的好,那看看这边收到没,你看收到了吗?是不是可以聊天了啊,当然我们这hello是吧,我是谁呢啊,我是咱们M42期的。是吧,学生诶聊一下,你看这边收到没。怎么样?可以聊天了吧?那这不就是一个简单的聊天工具就出来了啊,是不是很好玩啊?那当然它们两者之间一定是建立连接的,怎么知道呢?看这个命令,看是不是七和八之间建立了一个连接。他已经搭起这个桥梁了啊,当然客户端端口是随机的,伏击端端口是9527啊,当然这时候在八的上面,它兼听927吗?大家看这个L发现。
31:15
没了,没了的话,我们这儿是不是又可以开一个监听9527呀,可以不可以。我能不能再监听一个9527啊?行不行?这边我正在聊着天呢啊。这能不能坚挺?没报错。没报错。报错的前提就是他正在用,你看是不是没人用啊,现在没人用,那么9527就可以再开一个,但是这时候呢,这时候你说我和聊天,比方说hello,那请问我这儿去聊的时候,那么这个消息到底发给了谁?
32:02
哎,你和这边建立连接的呀,最早和它,所以他和他聊,但是呢,这边是不是相当于没人连,没人连,那我就再开一个,比方说我们再开一个新机器啊啊,我这还有没有新的机器,呃,这个六的机器给它开起来。60级给它开起来。对,你看我刚才故意看了一下这个G27不是没人监听吗?没人监听,所以你现在就可以监听了。啊,也就是说他一旦连上以后,他就不考虑那个监听的问题了啊,这个监听是初始的时候监听,监听完了以后,大家建立起聊天了,就相当于打打把这个电话拨通了,你不好通电话,你就该打就打就行了。啊,不存在监听的情况了。那么有点背后的逻辑是这样的啊,背后的逻辑。
33:04
那它两个呢,是独立的进程,这两个是独立的软件,你看这有两个NC各干各的事,这个NC最前面那个NC监听,在比方说9527后来来了以后呢,他就把这个端口号释放了,释放完了以后呢,他就用这个端口和别人进行聊天了,啊用这个端口变,但是他不监听了啊不监听了。所以我们现在可以看一下,我现在开了一个新的六机器,这个新的六机器呢,也可以去安装一下这个NC,安装一下这个NC。啊,然后它可以去连,连10.0.8,它去连。9527。注意我敲回车之前,敲回车之前我们再看一下这个八这个机器啊,它的监听端口,这有9527啊,然后我一回车。
34:09
走这边你再看他的监听端口是不是又释放了9527了,就是它是一次性的,哎,一旦有人连上,那你就该聊天聊天去了啊,比方说我们这再说我是圣斗S6。你看这边收到没收到。而最初的那个窗口是不是就收不到?最初的窗口和这边的七是一对,这个六和刚开的这个是一对吧,这是不是相当于两个绘画嘛,这不就两个绘画,相当于你各干各的活,你俩你这这你你俩各聊各的,互相咱不干扰,那当然这时候呢,我们可以看到它有两个连接,一个是六和八的连接,一个是七和八的连接,呃,有人说他两个好像为什么不打架呢?记住通讯的时候不仅仅要有自己的IP端口号,重要的是还有对方的IP加端口号,所以实际上通讯它有五要素。
35:08
实际上是五要素啊,啊这个四要素吧,四要素哪四要素呢,就是。通讯双方的原地址、原IP和目标IP。通讯双方的原Mac,呃,这个原端口和目标Mac,呃目标,哎目标端口,目标端口实际上还有协议啊,就比方说TCB协议。知道吧,这两这四个元素,只要有一个元素不一样,它就是不同的通讯。啊,大家看是不是这两个不一样啊,不一样,所以就是各是各的同学。他不会去干扰,不是干扰的。那建立连接的时候,这四个元素啊,就是地址源地址,目标地址,原端口,目标端口四个,这四要素只要有一个不一样,它就不是同一个通讯。
36:05
啊,不是同一个同学就可以分开。好,这是刚才给大家演示的这个啊,所以这样的话,你看我们通过一个小小的NC,大家对这个端口号是不是应该有所认识了啊。逗号。啊,当然我这个要退出的话,CTRLC就行了啊,当然我这一旦CTRLC,你看这边马上就断了,然后我如果在CS7这边我也CTRLC,你看马上这边的监听是不是也就断了,相当于你把电话挂了是吧,你把电话挂了,那边是不是也电话就断了对不对,哎,你非要挂电话,那咱们就都断了就得了,哎,他不会给你建立连接了。啊,这就是咱们通讯的时候,它的过程啊,通讯的过程。好,这是刚才给大家讲的端口情况,通过这个案例呢,相信大家,另外我们实际上还可以监听udp啊,不过udp是我们稍后说的啊,Udp我们待会再说,嗯,好,那关于端口号这个问题我们已经给大家说清楚了,那接下来。
37:10
序号,序号什么呢?就是所谓序号,就是咱们发送数据的时候,每一个数据报。它并不是存放了所有数据报表。那比方说我们刚才提到的以太网帧,那么以太网帧它的那个数据的最大值是多大?最小值,一个数据真的最大值,最小值是多少啊?这你算一下不就算出来了吗?怎么算啊,八个字节。六个字节六个字节俩字节中间是可变的数据部分多少?46~1500,再加上这个最后的尾巴,四个字节最大多大?啊,最大多大,这不是十个嘛,十个26个嘛,1526,这是最大,最小那就是46加26多少是72,也就是说整个数据帧的范围就是72~1526,不过呢,咱们用where Sha抓包的时候,因为它是刨去了头的,刨去了尾的,也就是去了多少啊,去了12个,所以对于VRSH软件来讲,你看到的范围都在哪啊,是60~1500什么啊,1500。
38:36
14你看到的范围都在这个范围内,因为他不看那个头和那个尾啊,就抛去掉没用那个东西啊,就是范围。就是这个范围。啊,那么其中呢,咱们每个帧的大小这么大,那现在就产生了一个问题,我们一个数据一兆,我这个数据一兆的文件我要传,那你这个一个帧1500,是不是我要把它拆开啊。
39:05
是不是我得把它拆成小块啊?一个针一千五那一兆,你是不是得拆成小十个不到十个针的,对不对啊,你拆成十个针才能一个一个传,那么拆成一个这个针,那么也就是说我们将来真正在互联网上或者是网络中传数据,它会把大的数据拆成小数据。啊,实际上大家应该知道,在我们生活中,比如说你买个什么电器啊,啊电器啊,好说你买一个那个什么工,呃家具,你买一个家具,买个家具的话,他不会给你装好了,给你运过来吧,他是不是给你先拆开啊,拆开以后呢,分开包装,然后慢慢给你邮,有的时候还分批邮啊,分开邮,那这就是方便运输嘛,那在网络中传的话呢,它也是这样的逻辑,它会把大的拆成小的,一个一个传,但是一一个船,你这个发送的时候,那么你把这个一兆的数据拆成了,假设拆成十个,拆了十个以后,那么第一个先发,第二个后发,第三个后再后发,那么你说是这么先发后发,但是由于网络复杂,那么有可能你先发的第一个包,结果后到了。
40:14
那么后发的这个包结果先到了,所以你是不能按照先后次序来决定他们谁是第一个,谁是第二个,是第三个的,所以我们为了解决这问题,那怎么叫贴上标签嘛,比方说这个包给它贴上,这是第一个包,这第二个包,第三个包贴上包签是不是到了以后,我们按这个顺序组装一下不就得了吗?对吧?诶那个我们买家具的话,不上面有个说明书嘛,说谁怎么组组装,那不有个说明书嘛,哎,就这个意思。那么在咱们这个地方,那这个编号就这这就那个序号。这个序号就是那个每个包的编号啊,每个包的编号,这个包的编号呢,它占用的大小是零到多少。31那是不是占了32位啊,那32位,那也就是说它最多能表示多少个包啊,二的32次方个包多少啊。
41:05
四十二亿九啊,就姑且认为43亿。啊,四十三亿二的32次方就是四十三亿四十二亿九啊,你算一下可以啊。43亿。二的三十二三十二次方啊,43E约等于43亿,也就是说我们可以最多发43亿个包,那么这时候呢,编号就用光了。用光了那咋办呀?那就从头来吧,从零开始编嘛,那当然四十三亿一个文件能拆成43亿个包,还不够拆,还不够用的吗?有没有这种情况啊?比方说假设我们刚才看一千五算啊,一千五乘以。
42:03
啊,二的32次方,那就实际上就是它乘嘛。乘以1500。这是不是就是数据包的大小,就是这个文件的大小。是吧,啊,当然这个数据量就大了,那么我们可以把它转换成K1024,再转成兆,再转换成G。六个T吧。一般的文件没这么大吧,啊,没那六个T,那这伙那得多大呀,那六个T,六个T的文件靠网络中传啊,这种不不多见啊,不多见啊不多见,当然要万一真的发生了,那也没关系。说实在六个T也不是说秒传,他肯定得慢慢传,慢慢传的话,虽然说我们到了32的32次方这个包都用光了,那我们只能从零开始编号,那我这个编号为零的和之前的零有点打架了,那怎么办呢?我加辅助信息,我添加一个比方说时间戳不就错就可不一样了吗?啊,一个是十分钟前的零号,一个是十分钟后的零号,那它就不一样吗?那不就不一样了吗?不是不是同一个包了,这不就区分开了。
43:15
对吧,哎,这个这个问题好解决啊,这个问题好解决啊,不过一般来讲,那这个包够了是吧,就光这个编号就就能离能把它们区分开啊,就第几个包啊第几个包,当然这个包呢,这个编号是在你这个机器上的编号啊,就是我这个机器往外发包发数据的时候,我这有自己的编号,你那也有你自己的编号,咱们互相不干扰啊,我这123我是按照我自己的编号排的,你那123是你那子的排的两码事啊,两码事。啊,当然还有一个叫确认号,那确认号干嘛的呢?确认号就是来确保数据报文能够安全的到达对方,虽然我呢,比方说我这有一个1万号的编号的一个数据报文,这个数据报文发给对方了,比方说我是A。
44:08
哎,怎么这这个乱了,重新来一下啊。好,那现在那假设我们这是1万这个数据报文,这个1万数据报文我给对方发过去了,对方假设收到了,收到以后我为了确保告诉对方啊,就是确保我这应该有一个确认信息,所以对方要确认一下第1万个收到了,那怎么确认呢?那么。假设我发送数据报文的时候,我的数据包它是有一个自己的编号,是确认号的。啊。
45:30
嗯。好,那么咱们在发送数据报文的时候,这个数据报文它有源和目标两两个,那么圆和目标两个的话呢,我们在实际通讯的时候是。一个是圆圆的,我用src来表示。Src,还有一个是目标。
46:00
Dest的目标,那么这个圆呢?它有自己的数据报文的编号,比方说我发出去的时候,我这个地方的圆指性的是假设是第1万个包。啊,第1万个包就是确认就是序号吧,啊,这个叫序号啊,我把这个改一下,这叫序号,就是那个second序号啊,另外呢,还有一个确认,确认就是A确认,这两个标识对应的就是我们刚才说的这两个,一个是序号,一个是确认号。那么序号和确认号,他在通讯的时候,它是这样的,比方说我这有一个第1万个包,第1万个包要给对方发,那我就写1万。那么对方。收到以后他要回应,回应的时候他怎么回应。回应的时候,它是不是也有一个编号。这个编号和我的1万没有关系吧,因为他是他自己的编号,假设他是2万,那么2万回来以后,他是不是得告诉我说他我刚才发的1万他收到了,那么他怎么告诉我呢?这个地方AC,这就写上确认号,这个确认号就告诉我,我刚才发的1万他收到了啊,所以这个地方要写,但是写的时候他不是写1万,他是写写10001。
47:23
他这么写这是啥意思呢?就是说你可以这么去想啊,就是我写10001,就是意思是说我希望你下次不要发1万了,你给我把一万零一发过来,那这样代表着是不是也就变相的告诉对方1万我收到了,是不是一个一个意思嘛,啊一个意思,哎,那所以接下来我就给他发1万啊,我这再给他发,我给他发1万。零一啊,发10001,当然这时候刚才他发的那个2万我是不是收到了,我是不是也得告诉对方,那怎么告诉对方,那我这是不是在我的机器上发送的时候,这是不是应该写上我希望对方发一万二两万零一,明白意思了吗?这就是他背后的逻辑啊,这就是他背后逻辑啊。
48:08
啊,这就是通讯双方互相有确认,那这个确认过程就确保了数据报文是可靠的啊,如果万一对方没收到,没收到,那我就不这么确认了,比方说我给他发了个1万,结果对方没收到,没收到他这可能就写的什么,这写的是1万。他就会写1万,意思是说,意思是说我刚才给你,呃,你那1万我没收到啊,你给我再重发一遍,就这意思理解了吧,哎,那因为网络中我们都知道干扰很多啊,那说不定有人不把网线拔了,这不就断了,对断了那肯定有时候没收到嘛,没收到那给他重发对吧,所以这样的话,那就存在一个网络故障啊,开错。好,这就是我们说的序号啊序号,然后接着这个数据偏移,这个数据偏移呢,指的是咱们数据帧的头部的大小,刚才说了这个头部大小固定的是24度,但是不是固定的,它也有一部分还是可选的吧,那这个可选的到底多长,总共这个头有多大,哎,靠这个数据偏移来实现啊,数据偏移来实现。
49:15
数据偏移说的就是这个头有多长啊,然后这个保留不看了,保留是没有用上的,接着诶看这这个很关键。这个很关键。这个有六个标记位,注意它占六位啊,你看你数数是不是六位,六位,六位的话呢,分别它具有不同的功能,那另外呢,这个六位我们待会儿来详细给大家说啊,然后这个还有一个窗口,这个窗口呢,指的就是当我们对方发数据报文过来的时候,我是不是发一个报文就确认一次呢。哎,它是这样的,大家看这个图。嗯。
50:04
啊,这个图,这个图说的就是A和Z之间进行通讯,A和Z之间通讯,那么A是客户端,B是服务器,那么服务器它这用了一个端口叫二十二三二三端口,二三端口啊这个有点不太清楚,然后这个客户端端口它随机的假设用的是1028,那么他发送数据的话呢,这边目标就是二三,然后到了这边对方将来我们再反过来二三回应就行了。那么这边刚才说有个序号和确认号,序号确认号它和动号组合起来就变成这个样子了,大家看原端口1028,然后目标端口二三是不是有个序,序号是第十个AC是1A14是意思是是不是意思是说你刚才零包我收到了,你要给我发第一个包了。啊,他这他编号从零开始的啊,啊,然后这边收到以后是不是应该给他回应啊,说我们端口原端口二三目标端口1028序号是一,为什么一啊因为这希望我发一吗。
51:10
是不是AC是一,那不是我就要给人家发一了吗?发一这个A是11,为什么11啊,因为刚才十收到了吗?十收到了,我是不是告诉对方收到了,我希望你下次发11就好了,这不就回来了吗?回来以后呢,大家看1028202223,然后11包看见没有AC是二,二是不是就告诉我们刚才那一我收到了。对不对,再回来,回来以后来回这么发,看到了吧,哎,就是这么,但是这样做的话呢,他的问题就是发一个确认一个。那实际上我们把这个发一个确认一个称为Windows的size是一什么意思啊,就是我发一个,你回一个确认,发一个确认一个,那这样的话呢,比方说我们将来企业里面,我要从网上下载一个G的文件。你下载一个G的文件,它会把这个一个G拆成好多小包,拆成小包,下一个包我就得告诉对方,诶,这个包我收到了,下一个包我就告诉对方收到了,你不觉得很麻烦吗?你能不能说一下,比方说你你能不能发十个包过来,我确认一次不就得了,对不对?哎,你说你在工作中老板给你布置了个任务啊,这个活你不能说时时刻刻的,每做一步就跟老板汇报一下吧,是不是太啰嗦了,你是不是阶段性汇报就行了啊?比方说工作一周了,你跟领导汇报一下,说哎,我坐到哪个阶段了啊,你说你这个坐一个小时,跑到领导那说一句,哎,我坐到哪了?你这是领导也觉得你好烦是吧?
52:38
主要你不是这个很帅或者很漂亮嘛,对吧,如果很漂亮也行啊好,那接着咱们来看,所以这种方式是效率比较低的,咱们叫固定。单一窗口,那么还有一个呢,叫端口窗口多一点,窗口多一点就是我多次发送确认一次,怎么做呢?我约定好了就三个,我发三个包,发完三个包你确认一次就好了,听了吧,发三个包咱就商量好,比方说跟周会似的,这个周会是不是就是每周咱们约个开个例会,每周开例会咱们约定好了,就一周一次,一周一次啊,一周一次,哎,那就你发三个包,我就确认一次,哎,发三个包确认一次,但这个呢,固定的这种形式不一定满足实际生产需要,以固定的一周,万一现在项目特别紧张,咱们一周开一次,这个有点跟不上时代了,咱们就得天天就得开会。
53:35
啊,以前我们原来做项目的时候,那我天天都开会,每到下班我就开会,开始就是下班的时候开,因为整天工作做完了,做完了以后下班的时候我们得开会总结呀,今天遇到什么问题了啊,大家作为普通员工肯定很讨厌我是吧,一下班你们老开会呀,哎,这个这个没办法啊,这个因为因为我也面临的压力,那领领导上面大领导的老板说了,你这个要短期之内多长时间要上线项目,你不不不干活也不行啊,我也是陪着他们的啊,大家都下班晚,我甚至来的最早,我早上来的最早,晚上走的最晚,我比他们还来的早,走的还晚。
54:12
啊,所以你们有的时候也要变相的去看啊,这个呃,不要去老老是责怪老板对你们苛刻之类的是吧,嗯,好,那所以这个当初我们就是每天晚上一下一下,也就是比方说六点下班,六点下班我们一般都是六点的时候开一个小会,但是这个小会我也一般也不会拖太长时间,大概啊有个半个小时是吧,聊完天聊完天如果有问题发现赶紧改啊,如果暂时没有问题,陆陆续续的,有时候七八点,八九点这些人就慢慢走了。走的时候也反正也也不不早啊,也都不早了。啊啊,那这就是咱们固定的啊,这种固定的有的时候不太适合实实际,所以我们更多的会用什么呢?滑动的啊,什么叫滑动呢?就是根据生产需要啊,根据生产需要,比方说这段项目忙,那我们决定一周开一次例,呃一呃一天开一次会,那如果过一段时间不太忙了,那我就可以恢复成一周开一次例会就好了,所以这时候呢,就叫滑动窗口,滑动窗口你看他是怎么做的呢?是这样的,我刚开始啊,我们就三个包发过来,发过来我认为你一次性能收三个,结果呢,这边这个机器啊特别忙,它处理不了,处理不了我只能收俩,那这时候我们就ACK3啥意思是不是,就是我希望你把第三个发过来,我希望你把第三个发过来,是不是就变相的告诉对方,前两个我收到了,第三个我没收到,也就告诉了对方。我目前的接收能力只能接两。
55:48
看懂了吗?哎,这不就是一个意思吗?你发三个过来,我收不了仨呀,我只能收俩吗?啊,所以ACK3AC3实际上变相的告诉对方,我的能力就是俩,哎,所以这时候呢,这边收到以后啊,那一看完你只能收俩,那我就发俩就得了,发俩你这边是不是就可以处理了。
56:08
啊,这就是滑动窗口,知道吧,那滑动窗口。啊,由这个数字来进行协调,就是刚才我们这儿有一个窗口。看到没有窗口大小,窗口大小啊。这个呢,了解一下这个因为偏太偏网络底层了,这个咱们呃一般也用不到这网络工程师可能比较关注这个,作为我们云计算运维,我们了解知道就可以,知道就可以。啊。呃,这个端口号的问题很关键啊,面试有时候经常会问,问什么呢?就是我如何来确定一个端口目前是被占用的,这个是面试很常用的,那面试怎么知道一个端口被占用呢?那实际上我们可以用刚才的很简单命令,这个命令就可以看这个命令用这个nt lulu呢是监听的意思,我就看这个监听端口是谁,就可以知道这个端口谁使用了啊,就是呃,正在使用哪些端口,当然我们还可以再加一个P,再加一个P呢,甚至能知道这个端口谁在用,就哪个程序在用。
57:18
看这是不能看见啊。比方说SD,它使用了22端口,能看见吗?这边都是有的。所以这样的话呢,我们就可以判断出端口的谁使用,那么除了这种方法,我们还可以用l of-I冒号22,也可以看到这个22端口谁在使用,大家看它是不是有SRD这个程序在用啊。但这边前面不是有命令吗。包括它的程序的编号都有,哎,这也是可以看的。呃,面试这种题目啊,啊,他问你说哪个端口是谁在用,比方说你发现端口冲突了,呃,提示冲突了,那冲突了,那你想知道这个端口谁在用。
58:08
是吧,我们现在有了方法了,那实际上除了这种方法,还有一种方法可以判断这个端口是否在被别人占用,有一个比较有意思的写法,这个写法。这个写法,这个写法它的值如果为啊,如果返回的值是非零,那就表示没有人使用啊,比方说22 22肯定是有人用的,那这时候你再看是不是就表示端口被占用。这个也是可以判断的啊,这个比较巧妙啊,这个实际上是。用到了一个特殊设备,TCP的设备,而且用它,甚至我们还能够用它来实现上网啊,看着啊,我来实现上咱们的百度网络啊,怎么上百度网络呢?哎,你看着走一遍。
59:04
我快速的给你执行一遍。好,然后呢,让你看看上网的感觉,换了一种方式上网百度访问到了看。哎,你看到的这是百度不。百度一下是吧,你知道这不都有吗?这百度啊百度。哎,你看这个上网用的就是重定向技术,结合刚才说到的这个啊。这实际上是把这个百度的地址给他关联到一个八的文件描述符上,然后向八这个描述符发起请求,这个请求实际上就是HTTP请求,不过这个HP请求,这个大家现在还看不懂啊,实际上我们平常啊,通过浏览器打开页面,这个浏览器帮我们自动的向咱们的网站发送了这个APP请求,发的就是这个,听到吗?只不过你用浏览器是通界面,你看不见。
60:19
哎,实际上浏览器就是用它来发送指令的,实际上咱们要想看的话,你打开浏览器这个地方也能看到,比如说我们点F12啊点F12,然后呢,在这边是不是出现了一些信息,对吧?然后你把这个调整一下它的显示风格,我把它调到下面来,诶填到下面来,然后呢,我们这呃点开F12,然后访问百度,就以百度为例。诶打开了,打开以后在这儿往上翻,大家看这有一个网络,然后这个百度不就在最前面这个吗?你看这个头,这是不是有刚才我们写的那个什么啊,Get这样的东西啊,Get这样的东西,这实际上就是我们刚才发的东西啊,当然你这个地方你也可以去看它的,呃,这是预览,有没有它的源头,那这个头这有你看这个看到这句话了吗?Get斜杠什么HV1.1,你看和我刚才敲的这命令是不是一样不一样的。
61:20
看见没?是不是,哎,我用这种方法就模拟了浏览器上网了啊,是不是很神奇的感觉?啊,这个你不懂就算了啊,先放一放吧啊。所以这就是用的这样的一个思想啊,这样的一个思想啊。百度一下就知道。百度首页是吧。好,这是刚才给大家讲的啊,那现在咱们面试再问你一个问题,说我要查看一个端口是否在使用啊,或者要查看一个端口谁被谁所占用,你是不是会了啊会了。
62:07
面试。把这些。答案啊,都要写上,把这些答案都要写上。多写几种啊,多写几种,让老板让面试的人知道你懂一些是他不太了解的东西,你比方说这个写法,这个写法建议大家考虑给他总结到你的宝典里面是吧,总结到你的宝典里面。咱们上次讲课的时候,上次前两天不是有一个同学去拼多多了吗?是吧,那个同学就是面试的时候,他人家问他一个问题,他答出好几个答案来,就把我上课讲的他都给你答出来了,所以好多人对他印象特别好。所以他这个面试机会,呃,拿到的offer好几个,随便挑。
63:00
随便挑。啊,当然他这个本身。学历也有点儿优势。啊,但是我觉得到最后那就不是学历的问题了。啊,因为到最后人家面试一轮轮啥的,那第一轮可能会看看你的学历呀,你的学校啊,人力资源,但是进入进入到技术阶段,人家聊是不是还得靠技术。你聊不出技术来,你说你是清华大学毕业的有屁用啊,没用是不是啊,一问啥不都不都不对,啥都不会,就人力资源那儿可能觉得有点优势,过了人力资源技术一面试就不行了,马上就淘汰了,所以他这个技术上这块还是比较扎实的啊,学的还比较好。好,所以下来大家把我刚才讲的这些事例啊,这实际上都是面试常用的,我都把这个事例都写在这了,你们可以下来可以参考一下。
64:01
啊,这边还有一个很有意思的是案例啊,不过这个有点黑客的感觉了啊,这啥意思啊,就是反弹share尔实现远程控制啊,这个也用到了NC,那这个NC呢,它是这样的,我这个三八上呢,开了一个这样的NC命令LVP666啊,然后开了以后呢,它就会监听在这样的一个666上,不过呢,然后我在这是被控制机上啊,这个是控制机,就是两台机器啊,想实现控制啊,控制呢是这样的,一般来讲咱们客户端会访问服务器,服务器端是被访问的是吧,那监听端口的人一般来讲是提供服务的。啊,比方说我监听八零端口是不是被别人访问对吧,但是呢,这个地方有例外,大家看我这是在控制机打开了一个监听666,然后在被控制机执行了一个这样的命令,这个命令叫best-I Dollar,把这个at符号大于号后面跟上一个666的地址。
65:07
然后这时候就可以在控制机上看到以下信息了,看到什么?诶,这时候呢,你就可以看到在这出现了一个3TOS7的机器界面,你就可以敲命令了。啊,这个很神奇啊啊来看着啊,这个这个技术实际上是黑客技术,黑客喜欢用的啊,大家对比着啊,我这开俩窗口,一个是七,一个是八,那我们把这个窗口给它多关关了。啊,这个也算是。黑客攻击经常用的一个技术,呃,给他拖出来,然后。垂直。好,这样就行了,好,我把它清理一下界面。好,大家看这是两个界面啊,好,我们把这些多余的关了,这样的话大家看的清楚啊,那按按照刚才说的这个例子呢,是我们需要在八的机上先开启NC,这个开启NC的时候,我这用到了一个端口叫666,当然我这个666呢,现在是没有的,这边也没有666,没人用666,好然后在八字机上用这个命令666。
66:25
哎,注意它这显示是六十六六六六,那我们看一下它六六是不是处于监听状态,大概是不是监听在666了,哎666,然后这边有没有666呢?这边应该没有666啊,没有任何关系,好在七上注意啊,现在看着在七上执行这个命令。进行这个命令,你看有一个神奇的现象,这个4.18,就是我们左边这个机器的IP走,然后在这边我们看出现了什么现象。
67:02
没反应是吧,我看一下我这写的是什么。诶啊,我对,我应该是跑到第一个第二个窗口去了,第一个诶看我怎么跑第二个窗口去了,大家看第一个窗口有反应,什么反应自动就切到了第一个送透七的界面上去了,这时候你就在这个机上就给敲命令了,比方说我看过我的IP地址,我的主机名,看到了吗?看到啥了,是不是很神奇。就是你坐在服务器上,既然控制客户端了。这叫反向。就是。逆向的哈,这叫反弹share哈,反弹share,那黑客都喜欢这么玩啊,这是啥意思啊,就是我在互联网上可以搭一个服务器,然后一旦控制这个机器以后,我们在对方的机器上执行一下这个命令,我就可以在我的机器上来控制你的机器上,你这个机器就被控制了。
68:02
啊,我想怎么控制怎么控制,我想敲啥敲啥。比方说我想删库啊什么的,这这不都可以了吗?对不对,山根啊之类的是不是,那我就不需要非得坐在这个机上去操作了,我就直接这么做就行了。那所以你们的电脑一旦被黑客控制了以后,他一般黑客都喜欢先执行一下这样的命令,执行完了以后,他就不需要在你的机上执行了,是不是坐在自己街上就跟你在你的键上直接执行一样的命令了,一样的效果叫反弹C是不是有意思呀?啊啊,当然我这个CTRLC就结束了啊,CTRLC那你这结束啊,我这突然断开啊,断开,哎,这就断了。啊。好,这个呢,作为一个了解吧,做一个了解,你们将来如果有同学将来希望能向安全方面去发展,因为我们现在这个做运维的,实际上它有好多方向啊,比方说有数据库运维,网络运维,什么应用运维,那将来可能还有安全运维,那你在企业里面我就想做安全,有些大公司他有专门的安全运维,只负责安全,这时候你可以朝这个方面去研究。
69:16
研究。啊,咱们的课程现在是面非常广,什么都讲,但你上了班以后,你肯定或多或少,尤其大公司它分工比较明确,你就做其中一块,不会都做,他分工都是非常,甚至有的运维他都分组啊,是运维组,数据库组,什么这组那组都分成小组了。好了,这是刚才给大家讲的啊啊,那大家现在知道了,我们刚才给大家讲的这几个都都给他说了,接下来咱们来关键的时候到了。这个。这叫标记啊,这个叫标记,这六个标,六个标记分别占了六位,当然分别占了六位,要么就是零,要么是一嘛,对吧,那么零和一就代表着这个标记有特殊意思。
70:12
那么这六个标记有三个标记,了解一下就可以,比方说URGURG叫紧急指针。叫紧急指针位。紧急指针位和这这块空间是相关的。那这个是占16位,16位那么这个紧急指针位如果一就表示这个紧急指针位,这是有意义的。那人零就表示这个地方的数据无所谓,你不用关心了,就相当于没有用。啊,那接下来还有一个RST。RST呢叫reset,就是重置的意思,重置reset重置。那么如果是零表示没有关系,一表示重试两者通讯,就相当于我们两者通讯出现了严重故障,我们希望从头来,大家知道电脑出了问题,Windows不就是重启一下嘛,那重启就从头来嘛,就是reet,就是干这个活的,把它生成一,那就是咱俩网络出了严重故障,咱俩重新来吧,只能重新来了。
71:23
啊,推倒从头开始,推倒重新开始,从设。还有一个呢,叫psh,看到没有psh呢叫push。Push就是推推推对应的另一个单词就是拉,拉是哪个单词啊?是吧,这两个单词以后还会见到的啊推和拉啊推和拉。啊。那push说的是什么呢?就是push说的是这样的,当我们的网络中发送数据报文过来的时候,它的通讯过程是这样的,我看我这儿有没有画图。
72:06
之前甲国没有网络通讯。哎,有啊,大家看这个。这之前画的好,那现在是这样的。当我们有一个数据报文,想利用网络来进行通讯的时候,是这样的,那我们在磁盘上有一个图片。现在有一个用户呢,想发指令,发指令呢想获取我的图片。那么获取我的图片,那么将来这个图片怎么就让它获取,那这个中间的通讯过程就涉及到了刚才说的push啊,这个push是这样的啊,比方说我们这个图片呢,想通过网络发过去。
73:09
发过去,发给这个应用程序,比方说我在我的电脑上有一个小图片,我想上传到我的个人博客,那传到博客上去怎么传呢?是这样的,这个图片首先它在磁盘上要先要加载到内核的缓冲区里面。加到内核的缓冲区里面,然后再通过啊,比方说你要去打开这个图片也好,还是要去呃显示这个图片也好,还是要上传图片也好,把这个图片先要加载到应用程序的缓冲区里面,听懂吧,发到应用程序的缓冲区里面,应用程序的缓冲区,然后呢,把它再往外发,那么再往外发的时候呢,先要把它拷贝到,再把它拷贝到应用程序。从应用程序的缓冲区,把它拷贝到网络的缓冲区。啊,这里面有一个叫网卡的网络的缓冲区,网络的缓冲区,把它先拷到网络的缓冲区,假设这个就是网络的缓冲区啊,把它拷到网络缓冲区,网络缓冲区以后,然后通过网卡把它发出去,发过去以后呢,这个数据报文经过网络就最终到达了咱们的博客网站,博客网站数据报文到达网卡以后,先放到咱们网卡的,也有一个叫诶内核的网络缓冲区叫socket,叫socket buffer,也就是刚才这个地方的buffer,实际上是一样的啊,然后呢,这个数据缓冲区收到以后,他稍后会把它复制到应用程序的缓冲区。
74:34
但这个过程是立即发生还是过一会儿,那么这个和push有关,Push如果是一,就意味着我只要是从网卡收到,我就立即的把它上传到我的应用程序缓冲区,而不会在网卡就是我们内核里的socket缓冲区持久保存,那如果是零啊,零呢表示我们就先放在这里面,先等一会,那说不定一会又来一个是我凑凑成好几个,那么批量的上传是不是应该效率更高啊,对不对?哎,这就是这个意思啊,哎,这个就是push的作用啊,Push的作用好,那这个push呢,我们大概知道就行了啊,接着关键的我们要掌握剩下的三个。
75:20
分别叫sy fin和a cck,所以这个地方的AC很容易和我们刚才说到的这个确认号冲发生混淆,因为这个地方是不是我们当时好像也叫a cck来着,对吧?这个是两码事啊,这个d a cck是32位的一个大数字,而这个的AC只是零或者一。明白吧啊,所以不要混了啊,不要混了,因为他俩确实都叫AC啊,都都从名声来讲,呃,都叫缩写成AC啊,都叫AC这个地方,那一般来讲,我们为了区分呢,可以这样把这个AC称为小写AC。这个是大写AC嘛,是不是这就好好区分一点对吧,哎,好区好,那么这三个字到底是干嘛用的呢?哎,TCB协议它是一个。
76:11
可靠的协议,这个可靠不仅体现在发送数据报文有序号、确认号,还有一个就是建立连接的过程。就是两个计算机应用程序通讯的时候,我为了确保数据是能够安全的啊传过去,那么我在通讯数据发送之前,我们先要确保链路的安全可靠。啊,怎么确认,那就是靠它中间的这个标记位来实现的,那么这个标记位关键的就是我们这三个,这三个里面,其中AC和sin,它和建立连接有关,而fin和断开连接有关,啊就是通讯双方要通讯之前,咱们先建立一个连接,这个建立连接它是通过三个握程来实现,所以我们俗称为三次握手,那么三次握手之后,他确认了两者之间有可靠的网络状态,是通讯的,是正常的,他才会进一步的在进行数据的传输,所以中间有一个建立连接的过程。
77:24
啊,就是我们相当于两个人要打电话,你打电话的话,你是不是把电话拨过去,是不是有一个先前期有一个确认的过程,你不是说拨通电话来,上来就对方拿起电话来,你这一听不通啦,然后直接跟他说吧,万一说错了嘞,对不对?嗯,万一接电话的不是他呢。是吧,那是别人呢,你不是说错对象了吗?所以我们是不是需要确认我们两者是不是有一个可信的可靠的连接,那么这个三个过程来确认啊,那三过程咱们称为三次握手,那么这个过程就跟我们打电话一样,大家想想平时我们打电话怎么打的,是不是我拨通电话这是第一步吧,哎,又好像又是大象放在冰箱里的感觉。三步,第一步拨通电话,拨通电话是不是发了个请求过去了,那边电话是不是就响了,响了以后对方是不是要拿起电话来,拿起电话来接通,接通,这是不是还得说一句话,说句什么话为。
78:36
啊,是不是一般不都是这样吗?唯嘛是吧?啊,当然这个受过专业培训的人一般都不说唯,他说你好是吧,你好啊,别说唯唯不礼貌啊,你看那个客服打电话人什么的,这都是人说你好,不会说唯的啊,不说唯这你好你好意思什么意思?这就是说,哎,你发过来电话,我收起来,我已经接,我我能听见你说话了,我我已经收到你的请求了,这个意思。
79:06
当然对方收了你好以后,你是不是得说,哎,是我你得说,为什么你说呀,你要不说话,对方是不是很迷惑,哎,这咋回事,是不是打错电话了,这是是,这是不是不小心把电电话拨通了是吧?不说话或者你那边信号不好。啊,是不是他有可能就给你挂了,所以你是不是通讯之前是不是都有来来往往三个过程,经过这三个过程以后,诶,他也听到你说话了,你也听到他说话了,你俩就可以聊正事了,是吧?欠我的钱啥时候还啊对吧?那这就是三字握手,当然这三字握手,那具体在咱们计算机里面怎么实现的,咱们来看啊,它的通讯过程跟我们打电话一样。
80:00
首先客户端和服务器端,当然这个客户端服务器端首先发起请求的,主动发起请求的通常是谁,通常是客户端对吧,客户端主动连服务器嘛,因为服务器端它的端口是固定的,客户端端口不固定,服务器端主动想连客户端,它连不上去的,因为你端口都不固定,我咋连你啊,对不对?哎,客户都是主动找服务器的啊,所以客户端主动连服务器,刚开始的时候它的端口是close状态。就是断开没有开,那么服务器端要听别人的连,要接收别人链接,他必须要打开自己的端口listen,还记得我刚才用那个NC命令吗?那个NC命令是不是NC-LL在那干嘛?就是监听,你要不加不加杠L监听那个端口没开没开它是不是就别人连不上来,相当于你不把这个,呃,你想开个商店,你开商店你大门不开,开关着门别人进不来啊,因为咱把门开开嘛,就Lia监听,那么一旦监听以后,别人就可以连了,那别人连的话,他就发起请求,诶发过来,发请求的时候,他就把那个SSIM就变成一了,还记得我们三三个标记位有一个SVA,还有什么fin是吧,那么S它就变成一了,Sin呢是标同步位,我们称为同步位,就是它把它变成一,那么其他位呢,都是零,其他的没说啊,没说那就不关注了,都是零一半。
81:28
这个s seq seq我们那个序序号嘛,序号的话,在他这是不是有个编号啊,这个编号呢,因为客户端和这个服务器是第一次通讯,第一次通讯,那么这这个序号它不是一个,呃,不是一个这个相对值啊,是一个绝对值,这个绝对值就是说这个电脑可能和你通讯是第一次,但是和别人的电脑是不是已经通讯过很多次了,已经,所以这个编号可能会很大。啊,亏很大,比方说1万啊,10万啊什么的,总之有很大,但是和这个机器是第一次通讯,所以为了看起来更清晰,所以我们在有些VR Sha软件里面,你会发现它这显示是零,听了吗?对方零,零表示的就是我和它之间,咱俩之间是第一次我就写个零,但实际上它是个相对编号。
82:16
这个真正看这个编号不是零啊,就是说为了让你看起来清楚,Where Sha好心的帮你把它变成了零,理解了吧,就是让你理解咱俩之间是第一次通讯,不是你分析好分析吗?你要直接写个1万是不都糊涂了,咱俩通讯过吗?是不是没通讯过,还是第一次呀,对吧?哎。啊,那么对方收到以后要确认,怎么确认呢?注意他要把这两个标记位都为设成一,Syn和AC都是一啊,都是一就什么意思,就是我这个回应不仅是确认,同时也是我的一个请求。是不是也是我的请求,因为我从来没有和你通讯过,我第一次和你发是不是我也是算是第一个请求嘛,所以这两个都是一啊,当然这个SYSEQ是Y,为什么Y,那我这我这个机器是不是说不定和别的机器也通讯过,所以YACK是X加一什么意思?是不是肯定是X加一,表示你你刚才S我收到了吗?对不对?哎,收到了就发过来了,发过来以后呢,对方一旦收到以后立即回应a cck a c是一,表示你刚才发过来那个请求我收到了,那实际上这个ACK是确认这个SN的,而这个AC下面这个ACK是确认刚才这个SNN的,理解了吗?就互相都有确认嘛,那当然这个序号一是F加一,ACK是Y加一,这个不用解释吧,能看懂吗?啊,这样的话,经过三次握手之后,它两者之间就可以正常通讯了,这就是三次握手的过程。
83:41
当然,这三次握手。理由是什么?为什么不四次握手?为什么不两次握手啊,为什么就三次呢?那这个你得想一想,那这个原因是什么,对吧?两次行不行,为什么不行,两次一去一回,哎,这不就行了吗?哎,对你一去一回,对于A来讲他知道了,对于A来讲我能去也能回,诶,这行了,但是对于B来讲不知道啊,B来讲我只知道去,还不知道怎么回,能不能回来不知道啊,所以不能确保B和A的全部通讯是有去有回的,所以不行,只有三次,那么有去有回是不是就恰恰实现?当然四次有点多余了,四次已经,因为你看对A来讲有去有回,对B来讲也能有去有回是不是?哎,所以我们都能够实现了。
84:48
啊,有去有回,注意通讯是双方的啊,就是有去你得回来啊,你光去也回不来,那不也相当于还是不行吗?啊,所以一定要通讯双方有去有回才行,那对A来讲呢,我给你发,哎,你给收到了,你给我回应是吧?哎,那我就说明我给你发,你收到了,那么对于B来讲,我给你发,你是不是也得告诉我你能回来呀?哎,你回来我也收到了,那说明咱俩通讯就没有问题了,没有通讯没问题,那咱们就可以。
85:18
通讯后续的数据报文发送,那后续呢,就发数据就好了啊。啊,这个用现在的流行话语就是约吗是吧,约吗啊约吗啊啊可以是吧,可以啊好吧,那就预约时间就行了是吧?啊,就给干正事了啊,这就是三次握手啊,三次握手,三次握手呢啊,我们可以下午来看一看抓包,到时候我们可以看一看啊这个光说的话比较抽象,到时候我们看看上午的时间,正好也差不多,咱们中午好好休息,下午还有好多理论,尤其下午还要做数字运算,希望你们中午好好休息啊,下午再见。
我来说两句