00:00
下面呢,要给大家讲的是另外一个问题了,就是阿卡的网络编程。同学们看到刚才我讲的两个案例呢,虽然。是提到了阿卡,但是有一个最大的问题,它没有涉及到网络,而实际上我们在开发中,大家都知道,你们Spark这个服务器之间肯定是网络通讯,不可能在同一个,在同一台机器上面跑,不可能的,因为你的一个计算机的运力是有效的,有有限的,你只能把这个任务分配到不同的这个,这个这个就是服务器上面,这才有效的发挥我们集群的威力,对不对?那这样怎么办呢?这就必不可免的涉及到一个网络问题。那我告诉大家,有了阿卡这个网络,这个写起来就特别轻松而又愉快了啊,以前我们用Java写这个,我曾经在零九年的时候用Java写过这个QQ啊,类似写的都要吐血了啊,而且效果还不是特别好,因为当时整个底层这个包括通讯机制也好,包括我们这个序列化也好等等等等,包括这些我们都是要自己学,因为它是纯的烧课编程。
01:15
Socked。啊,他最最最早就是socket编程。Socket编程。哦,Socket编程呢,它这个里面底层是TC pip这个协议。好,所以说当时呢,一个写起来就很费劲,写了半天啊,才写出一个hello word是吧,所以同学们感觉到很失望的样子,但是呢,这个也没有办法,因为它本身就是这样一个问题。那么现在我们看阿卡有了网络编程会带来一个什么样的优化呢?首先我跟大家做一下这个网络编程的一点点这个普及,啊同学们,前面呢,你们在学Java的时候是不是也学过网络编程了?说了吗?网络Java,网络编程,你们学了一个学了一个什么东西出来的啊,聊天室是吧。
02:07
聊天时好啊,大体大家可能也知道,我这呢,把这个简单的再过一遍啊,加深一个印象,因为网络也是我们将来一个重点啊网络那首先我们看两个应用实例,第一个呢是QQ,腾讯啊,迅雷,百度网盘这些客户端,这是一种网络编程,像新浪网站,京东商城,淘宝这些呢,也是网络编程,只是它的应用不一样,这个呢,像这一大块,这一大块呢,我们管它叫TCP编程啊,因为它底层是sock的,这一层呢,基于网站的呢,我们一般叫HTTP编程。那么HD编程呢,它是建设在TC pip基础之上的,所以它呢,应用这个级别更高一点,这是第一个要说的,第二个我们再来看。下一个呢,就是阿卡,它支持面向大并发后端服务器程序,网络通讯这块是服务端的重要部分,所以说这点以后你们再用卡的时候就不要再写so编程了,他也不会再提,就说不要再用它原生态的那个啊,这个阿卡的。
03:15
这个东西直接用,呃,不用原生的卡,直接用阿卡,那么网络变成两种,一个是TCP烧。啊,这个呢,也叫sock编程,因为底层是用TC pip协议的,那么比如QQ还有一层呢,还有一种就BS这种结构的,就是浏览器服务器结构的,这个叫HTTP编程,即我们用浏览器去访问服务器时,使用的就是HTTP协议。那么而HTP协议呢?已就是用TCP sock实现的及做了一个包装,比如像京东商城,那么HTP协议其实就是很多黑客最喜欢研究的,黑客最喜欢研究的就是像那个sock编程,TCP编程。啊,你比如说什么域名劫持,那域名劫持什么干的,他就通过网络直接把你那个DNS直接给你攻破。
04:06
比如说你原先找的百度,他直接把百度那个真正的IP换成他的IP,比如说一个工,呃,比如说工那个工行的一个网站,本身工行的网站是这个。本身我们工行的网站呢,是pink p一下啊。p3w.icbc.com.cn ICBC为什么好记呢?就是爱存不存是吧,爱存不存就是还有那个建设银行呢,就是把A去掉,是存不存对吧,存不存就问你存不存啊,一回车好,同学们看到这里面其实就可以看到。对,看这个。哦,你看这还是回了他的,其实这个ICBC它应该是对应这个,当然也这个也不一定是是最真实的,现在有些网站啊,他已经把它真实的IP给给隐藏起来了啊隐藏起来那那不管怎么样,这个查是他的,如果有人在DNS上做了一个手脚,比如这是DNS。
05:06
DNS一旦域名被劫持,它会出现什么情况呢?本身你这个ICBC是这个是这个IP地址,因为在TCB底层他不认这个东西,他只认。圈的这一部分,如果他写上这么一个IP,比如说110.121.13.21,而这个呢,其实本身是他的。是他自己建了一个钓鱼网站,那么所有的请求ICBC的人都会到达这个IP,那么这个钓鱼网站就会进行钓鱼。如果域名一旦劫持,那就灾难性的东西了。为什么呢?你你可能会输入用户名密码吗?他把用户名密码直接给你保存到一个文件里面去就完蛋了。啊,这个域名其实是很恐怖的,所以说像我们这个电信的啊,联通的这个域名服务器,它的安全性级别就比较高啊好,这是这一块TCP,那么我们再来看,呃,网卡网线这些都是必要的,不说了,协议呃,如果有有这个专攻这这个网络编程呢,他必须要学一门课程叫TC pip协议。
06:15
这个TC pip只是我们协议里面最主要的两种,一个叫传输控制协议,一个叫这个什么呢?叫因特网互联性,这要给大家隆重的推出三本书,应该老师也给你们介绍过吧,三本TCDP圣经的书。哪三本呢?我已经给大家准备好了,这个你们现在不用去看,等到你们哪一天对网络底层产生浓厚需求的时候,你们再去看这三本书,这三本书呢,是这三本。啊,以前我们在学计算机网络的时候,我还研究过,但现在没有怎么研究了,一个叫协议,一个叫实现,一个叫TCP事务协议,这三本书,写书的人叫史蒂文那个Richard,斯蒂文这个人,这个哥们四十四十岁的,40几岁的时候就死了,啊好,这个人是很厉害的一个人,他写的这个这个书被誉为。
07:09
TCD就是网络编程里面最牛,他只写过两,他一共写过呃四本书,一本就是这个,这有三本就是TC pip详解,这是进华为,就是有些同学对这个华为就是做这个,做这个网络网络网络工程师是必读的书。还有他学过,他写了一本叫unix下面C编程,Unix下面网络编程也是经典,这个哥们为什么死了呢?这个哥们他很喜欢探险啊,他本身是赞比亚人,是赞比亚后面在美国读了博士,然后就开始从事后边,呃,有一次他他们外国人嘛,生活就比较潇洒,对吧,不像我们中国人很苦逼的样子,你们还会很苦逼很多年啊,就是你们这个工作以后哪怕挣两两万块钱,3万块钱,你也不觉得很开心,为什么?你基本上工作以后,只只只要你是工作,你就没有时间去玩了,为什么呢?公司很很难说是给你放一个长假,所以说同学们将来最好的生活状态是什么呢?就是技术流了过后,能够自己开个小公司,呃,公公开个小公司呢,呃,也不用一个月挣多少钱,一个月你能固定有个七八万收入。
08:18
就可以了啊七吧,就这还是可以的,因为开公司呢,虽然压力大,但是来钱还是比较快,或者自己技术比较牛去。接活,这样生活会比较潇洒啊,但是如果你工作一直是个工作状态,会有什么问题呢?就是最大的问题就是说你没有时间,即使你有钱,你们都很累,只是你们现在没感觉到哈,你我们班有同学工作过就知道。啊,一旦你做了一个管理层,基本上就离不开了,管理层就基本就泡在一个公司啊,那这个时候你可能是感觉到好像。永远看不到希望的那种感觉啊,为什么我原先在那家公司我要出来呢?就是当时我在那家公司薪薪水也不低的,对吧,因为大家也知道小100万呢,对吧,同学们小100万其实也没几个钱啊啊,但是我为什么要出来,出来的原因特别简单,特别简单,就是因为看不到希望,就是每天都是工作,每天都看邮件,每天都是。
09:15
呃,这个这个去去招聘啊,太烦了,就后面就说干脆自己出来弄一下是吧,就这样子想法,呃,反正就是你们以后呢,就是这个东西扯到这了啊,这个人他赞比亚,为什么他他死了呢?就是因为太好玩了,他自己加了一个那个滑翔机。穿越这个东非大峡谷的时候,遇到了一个大风,给他给这个给它刮下去了,好,刮下以后就死掉了,所以大家都觉得是一个损失,这这本书大家以后有时间去看一看,现在放一放,那么这个网络编程里边呢?有一个核心点大家要知道一下啊,不管你们学的是什么,我个人作为作为一个学网络的,学计计算机的人呢,应该做一个基本了解这个东西,就说我们这个,呃,TC pip,他提出一个就是网络协议的七层模式,他最先设计了就是这个史蒂N,他设计的是最优秀的网络,应该分七层,分别是这七层我就不念了。
10:16
但是这期人后面发现在实践起来特别的麻烦,于是这个就拿掉了,这是理论的东西,就没有实现。在我们真实的这个网络世界里面呢,我们网络分成四层,一个是应用层,一个是传输层,一个是网络层,一个是链路层,那么每一层有它自己的功能。我举个例子说,现在我们要发QQ,要发一个哈。给另外一个人,比如这个人呢,在这等着呢,诶是个笑脸啊,这个人这笑脸真的你发一个QQ给他,他给他实际上指的就是给他的QQ,那么他是怎么发的呢?我简单说一下啊,他这样子的QQ,每一每一个计算机,每一个计算机的电脑上都会装这个TCBIP协议,当你要走网络的时候,他首先经过应用层给他加一个APP。
11:09
就是加这个应用层,就是代表你是要发给的一个程序。然后经过传输层呢,再在这边再加个TCP。好,再经过网络层呢,再把这个IP加上,就是你要把这个这个包数据包发给谁,经过这个链路层呢,会加一个针头和一个针尾,这个时候就变成一帧数据了,针头。和这个真伪。哦,证伪,那么整个这个在我们计算机到这个网网,就是这到网卡之前,这有个网卡。就说你这边这个就发给网卡,网卡经过我们一系列的这个路由器,最终到达对方,对方拿到过呢,它也会安装这个TCBIP协议,如果没有TCBI协议是上不了网的,也没法用任何的这个网络通讯工具。那这个时候他会解,他经过这个链路层就把针头针尾去掉,经过这个网络层就把IP去掉,经过这个TCP就把它拿掉,经过IP对吧?那么这就是为什么这发的QQ,这边QQ能拿到根本原因,大家其实没有想过这个问题,你们想这个其实很神奇,你这有个QQ跟对方聊天,你发一个套路他就得到了,你不觉得很神奇吗?
12:23
他怎么就他他怎么没有把这个信息发给你的,发给你,你比如说你有个MSN,为什么没有发给man发给QQ的呀。对,就是因为他这个数据包里面会指定我要发给哪个APP。是哪个IP呢?就代表是哪个人的这个APP,它有一系列的这个信信息,所以说我曾经讲这个课的时候呢,我就讲画了一个图啊,这个图也是好久以前画的了,这至少也是十年以前画的啊啊就简单跟同学们聊了一下这个,那么这个说完了过后呢,我介绍一个指令给大家啊,这个指令呢,可能对你们以后有点帮助什么呢?就是以后你们在做程序做管理的时候,做做这个运维或者服务器管理的时候,你会发现你的网络不通,网络不通呢,呃,你就要去排除是哪一个路由出问题了。
13:13
因为将来你们服务器跟跟这个你们的worker和Spark之间有可能经过,有可能不在同不在同一代集群,集群可能是它离得很远,那么你可以用萃CE这个指令,这个萃CE指令可以干什么呢?可以追踪路由,它可以看到你经过了哪些路由器,如果哪个地方出问题了,就知道哪哪台路由出问题了,你就去修一下就可以了,简单演示一下。比如说现在我有一个指令叫CMD快速走一下啊,你看我现在聘。P3W点百度,这个是大家一看就清晰了,肯定速度很快,速度很快,那么我要问的是,你们知道这个数据包ping的时候会发一个数据包测试包发给百度,你们知道我们一共经过了多少路由吗?你可以用这个treat。
14:02
RT3W点百度点。com。好,这个时候他就开始说,我要开始追踪这个路由了。那么他每发现一个路由,就把这个路由的IP给打上去,如果在哪个地方看,说明现在我们先首先找到自己的网关了,我的网关就是幺九二点,168.14.1,就是说现在已经到哪呢到网关了,那么它现在到另外一个了,看到没有,到另外一个就是幺九二点还没出去呢,就现在我们这个包还正在我们内网,可能这个是我们网管设置的这个这个这个网关。好,然后你看这个就出去了,看到没有到19121.68.81,这个已经到外网去了,说明现在我们的包经过外网一个路由,那么看不停的往下都能追,那如果在哪个地方卡到了,你就说诶哪个路由有问题,这是一个常识啊,虽然你们不是做网络,但是了解一下没有坏处,好这个我讲了一点东西,紧接着我们想说I pip地址呢,大家做一个了解,就是我们现在IP呢,已经到128位了。
15:05
IPV6千万不要理解成IPV6就是六个字节,IPV4确实确确实实是四个字节,但是IPV6它不是指的不是指的四个字节,而是128位除除以八的话,早就超过六个字节了。那么为什么有了IPV4还要有IPV6呢?原因是这样子的,IPV4这个这个现在IP已经不够用了,所以说现在很多这个机器已经变成这个IPV6的这这个PP地址了,为什么呢?因为那个美国有个互联网,互联网的一个中心,他们希望将来所有的设备都会有个IP,不仅仅是我们的这一个电脑。将来比如说你任何一个设备,比如说咱们手机,咱们的一个路由器,咱们将来的一个硬件设备,甚至将来你一个车载系统都会有IP地址,那么这样就能利于管理,所以说I IPv6幺一百二十八位这个网地址是足够用的,大家看我这里啊,IPV是32位,所以它的呃,它现在早就用完了,那么它的个数只有二的23次,三次二次方减一,而IPV6的IP地址是128,那么它的有效地址是二的128,是减一,后面有人算过,如果用IPV6的话,地球上每一平米都会分配到两个IP,所以这这足足足都用了,除非你那个电脑是空中折叠的是吧?啊,所以他这他这个就说够用了,同志们好,IP简单说了,端口我也简单说一下,有些同学呢,呃,没有学过这个网络,我简单说一下,这边有个细节对我们学阿卡特别有用,这也是我刚刚参加工作的时候,其实我并不知道这个细节。
16:47
大家知道端口是什么吗?端口。指的不是我们物理上的端口好多,比如说比如说老师,诶我的电脑上有个口,这个是端口吗?可以,那个也可以叫端口,但是那个是物理上的意义,我们这的端口指的是TC pip的端口,是逻辑上的端口。记住如果把IP地址组成比喻成一个房子,端口就是出入这个房间的门。
17:11
啊,就像窗口一样。那么真正的房子呢?只有几个门,但一个IP地址对应的端口有65535。是,为什么是二百五十五二百五十六乘250减去一个一,其中有一个一是零号端口被保留了。端口零号被reserve的不用,其他端口都可以用,那么这个端口里面又分成这么几种,大家了解一下,第一个叫零号端口保留了,还有一个一到1024是固定端口,不能用,这些端口是有名端口,就是名花有主了,就是一些知名的程序已经占用,你就不要去用了,你用了过后有可能导致你什么呢?要么你用不了。要么就是什么呢?要么就是你将来这个系统会出问题,因为那个重要的程序跑不起来,比如说你敢,你敢把八零端口占用,那你有可能很多网络服务都跑不起来。
18:01
啊,你事先先抢用了,有可能,如果你把二十二二十五号端口占用了,你发现你电电子邮件起不来了。所以一般我们程序员不允许用11024之类的端口,那么一般来讲我们用什么呢?1025~6535的,这叫动态端口,程序员可以用,而且建议大家以后要设计端口应该用1万以上的。如果同学们在开发中,你们发现有一些端口你没有启用,但是他在监听,小心这可能是个木马啊,就是说比如说有一个端口是三三万多号,这三万多号你从来没有没有启用过,你又他又不是有名端口,那可能是一个木马在监听。啊,有可能他在偷偷的偷你东西,好,这是端口分类,那简单再说一下端口使用注意事项,要了解一下,第一个将来你们做服务器,记住啊,你们将来都是要做服务器的,不可能说不做服务器,将来做服务器要尽量的少看端口,曾经有,因为我带的学生比较多嘛,有些学生去了过工作一个月。
19:01
就回来愁眉苦脸的说,韩老师,我们机器被人家攻破了,为什么他开的端口太多了,一看有些端口莫名其妙的打开,那么现在在计算机里面呢,尽量少开端口,就是能用的,咱们开不用全部给他把给他关了。减少被端口注入的可能。那么一个端口只能监听一个程序,这点老师在前面讲Java的时候,老师应该讲过基本常识问题啊,千万不要说你们现在学到后面了,别人问你端口,一个端口如果说有一个程序监听了八零端口,你还能监听吗?监听不了了,端口只能被一个程序监听。不能同时监听同一个端口,好,这一点是一个细节重要的常识问题啊,但是没有学的人是不知道的。比如说我们有一个端口是九九,九九被人监听了,你就不能再用,你用他直接说端口已被占用。好,再来看第三个细节,第三个细节呢,有个net STEM这个指令,可以查看本机有哪些端口来监听,给大家用一下,好,这个呢,在前面我也讲过,叫amb,看一回车这边呢,就有一个帽子令,你看我的机电脑上就135在监听,四十四十五,一般小端口问题都不是特别严重的啊,看这里还可以看到程序是哪个程序在监听,比如像这个是虚拟机,对吧,两个虚拟机,这个飞秋,飞秋监听端口是二十二五。
20:25
看到没有,阿里巴巴常有阿里巴巴他监听是6691,像这个非酋还监听另外一个端口啊,像这个都都能看到啊,都能看到,你看我这监听端口也不少,对吧?Java在鉴立这个3200端口,这可以看到的。好,这个就不多说了,还有一个一个常识性问题啊,就是这些常识问题大家知道,还有一个常识性问题呢,很多人不知道,我我跟他分享一下,我以前工作我都不知道他是这样子的。假如这是一台电脑。啊,假如这是一个系统。这个是你的电脑,比如说这个是一个服务器,注意这个细节,了解了你才能知道后面有个使用啊,这是一台服务器。
21:08
服务器,这是我们的,这是我们的一个客户端,这是我们的一个客户端。好,他们之间。他们之间通讯了,他们之间相互的接通了,接通了啊,他们接通了,假设接通了,那么现在这个服务器,我问大家一个问题啊,假设这个服务器它坚定是八零端口。八零端口我。我这又来一个端口,注意听我这里,他在这监听,那么我这有一个端口又来连八零允不允许,就是这个八零端口能不能被多个程序连接。这是允许的,这是允许的,就说我这里有个八零端口。客户端连到八零的,另外一个端口也能连到八零,这是正常的,因为我不是监听。
22:01
我是连接这个允许,那么这个就叫并发。就是说我这个端口连到你八零这个,也就是说我这个八零端口既对你这个客户端A。我也可以对客户端B,这是肯定的,那么还有一个细节呢,很多我参加工作时我都不知道。还有个什么细节呢?就是一旦这个连接形成,你这边也会有个端口跟它对应。也就是说什么意思呢?就是说你一旦形成,你这边会有一个端口,你也可以指定这个端口,就说你这边会有一个端口,你这边也有一个端口,就他们一定是端口和端口之间的对话,你客户端服务器有办理,那么这边也有有端,这个端口呢,如果你没有指定,就是随机分配,一般来讲也是大大端口号,比如说3344啊比比如这边是333,所以说我们看到阿卡,阿卡就有个特点什么呢?它在进行。这个主从的时候,这个客户端的端口你可以指定。
23:00
你可以指定我是连附近哪个端口。这是可以的,到时候这个端口呢,你可以自己指定,就是什么意思,再说的再直接一点,就是TCP协议或者网络通讯都会有端口的对应,那医生说我这对应是哪个端口呢?我对应的是这个服务器的八零端口。就是说我这个端口之间进行这个数据的联通,那同样这个八零端口呢,也跟这边这个进行通讯的。啊,大家不要理解成说说老师,我我再说一下啊,我没有监听两个八零,我是让八零跟他对话,这是允许的常识性问题啊,常识性问题好,这个说完以后呢,这个我们在这个最后一个基础啊,最后一个基础,那么这个为了授课方便呢,我们将TCD sock编程,我们直接叫sock编程了,下图sock编程是客户端和服务器端的一个网络分布。网络分布,待会呢,我们要做的是这样子的,这个服务器端呢,我们称之为server。
24:06
这个称之为server,注意听server下面这个呢,我们称之为客户端叫。这个呢,也是可难。那整个这个部署的结构就是客户端,多个客户端对应一个服务器端,是这样一个结构。好,这就是我对给大家做了一点这个网络编程的一个基础知识的补充,同学们将来呢,呃,在参加工作以后,网络这一块可以适当的补一补啊,因为网络呢,对于我们一个优秀的程序员来说也是很重要的,就是你会了解到底层的东西。好,那么网络编程基础我们就先聊到这里啊,做了一些尝试性的一个补充,大家呢,多少知道一下,因为后面我们要用好,现在呢,我把刚才讲的这一块,网络编程这个给大家进行一个简单的板书。
25:03
好,阿卡网络编程,阿卡网络编程,那么我先给大家讲了哪些东西呢?啊,这个是实例啊,讲了一个看了一个实例,对不对,很简单的。那我把它呢,给同学们板书到这里。好,写到这里来哈,这是我们举的两个事例,紧接着呢,我也给大家做了点这个网络的长,这个网络的基基本介绍,我说了几几个概念。啊,有些同学可能已经听过了,有些同学呢,呃,第一次听,那你就注意一下哈,就老师讲的这些东西常识性的问题,好我讲了一下网络编程有两种,至少你现在知道网络编程有两种了啊,一种呢叫TCP编程,叫HTTP编程,好然后呢,我又给大家说了一下,这个就不说了啊,TCP协议这个我也不说了,这个大家稍微的记一下。
26:01
就是,呃,别人如果问到你,我们这个网络底层它分几层,你要给他回答上来是四层。啊,就如果能把名字说出来就更好了,应用层,传输层,网络层和链路层。啊,因为这个是常识性问题,对吧,你不能说,诶说老师我是学大数据的,我这些我不管,是的,你可以不管。但是呢,你你既然要学这个东西,你肯定知道一点对你有好处啊,对吧,你不能说诶这个东西不归我管。那你项目经理到时候谁谁来管呢,那都不管对吧,那也不行,所以说呢,这个大家还是要做一个了解来标题三。好,这是我说的这么一个至少一个尝试性的问题吧,因为别人再问你,我们装的TCB协性分几层啊?每一层是干什么事的?要简单的给他答上来。好,我们又说了什么呢?说了IP地址,大家知道有IPV6就行了。而且要知道IPV6现在是他一共提供是二的128次方减一,这个尝试性问题要打上来,好,然后呢说了一下端口,端口呢,要知道我们一台机器有多少个端口。
27:09
有零号端口被被剪掉了,所以说端口呢,咱们有这6535个,就一台电脑上最多有这么端口。对,这是讲了一个端口的概念,端口的概念。好,那么端口概念说完了以后呢,我给大家说IP就不说了,我又说了什么呢?就是端口的一个分类,保留端口,固定端口和动态端口,知道一下。端口的分类,我也聊到这里,对我说了一下端口的分类,对吧。第一个是零号端口被保留了。啊,第二个呢,是我们的固定端口1101~1024,不能再去用它了。好,这是这么一个端口,然后这个端口说完了以后呢,我也给大家说一下端口的注意事项,要将来你如果做服务器了,注意端口尽量少开。能不开就不要开,还有一个端口只能被一个程序监听。
28:04
如果被监听了,别的程序想监听是监听不了的。还有就是用net an可以查看哪些端口在减轻,好,我还画了一个示意图。好,把这个呢也给同学们拿过来。哦。这是端口的使用注意事项,做了几点说明对吧,第一点。好,第二题。啊,如果用这个指令我们可以查看,还有一个呢,我这画了一个端口的一个使用示意图,这是我自己。画的一个使用示意图,这样对大家还是有帮助哈,对。就这块儿大家要知道端口它底层它是端口,对端口就跟我们打电话一样,对吧,哎,你一个电话是跟另外一个对吧,而且一个八零端口可以有多个端口同时连接啊,这个就是并发啊并发。好,现在呢,我们把它放到这一栏。
29:00
好,这是常识性问题,然后呢,这个说完了以后,诶,我们还说了一下我们将来这个授课的这个这个流程,对吧,这个图大家知道就行了,我就不截了,好那关于网络编程的这个基础知识,我花了一些时间做了一个补充。
我来说两句