网络

Posted by jabin on December 11, 2018

一、协议

1. TCP/IP 协议

  1. 应用层:http/ftp/DNS/Telnet/..
  2. 传输层:TCP/UDP..
  3. 网络层:IP…
  4. 链路层:

我是图片

二、TCP三次握手、四次挥手

1. 三次握手

  1. c请求链接;
  2. s接受链接,并回复ack报文, 分配资源;
  3. c接受到ack报文后,也向s发ack报文,并分配资源, 连接建立

我是图片

2. 四次挥手

  1. s请求断开连接,FIN报文;
  2. s回复c ack报文,告诉c收到请求,但是还得处理未完成的数据,请等待, c收到进入FIN_WAIT;
  3. s处理完,则向c发送FIN报文,告诉c可以关闭;
  4. c回复ack报文,并进入TIME_WAIT, 等待2MSL后关闭, s收到ack报文, 关闭

我是图片

三、Http

1. 在TCP/IP协议分层中的位置

我是图片

应用层, TCP协议之上(三次握手,四次挥手等), HTTPS为http加入TLS和SSL

2. 请求相应模型

我是图片

永远是client发起请求,无状态协议。 无法反向通知

3. HTTP2.0

  1. 核心:二进制分帧层
  2. 多路复用、首部压缩
  3. 瓶颈可能出现在TCP阻塞问题等

4. HTTPS

  1. 在应用层和传输层,加入了安全层(SSL/TLS)
  2. 公钥加密的内容只有对应的私钥能解。
  3. 要保证client和server间的通信是安全的,就需要用对称加密算法(DES), 即对话密钥;但是协商对称加密算法的过程, 需要用非对称加密算法(server下发公钥到各个client, RSA);但是这样又可能被中间人篡改公钥给client端,所以需要使用数字证书来保证非对称加密过程本身的安全, md5啥的验证,当然如果client本身被攻破,则凉凉。 通过这个机制来协商出一个对称加密算法。 这一过程是就是SSL/TLS干的事情。

我是图片

四、 网络模型

1. I/O的五种模型

我是图片

前四种都属于同步, 最后一种是异步

2. 三种工作方式

  1. Prefork: 主进程预先分配一堆工作进程,一对一响应请求
  2. Worker:主进程生成一堆工作进程,每个工作进程再生成一堆线程, 线程去响应请求
  3. Event:主进程生成一堆工作进程,响应多个客户端请求。 当遇到I/O请求时,交由内核去处理,然后继续处理其他请求, 当内核通知完成后(回调函数), 继续处理改用户请求

3. Select、poll、epoll

nginx的事件驱动模型,其实是基于epoll

本质上都是同步I/O模型

Select 和 poll相似

3.1. Select、poll的优劣

  1. 劣:每次调用select 需要把集合中所有的fd拷到内核态; 需要在内核轮询遍历所有的fd; fd上限。。1024
  2. 优:fd少。。。

3.2. Epoll

  1. 优:fd在整个过程知会被拷贝一次;每个fd, 通过回调函数,把就绪的fd加到就绪列表, 那么就只需看就绪列表有没有就绪的fd了;没有限制,和系统一致
  2. ET模式:系统调用少点, 但是代码实现复杂。 系统状态变化(空到有,满到空),才触发。 所以实现上需要一直read/write到出错,否则会发现还有数据,但是没通知。
  3. LT模式:系统调用多点, 只要有数据,就一直通知。

五、HTTP长连接&短连接

  1. 长连接是HTTP1.1引入的新特性;握手后不立即断开,而是在此链接基础上进行多次消息(心跳包等)交互,直到有一方主动断开。 Connection:keep-alive
  2. http的长连接,一个req只能对应一个rsp, 并且svr不能主动发起,即还是不能反向通知
  3. 真正的长连接:websocket

六、二进制协议

protobuf