博客
关于我
Android网络编程学习
阅读量:267 次
发布时间:2019-03-01

本文共 4867 字,大约阅读时间需要 16 分钟。

TCP/IP 四层模型

在这里插入图片描述

应用层:SMTP、FTP、HTTP
传输层:TCP、UDP

TCP与UDP区别总结

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付。

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节。

socket和http的区别

  • Http连接: http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。
  • socket连接:socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素(网络故障、两者之间长时间没有数据传输)可能会是连接断开.

HTTP协议

http协议是一个基于请求与响应模式的无连接,无状态,应用层的协议,支持c/s模式,简单快速,灵活

http有两种报文:请求报文和响应报文

请求报文由请求行,请求报头,和请求数据组成

  • 请求行:抓包第一行,包括请求方法,url和http版本
  • 请求报头:指的就是题目中“里面的协议头部”
  • 请求数据:指post方式提交的表单数据

响应报文由状态行,响应报头,响应正文组成

  • 状态行:状态码
  • 响应报头:同请求报头
  • 响应正文:服务器返回的资源数据

http头部,既请求报头和响应报头,统称消息报头

消息报头可以分为通用报头,实体报头, 请求报头,响应报头等

通用报头和实体报头既可以出现在请求报头中,也可以出现在响应报头中.

  • 通用报头包含的字段如:Date Connection Cache-Control…
  • 实体报头中有:Content-Type Content-Length Content-Language Content-Encoding…
  • 请求报头中包含的字段有:Host,User-Agent,Accept-Encoding,Accept-Language,Connection…
  • 响应报头包含的字段:Location,Server…

http的get和post的区别

1.参数的传输方式:GET参数通过URL传递,POST放在Request body中。

2.GET请求在URL中传送的参数是有长度限制的,而POST没有。

3.对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。不过要注意,并不是所有浏览器都会在POST中发送两次包,比如火狐

4.对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

5.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

6.GET请求只能进行url编码,而POST支持多种编码方式。

Volley

1、Volley的特点

Volley是谷歌大会上推出的网络通信框架(2.3之前使用HttpClient,之后使用HttpUrlConnection),它既可以访问网络获取数据,也可以加载图片,并且在性能方面进行了大幅度的调整,它的设计目的就是适合进行数据量不大但通信频繁的网络操作,而对于大数据量的操作,比如文件下载,表现很糟糕,因为volley处理http返回的默认实现是BasicNetwork,它会把返回的流全部导入内存中,下载大文件会发生内存溢出

2、Volley执行的过程:

默认情况下,Volley中开启四个网络调度线程和一个缓存调度线程,首先请求会加入缓存队列,,缓存调度线程从缓存队列中取出线程,如果找到该请求的缓存就直接读取该缓存并解析,然后回调给主线程,如果没有找到缓存的响应,则将这个请求加入网络队列,然后网络调度线程会轮询取出网络队列中的请求,发起http请求,解析响应并将响应存入缓存,回调给主线程

3、Volley为什么不适合下载上传大文件?为什么适合数据量小的频率高的请求?

1.volley基于请求队列,Volley的网络请求线程池默认大小为4。意味着可以并发进行4个请求,大于4个,会排在队列中。并发量小所以适合数据量下频率高的请求

2.因为Volley下载文件会将流存入内存中(是一个小于4k的缓存池),大文件会导致内存溢出,所以不能下载大文件,不能上传大文件的原因和1中差不多,设想你上传了四个大文件,同时占用了volley的四个线程,导致其他网络请求都阻塞在队列中,造成反应慢的现象

总结:

Volley通过newRequestQueue(…)函数新建并启动一个请求队列
RequestQueue后,只需要往这个RequestQueue不断add Request即可。

OKHttp

1、OKHttp的特点

1.相较于Volley,它的最大并发量为64

2.使用连接池技术,支持5个并发的socket连接默认keepAlive时间为5分钟,解决TCP握手和挥手的效率问题,减少握手次数

3.支持Gzip压缩,且操作对用户透明,可以通过header设置,在发起请求的时候自动加入header,Accept-Encoding: gzip,而我们的服务器返回的时候header中有Content-Encoding: gzip

4.利用响应缓存来避免重复的网络请求

5.很方便的添加拦截器,通常情况下,拦截器用来添加,移除,转换请求和响应的头部信息,比如添加公参等

6.请求失败,自动重连,发生异常时重连,看源码调用recover方法重连了一次

2、 OkHttp的缺点

1.消息回来需要切到主线程,主线程要自己去写。

2.调用比较复杂,需要自己进行封装。

3.缓存失效:网络请求时一般都会获取手机的一些硬件或网络信息,比如使用的网络环境。同时为了信息传输的安全性,可能还会对请求进行加密。在这些情况下OkHttp的缓存系统就会失效了,导致用户在无网络情况下不能访问缓存。

3、 OkHttp框架中都用到了哪些设计模式

1.最明显的Builder设计模式,如构建对象OkHttpClient,还有单例模式

2.工厂方法模式,如源码中的接口Call

3.观察者模式如EventListener,监听请求和响应

4.策略模式

5.责任链模式,如拦截器

TCP为什么三次握手不是两次握手,为什么两次握手不安全

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。

三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤

如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认

三次握手与四次挥手

三次握手: 建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立, 在Socket编程中,这一过程由客户端执行connect来触发,具体流程图如下:

在这里插入图片描述

  • 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server, Client进入SYN_SENT状态,等待Server确认。 SYN:同步序列编号
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位 SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求
    ,Server进入SYN_RCVD状态。
  • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK 置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

四次挥手: 终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。 在Socket编程中,这一过程由客户端或服务端任一方执行close来触发,具体流程图如下:

在这里插入图片描述

  • 第一次挥手: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状态,完成四次挥手
    在这里插入图片描述

cookie

什么是cookie

Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息

cookie的工作原理

在这里插入图片描述

session

什么是session

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。

session的工作原理

1.第一步当然是创建Session了2.在创建了Session的同时,服务器会为该Session生成唯一的Session id3.在Session被创建之后,就可以调用Session相关的方法往Session中增加内容4.当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session

cookie与session的区别

1.存放位置不同
2.存取方式的不同
3.安全性(隐私策略)的不同.
494604
4.有效期.上的不同
5.对服务器造成的压力不同

HTTPS

HTTPS并不是一一个单独的协议,而是对工作在一加密连接 (SSU

TLS).上的常规HTTP协议。 通过在TCP和HTTP之间加入TLS(Transport Layer Security)来加密

对称加密

加密用的密钥和解密用的密钥是一样的

不对称加密

私有密钥一方保管 公有密钥双方保管 (RSA加密)

总结:

https实际就是在TCP层与http层之间加入了SSLTLS来为上层的安全保驾护航,主要用到对称加密、非对称加密、证书,等技术进行客户端与服务器的数据加密传输,最终达到保证整个通信的安全性。

HTTPS中的加密算法相关

密钥: RSA加密简单过程

1.服务端生成配对的公钥和私钥
2.私钥保存在服务端,公钥发送给客户端
3.客户端使用公钥加密明文传输给服务端
4.服务端使用私钥解密密文得到明文

二.数字签名

数字签名就是用于验证传输的内容是不是真实服务器发送的数据,发
送的数据有没有被篡改过,它就干这两件事,是非对称加密的一种应
用场景。不过他是反过来用私钥来加密,通过与之配对的公钥来解密。

转载地址:http://lsfa.baihongyu.com/

你可能感兴趣的文章
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>
MySQL —— 在CentOS9下安装MySQL
查看>>
mysql 不区分大小写
查看>>
mysql 两列互转
查看>>
MySQL 中开启二进制日志(Binlog)
查看>>
MySQL 中文问题
查看>>
MySQL 中日志的面试题总结
查看>>
mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
Mysql 中的日期时间字符串查询
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>
Mysql 优化 or
查看>>