唐山APP开发,唐山APP制作,唐山APP定制-唐山盛秋网络
盛秋网络微信公众号 扫一扫关注
tel-icon全国服务热线: 400-690-1984  17013468888
扫一扫关注盛秋网络微信公众号

联系我们

盛秋网络科技(唐山)有限公司

  • 电话:400-690-1984
  •  400-158-3389
  • 地址:唐山市路北区体育馆道25号硅谷大厦
  • 网址:www.tangshanapp.cn

行业动态

您现在的位置: 首页 > 新闻资讯 > 行业动态

Android开发需要了解的网络编程基础

发布日期:2018年10月04日    浏览次数:15

一、概述


网络通信需要通过协议来完成,目前所使用的网络通信协议主要由两种模型体现。


因特网模型【五层】 

应用层 → 运输层 → 网络层 → 链路层 → 物理层

OSI/ISO模型【开放式系统互联 七层】 

应用层 → 表示层 → 会话层 → 运输层 → 网络层 → 链路层 → 物理层

简化五层 → TCP/IP模型【最常见 四层】 

应用层 → 运输层 → 网络层 → 网络接口层

二、五层模型概述(不考虑物理层)


应用层 

HTTP协议存在这一层(除此之外还有TELNET、FTP、SNMP、TFTP、NTP几种模型),位于应用层要传递的信息称为报文。

传输层 

TCP、UDP协议存在于这一层,这两种协议把应用层的报文封装成一个新的结构,叫做报文段,在两个程序之间传递。

网络层 

IP协议存在于这一层,网络层把传输层的报文段封装成一个叫做数据报的数据结构,把这个数据结构从一台主机移动到另一台主机上。

链路层 

在一层把网络层的数据报再次封装,叫做帧。这一层把帧从当前节点移动到下一个节点,如从主机传输到路由器。

三、应用层概述(HTTP协议)


应用层目前主要使用两种体系结构,C/S结构(客户端/服务端结构),P2P结构(对等体系结构)。


HTTP协议,存在于应用层,契合C/S结构。用于将数据封装成请求报文发送。


请求报文,主要四部分组成:请求行,请求头,空行,请求体。


请求行:由三个部分组成,请求方法+URL+协议版本,请求方法:GET、POST、PUT等共八种;URL是一个统一资源标识符(如www.baidu.com等);协议版本(如HTTP/1.1)。

请求头:键值对的形式,每行一对,关键字和值用英文冒号分隔,请求头通知服务器有关于客户端请求的信息。参考资料

空行符:分割请求头和请求体的作用。

请求体:以GET方法和POST方法来解释:当请求方法为POST时,客户端需要填写相关的表单,与请求包体相关的最常使用的是包体类型 Content-Type 和包体长度 Content-Length。GET通常不需要请求体。

响应报文,与请求报文对应,是服务端返回给客户端的请求结果。

响应报文由四个部分组成:状态行,响应头,空行,响应体。


状态行:包含了状态码(状态码自行查询含义)。

响应头:参考资料

响应体:服务器返回的文本信息。

四、传输层概述(UDP/TCP协议)


在网络通信的传输层,存在两种运输协议,UDP(用户数据报协议),TCP(传输控制协议)。两种协议都可以传递应用层中的请求报文。UDP与TCP的数据报结构参考:https://juejin.im/post/5a2614b8f265da432652af7d


UDP(用户数据报协议)特点


无连接的通讯协议

传输数据有大小限制,每个被传输的数据限定在64KB之内

是一个不可靠协议,不能保证数据传输的完整性与次序

传输速度快开销较小

支持一对一、一对多、多对一、多对多通信

TCP(传输控制协议)特点


面向连接的协议

只支持点对点的通信

传输的数据没有大小限制

是一个可靠的协议,可以保证数据传输的完整性与次序

耗时较多开销较大

TCP连接相关的报文相关缩写:SYN(同步标志synchronous)、ACK(确认标志Acknowledgement)、ACK序号(Acknowledgment Number)、SEQ(序列号Sequence Number)、FIN(结束标志final)


TCP建立连接的过程(三次握手)


第一次握手:客户端发送一个请求报文段,将报文段首部的一个标志位SYN设置为1,同时,客户端会把报文段的序列号SEQ设置为一个随机值x。这个时候,客户端进入到SYN_SEND状态,等待服务器确认。

第二次握手:服务器收到报文段,对齐进行确认。把这个收到的报文段的ACK序号设置为x + 1;同时,向客户端发送一个响应请求报文段,讲这个请求的SYN标志位设置为1,序列号SEQ设置为一个随机值y。然后服务器将上述信息整合成一个报文段,一并发送给客户端,此时服务器进入SYN_RECV状态。

第三次握手:客户端收到整合后的报文段,将这个报文段的ACK序号设置为y + 1,并将ACK报文段发送给服务器进行连接确认,服务器接收到这个报文段后,客户端与服务器都进入ESTABLISHED状态。建立连接以后,SYN被置为0,接下来就可以进行数据传输了。

TCP关闭连接的过程(四次挥手)


第一次挥手:客户端向服务器发送一个特殊的报文段,这个报文段的首部标志位FIN设置为1,这个时候客户端进入FIN_WAIT_1状态,表示客户端没有数据要发送给服务器了。

第二次挥手:服务端收到客户端发送的报文段后,向客户端发送了一个ACK报文段,客户端收到后进入FIN_WAIT_2状态,服务器告诉客户端,同意关闭请求。

第三次挥手:服务器再次向客户端发送一个FIN报文段,FIN标志未设置为1,请求关闭连接,同时服务器进入LAST_ACK状态;

第四次挥手:客户端收到这个FIN报文段后,向服务器发送AKC报文段,客户端此时进入TIME_WAIT状态。服务器收到这个ACK报文段后,就关闭连接。此时客户端等待2ms后没有收到回复,说明服务器已经关闭连接,那么客户端也关闭连接。

五、Socket【推荐阅读 】


Socket是处于应用层与运输层【TCP/IP模型】中间一组接口(API),TCP/IP协议只是理论,需要通过Socket来实际编码使用。Android与IOS都提供了相关的Socket类,这些类提供了一系列的方法,来实现网络连接的各种操作。


Socket封装了网络通信的五个部分:


连接使用的协议(TCP或者UDP)

本机主机的IP地址

本地主机进程的协议端口

远程主机的IP地址

远程主机进程的协议端口

简单来说,Socket确定协议,确定客户端与服务端的IP地址与端口后,可以使用其提供的方法来进行网络的相关操作。


六、HTTP与HTTPS【推荐阅读】


HTTP协议模型 

HTTP → TCP → IP

HTTPS协议模型: 

HTTP → SSL/TLS → TCP → IP

HTTP与HTTPS的区别:


使用HTTP协议的客户端,会打开一条服务端端口为80的连接,并发送老的HTTP请求。使用HTTPS协议的客户端,会打开一条服务端端口为443连接,然后与服务器进行SSL握手。以二进制格式与服务器交互一些SSL的安全参数,附上加密的HTTP请求。

HTTPS协议需要用到CA申请证书。

HTTP是明文传输,HTTPS是SSL加密传输。

HTTPS协议的工作流程:


. 客户端发起HTTPS的请求,携带了客户端支持的加密算法和SSL协议版本号,连接到服务器的443端口。如果是HTTP连接到80端口。


配置服务器,采用HTTPS的服务器需要申请一套数字证书(数字证书的本身其实是一对公钥和私钥)。服务器收到请求之后,从加密算法中挑选一种,同时将自己的数字证书以及公钥发送给客户端(私钥自己保留)。

客户端验证数字证书,生产一个用于加密传输握手消息的密钥,并使用服务器端传来的公钥对此密钥进行加密。 SSL握手的大致内容【具体细节】

交换协议版本号

选择一个客户端与服务端都了解的密码

对两端的身份进行验证

生产临时的会话密钥以便加密信道

服务器使用保留的私钥对加密的密钥进行解密,得到密钥信息(完成非对称交换密钥)。

使用刚才得到的密钥信息,加密握手信息,发送给客户端,客户端使用相同密钥进行解密验证,完成握手(完成对称加密信息)。

进行加密信息传输。

七、GET/POST


GET与POST请求方式的区别:


GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),POST把提交的数据则放置在是HTTP包的包体中。

GET的URL会有长度上的限制,则POST的数据则可以非常大。

POST比GET安全,因为数据在URL上不可见,非明文传输。

GET传输的数据量非常小,一般限制在 2 KB 左右,但是执行效率却比POST好;而POST方式传递的数据量相对较大,它是等待服务器来读取数据。


欢迎加入安卓开发咨询探讨:搜索公众号“河北盛秋网络”

24小时微信在线:shengqiu1984



运行0.19206秒,内存使用3.65 MB,数据库执行54次,用时0.04415秒,缓存执行19次,用时0.01345秒
收缩