0%

远程登录

远程登录使用ssh服务,其配置文件为/etc/ssh/sshd_config

密钥认证机制

每次连接都需要输入用户名密码太麻烦,ssh服务还支持一种安全认证机制,即密钥认证,其有一个公钥,任何人都能看到,用于加密;还有一个私钥,只有拥有者才能看到,用于解密

linux启动过程

linux系统的启动过程大体上可分为五步:内核的引导、运行init、系统初始化、建立终端、用户登录系统

内核引导

开机首先是BIOS开机自检,按照BIOS中设置的启动设备来启动,然后由启动设备上的grub程序开始引导linux,当引导程序成功完成引导任务后,linux接管CPU的控制权开始执行linux的核心映像代码

运行init

init进程是系统所有进程的起点,init程序会读取/etc/inittab配置文件

系统初始化

接下来会执行/etc/rc.d/rc.sysinit,来完成一些系统初始化的工作,主要有:激活交换分区,检查磁盘,加载硬件模块以及其他一些优先执行任务

建立终端

用户登录系统

TCP粘包和拆包

TCP是面向连接的,面向流的,提供了高可靠性服务,客户端和服务器端都要有一一成对的socket,因此,发送端为了将多个发给接收端的包,更有效的发给对方,使用优化方法(Nagle算法),将多次间隔较少且数据量小的数据,合并成一个大的数据块,然后进行封包,这样做虽然提高了效率,但是接收端就难以分辨出完整的数据包了,因为面向流的通信是无消息保护边界的,所以需要在接收端处理消息边界问题,也就是粘包和拆包问题

粘包产生的原因

  • 操作系统在发送TCP的时候,底层会有一个缓冲区,发送端需要等缓冲区满才发送出去,如果一次请求发送的数据量比较小,没达到缓冲区大小,TCP会将多个请求合并为一个请求进行发送
  • 接收端没有及时读取接收缓冲区的包,造成多个包接收

拆包产生的原因

  • 应用程序write写入的字节大小超过套接字发送缓冲区的大小
  • 待发送数据大于MSS(最大报文长度),TCP会在传输前进行MSS大小的TCP分段
  • 以太网帧的payload大于MTU进行IP分片
阅读全文 »

ChannelHandler

Netty使用ChannelHandler来进行数据处理,且可以连接每个ChannelHandler。ChannelPipeline和ChannelHandler机制类似于Servlet和Filter过滤器链,将Channel的数据管道抽象为ChannelPipeline,消息在ChannelPipeline中流动和传递,交给ChannelHandler进行处理。

ChannelPipeline

ChannelPipeline持有ChannelHandler实例的链表,提供了一种高级的截取过滤器模式,可以通过新增和删除来实现不同的业务逻辑定制,而不需要对已有的ChannelHandler进行修改。让用户可以在ChannelPipeline中完全控制一个事件及如何处理ChannelHandler与ChannelPipeline的交互。

1
2
3
4
5
6
7
8
9
10
final AbstractChannelHandlerContext head;
final AbstractChannelHandlerContext tail;

private void addLast0(AbstractChannelHandlerContext newCtx) {
AbstractChannelHandlerContext prev = tail.prev;
newCtx.prev = prev;
newCtx.next = tail;
prev.next = newCtx;
tail.prev = newCtx;
}
阅读全文 »

密码学

从明文生成密文的步骤,称为加密算法。从密文翻译为明文,称为解密算法。

而在加密、解密时需要密钥。对称加密就是指在加密和解密时使用同一密钥;非对称加密就是在加密和解密时使用不同的密钥。

对称加密(共享密钥加密)

对称加密又称私钥加密,为了保证通信安全,使用双方都认可的加密算法和密钥,使用该密钥加密和解密(仅需要一个密钥即可),其他人可以访问信道,可以看到加密数据,但是因为没有密钥,所以看不到原始数据,只要能保证密钥安全,就可以一直安全的通信

如DES、AES、3DES(三重DES)、RC-5、IDEA等

非对称加密(公开密钥加密)

非对称加密又称为公钥加密,使用两个密钥,一个私密的,一个公开的。这两个密钥之间存在一些特殊的数学关系,使得密钥具备一些有用的特性,使用公钥加密数据,使用私钥来进行解密。解决了对称加密算法密钥分配问题,提高了算法的安全性。

只有数据不大的时候才使用非对称加密,因为效率比较低

如DH、RSA、DSA、ECC等

注意:在使用非对称算法进行认证时,是相反的操作,使用发送者A的私钥进行签名,然后接受者B使用发送者A的公钥来进行解密