Android网络基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37292229/article/details/73480951

一:网络分层
网络分层就是将网络节点所要完成的数据的发送或转发、打包或拆包,以及控制信息的加载或拆出等工作,分别由不同的硬件和软件模块来完成。以此简化通信和网络互联的复杂度。有的模型分为7层,有的模型分5层。OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。咱们主要介绍5层,这样更好理解。从上到下分为5层,应用层、传输层、网络层、数据链路层、物理层。
1.1.应用层:应用层的主要协议如HTTP,收到传输层的数据后,对数据进行包装和解析。解析必须事先规定好格式,而应用层就是规定应用程序的数据格式的。
1.2.传输层:该层位两台主机上的应用程序提供端到端的通信。网络层的功能是建立主机到主机间的通信。传输层有两个传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP是一个面向连接的可靠协议,UDP是不可靠的或者说无连接的协议。
1.3.网络层:该层决定如何将数据从发送方路由到接收方。是建立主机到主机之间的通信,所以会涉及一些发送优先权、路由选择算法等。
1.4.数据链路层:该层控制网络层和物理层之间的通信。主要功能是保证在不可靠的物理线路上进行可靠的数据传输。
1.5.物理层:该层负责比特流在节点间的传输,及负责物理传输。也就是真正的开始通过介质进行数据传输了。
总结来说哦,上面五层各司其职。实现物理介质传输–MAC地址–IP地址–端口号–获取到数据根据应用层协议进行解析,最终实现了网络通信和数据传输。

二:TCP的三次握手与四次挥手
2.1TCP的三次握手
我们进行HTTP连接网络的时候会进行TCP的三次握手,然后传输数据,之后再释放连接。
第一次握手:建立连接,客户端发送连接请求到服务端,等待服务端的确认;
第二次握手:服务端收到客户端的报文,对报文进行确认,然后发送确认信息给客户端,进入接受状态;
第三次握手:客户端收到服务端的确认报文,然后发送ACK报文给客户端,此时客户端和服务端都进入建立链接状态,TCP链接成功,完成TCP的三次握手。
2.2TCP的四次挥手
当客户端和服务端完成三次握手建立TCP连接之后,当数据传输完毕,断开连接需要进行TCP的四次挥手。
第一次挥手:客户端向服务端发送一个FIN报文段,表示客户端没有数据要发送给服务端了。
第二次挥手:服务端收到客户端的FIN报文段,向客户端回复一个ACK报文段;
第三次挥手:服务端向客户端发送FIN报文段,请求关闭连接;
第四次挥手:客户端收到服务端的FIN报文段,向服务端发送ACK报文段,然后客户端进入等待状态。服务端收到客户端的ACK报文段以后,就关闭链接。客户端等待2MSL(报文最大生存时间,RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等)依然没有收到恢复,则说明服务端已正常关闭,此时客户端也可以关闭连接了。
为什么挥手比握手多一次呢:
可以这样理解,客户端请i去断开连接的时候,此时服务端可能会有未发送完毕的数据,所以先发送ACK,等数据发送完毕后再发送FIN。这样就变成了四次挥手。
三:Http协议
HTTP是一个属于应用层的面向对象的协议。
3.1:GET和POST方法的区别
3.1.1:在传输参数的形式上,get发送请求时,会将请求参数拼接在request-url尾部,这样会使得参数暴露在地址栏中。虽然http协议并没有对url长度做限制,但是一些浏览器和服务器可能会有限制。so通过get方法发起的请求参数不能太长。POST方法时把请求参数放在请求体中,so不会有get参数的这些问题。
3.1.2:方法本身,GET通常是指从服务器获取资源,行为可以看作是查询的读操作,对数据并不会产生影响。
POST通常是对URL进行添加、修改、删除等操作。会对数据产生影响。

3.2.Https的通信流程
3.2.1.Client发起请求
3.2.2.Server端响应请求,并在之后将证书发送至Client
3.2.3.Client使用认证机构的公钥认证证书,并从证书中取出Server端公钥
3.2.4.Client使用公钥加密一个随机密钥,并传至Server
3.2.5.Server使用私钥解密出随即密钥
3.2.6.通信双方使用随即密钥作为对称密钥进行加密解密

3.3.Http协议缺点
3.3.1、Http协议使用明文传输,容易遭到窃听;
3.3.2、Http对于通信双方没有进行身份验证,通信的双方无法确认对方是否是伪装的客户端or服务端1.
3.3.3、Http协议对于传输的内容的完整性没有确认的办法,容易在传输过程中被劫持篡改; so在一些需要保证安全性的场景下,需要使用Https协议。Https通过增加的SSL\TLS,支持对于通信内容的加密,以及对通信 双方的身份验证。

3.4.SSL\TLS加密方式
SSL\TLS加密方式结合了对称加密和非对称加密两种加密方式的优点,首先采用非对称密钥加密,将一个对称密钥使用公钥加密后 传输给对方,对方采用私钥解密获得传输的对称密钥。之后双方通过对称密钥进行通信
怎么确保传输当中的对称密钥是可靠的不被第三方篡改的呢?
解决办法是:使用数字证书认证机构颁发的公开密钥证书。服务端的运营人员向认证机构申请密钥,认证机构会将公开密钥和 公钥证书绑定。然后服务器可以向客户端下发这个公钥证书,客户端使用认证机构的公钥认证证书,证书是可以信任的, 客户端就可以从证书中取出公钥了。

猜你喜欢

转载自blog.csdn.net/weixin_37292229/article/details/73480951