android和计算机的关系,Android常用计算机网络知识总结。

计算机网络体系结构

计算机网络的各层及其协议的集合就是网络的体系结构。OSI的的七层协议体系结构概念清楚,理论也较完整,但它既复杂又不实用。TCP/IP体系结构则不同,只有四层,但它现在得到广泛的应用。我们一般采用折中的方法,综合OSI和TCP/IP体系的优点,这就是五层协议的体系结构。

354084270599

计算机网络体系结构.png

HTTP简介

HTTP协议是Hyper Text Transper Protocol(超文本传输协议)的缩写,使用TCP连接进行可靠的传送,是应用层的协议。

HTTP的主要特性

无连接:每次处理完一个请求后就断开。

无状态:对事务处理没有记忆能力,它意识着如果后续处理需要前面的信息,则必须重传。

HTTP版本差异

HTPP/0.9

最早的版本,该版本很简单,只有一个Get请求,并且规定服务器返回的格式必须是HTML的字符串。处理完请求后就断开连接。

HTPP/1.0

该版本增加了很多功能,任何格式的内容都可以发送,不止字符串,还能传输图像,视频,二进制文件。除此之外,增加了Post和Head请求方法。请求和响应的格式也变了,除了数据部分还要增加头部信息。

1.0版本主要的缺点是:每个TCP连接只能发送一个请求,发送完数据就断开连接。如果还有后续的请求,必须重新建立连接。TCP的连接成本很高,要进行三次握手,并且开始时发送速率较慢,这就导致性能较差。为了解决这个问题,有些客户端在请求时,用了一个非标准的Connectcion字段。

Connection:keep-alive

这个字段就是表示让服务器不要关闭TCP连接。服务器同样回应这个字段。这样一个可以复用的TCP连接就建立了。直到客户端或服务器主动关闭连接。但是,这并不是标准的字段。

HTPP/1.1

目前最流行的版本。最大的变化就是引用了持久连接,即TCP连接默认不关闭,不用声明Connection:keep-alive。

客户端和服务器发现对方一段时间内没有活动,就可以主动关闭连接。不过规范的做法是,客户端在最后一个请求时,发送Connection:close,表示要求服务器关闭TCP连接。

Connection:close

HTPP/2

新的二进制格式:HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮,不同于HTTP1.x的解析是基于文本

多路复用:连接共享,即每一个request都是是用作连接共享机制的

服务端推送:服务器主动向客户端推送消息

HTTP请求报文

354084270599

请求报文.png

请求报文分为:请求行、请求头部、空行和请求数据。以下是一个请求报文示例:

POST /xxx/xxx.html HTTP/1.1

Host: www.xxx.com

Content-Length: 155

Connection:Keep-Alive

User=Agent: Mozilla/5.0

Accept-Language: cn

account=prince&password=6666

HTTP响应报文

354084270599

响应报文.png

响应报文分为:响应行、响应头、空行 响应体。以下是一个响应报文示例:

HTTP/1.1 200 OK

Date:Thu, 15 Jul 2019 09:26:55 GMT

Content-Type text/html

Content-Length: 1101

....

HTTP响应码

响应状态码由三位数字组成,第一位数字表示响应类型,常用的状态码有五大类:

1xx: 通知消息,如请求收到了或正在处理。

2xx: 服务器成功收到并进行处理

200 OK:表示请求成功

3xx: 重定向

4xx: 客户端的差错

400: 客户端请求有语法错误,不能被服务器识别

401: 未经授权

403: 收到请求,但拒绝提供服务,一般会在响应消息中给出原因

404: 请求的资源不存在

5xx: 服务器的差错

HTTP请求方法

354084270599

HTTP的请求方法.png

Get与Post的区别

1.GET的请求参数会放在URL后,POST把参数放在HTTP包的Body中。

2.GET提交的数据大小有限制(浏览器对URL的长度有限制),POST方法提交的数据没有限制。

3.GET的请求参数放到URL中会带来安全问题。

URI、URL和URN的关系

URI:全称为Uniform Resource Identifier,统一资源标识符,用来唯一的标识一个资源。

URL:全称Uniform Resource Locator,是统一资源定位符,它是一种具体的URI,它用来标识一个资源并且指明了这个资源的路径。

URN:Uniform Resource Name,统一资源命名,通过名字来标识资源。

关系:URI是一种抽象的,高层次的概念统一资源标识,而URL和URN是具体的资源标识方式。URL和URN都是一种URI。每一个URL都是URI,反过来不成立,因为URI还有一个子集URN。在JAVA的URI中,可以是代表绝对的,也可以代表相对的,而URL只可以是绝对的,不可以为相对的。在JAVA类库中,URI类不包含任何访问资源的方法。它唯一的作用就是解析。而URL可以打开一个到达资源的流。

关系:URI属于URL更高层次的抽象,一种字符串文本标准。就是说,URI属于父类,而URL属于URI的子类。URL是URI的一个子集。URI还有一个子类URN-统一资源名称。

UDP与TCP

用户数据报协议UDP(User Datagram Protocol)

传输控制协议TCP(Transmission Control Protocol)

两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元,根据所使用的协议是TCP或UDP,分别被称为TCP报文段或UDP用户数据报。

UDP在输出数据之前不需要先建立连接。虽然UDP不提供可靠交付,但在某些情况下UDP确实一种最有效的工作方式。

TCP则提供面向连接的服务。在传送数据之前必须先建立连接,传送数据后要释放连接。由于TCP提供可靠的,面向连接的运输服务,因此不可避免的增加了许多开销,如确认、流量控制、连接管理等。

TCP三次握手

354084270599

TCP的三次握手.png

1.客户端请求连接,发送同步位SYN=1,同时选择一个初始序号x。进入SYN-SENT(同步已发送)状态。

2.服务端收到请求后,如同意建立连接,则向客户端发送。把SYN和ACK都置为1,确认号是ack=x+1,同时要选择一个初始序号y。服务器进入SYN-RCVD(同步收到)状态。

3.客户端收到服务端的确认后,还要向服务端确认。ACK置为1,确认号ack=y+1,自己的序号为seq=x+1。这时候TCP连接已经建立,A进入ESTABLISHED(已连接)状态。服务端收到确认后也进入ESTABLISHED状态。

为什么要三次而不是两次

考虑一种特殊情况,假如客户端发送了一个连接请求,因为某种原因长时间滞留了,以至于延误到连接释放后的某个时间才到达服务端。本来这是一个失效的请求,如果是没有最后一次确认,此时服务端收到并确认后连接就建立了,白白浪费了许多资源。三次握手的情况下,客户端不会再像服务端确认,所以连接不会建立。

TCP四次挥手

354084270599

TCP的四次挥手.png

1.客户端把连接释放报文终止控制位FIN置为1,序号seq=u。这时客户端进入FIN-WAIT-1(终止等待1)状态,等待服务端确认。

2.服务端收到连接释放报文后即发出确认,ACK置为1,确认号是ack=u+1,自己的序号seq=v。然后服务端进入CLOSE-WAIT(等待关闭)状态。这时,客户端到服务端方向的连接就释放了,这时的TCP连接处于半关闭的状态,即客户端已经没有数据要发送给客户端了,但服务端若发送数据,客户端仍要接收。

3.客户端收到服务端的确认后,进入FIN-WAIT-2(终止等待2)状态,等待服务端发出释放连接报文。

4.若服务端没有要向客户端发送的数据了,就发送释放报文。FIN和ACK置为1,假定服务端的序号为w(在瓣关闭的状态又向客户端发送了一些数据),还要必须重复上次已经发送过的ack=u+1,这时服务端进入LAST-ACK(最后确认)状态。

5.客户端收到服务端的释放连接报文后,必须对此确认。把ACK置为1,确认号ack=w+1,自己的序号为seq=u+1。进入到TIME-WAIT状态。

在地址栏输入URL会发生什么

1.浏览器向DNS服务器请求把URL中的域名解析成所对应的IP地址

2.解析出IP地址后,和IP地址所在的服务器建立TCP连接(即三次握手)

3.连接建立后,浏览器就可以向服务器发起HTTP请求了

4.服务器对浏览器请求作出响应,并把对应的HTML 文本发送给浏览器

5.浏览器拿到完整 HTML 页面代码后,内核和 JS 引擎就会解析和渲染这个页面,最终把完整的页面呈现出来。

6.如果浏览器没有后续的请求,那么就会跟服务器端发起 TCP 断开(即四次挥手)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值