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报文的时候
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),用来加密接下来的整个对话过程