浅谈 Android 网络通信的前世今生 -- 网络基础,深度剖析原理
总得来说就是将你需要发送的数据通过一层层的封装最后一比特流的形式发送到目的进程。
TCP/IP 协议 四层模型
这里的 TCP/IP 指的可不是 tcp/ip 两种协议,而是一种网络模型
各层级对应的常用的协议,可以看出 Http 协议和 ftp 协议都是属于应用层的。而我们常用的 socket 是在应用层和传输层之间的。
TCP/IP 模型
网络接口层
封装数据/解封数据
控制帧传输
流量控制
网络层
我们熟知的主要是 ip 协议,网络层之上的协议包括 TCP.UDP 等协议数据都是以 IP 数据报格式传输的。
IP 协议主要负责网络主机的定位,数据传输的路由,由 IP 地址可以唯一地确定 Internet 上的一台主机
ip 协议只管将数据从源 IP 传输到目标 IP,其他的诸如数据安全都不关注。
传输层
主要协议有 TCP/UDP 协议
不同的应用进程使用不同的协议。
UDP 协议
用户数据报协议
传输速度快,开销小,无连接,无阻塞,不可靠,不稳定。
支持一对一,一对多,多对一,多对多通信
TCP 协议
传输控制协议
点对点连接,可靠有序,全双工通信(双方可以互发数据),面向字节流
TCP 协议建立连接的三次握手
客户端发送连接请求报文段
服务端收到连接请求,并返回确认
客户端再次发送确认报文段(指自己已经收到服务端的确认报文),这个时候发送的报文段已经可以携带数据
TCP 协议断开连接的四次挥手
客户端发送断开请求
服务器收到断开请求,并返回确认
服务器发送断开连接的请求
客户端返回确认
socket
位于传输层之上,应用层之下,是对传输层的封装。
两个进程如何通信最主要的前提是能够唯一标示一个进程,在本地进程通讯中我们可以使用 pid 来唯一标示一个进程。
但是在网络中两个进程的 pid 有很大几率会冲突。所以通过 ip 地址+协议+端口号唯一标示网络中的一个进程。
IP 层的 ip 地址可以唯一标示主机,而 TCP 层协议和端口号可以唯一标示主机的一个进程
socket 是 TCP/IP 的抽象和封装,简
化 TCP/IP 的操作难度,socket 主要用来进行进程间的通信。
实际上网络间的通信还是基于 TCP/IP 的协议。
应用层
不同的应用对应具体的需求,同时也需要使用不同的应用层协议。之后会对 http 协议进行进一步解读。
socket 解读
概念解释
Socket 非常类似于电话插座。以一个国家级电话网为例,电话的通话双方相当于相互通信的 2 个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于 Socket 号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个 Socket;同时要知道对方的号码,相当于对方有一个固定的 Socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。假如对方在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向 Socket 发送数据和从 socket 接收数据。通话结束后,一方挂起电话机相当于关闭 Socket,撤消连接。
socket 又称套接字,底层建立连接通道,通过套接字建立连接。
socket 是支持 TCP/IP 协议的网络通信的基本操作单元。它是网络通信过程中断点的抽象标示,包含进行网络通信的必须得五种信息
连接协议(tcp/ip)
源 ip
源端口
目标 ip
目标端口
socket 的通信流程图
HTTP 协议解读
http 协议属于应用层协议,也是离数据最近的一层。
http 发送是以报文的形式发送,报文的每一个地段都是 ASCII 码串。
Http 请求报文,由 4 部分组成,请求行,请求头部,空行,请求体。
请求行
请求方法:GET,POST,HEAD(只返回响应头),PUT 等
[URL:www.baidu.com](
)
版本协议:HTTP/1.1
请求头
键值对的形式
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,允许多个域名同处一个 IP 地址,即虚拟主机。
Accept-Language:客户端可接受的自然语言。
Accept-Encoding:客户端可接受的编码压缩格式。
Accept-Charset:可接受的应答的字符集。
connection:连接方式(close 或 keepalive)。
Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的 cookie。
空行
评论