Android 计算机网络

Android 计算机网络

一:计算机网络体系结构
OSI七层协议:从上到下:应用层-->表示层-->会话层-->传输层-->网络层-->数据链路层-->物理层
TCP/IP四层协议:从上到下:应用层-->传输层-->网络层-->网络接口层
TCP/IP五层协议:从上到下:应用层-->传输层-->网络层-->数据链路层-->物理层
Android 计算机网络_第1张图片
基于TCP/IP网络层级关系
1.应用层
为操作系统或网络应用程序提供访问网络的接口。
(1)数据传输基本单位为报文;
(2)包含的主要协议:FTP(文件传送协议),Telnet(远程登录协议),DNS(域名解析协议),SMTP(邮件传送协议),POP3协议(邮局协议),HTTP(超文本传输协议)等
(一)FTP(文件传输协议)
FTP协议包含两个部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息
Android 计算机网络_第2张图片
格式:
FTP地址如下:
ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名
ftp://ruanruan:[email protected]/klt/111.zip
Android 计算机网络_第3张图片
具体:我具体现在使用就是使用一些FileZilla客户端去去请求FTP服务端的一些文件
(二)Telnet(远程登录服务协议)
它允许用户(Telnet 客户端)通过一个协商过程来与一个远程设备进行通信。
Telnet 协议是基于网络虚拟终端 NVT(Network Virtual Termina1)的实现,
NVT 是虚拟设备,连接双方(客户机和服务器)都必须把它们的物理终端和 NVT 进行相互转换。
(三)DNS(域名解析服务协议)
DNS协议:是将域名转成IP地址(也可以将IP地址转成相应的域名地址)
我们都知道,TCP/IP中使用的是IP地址和端口号来确定网络上某一台主机上的某一个程序,不免有人有疑问,为什么不用域名来直接进行通信呢?
1.因为IP地址是固定长度的,IPv4是32位,IPv6是128位,而域名是变长的,不便于计算机处理。
2.IP地址对于用户来说不方便记忆,但域名便于用户使用,例如www.baidu.com这是百度的域名。
3.总结一点就是IP地址是面向主机的,而域名则是面向用户的
hosts文件
域名和IP的对应关系保存在一个叫hosts文件中。
最初,通过互联网信息中心来管理这个文件,如果有一个新的计算机想接入网络,或者某个计算IP变更都需要到信息中心申请变更hosts文件。其他计算机也需要定期更新,才能上网。
但是这样太麻烦了,就出现了DNS系统。
DNS系统
一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系
如果新计算机接入网络,将这个信息注册到数据库中
用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址
我们可以通过命令查看自己的hosts文件:
Android 计算机网络_第4张图片

域名服务主要是基于UDP实现的,服务器的端口号为53。
Android 计算机网络_第5张图片
eg :我们熟悉的,www.baidu.com

  1. com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。
  2. baidu: 二级域名,指公司名。
  3. www: 只是一种习惯用法。
    域名的分级
    域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。
    Android 计算机网络_第6张图片
    其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名

    国家顶级域名 中国:cn, 美国:us,英国uk..
    通用顶级域名 com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织…
    反向域名 arpa,用于PTR查询(IP地址转换为域名)

    (四):HTTP(超文本传输协议)
    HTTP构建于TCP/IP协议上,默认端口号是80
    HTTP是无连接无状态的

无连接的含义是 限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。后来使用了Keep-Alive技术。

无状态是指 协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。

HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。

为了解决HTTP无状态的缺点,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。Cookie在客户端记录状态,比如登录状态。Session在服务器记录状态。
HTTP工作原理
1.客户端连接到Web服务端
一个HTTP客户端,与Web服务器的HTTP端口(80)建立一个TCP套接字连接
2.发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行,请求头部,空行,请求数据4部分组成
3.服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4.释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接

请求报文
Android 计算机网络_第7张图片
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

响应报文
Android 计算机网络_第8张图片
HTTP/1.1 200 OK
Date:Thu, 15 Jul 2019 09:26:55 GMT
Content-Type text/html
Content-Length: 1101

   
            ....
   

请求方式:有8种
GET:像指定的资源发出“显示”请求
HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分
POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有
PUT:向指定资源位置上传其最新内容
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断
OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)

http://www.luffycity.com:80/n... 为例, 其中:

http,是协议;
www.luffycity.com,是服务器;
80,是服务器上的默认网络端口号,默认不显示;
/news/index.html,是路径(URI:直接定位到对应的资源);
?id=250&page=1,是查询。

响应码:5大种
1xx:指示信息 - 表示请求已接收,继续处理 2xx:成功 - 表示请求已被成功接收、理解、接受 3xx:重定向 - 要完成请求必须进行更进一步的操作 4xx:客户端错误 - 请求有语法错误或请求无法实现 * 5xx:服务器端错误 - 服务器未能实现合法的请求
例如:
200: OK - 客户端请求成功
400: Bad Request - 客户端请求有语法错误,不能被服务器所理解
401: Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 403: Forbidden - 服务器收到请求,但是拒绝提供服务
404: Not Found - 请求资源不存在,eg:输入了错误的URL
500: Internal Server Error - 服务器发生不可预期的错误 *
503: Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

HTTP1.1
目前最流行的版本,最大的变化就是引用了持久连接,即TCP连接默认不关闭,不用申明Connection:keep-alive
客户端和服务器发现对方一段时间内没有活动,就可以主动关闭连接。不过规范的做法是,客户端在最后一个请求时,发送Connection:close,表示要求服务器关闭TCP连接。
HTTP/2
新的二进制格式:HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮,不同于HTTP1.x的解析是基于文本
多路复用:连接共享,即每一个request都是是用作连接共享机制的
服务端推送:服务器主动向客户端推送消息
HTTPS
HTTPS协议:是通过HTTP和SSL(Secure Socket Layer, 安全套接层)或TLS(Transport Layer Security, 安全层传输协议)的组合使用,加密HTTP的通信内容
Android 计算机网络_第9张图片
默认的TCP端口号是:443
Android 计算机网络_第10张图片
HTTPS在传输的过程中会涉及到三个密钥:

服务器端的公钥和私钥,用来进行非对称加密

客户端生成的随机密钥,用来进行对称加密

一个HTTPS请求实际上包含了两次HTTP传输,可以细分为8步。
1.客户端向服务器发起HTTPS请求,连接到服务器的443端口

2.服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。

3.服务器将自己的公钥发送给客户端。

4.客户端收到服务器端的证书之后,会对证书进行检查,验证其合法性,如果发现发现证书有问题,那么HTTPS传输就无法继续。严格的说,这里应该是验证服务器发送的数字证书的合法性,关于客户端如何验证数字证书的合法性,下文会进行说明。如果公钥合格,那么客户端会生成一个随机值,这个随机值就是用于进行对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,这样在概念上和服务器端的密钥容易进行区分。然后用服务器的公钥对客户端密钥进行非对称加密,这样客户端密钥就变成密文了,至此,HTTPS中的第一次HTTP请求结束。

5.客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。

6.服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,这样数据就变成了密文。

7.然后服务器将加密后的密文发送给客户端。

8.客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。这样HTTPS中的第二个HTTP请求结束,整个HTTPS传输完成。
参考于:https://www.jianshu.com/p/14c...

2.传输层
传输层:主要功能是实现分布式进程之间的通信。利用网络层提供的服务,在源主机的应用进程与目的主机的应用进程建立“端—端”连接。
主要是2种协议:UDP和TCP
UDP常用熟知的端口号
Android 计算机网络_第11张图片
TCP常用熟知的端口号
Android 计算机网络_第12张图片
UDP协议:
无连接:知道对端的IP的端口号就可以直接传输,不需要建立连接

不可靠:没有确认机制,没有重传机制,如果因为网络故障该段无法发送到对端,UDP协议也不会给应用层返回任何错误信息

面向数据报:不能灵活的控制读写数据的次数和数量
TCP协议:
Android 计算机网络_第13张图片
1.有连接:需要端口号建立连接
2.可靠传输:发送者能感知到是否发送成功
3.面对字节流:字节流读取数据

TCP的三次握手和四次挥手
Android 计算机网络_第14张图片
第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,客户端进入SYN_SENT状态,等待服务器确认;SYN(同步序列编号)
第二次握手:服务器收到syn包,必须确定客户的SYN(ack=x+1),同时自己也会发出一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务端的SYN+ACK包,向服务端发送确认包ACK(ACK=y+1)此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手

Android 计算机网络_第15张图片
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态 。
第二次挥手:Server收到FIN后 ,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态 。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1 , Server进入CLOSED状态, 完成四次挥手。

3.网络层
网络层协议:IP协议,ICMP协议(控制报文协议),RIP等
 ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。
 
长连接:指的是建立连接后不管是否使用都保持连接
短连接:是指SOCKET连接后,发送接收完数据后马上断开连接

结尾:只有真正的强者,才有话语权,才有安全感

你可能感兴趣的:(androidjava)