学习总结,仅供自己参考,如有不对欢迎指正
传输控制协议
一、关于TCP
1.TCP分层原因:
1.因为网络的不稳定,会有丢失数据包的情况,需要数据重传。
2.当数据很大的时候,会分包传输,失败的概率小,重传的数据也会变小。
应用层:建立程序之间的连接
提供网络上应用程序之间的接口,主要作用就是建立程序之间的连接
传输层:分块传输数据的一层,对数据分包、合包、下发
TCP传输控制协议 有数据重传机制
UTP用户数据报协议 没有数据重传机制
网络层 :只负责数据传输
负责发送传送层拆分下发的包,不关系数据顺序、关系,只负责发送。
数据链路层:以太网、Wi-Fi是传输标准
提供数据传输的物理支持(物理层:网线、路由器这些物理设备)
示例
例如这个链接,http://211.211.211.211:8080/login
211.211.211.211是IP是网络层的东西,
8080是端口是TCP的传输层的东西
2.什么是TCP连接
TCP连接是有状态的交互,不用每次发数据的时候都去说明发送方的信息,接收方已经掌握它的状态信息。
互相认识的过程,就是连接的创立,依靠端口模型来具体实现,比如Java中Socket就是端口的具象
3.如何建立连接
三次握手,一共说了三句话,又客户端发起
我给你发消息了
我知道了
我知道你知道了
4.连接关闭
1)为什么要关闭
节省资源
2)怎么关闭
需要四次对话
我没有消息给你发了
我知道了
.
.
沉默(等待一小会)........
.
.
我也没有消息给你发了
我知道了
4.长连接
1)为什么要长连接
因为有内网的存在,内网无法直接连接互联网,需要网关去管理,当内容中的客户端与服务器失去联系后,就会被关闭,释放资源,最好的例子就是手机,手机的网络都是在与硬伤的内网里。
但是有时候我短时间失去联系,但我可能会时不时的和服务器通信,如果运营商把我关闭了,我就会丢失消息。所以就需要长连接了。
2)怎么建立长连接呢
1.心跳,就是通过tcp间隔发送超级短的消息,保持长连接
二、关于https
超文本传输协议,是基于应用层,简单的请求,响应协议
定义:
就是HTTP+TLS的组合,TLS是一个底层安全传输层协议,对数据进行加密
具体流程:
在发送消息的时候,http会先发给TLS加密,然后再发送给TCP进行接下来的一些列操作
怎么实现的:
这个加密是使用的非对称加密协商出来的对称密钥,发送信息加密,收到信息解密。
之所以不直接用非对称加密是出于性能考虑,不直接使用对称加密是出于安全的考虑
1.https如何建立的连接
大体分为五步:
1.客户端请求建立TLS连接
客户端会发送一个信息,主要包含三个内容
1)可选的TLS版本集合(因为客户端不知道服务器支持哪个版本的TLS)
2)可选的Cipher Suite加密套件(一般包括非对称加密RAS、对称加密AES、MD5哈希加密)
3)客户端随机数
服务器端接受到客户端的消息,会回执客户端包括三个内容
1)选择的TLS版本
2)具体的加密套件
3)服务端随机数
2.服务器发回证书(核心)
最重要的是服务器将公钥和公钥的签名发送给客户端
3.客户端验证服务器证书
验证证书是一个很复杂的过程,验证回分为三层,根证书是我们设备(手机或者电脑)默认无条件信任的证书
1)服务器的公钥和公钥的签名(是对服务器名称、地区、主机名、公钥的整体签名)
2)证书签发机构的公钥和签名(具体的签名内容同上)
3)根证书机构的公钥和签名
4.客户端信任服务器后,和服务器协商对称密钥
客户端发送Pre_master secret给服务器,客户端根据服务器,之前发送的客户端随机数+服务器随机数+Pre_master secret,生成一个Master Secret。
然后根据Master Secret生成:
1)客户端密钥,
2)服务器密钥,
3)客户端MAC Secret
4)服务端MAC Secret
1)2)是完全一样的
完全一样为什么生成两个密钥,为了防止信息恶意拦截后扔回来
3)4)是带有密钥的哈希值,这个密钥用来获取是发送者是谁
5.使用对称密钥开始通信
客户端通知服务端:将要使用加密通信(具体通知内容是:之前发送的一系列信息,包括随机数、密钥、Master Secret 等等)
客户端追加:Finished
服务端通知客户端:将使用加密通信(具体通知内容是:之前发送的一系列信息,包括随机数、密钥、Master Secret 等等)
服务端追加:Finished
2.在android中的使用:
直接用就行,无须任何配置。
什么时候不可以直接用
使用自签名证书(比如只用于内网的https)
证书信息不全,缺乏证书机构信息
如何解决:
自己写证书验证过程,google官方有示例,不过太简单不安全而且实现很复杂,OkHttp已经做封装,实现起来很简单
网友评论