网络知识总结

OSI七层模型


  • 应用层 (具体应用 http ftp等协议)
  • 表示层 (相互转换编码 高级语言<=>机器码)
  • 会话层 (分流 是否通过网络转发出去)
  • 传输层 (端口PORT(0-65535 16位2进制 0-1023 系统占用) 协议TCP(慢可靠性高) UDP(简单快可靠性差))
  • 网络层 (网络地址 IP IP数据包 最大65535字节)
  • 数据链路层 (mac地址 48位二进制 12位16进制 解读电信号0 1 同一局域网 广播方式 发送)
  • 物理层 (传送0和1的电信号)

TCP建立链接


  • A向B发送SYN(i)同步包
  • B向A回复ACK(i+1)确认包并发送SYN(k)同步包
  • A向B回复ACK(k+1)确认包 链接建立成功 三次握手

TCP断开链接


  • A向B发送FIN(i)释放包
  • B向A回复ACK(i+1)确认包 A不再向B发送数据 若B也不再向A发送数据
  • B向A发送FIN(k)释放包
  • A向B回复ACK(k+1)确认包 链接断开成功 四次挥手

TCP三次握手为啥需要四次挥手呢


tcp是全双工,需要确认双方都不传输数据才断开

TCP 11种状态


  • CLOSED 初始状态 表示tcp连接关注着或未打开
  • LISTEN 服务端启动socket处于监听状态 等待客户端连接
  • SYN_RCVD 服务器接收客户端请求发来SYN报文
  • SYN-SENT 客户端已发送SYN报文
  • ESTABLISHED TCP连接已成功建立
  • FIN_WAIT_1 等待对方发来FIN报文
  • FIN_WAIT_2 等待对方发来FIN报文
  • TIME_WAIT 收到了对方的FIN报文并发送ACK报文
  • CLOSING 一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文
  • CLOSE_WAIT 发送FIN报文给自己 应该回应一个ACK报文给对方
  • LAST_ACK 当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候 image

SSL/TLS握手流程


  • client向server发送client hello(生成随机数(client random)告诉server支持加密算法)
  • server向client发送server hello(生成随机数(server random)并选择一个client支持加密算法并下发证书(公钥))
  • client校验证书是否合法,合法再生成一个随机数(premaster secret)并用公钥加密发送给server
  • server使用私钥获取client发来的随机数
  • client和server根据之前约定的加密算法(对称加密),使用前面的三个随机数,生成”对话密钥”(session key),用来加密接下来的整个对话过程