浅谈Android网络通信的前世今生--网络基础

OSI七层模型

OSI(Open System Interconnection 开放系统互联)

总得来说就是将你需要发送的数据通过一层层的封装最后一比特流的形式发送到目的进程。

TCP/IP协议 四层模型

这里的TCP/IP指的可不是tcp/ip两种协议,而是一种网络模型

各层级对应的常用的协议,可以看出Http协议和ftp协议都是属于应用层的。而我们常用的socket是在应用层和传输层之间的。

TCP/IP模型

网络接口层

  1. 封装数据/解封数据
  2. 控制帧传输
  3. 流量控制

网络层

我们熟知的主要是ip协议,网络层之上的协议包括TCP.UDP等协议数据都是以IP数据报格式传输的。

IP协议主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机

ip协议只管将数据从源IP传输到目标IP,其他的诸如数据安全都不关注。

传输层

主要协议有 TCP/UDP协议

不同的应用进程使用不同的协议。

UDP协议

用户数据报协议
传输速度快,开销小,无连接,无阻塞,不可靠,不稳定。
支持一对一,一对多,多对一,多对多通信

TCP协议

传输控制协议

点对点连接,可靠有序,全双工通信(双方可以互发数据),面向字节流

TCP协议建立连接的三次握手

  1. 客户端发送连接请求报文段
  2. 服务端收到连接请求,并返回确认
  3. 客户端再次发送确认报文段(指自己已经收到服务端的确认报文),这个时候发送的报文段已经可以携带数据

TCP协议断开连接的四次挥手

  1. 客户端发送断开请求
  2. 服务器收到断开请求,并返回确认
  3. 服务器发送断开连接的请求
  4. 客户端返回确认

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协议的网络通信的基本操作单元。它是网络通信过程中断点的抽象标示,包含进行网络通信的必须得五种信息

  1. 连接协议(tcp/ip)
  2. 源ip
  3. 源端口
  4. 目标ip
  5. 目标端口

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。

空行

分割请求头和请求体的作用,表示接下来的内容为请求体。

请求体

主要是http请求的参数,GET请求中不需要这部分内容。

实例:username=11111&password=00000
这部分内容在GET请求中是加在URL后的。

响应报文

响应报文跟请求报文差不多,状态行,响应头,空行,响应体。

状态行

状态码:三位数字

  • 1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
  • 2xx:表示服务器已成功接收到请求并进行处理;
  • 3xx:表示服务器要求客户端重定向;
  • 4xx:表示客户端的请求有非法内容;
  • 5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

常见状态码:

  • 200 OK:客户端请求成功。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。

响应头

  • Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;
  • Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。
  • Vary:指示不可缓存的请求头列表;
  • Connection:连接方式;对于请求来说:close(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);
  • WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求;

响应体

服务器返回的文本信息。

HTTP与HTTPS的区别

HTTPS是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份 认证,保护交换数据的隐私与完整性。

HTTPS与HTTP相比,文字上只多了一个S,实际上在应用层之下多了一层安全层

从上图所示,HTTPS比HTPP就多了一个安全层,而这个安全层具体都做了些什么呢?

  1. 交换协议版本号
  2. 选择一个两端都了解的密码
  3. 对两端的身份进行认证
  4. 生成临时的会话密钥,以便加密信道。

WebSocket

WebSocket是一种在单个TCP连接上进行全双工通讯的协议,它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握
手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

为什么需要WebSocket,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。而WebSocket可以实现双向通信。一般来说WebSocket是用来实现双工通信的长连接的。HTTP想要达到
这种效果,一般会通过轮询或者long poll来实现,这样比较占用资源且非常被动。

16024c0e546fbe0a.webp.jpg

ps:Okhttp已支持WebSocket

参考链接

漫谈网络通信

请求响应头各参数处理

Http请求码的完整列表

从输入URL到页面加载完的过程中发生的事

Android网络编程:基础理论汇总

另外

个人的github
闲暇之余写的故事

计划

浅谈Android网络请求的前世今生-元基础HttpConnection

浅谈Android网络请求的前世今生-先驱者xUtils

浅谈Android网络请求的前世今生-官方示范Volley

浅谈Android网络请求的前世今生-变革者okhttp

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容