2016 January 27

Android NetWork基础

网络协议

关于Tcp/ip 以及 Http 做过服务器的都很清楚,这里重新回忆一下一些知识点:

  • IP地址以及地址掩码
  • Tcp建立的三次握手 与 断开的四次挥手
  • Http Url组成
  • Http头域,Http与Https
  • Http请求方式
  • Http响应与状态码
  • Http工作流程
  • Http长短连接

IP

利用IP地址对互联网中的计算机进行定位,从而完成点对点数据传输,网络层数据传输格式是帧,目前普遍是IpV4,当然随着网络主机的爆发,V4的32位的IP地址已经开始逐渐变得不够用,目前正在推行V6。

IP地址分为网络地址与主机地址,如何区更加高效的分网络地址段与主机地址段,引入了子网掩码,利用子网掩码与IP地址的与运算迅速精准定位网络地址;

传输层协议,一是 Tcp 二是 Udp;Tcp牺牲了性能但是解决了网络传输中的端对端可靠性无保障的问题同时也可以保障分段传输的数据顺序的正确性问题;对比而言 Udp是一个无连结协议,其不对数据的到达与否进行检测,即使传输失败丢包;

Tcp的超时重传与拥塞机制 —— Tcp滑动窗口,慢热启动等算法,这里慢热启动比较直观,看看迅雷下载,下载速度是逐步增加的,这个比较好理解,当不知道网络可负载状态时大量的数据传输可能直接导致网路瘫痪,从一个较低水平逐步加速到最适合速度区间;

Tcp

Tcp的三次握手与四次挥手:

Syn synchronous :连接建立时的握手信号,Tcp连接建立时,客户端发送 syn 服务端回复 Syn + Ack 标识接收连接信号成功;

Ack 表示信号接收确认字符;最后客户端再次发送 Ack 表示接受成功;Ack 与 Syn的值是有依存关系的,Ack 值 = 所接受到的 Syn值 + 1;

写到这里突然想起两将军问题,很有意思,这里就不扯远了;

而Tcp连接的释放同样类似:

  • 客户端发送 Fin标识,服务器接收成功同时确认客户端数据发送完毕回复 Ack,标识客户端数据接收完毕,此时服务器处于关闭等待状态 此时服务器依旧可以单向向客户端传送数据,客户端也能正常接受;
  • 服务器发送 Fin + Ack 表明数据发送完毕,终止连接
  • 客户端在收到 服务器终止信号后 回复确认 Ack ,进入等待关闭状态,2MSL时间之后客户端关闭,释放Tcp连接
  • 服务器接收 Ack ,彻底释放连接

Http协议

应用层协议,基于Tcp协议,好像说不完又好像没啥说的;

统一资源定位符 Url:协议类型://服务器地址(必要时需加上端口号)/路径/文件名

Http://127.0.0.1:8080/android/android-network.html

http : 网络协议类型,除此之外还有 Https   Ftp 等

127.0.0.1 服务器Ip地址

8080 服务器网络端口号

网络地址 与 Ip地址 的 Dns映射;也就是网络地址解析;

http:keep-alive 长连接: 指 http响应之后,不立即断开 tcp 连接,后面的请求响应继续复用该tcp连接;

Http 与 Https区别,s是指的 SSL/TLS,需要理解的是加密是针对什么加密,保护了什么,保护的是传输过程中数据内容的安全性,也就是从服务器出来之后数据内容被中间商获取篡改,这是目前恶心的天朝电信最喜欢干的植入广告的手段之一;然后看一下对称与非对称加密,了解一下公钥私钥;

Http请求方式,put || head 之类不大常用的就不说了,一般基于restful风格的服务器端会用到这些,移动端主要了解 get || post区别:

get || post区别到底是啥:

准确的说就是 get请求数据通过拼接Url直接提交,参数附加在Url中以?分割,是可见的,同时 Url是有长度限制的,这里被很多人认为是get请求有数据长度限制,我觉得其实是两回事;而 post方式 数据放在Http包体内部提交,不显示在 Url中,看起来安全一点,其实一抓包都一回事;

同时get请求是安全幂等的,get请求不会对服务器资源做更改,而post有可能改变服务器内容;总的来说get一般常用语检索数据,速度比post快,而post一般用于向服务器提交数据;

Http的长连接与短连接:

首先明确一点 Http协议是无状态协议,即使是长连接也不会将http协议变得有状态;

所谓的短连接是指一次的数据交换传输完成后即可立马断开连接,每次数据传输都建立一次连接再进行数据交换;而长连接是指在一段时间内数据交换持续复用该连接,连接被保存了起来;

一个比较好的比喻就是 打开网页的时候若网页中有文字夹带N张图片,网页传输完成,浏览器解析之后,发现有很多图片要继续从服务器获取,若短链接文字,以及每张图片可能都会建立一个连接去获取资源,而长连接则文字,图片等多项资源全部复用该连接;

Http ResponseCode: 200成功系列;300重定向系列;400客户端错误系列;500服务器错误系列需要大概知道;

Http返回数据解析:移动端返回数据目前比较通用的多为Xml 或 Json数据;


TCP 的那些事儿(上)

TCP 的那些事儿(下)

浅谈HTTP中Get与Post的区别

XML、JSON及其解析

上一篇
下一篇
Loading Disqus comments...
Table of Contents