tcp ssl

特点:

  • 稳定可靠的连接(3次握手,4次挥手)
  • 流量控制
  • 拥塞控制
  • 重传机制

稳定可靠的连接(全双工模式)

3次握手过程:

1.a发送含syn(i)信息的报文包到b
2.b发送含ack(i+1)通知信号的报文包到a,同时发送syn(j)到a.
3.a发送ack(j+1)到b。
通过三次握手建立稳定的通讯。
之后流程类似:a发送syn和ack到b,b发送ack和syn到a。

4次挥手

1.a发送fin结束信号的报文到b。syn(m);
2.b发送ack(m+1)到a。
3.b发送fin报文到a。syn(n);
4.a发送ack(n),syn(m)到b。b接收到确认信号,开始关闭socket。

ssl握手
  1. client hello
  • 客户机告诉服务端支持协议版本。比如:TLS1.2
  • 客户机告诉服务端支持的加密套件(Support Ciphers)
  • 客户机告诉服务端支持的压缩方式。
  • 客户机生成随机数Random1,稍后用于生成对称密钥。
  • extentsions

2.server hello

  • 服务端确认协议版本。比如:TLS1.2,不支持就返回错误,断开连接。
  • 服务端选择一个客户端支持的加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法
  • 服务端生成随机数Random2。至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到
  • 告诉客户端支持的压缩方法
  • 生成session id
  • extentsions

3.服务端发送证书,交换密钥,并hellodone
1)Certificate
这一步是服务端将自己的证书下发给客户端,让客户端验证自己的身份,客户端验证通过后取出证书中的公钥。
2)Server Key Exchange
如果是dh算法,发送服务器使用的DH参数(用于对称密钥交换,不能用于消息加解密,容易收到阻塞性攻击,Oakley算法是对其的优化)。rsa不需要这一步。
3)Certificate Request
服务端要求客户端上报证书,这一步是可选的,也就是双向认证。
4)Server Hello Done
通知客户端 Server Hello 过程结束

4.客户端校验证书,交换,client finished
1)Certificate Verify
客户端收到服务端传来的证书后,先从 CA 验证该证书的合法性,验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3 生成 PreMaster Key
2)Client Key Exchange
将PreMaster Key 传给服务端,服务端再用自己的私钥解出这个 PreMaster Key 得到客户端生成的 Random3
至此,客户端和服务端都拥有 Random1 + Random2 + Random3,两边再根据约定好的算法就可以生成一份秘钥symmetry key,握手结束后的应用层数据都是使用这个秘钥进行对称加密。
3)Change Cipher Spec(Client)
客户端发送Change Cipher Spec message,后面就用symmetry key通讯。
4)Encrypted Handshake Message(Client)加密
属于Client Finish 消息,客户端将前面的握手消息生成摘要再用协商好的秘钥加密,这是客户端发出的第一条加密消息。服务端接收后会用秘钥解密,能解出来说明前面协商出来的秘钥是一致的

5.服务端finished
1)Change Cipher Spec(Server)
服务端通知客户端后面再发送的消息都会使用加密,也是一条事件消息
2)Encrypted Handshake Message(Server)加密
属于Server Finish 消息,服务端也会将握手过程的消息生成摘要再用秘钥加密,这是服务端发出的第一条加密消息。客户端接收后会用秘钥解密,能解出来说明协商的秘钥是一致的

握手优化:保持session、False Start、Session Ticket
参考:https://www.jianshu.com/p/7158568e4867

流量控制

用窗口滑动机制。
即在报文头部设置允许接收到的缓存区字节的大小,从而控制发送端发送的数据大小。

拥塞控制

当同一时间大量请求连接(大量数据涌入同一交换点),超过接收队列大小,则后面的连接自动丢弃。
传输层的拥塞控制有
慢开始(Slow-Start)、拥塞避免(Congestion Avoidance)、快重传(Fast Retransmit)和快恢复(Fast Recovery)四种算法。

重传机制:

TCP每发送一个报文段,就设置一次定时器。只要定时器设置的重发时间到而还没有收到确认,就要重发这一报文段。
TCP环境

报文往返时间不定、有很大差别
A、B在一个局域网络,往返时延很小
A、C在一个互联网内,往返时延很大
因此,A很难确定一个固定的、与B、C通信都适用的定时器时间

TCP采用了一种自适应算法。这种算法记录每一个报文段发出的时间,以及收到相应的确认报文段的时间。这两个时间之差就是报文段的往返时延。将各个报文段的往返时延样本加权平均,就得出报文段的平均往返时延T。

你可能感兴趣的:(tcp ssl)