文章目录
- 1.iptables:(ip+tables)对网络上数据包通过表形式进行规则的修改
- 2.linux的route指令:route add
- 3.curl:http请求
- 4.C#的winform
- 5.rm -rf /
- 6.微服务/前后端分离
1.iptables:(ip+tables)对网络上数据包通过表形式进行规则的修改
1.1 filter表:3个链
man iptables(防火墙)查看有哪些表(table)。filter(过滤器)表
会将进入当前机器数据包进行过滤,以及从机器出去的数据包,不符合条件不给发出去。nat表
改变目的或源地址和端口。
表是由链构成,进入和出去配置规则放在链中:filter表自带的三个链:FORWARD链
和net表相关,做路由转发的作用,-L(list),INPUT和OUTPUT
默认(policy)没有一条规则:都能进来和出去。
如下本机收到一个包,这个包目的地址是8081且是tcp包
的话丢弃。-t指定table为filter。
如下删除后又能访问了。
如上是在input链上进行的防火墙的设置,如下也可以设置output链
,如下没有配置端口,所以ssh连接也断了。
如下是本机的ip地址,可修改ip地址,再进行ssh连接。
上面通过-A添加两条规则,先后顺序是第一条成功了按第一条来,不成功第二条,一直往下匹配,最终也没找到匹配就按照policy。想要当前规则最高优先级用-I(insert),不用-A(append)。
1.2 nat表:4个链
把0.12的7788端口转发到0.11的7799端口,实现反向代理。这件事分为下面两步:如下第二条:虽然第一条是请求
转发过去了,但是响应
要改为本机,才能发回来。
如下是在0.12机器shell上。
如下是上一行命令执行结果。
如下重写FORWARD链为ACCEPT即在DOCKER-USER规则前面添加一个ACCEPT规则。
如上不是配置xx.conf的服务不需要重启,随时生效,如下两个都能访问了。
如下绿色方框是net表的链。两条路:改目或不改目。橙色的input用来改源地址和post功能一样,橙色的output用来该目的地址和pre功能一样,那不是和pre,post重复了吗?不重复,当电脑里有一个APP如下,pre和input失效,output起到了改目的地址作用。
2.linux的route指令:route add
如下Gateway指定网关,要访问172.17.0.3这个ip,就会根据Destination和Genmask
计算出来满足docker0这个条件,走这条路由信息。Flags是标识,U表示正在使用中,G表示第二列Gateway不为*(空或0.0.0.0)
。
default是指访问一个ip都不满足下面两个路由信息条件,走default这条。Genmask为0.0.0.0即不指定掩码,255.255.0.0掩了16位即172.17开头的会走第二条,255.255.255.0掩了24位。
PandoraBox.lan其实是个ip,因为在局域网下,默认配置成了域名。traceroute看路由信息好于ping。172.17.0.7只1跳,因为Gateway为*空且都在docker0交换机下。
下面用route add
指令添加自己的路由表: 如下第3个route add中Flags会出现H:具体的ip(32位掩码,4个255,全掩),而不是网段。
两种类型:-net x.x.x.x/xx
指定网络/网段,-host x.x.x.x
指定具体ip。
两种指向:-dev
网卡名(指定通过哪个网卡),-gw
网关ip(指定通过哪个网关)。
如下案例:给win机器添加ip:填199.199.199.199,255.0.0.0,最后全确定。
未添加路由表时199.199.199.199不属于172.或192.两个网络,所以走了default,到了路由器网关,继续往上找,光猫也没发现继续往上找,传到了联通,199.199.199.199还没被用或不能被ping。
上面命令都在如下Ubuntu中进行,如下右边蓝色圆圈是局域网,如下同样在Ubuntu的shell下ping 199.199.199.199。
3.curl:http请求
linux和mac中curl是自带的,win下载git for win。-s:省略进度条。-o:output。curl -h查看可接的参数。
-H:请求头。-d:请求内容。-X:请求方法。index-win.exe测试小程序主要监听88端口并能将请求内容打印出来。如下没有-H指定header。
如下会自动多出两个请求头。
如下以json形式提交替代表单形式提交。
4.C#的winform
visual studio中新建Windows窗口应用程序,点击启动会弹出空白板。
拖进来控件后,双击控件写js事件如下,默认注册一个函数,这函数是注册到控件的默认事件(如按钮的默认事件就是点击事件)。
如下进行C/S构架程序编写,用http接口请求服务端json格式数据,将其显示在我们的小程序里。如下拖进DateGridView控件。
如下可自己在本地写一个返回json接口,这里使用JSONPlaceholder。
如下相当于bean文件。
如下button1_Click函数都在Form.cs文件namespace Test函数中。读取content不像java中要循环读取。
如上添加一行Console.WriteLine(list.Count());看下是否获取到list。
sudo su和su:两者都能切换root用户。
su:直接切换root,需输入root密码
。+某用户名,切换到某用户
sudo su:当前用户暂时申请root权限,需输入当前用户密码
。
5.rm -rf /
如下用docker测试,alpine默认进去root用户。
有些文件删不了,即使是root用户,因为chatter设置文件即使是root用户也不能删除,保护系统关键文件的一个指令。
6.微服务/前后端分离
第一步
:了解三个环境:dev,test,online。项目clone下来能不能跑起来。前端找到访问路径的对象
是哪些,接收数据的对象
是哪一些,渲染对象
又是哪一些。
第二步
:有人从接口入手,接口入手不太适合新手。前端到数据库的整条线细化一些服务器地址,数据库地址,Controller地址
等等,注意一个前端项目会访问多个服务器
,因为一个前端页面是有很多业务的,不同的业务运行在不同的服务器。
第三步
:上手业务,我们要先找到业务模块的业务表,怎么去找这个业务表呢?先找到业务模块所在的一个数据库,然后将数据库所有表的表结构
体现出来,可以用navicat/SQLyog工具显示表结构,然后删除一些没用的表,剩下的就是业务表了,通常业务表命名是不一样的:xx_log结尾的是日志表,以xx_rel结尾的是中间关联表,以xx_copy结尾的是备份表
。
剩下就是表关系的整理也就是一对多,多对多
理解,通常两表中,a表和b表,如果a表中有b表的某一个字段,比如叫b.order_id
,那么a表和b表属于一对多的关系。如果a表和b表中有xx_rel中间表
,那么a表和b表属于多对多的关系,搞定好表关系后,最后一步就是对表中字段理解,这就看程序员的备注是否严谨。前端需要展示什么。
单体应用
:很多功能模块放在一起打包,然后部署到系统的一个应用,就像练手的SSM项目一样,里面有很多的功能模块,比如订单模块,采购管理模块,财务管理模块,收费管理模块等等,就像一个箱子里装了很多苹果,一个苹果就是一个功能模块。
微服务
:每个功能模块都独立打包部署到不同的系统上去,比如订单微服务,采购微服务等,类似一箱苹果,每个人都去拿一个,每个人都相当于系统,每个苹果相当于功能模块
,分开后每个微服务怎么去调用呢?这时就用到springcloud或dubbo的一些远程调用协议,也就是相当于每个人怎么去沟通呢?沟通使用的这个语言就是协议
如普通话,这么多的微服务都是一个单体的一个应用系统,那是不是都是要使用ssm去搭建呢?用SSM去搭建一个微服务应用也可以,当然是不需要的,那么多ssm配置而且都是重复的,变得麻烦,这时就使用到了springboot来解决SSM搭建应用时大量的手工配置问题,所以springboot是一个快速搭建应用的框架,不是微服务
。
前后端不分离
:看到的页面直接由服务器渲染好的并且return返回出去的,也就是说springmvc一个流程里面的渲染数据并返回给前端。缺点:前端页面的展示和服务器间产生很强的耦合,不利于分工。
前后端分离
:后端服务器只负责返回数据,而不再渲染页面,渲染页面在前端进行处理。
ORM:对象(编程语言中对象)关系(关系型数据库中库表)映射。近些年越来越少提及java两个orm框架,趋势是微服务化(使各个应用变小变轻)和前后端分离(替代了MVC)
。SSM配置复杂,springboot解决。为了管理和编排这些微服务用springcloud。java中orm框架可在springboot中使用,只需引入特定maven包就行。SpringDataJPA也是ORM框架。