00:00
那你既然是网络编程呢,我们需要对网络编程有个基础的认识,但这个基础认识呢,我简单过一下就行了啊。就是照顾一下,咱们有些同学可能对这个网络完全。呃,是零。认识的同学。首先大家都知道。计算机之间要相互通讯呢,必须要有最基本的东西,一个是网线啊,一个。测试网卡,当然有些是现在这个物理网卡越来越少了,有些就这种网卡呢,现在也有很多是是这种,这种网卡也是无线网卡。都需要这个东西,就是这两个最基本的有线是有必须要有网线对吧。如果你是无限的呢?呃。无线的,你不要这个网线,你无线网卡也也可以。啊,这是第一个要知道的,第二个呢,我们还要明白一下协议。这个协议。这个协议啊,就是什么叫什么叫协议呢。打个最简单的比方。就这个协议是双方认同的。就是计算机和计算机之间相互去交流的时候,他们需要一种协议,我我举这样一个例子。
01:00
好,我举一个这样一个例子,大家一下就明白了。大家一下就明白了,比如说我打开一个Excel文件。啊,Excel文件,比如说我们两个人之间交流。张三和李四交流。比如这有两个人。啊,这两个人。咱们来一个笑脸就行了啊。这有个笑脸。假设这这个人呢,叫张三。哎,这个人叫张三。A吧,A这个人,然后呢,B这个人。叫B。还有一个人。好,他们之间要相互交流的话呢,他们必须要有一种东西,大家都认都都认识,都能识别的,比如说他是中国人,他也是中国人,那么他们交流靠什么呢?他们靠语言。就是我跟你说一句话,你能。懂我在说什么?同样的道理,这个B这个人呢,他也可以给A说一句话,对。他也可以给A说这说一句话,那么他要能听懂呢,也是一种,他们人和人之间靠什么呢?靠的是语言。
02:05
大家都知道,他靠的是语言。啊,当然这边我跟他说话呢,也是靠着语言。如果A和B都是中国人,那当然这个语言呢,诶这个就叫这个,这个语言就叫就叫中文就行了。但是有一个问题,如果A是一个中国人,B。他是一个越南人,在。这样子呢,他就不能。这就好比语言,我们认为叫协议。语言就这样一种协议。但是这个协议下面呢,语言有中文,当然它也有英英文对吧,它有英文。当然它还有比如说越南语。它有越越南语。越南语等等等等,那这个呢,就相当于说每种具体的这个语言呢,我们把它叫做具体的这个协议,就说协议下面有很多种协议,这个呢就叫一个具体的协议。
03:13
具体的协议。具体的一个协议。好,大致就是这么一种感受,那说。这个协议有些协议呢,就是有些语言是我们大家都认同的,有些语言可能是一个小部落的语言,他就自己能用,就好像我们以后学编程,我们有协议,我们有通用的协议,比如说。像有些特别通用的协议,大家都是清楚的,比如像HTTP协议,比如像FTP协议,比如像这个什么呢。像这个。这个HTTPS对吧,还有SMTP。这些呢,都是协议。这些意思大家都认同,大家都认都都认为是OK的,但还有一种协议呢,就是自定义协议。还是我们自己定义。
04:00
自定义协议也可以。比如说后边我们写东西呢,我们可能自己去定义协议,我们不用对吧。但在这个基础上,我们自定义协议也是有可能的。啊,协议是一个很重要的东西,比如说你将来做这种网络编程,你就要学会自定义协议。啊,制定协议其实也挺简单的,就是一般就是一个结构体。一般来就是一个结构体,比如说最简单的协议是指什么定义呢?比如说。我要跟A和B发生一种关联关系,我就定一个定一个结构体,这个结构体比如说诶,我们可以这样写定一个,到时间我给你发这样一个东西。我给你发出。一个结构体,序列化的一个结构体。比如说有一个message type。Message the structure。我们就定好了。我我跟双方就是大家都认同的啊,我说我要给你发个消息。我要给你发个消息,我怎么发这个消息呢?首先我告诉你,我会有一个ID号。我会给你发一个ID号。
05:02
ID呢,是个int类型的,我还要给你发一下我这个,我这个消息的内容是什么。比如说这个是个十寸。再比如说我还说我给你,我给你发一个,还有一个我发送的时间。就是我是什么时候发给你的,对吧,我可能用个时政来记录这个事件,再比如说我这个消息是要发给谁呢?我要发给张三还是李四,还是群发呢?可能我还有一个就是to,就是那个接收者。那么呢,可能我这地方用的就是一个map。为什么呢?有可能对吧,可能是个数组或者是个map,我告诉你我将来把这个东西发给谁。等等等等,好,这样子呢,就可以描述一个完整的message,对方拿到过后呢,他去读取这里面的内容,然后显示。就可以自定义好,这个就是一个简单的协议的一个描述。好,那么我们这个协议有这么多那。要给大家介绍的就是一个重点了。
06:01
在我们实际的网络,在这个TCP这个范畴呢。我们有哪些协议呢?大家可以看到。有这么一个协议啊。第一个呢,在我们网络世界里面有一种模型,它叫osi这种模型。这种模型呢?它最早是谁提出的呢?他最早啊,是有美国的一个标准化组织提出来说,诶大家都这么做啊,我们将来呢,要开发一个这个网络,那么我们需要有这么几个。一层一共是七层。哪七种呢?商用层。表述表示层、绘画层、传输层、网络层、数据链路层,还有物理层。但实际上在真实的这个开发环境里面呢,其实没有这么复杂。他把这个做了一个简化,简化成几成了,简化成了应用层、传输层、网络层和。那有些同学老师你这样讲我有点听不懂,他是什么意思,好,我这样子啊,我们因为同学们,虽然你们不是专业学网络的,但是呢,我认为一些最基本的东西大家还是要知道的。
07:12
就是我想我想这样子讲一个东西啊,咱们也不去讲过于理论化的东西,因为太理论化东西,这个不是一句话两句。要说清楚的TC,它不是一句话你就说去。因为他的公书都有三本。而且现在。这个这个随着它的发展呢,有些还在不停的完善。那么我就以一个最简单的QQ相互通讯的案例来结合,就是看到比如说我在我通过QQ发了一个哈喽,他是怎么把这个哈。一个信息传递到。我相信咱们这个搞搞运维的同学应该是非常清晰,搞运维的必须学这个东西啊,他学那他学的很透了。应该按理说应该学的很透。那么我就站在咱们这个,呃,Go浪的一个开发者的角度,把它一个东西给你看一下,看看到底他是怎么做的,注意听啊,还是比较有用。
08:03
因为你了解这个东西,对你理解这个程序本身它是有帮助的。来吧,我们就以这个为例来给大家看一个QQ相互通讯的一个案例。就是我们不讲理,过于理论的东西啊,来。各位同学请跟上老师思路。那现在呢,我们就以这个QQ来演示这个它的一个发展。说现在有这么一个情况。说有这么一个情况,首先哈。比如说这是张三的电脑。这边我们我们先这样描述描述啊,这边是张三的电脑。这个是张三的电脑。好,张三。张三。那么张三的他有一个好友啊,张三他有个好友。叫谁呢啊?他有个好友在遥远的美国。啊,在遥远的美国叫李四。他叫李四。比如说这个张三和李四,他们是好好友。
09:05
张三和李四他们呢,都用QQ。他们都用QQ,这边呢,是张三的QQ。两个人呢,上线了。那一个呢,是在中国啊,你不管他在中国哪个地方不管的啊,就是在中国,反正他在中国。这个人,李斯,这个人呢?他在遥远的美国。大西洋的彼岸。那现在的现在有这么一个情况,张三呢上线了,李四也上线,他们要说话好。那首先张三呢,他一定有个电脑,所以说他电脑上呢,装的有TC pip这个协议,那么TC pip协议它是其实它是一组协议,它简称TC pip。其实他这是遗嘱协议,包含的协议很多啊。所以说在电脑里面呢,它分了这么几层,第一层。就是在他电脑里面有这么一个结构。好,我把它换一个颜色啊,有四层。
10:00
少换成这个颜色吧。第一层。第二层我我先把它都标出来,这是一层。每一层呢,都有自己固定的功能啊,注意听讲。还有一层。各位。条,这是一帧,这些呢都在我们电脑里边啊,但是大家要注意,这些都在你的电脑里面,没在没在别的地方啊,在你的电脑上,这些都在自己的电脑上,所以说我画一个线线。这些都在自己的电脑上。谁的电脑?张三的电脑?装的有这个东西。他当然这些东西是什么呢?第一层,第一它装的什么呢?他装的有TC pip这个东西。这是个软件的概念啊,它有TCBIP这个东西,这个协议他装好了,就是准确的说就是同学们刚才带你们看的这个玩意。你们看到这个东西呢,就是老师现在画的东西,只是我现在画的是这个。参加鞋匠的。当然第一层这个东西叫什么呢?第一层这个叫做应用层。
11:01
那么有些也叫application。我就去application。啊,第二层呢,各位同学,第二层呢,我们叫做TCPTCP层,叫传输层。传输。传输层。那么传输层呢,我们研究叫TCP层啊,TCP层每个有它做自己的作用,第三层呢,各位同学,第三层呢是我们叫做什么呢?叫做IP层。IP层。好,还有一层呢,就是最后这一层叫链路层。链路程。那有些同学都说,那链路层下面是什么呢?链路层就直接对应我们的网卡。我讲简单一点啊啊。下面呢,就直接对应我们的网卡,比如每个电脑呢,它要出去,它它必须要装的有网卡。啊,这个网卡呢,是一个硬件设备。OK,我们待会再说啊,这个网卡。这是我们的可爱的网卡,好数据开始了QQ,张三这个QQ他说了一句话,他给谁说了一句话呢?他首先给李四说了一句话叫哈喽。
12:10
他说,Hello word。就叫哈过的啊,就叫哈吧。啊哈喽,因为他的好友已经拿到了,好这个哈,首先开始往下走了。他先经过第一层。他经过第一层就会它这边是一个文本包嘛,所以说他先拿到的时候呢,这这一层我们可以这样理解,就他有个数据已经被封装起来。有个数据被封装起来,这是一个呃。这个包包拍进是个包啊,然后呢,他这个包里面呢,他先第一次放的是hello。这个哈呢,经过了这个应用层,它首先会在这地方告诉加一个。就经过这一层过后呢,他在前面加了一个APP头。好,我这地方为了好看啊,我这隔一下。
13:01
就是这边是内容,这边是APP,当然呃,里面的内容呢,可能呃到一定程度的时候,它已经变成那个。加了个APP,那这一层的作用就是给它加APP,加加APP表示什么意思呢?表示我是哪个程序。我是哪个程序发过来的。因为你对方要最后接收的时候呢,他要知道他在解析的时候,他要他要知道这个是哪一个程序发过来的。一个APP。加完这个APP过后呢,好这个这个地方就叫APP这么一个。紧接着继续走这个传输层。他要过这个传输层。经过这个传输层过后,各位同学这个地方呢,又会加一个东西。加一个TCP又要加图了。你看这个数据段啊,这个数据包在不停的变东西,又加了个TCP。加上gcb头。那有些同学老师加这个TCP头有什么用呢?加这个TCP这一层呢,它要保证这一层要保证我将来这个数据包要准准确的传送到李斯这边去,他有个这样的责任,就是每一层有他自己的这个责任,他的责任就是说我要准确的把。
14:13
这个包。传存发送到李四那边去叫传输层,紧接着呢,还有第三,紧接着他又他又过度往下继续走。经过了我们的IP层,IP层过后呢,OK,在这个基础上再加一个头叫IP头。再加一个叫IP头,就说在这个基础上又加了一个东西,你看他这个协协议这个感觉就出来了啊IP头,因为为什么要加这个IP头呢?因为他要他要记,他要记录两样东西,第一个我的IP是多少,第二个对方的IP是多少。因为这样子呢,我们后面这个网络才能知道你要把这个东西,这个包包发给哪个人。因为在我们网络中,你为什么发了一个哈,能够准确的定位到李四呢,因为。我们每一个网络都会有一个自己独立的。
15:00
但是有些同学说了,说老师那这个不对,那我假设都在内网里面,它的IP不是相同的吗。这个是另外一个范畴,那是局域网里面它还会有方有别。方法进行解包啊。我们现在不去考虑那么多啊好。他这样就会记录说我是从哪来,我要发给谁。这个就拿着一个IP头啊。拉到IP头过后呢,还不能存放啊,还不能发,然后呢,再经过我们的链路层。经过这个链路层,它要在这个这个包上面再加两样东西,一个是针头针尾。这个时候就变成一个真数据了啊。针头,他在前面加一个针头。这个针。针头。是这是这个针啊。应该是这个证。还有一个要加一个真伪。还要加一个针尾,他加一个针头针尾的目的,这个就变变成一帧数据了。
16:01
真伪?加一个针头针尾。啊,针头真尾,那这个时候这个数据呢,到这其实已经变成什么呢?变成一个二进制的东西了。就是说看到肯定就是一一堆二进制东西。那么如果你的你的代码在这地方被人截获了,比如你的包包在这被人截获,比如你刚发出去。在网络就说这个地方,这这就是我们在网络中传输的这个数据啊,假设你这个数据,各位同学,假设你这个数据在网络。某一个地方被人截取,把这个头改了。这个包就蹭一下发到对另外一个地方去,比如说你说你说哈喽我的电视密码是多少,如果被人截取这个IP头,他就会把这个。IP头发到另外一个地方去,而且它会自动把这个密码给解解过来。网络世界。风险很高,那么这个时候,这个时候有了这个数据过后呢,好,当我们拿到这个地方的时候,这个数据就会交给我们的这个网卡。
17:00
那交给网卡,这个网卡做什么事情呢?他也不是闲着的啊,网卡呢,它会对接,就是网卡呢,它就会假设你这个网是在局域网,它会对接。哪些东西了,比如说他会对接一个网关。假假如他对接网关啊。这是我们的网关。因为你也有可能是在一个局域网里边说他有网关。那么网关出去呢,就是大量的路由器。它有很多路由,就说我们一个包包要到对方去,其实经过了很多路由,假设我用这个小圆圈来表示。但有多少个路由我们不知道,每个路由也有自己的IP地址,叫路由器。路由器。好,假设经过了两个路由器啊,到美国经过了两个路由器,那么我们这个数据包呢,就在这个网络里面传输,最后经过这个路由过后呢,同学们到达了我们这个李四。那李四这边他会怎么样呢?李四同样有这样的市场。
18:01
李四,同样有这样事情。好,李四也有这样的数据,那李四有这个数据,呃,因为因为这个李四呢,他这个电脑肯定也是在一个网里边嘛。说他对方呢,也有一个网关。这个数据通过这个网络一层层的发,最后到达了李四所在的这个网关的位置,他就要接收。哎,他就要接收,那就说相当于这个网,这个数据呢,就在网络里面传输。传输的时候,诶这个时候呢,他就反过来进行一个逆向的这个。经过这个链路层。你你到这儿的时候啊,同学们到达链路层,链路层的时候,这个数据呢,就已经到这了。到了这个地方过后呢,他先经过这个链路层,经过这个链路层,这个数据就会去掉针头和针尾。到这儿啊。它地方去掉针头和针尾。到这就去掉针头和针尾。然后呢,再经过这个IP层呢,它继续去掉这个IP头。
19:06
他继续去到这个IP的,因为他每次都校验你到底是不是给我的。是不是给我的好,然后呢,他把这个IP头也去掉,就到达这一层。然后再继续经过我们的传输层的处理好,传输层呢,再往上走,它会把什么去掉呢?他又把这个TCP头去掉。好,这个时候到达应用层,它就决定是哪个程序来接收,因为你的应用层可能有很多程序。你你有QQ,有可能还有微信。那到底我是哪个类接收呢?好。那么这个时候呢,当然里面还有端口啊,然后呢,再经过这个链路层啊,经过这个应用层把APP去掉。AB都去掉过后,好,最后我们这个哈就送送到了这。理事的地方,你就看到一个。大家看这个过程是这样来的啊。过程是这样子来的,当然我这个画的呢比较简单。我也没有画的非常的具体,里面有很多细节。
20:02
你看这边这个流程就这样子的。我们在这个编程的时候,大家也可以可以看到网。比如说你这个包在这某个路由被人截获了,那你就麻烦。那么我们看一下说老师你能给看一下这个一个数据包,整个这个路由的一个过程吗?可以。Windows里面包括我们的Linux呢,它有专门的指令可以去追一个包的一个流向,那么我给大家演示一下。比如说各位同学,现在我们想去追一个包吹死RT就是路由。Trace trace就是trace,大家都单词是呃,追踪的意思对不对。啊,这个RT是路由的简称。啊,那现在我们追踪一个包到百度是经过了哪些路由器走。现在开始追了。他现在开始追了啊。呃,当然有些路由器呢,它是阻止阻止给你返回这个东西的,就是。按理说大家都应该遵循这个规则,你看我首先到了192.1684.3,最后我要到哪里去,最最看有些地方,它是有些路由器,他不让你,他不给你返回这个信息,就会带一个超时。
21:13
但最终最终呢?你要到哪里去?各位同学。最终呢,你要到这个地方去,这是百度的IP,你看这个地方它没给我显示。我我记得以前我我。每追一次,全部都看的很清晰。现在好多路由器都都不支持这个了。杨静文。他又。那一般说我这个包就是韩老师去看一个,看一个百度这个网。网站呢?一般会经过多少个路由?一般是十来个。有时候八九个就到了。好,这个地方你看。肯定会超时。好,你看我们抓了,怎么还在这五三呢,还没出去。你看到这个地方都还没出去,我们还在内往里面跑。192.16853,说明目前我们这个包还在。
22:00
我现在这个包还在内蒙里面跑了,不知道跑哪去了。不跑哪去,你看这内网。但最终他是要到这啊,最终他是要到这个111.13.1008,但有些地址呢,他肯定给你尾成了。他可能说诶本身是一个公网地址,但是我给你返回一个。网络很复杂。好,最后我们看大概快到了啊。就这个请求超时,不是说嗯,你没有过去,而是他不给你响应这个这个指令。大概快到了。现在。已经在路上了。快到百度去了。应该11个吧,我记得应该是11个。呃,12个样子,应该到了。那如果你越远啊,你可以试,如果你追的是美国的,像亚马逊的网站,他可能。我们来行头,稍微等一会儿,马上就到。
23:01
这个路由现在快到了吗?12。应该这个就是到到百度了。我一共我一共这个包包就是我我如果是现在我们要去看百度的话,在整整个路,整个这个过程,理论上说是经过了大概12个路由。那最后你看就是韩老师从这一边开始走,我经过了这么多路由,最后我走到他,也就说我们这个网站为什么这样这么复杂。但是我要告诉大家,每一次路径不一定完全相同,比如说你这次看他是走的是12个。可能下次看走的是另外12个都有可能。是一个非常有意思的现象啊。非常有意思,我记得以前我在工作的时候发生一个特别有意思的现象。也不知道哪个小子,也不知道哪个小子写了一段代码。在这个公式里边,他写了一段代码,那个代码他可能写错了。他写的什么代码呢?类似于写了一段在哪。他不停在发广。
24:03
广播谁呢?广播说我是服务器,我是服务器。他把那个代码一起起来。整个公司全部跑不出去了。都找他了,都找他,因为他说他是服务器嘛。就他在不停的发那个broadcast,就那个。广播包,我是服务器啊,我是服务器,所有的全部问他来了。所有的包出不去,然后连网都上不了。有这样代码,你们网上如果有兴趣,你们可以这样玩一下,就说到网吧去,你去写一个。你找一个类东西,你说你不停说我是服务器,我我是那个网关,或者不要他,他报告我是网关,然后大家都。都去找他了,结果他是他是假网关,你知道吗?结果卡在地方出去了,就好像打个比方吧。打个比方,我们现在正常情况下,我们是坐电梯到楼下,然后我们出去吃饭,对不对?突然现在有一个人。在那个电梯口,就在三层电梯口说诶,那。堵了。那边结果那边是是一条死路,你知道吗?然后你们都不走了,都出不去了,就类似于这种感觉,就有一个人在不停的发广播,说我是网关,其实他是个假网关,你知道吗?
25:06
他本身也没有这个能力给你进行这个路由,所以说当时觉得非常奇怪,我当时那个时候刚刚参加工作,应该是一年半年左右。觉得怎么还有这个事情,真好玩是吧?那个很很有意思,网络很有意思,因为当时我的第一份工作啊,我的第一份工作就是在这个。Unix下面写这个。数据传输就是我是负负责那个。数数那个数据通道的说。当时我接触了一些这个东西,我觉得很有意思。下边呢,才慢慢去学这个Java呀,这语言。在公司里边呢,你你也必须有这个能力,什么东西呢,就公司让你做什么,你。就你不是说我我就会这个是吧,写C好,有一天人家老项目经理找我说。我们现在这个项目要用笔写作。当然有两种可能性,如果你你那个语言写的特别精通,那你有谈话的资本。但是你那个语言写的写的是你妈。
26:06
就会做做包子馒头,不会。好,这个呢,我们就先给他聊到这里啊,大家认识一下好。我花了一点时间给他说了一个小案例,这个呢,加深大家对这个网络的一点认识吧。我把它放在这里。好,我们提到了这么一个概念啊,我们说了一下网络编程的基础知识对不对,诶哪些东西呢,我们给各位同学板书一小把。网络基本知识,诶这个就不说了。向左。好,我们说了一下,网线网卡,无线网卡,这是基本的,就出去必须要有这个卡。你没有卡的话,那是不让你出去的。好,这个是一个标题三。那么具体来说呢,我们就画了一个图。计算机之间通讯要求有这些东西。当然我把它啊。
27:00
画了两个图片也。这是第一个。网卡的必要性。第二个呢,我们还说了,就是一个协议的概念,就怎么去理解这个协议呢?注意听TC pip协议全称是transmission control。就是传输控制协议。IP协议是指的是Internet。那么其实这两个协议是他最基本的协议,其实它里面有一堆协议啊。这个协议只是它的两个比较有代表性的协议,其实它它整个是一个协协议群,它。协议,协议群它有一堆协议,只是这两个协议是最重要的协议,所以说我们把这个网络,网络协议呢,一般简称TC pip协议,其他协议很多。比如说你你你聘一个什么。对吧,一个trace什么,它都有一些协议在里边。那么我们就简单的说到这里,这是协议的概念。我们怎么说理解这个协议呢啊,协议有现成的啊,当然了也有自定义的。
28:02
那我刚才呢,画了一个图,我告诉大家协议怎么去理解。协议可以这么理解,后边我们写这个聊天的一个系统呢,我们要我们就要自定义协议。我们要自己写一些协议了。当然我们信协议呢,是建立在TC pip基础之上的。好,这是说了一下协议,然后呢,我们又讲了一下它的一个OS与TCP参考协议。把它放在这里啊。这是第三个。然后呢,我们画了一个简易的示意图。基本结构是这样子的,还有几本书。还有几本书放在这里。好,我把它把它拿过来啊,把它拿过。画了一个QQ的一个聊天的一个小的过程。啊,大家呢,可能。他有个认识。好吧,说小一。
29:02
就可以了。你看我这还有一张图,当时我这个图,我也是在讲这个,讲这个网络的时候呢,我也催了一下,当时你看你看全部都是看的到的。最早的时候。我我看看这个图,你看这个图多清晰。这个把整个路径全部都给打出来了。当时这个地方一一垂死,把整个路径,我也是垂死了一个百度。里面信息全部都看到。现在好多他不让你,不让你看了。不让你看。直接不不看这个路,看每个地址都看得很清晰,就是一条线,看到现在看不到了。有些他是他是可能不支持这个了。好,这是一个基本介绍,我们就是关于网络编程的基础知识呢,我们就先说到这里。
我来说两句