文章目录
一、ftp和sftp(LINUX中最常用到的文本传输方式)
FTP
FTP(File Transfer Protocol),即文件传输协议,用于Internet上控制文件的双向传输。
FTP在linux中,传输默认的端口为21端口,通常以ASCII码和二进制的方式传输数据,支持主动模式和被动模式两种方式。
SFTP
SFTP(Secure File Transfer Protocol),即文件加密传输协议。
SFTP在linux系统中,传输默认的端口为22端口,这种传输方式更为安全,传输双方既要进行密码安全验证,还要进行基于密钥的安全验证,有效的防止了“中间人”的威胁和攻击。
对比
ftp传输会比sftp传输速率快,毕竟sftp牺牲了一定的效率,以保证传输过程的安全。
二、XFTP和Xshell关联
XFTP
Xftp是一个基于 MS windows 平台的功能强大的SFTP、FTP文件传输软件。使用了 Xftp 以后,MS windows 用户能安全地在UNIX/Linux 和 Windows PC 之间传输文件。其实Xftp就是一款PC对虚拟机的上传、下载传输的工具。
Xshell
Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。
SSH(Secure Shell)是一种加密的网络协议,主要用于客户端与远程主机的安全链接和交互。使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息。要使用 SSH,目标机器应该安装 SSH 服务端应用程序,因为 SSH 是基于客户-服务模式的。 当你想安全的远程连接到主机,可中间的网络(比如因特网)并不安全,通常这种情况下就会使用 SSH。
三、CentOS的shell和GUI界面切换
- GUI切换Shell——Ctrl+Alt+F2 或 init3
- Shell切换GUI——init5
四、Cookie、Session、Token
参考:https://www.cnblogs.com/moyand/p/9047978.html
HTTP是一个无状态协议
HTTP协议是一个无状态协议,就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的的好处是快速。由于HTTP的无状态性,为了使某个域名下的所有网页能够共享某些数据,Session和Cookie出现了。
Cookie
Cookie指的是浏览器里面能永久存储的一种数据。Cookie由服务器生成,发送给浏览器,浏览器把Cookie以键值对形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该Cookie发送给服务器。
Cookie类似一个令牌,里面装有客户端给的SessionID ,存储在客户端,浏览器通常会自动添加。
Session
Session 是基于Cookie实现的,Session存储在服务器端,SessionID 会被存储到客户端的cookie 中。
Session是对于服务端来说的,客户端是没有Session一说的。Session是服务器在和客户端建立连接时添加客户端连接标志,最终会在服务器软件(Apache、Tomcat)转化为一个临时Cookie(包含SessionID )发送给给客户端,当客户端第一请求时服务器会检查是否携带了这个Session(临时Cookie中的ID),如果没有则会添加Session,如果有就拿出这个Session来做相关操作。
关于“关闭浏览器,session就消失”——错误
对session来说,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为session设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以以为客户端已经停止了活动,才会把session删除以节省存储空间。
Cookie和Session
客户端访问服务器的流程如下:
- 客户端第一次发送一个Http请求到服务器端
- 服务器端接受客户端请求后,创建一个Session,并发送一个Http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了SessionID
- 浏览器收到服务器返回的SessionID,会将此信息存入到Cookie中,同时 Cookie 记录此 SessionID 属于哪个域名
- 在客户端发起的第二次请求,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端
- 服务器接收请求,从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session
信息,核对成功后返回Response给客户端
栗子:
小杨要去一个写字楼, 第一次需要到前台填写登记表格, 登记完成之后前台给了小杨一张通行卡, 这栋大楼内部的安保人员看到通行卡就能确认小杨的身份信息和授权信息。
这里小杨就是客户端, 通行卡就是Cookie,前台就是服务端, 表格就是Session. 客户端第一次访问服务器, 服务器端保存客户的信息并且给客户端一个Cookie, 客户端携带Cookie去访问服务端, 服务端通过携带的Cookie找出该用户信息. 服务端就能够知道是谁访问了。
总结:session 有如用户信息档案表, 里面包含了用户的认证信息和登录状态等信息. 而 cookie 就是用户通行证。
Token
Token 通常称作令牌,由uid+time+sign[+固定参数]组成:
uid: 用户唯一身份标识
time: 当前时间的时间戳
sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库
Token的身份验证流程:
使用流程:
- 当用户首次登录成功(注册也是一种可以适用的场景)之后,服务器端就会生成一个 token值,这个值,会在服务器保存(保存在数据库中),再将这个token值返回给客户端;
- 客户端拿到 token 值之后,会把它存储起来,比如放在cookie里或者LocalStorage里
- 客户端再次访问服务器(一般不会是登录),将token放入headers中发送给服务器
- 服务器接收到请求后,会取出token值与保存在本地(数据库)中的token值做校验。如果两个值相同,说明用户登陆过且仍处于登录状态;如果没有token值,则没有登录成功;如果token值不同,说明原登录信息已经失效,需重新登陆。
PS.Token在服务器一般存于数据库中。通过cpu加密,使用token值服务端就不需要存储session占用存储空间,解决负载均衡多服务器的问题。
栗子:
可以把Token想象成一个安全的护照。你在一个安全的前台验证你的身份(通过你的用户名和密码),如果你成功验证了自己,你就可以取得这个护照。当你走进大楼的时候(试图从调用API获取资源),你会被要求验证你的护照,而不是在前台重新验证。
Cookie和Token区别
- cookie 举例:服务员看你的身份证,给你一个编号,以后,进行任何操作,都出示编号后服务员去看查你是谁。
- token 举例:直接给服务员看自己身份证
总结
- token是无状态令牌,是登录一个程序的依据。用户信息都被加密到token中,服务器收到token后解密就可知道是哪个用户。需要开发者手动添加。
- cookie也类似令牌,是写在客户端的一个txt文件,装有登录信息、sessionId等,当你下次登录某个网站,就会自动调用cookie自动登录。浏览器通常会自动添加。
- session和cookie差不多,只是存储于服务器的文件,可以理解为一个状态列表,拥有一个唯一识别符号sessionId,在客户端要将sessionId写入cookie中。服务器收到cookie后解析出sessionId,再去session列表中查找,才能找到相应session。依赖cookie。
五、内存溢出、内存泄露和死锁
内存溢出(Out Of Memory)
是指程序申请内存时,系统已经没有足够的内存再分配给你,比如你需要100M空间,系统只剩90M,这叫内存溢出。
比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出。说白了就是我承受不了那么多,那我就报错。
内存泄漏(Memory Leak)
是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。比如因为多人访问tomcat内存越来越大,退出后却因为某种原因还不释放内存,导致内存一直处于很大的状态。
例子:你租了个带钥匙的柜子,你存完东西之后把柜子锁上之后,把钥匙丢了或者没有将钥匙还回去,那么结果就是这个柜子将无法供给任何人使用,也无法被垃圾回收器回收,因为找不到他的任何信息。
死锁
所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待)。一般是数据库发生。
例子:
生活中的一个实例,2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。某一个时候,一个拿了左筷子,一人拿了右筷子,2个人都同时占用一个资源,等待另一个资源,这个时候甲在等待乙吃完并释放它占有的筷子,同理,乙也在等待甲吃完并释放它占有的筷子,这样就陷入了一个死循环,谁也无法继续吃饭。
又如,占用厕所的例子。
六、正向代理、反向代理和透明代理
最好的解释:https://www.cnblogs.com/wcwnina/p/8728391.html
代理(Proxy),是一种特殊的网络服务,允许一个网络终端通过这个服务与另一个网络终端进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。正向代理可以隐藏客户端,反向代理可以隐藏原始服务器。
正向代理
正向代理就是在目标服务器中间的一层跳板。为了从目标服务器上获取内容,客户端向代理服务器发送一个请求,并指定目标服务器地址,然后代理服务器向目标服务器发送请求获取数据,并将数据返回给客户端。使用正向代理时客户端上需要配置跳板服务器的代理地址。
对于服务器而言,只是代理在获取内容的时候有一次记录,并不知道是用户的请求,隐藏了用户的资料。
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。Nginx可以通过resolver配置DNS解析IP地址并设置访问端口。
正向代理的应用:
(1) 科学上网访问原来无法访问的资源
(2) 匿名访问,通过代理去访问某些服务,如黑客“肉鸡“
(3) 可以做缓存,加速访问资源
(4) 跳板机:公司对客户端IP访问授权,在授权名单内才能访问专有网络内的服务器
(5) 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理
对客户端而言,反向代理就好像目标服务器。客户端向代理服务器发送请求,然后代理服务器自行控制请求的走向,并将请求转交给客户端,客户端是无感知代理的存在的,访问者并不知道自己访问的是一个代理,因为客户端不需要任何配置就可以访问。
反向代理的应用:
(1) 负载均衡:负载平衡是利用多台服务器提供单一服务(也可以称为服务器农场),通常来说,主要应用于Web网站、大型Internet Relay Chat网络、高流量下载站、NNTP服务和DNS服务、数据库等。
图上的虚线表示代理服务器会根据不同场景来分配不同的目标服务器
(2) 保护和隐藏原始资源服务器:对用户隐藏真正提供资源的服务器,用户始终认为当前提供服务的服务器就是代理服务器。用户和真正的资源服务器没有任何直接沟通,同样也感知不到其的存在。
(3) 外网发布:保证内网的安全,可以使用反向代理提供WAF功能,组织WEB攻击。大型网站,通过将反向代理作为公网访问地址,WEB服务器是内网。
(4) 加密和SSL加速
(5) 缓存静态内容
栗子说明
正向代理:客户端 <一> 代理 一>服务端
正向代理简单地打个租房的比方:
A(客户端)想租C(服务端)的房子,但是A(客户端)并不认识C(服务端)租不到。
B(代理)认识C(服务端)能租这个房子所以你找了B(代理)帮忙租到了这个房子。
这个过程中C(服务端)不认识A(客户端)只认识B(代理)
C(服务端)并不知道A(客户端)租了房子,只知道房子租给了B(代理)。
反向代理:客户端 一>代理 <一> 服务端
反向代理也用一个租房的例子:
A(客户端)想租一个房子,B(代理)就把这个房子租给了他。
这时候实际上C(服务端)才是房东。
B(代理)是中介把这个房子租给了A(客户端)。
这个过程中A(客户端)并不知道这个房子到底谁才是房东
他都有可能认为这个房子就是B(代理)的
由上的例子和图我们可以知道正向代理和反向代理的区别在于代理的对象不一样,正向代理的代理对象是客户端,反向代理的代理对象是服务端。
透明代理
比较类似正向代理的功能,差别在于客户端根本不知道代理的存在,它改编你的request,并会传送真实IP(使用场景就是公司限制网络的访问)。
比如为了工作效率或者安全,A公司屏蔽了QQ软件的使用。A公司的员工接上了网络,但发现无法使用qq。这就是透明代理捣的鬼。公司在内网和外网的中间插入一个透明代理,这个代理会根据规则抓取请求内容,遇到qq的请求我就把这个请求给屏蔽掉,这样就完成了透明屏蔽。当然了,如果你明白原理,就可以自己搞个正向代理来绕过公司的屏蔽。
七、缓存Redis(单机版)、Jedis(联网版)
缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。
缓存可以理解为硬盘的一种,把一些热数据放在缓存盘中,就可以减少数据库(存储在IO硬盘)的压力。
Redis
Redis 是一个高性能的key-value非关系型内存数据库。
它主要提供缓存服务,存储访问频率高的热数据防止穿透到数据库,可以减轻数据库压力,查询内存比查询数据库效率高。
Jedis
jedis就是集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。一般不直接使用jedis,而是在其上在封装一层,作为业务的使用。简单地说Jedis是redis官方首选的JAVA客户端开发包。
八、吞吐量的两种解释
TPS:每秒事务数,每秒钟服务器处理多少个请求——性能拐点,衡量性能指标。
网络带宽传输率:上传流量+下载流量,服务器的带宽(一般是这个理解),加载图片、视频、文件是最占用带宽的。