https://www.jianshu.com/p/a7666a73af0d
1.http
超文本传输协议,基于TCP/IP通信协议来传递数据, 该协议用于规定客户端与服务端之间的传输规则,所传输的内容不局限于文本(其实可以传输任意类型的数据);
步骤
客户端与服务器建立连接
建立连接后,客户端给服务端发送请求
服务器收到消息后,给与响应操作
客户端收到消息后,展示到屏幕上,断开连接
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户
请求报文主要包括: 请求行,请求头,请求体
请求行: 请求行包含请求方法(Method)、请求统一资源标识符(URI)、HTTP版本号
请求头:请求头主要存放对客户端想给服务端的附加信息 Host: 目标服务器的网络地址 Accept: 让服务端知道客户端所能接收的数据类型如text/html /Content-Length: body的长度 等等
请求体: 真正需要发给服务端的数据
响应报文也包括三部分: 响应行,响应头和响应实体
状态行 :是服务端返回给客户端的状态信息,包含HTTP版本号、状态码、状态码对应的英文名称
响应头: 附加信息和请求头类似
响应体: 服务器返回的真正数据
HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点
支持客户/服务器模式
简单快速:客户向服务器请求服务时,只需传送请求方法和路径;请求方法常用的有GET、 HEAD、POST。每种方法规定了客户与服务器联系的类型不同.由于HTTP协议简 单,使得HTTP服务器的程序规模小,因而通信速度很快
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content- Type是HTTP包中用来表示内容类型的标识)加以标记
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到 客户的应答后,即断开连接 HTTP1.1一次请求可以处理多个请求了
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力,缺少状态意 味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的 数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法: OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
GET 请求指定的页面信息,并返回实体主体
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求,数据被包含在请求体中
PUT 从客户端向服务器传送的数据取代指定的文档的内容
DELETE 请求服务器删除指定的页面
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断
TCP是什么
Tcp(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议;是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的,面向字节流;会有三次握手来建立连接,而且在数据传递时,有确认. 窗口. 重传. 拥塞控制机制,在数据传完之后,还会断开来连接用来节约系统资源.
UDP是什么
UDP(用户数据报协议)是与TCP相对应的协议;它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去;UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境可以使用UDP;
TCP和UDP区别
1. TCP面向连接(三次握手);UDP是无连接的,即发送数据之前不需要建立连接
2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,UDP尽最大努力交付,即不保证可靠交付, Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输;
3. UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信
4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5. TCP对系统资源要求较多,UDP对系统资源要求较少;
什么是三次握手
所谓三次握手(Three-Way Handshake)即建立TCP连接,是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立;
第一次握手:客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认
第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发 送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1), 此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始 传送数据
什么是四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭;这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接;收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据;首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭
TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送
服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号
服务器关闭客户端的连接,发送一个FIN给客户端
客户端发回ACK报文确认,并将确认序号设置为收到序号加1
什么是HTTTS
HTTPS 超文本传输安全协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版;即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
加密过程是在传输层完成的(完成连接->验证证书->加密传输->断开连接)
HTTPS连接过程简述
客户端向服务端发起 https 请求
服务器(需要申请 ca 证书),返回证书(包含公钥)给客户端
客户端使用根证书验证 服务器证书的有效性,进行身份确认
客户端生成对称密钥,通过公钥进行加密,发送给服务器
服务器使用私钥进行 解密,获取对称密钥
双发使用对称加密的数据进行通信
什么是对称加密
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)
常见的有AES,DES,3DES等
DES算法是一种用56位密钥来加密分组长度为64位数据的对称密钥算法(实际上函数要求一个64位的密钥作为输入,但是第8、16、24、32、40、48、56、64 等8位是校验位, 使得每个密钥都有奇数个 1,所以参与加密过程的只有56位)
AES算法,基本变换字节代换、行位移、列混合和轮密钥加
AES是一个迭代分组密码,分组大小为128位,而密钥长度为128位、192位或256位,相应的迭代轮数N,为10轮、12轮、14轮
非对称加密
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key);私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人;非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥;
常见的: RSA算法
http 与https区别
https协议需要到ca申请证书,一般免费证书很少,需要交费
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
说一下Session 和 Cookie 的概念
Session 是服务器用来认证,追踪用户的数据结构,通过判断客户端传来的信息确定用户,确定用户唯一标志是客户端传来的 SessionId
Cookie 是客户端用来保存用户信息的机制, 初次会话时, http 协议会在 Cookie 里记录一个SessionID,之后每次会话时把 SessionID发给服务器
什么Socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端称为一个socket;
socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力;
什么是DNS
域名系统(DomainNameSystem,缩写:DNS)是[互联网]的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问[互联网]
DNS劫持问题
DNS劫持又称(域名劫持), 是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能访问或访问的是假网址
解决办法: 使用HTTPDNS
项目中网络层如何做安全处理
尽量使用https
不要传输明文密码
Post并不比Get安全
不要使用301跳转
http请求都带上MAC
http请求使用临时密钥
断点续传如何实现
通过HTTP,可以非常方便的实现断点续传
断点续传主要依赖于HTTP头部定义的Range,应用可以通过HTTP请求曾经获取失败的资源的某一个返回或者部分来恢复下载该资源;当然并不是所有风服务器都支持Range,所以不支持Range的不在我们考虑之内,Range是以字节计算的,请求的时候不比给我结尾字节数,因为请求方并不一定知道资源的大小
通过这个关键字可以告诉服务器返回哪些数据给我
什么是WebSocket,解决了什么问题
WebSocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了
Websocket的数据传输是frame形式传输的,比如会将一条消息分为几个frame,按照先后顺序传输出去
WebSocket 的实现分为握手,数据发送/读取,关闭连接
什么是心跳
心跳就是用来检测TCP连接的双方是否可用
客户端发起心跳Ping(一般都是客户端),假如设置在10秒后如果没有收到回调,那么说明服务器或者客户端某一方出现问题,这时候我们需要主动断开连接
公钥加密计算量太大,如何减少耗用的时间
解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息;由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥(非对称加密)只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间
AF中常驻线程的实现
使用单例创建线程 添加到runloop中,且加了一个NSMachPort(线程间的通信),来防止这个新建的线程由于没有活动直接退出
AF3.x为什么不再需要常驻线程
NSURLConnection的一大痛点就是:发起请求后,这条线程并不能随风而去,而需要一直处于等待回调的状态
NSURLSession发起的请求,不再需要在当前线程进行代理方法的回调!可以指定回调的delegateQueue,这样我们就不用为了等待代理回调方法而苦苦保活线程了
同时还要注意一下,指定的用于接收回调的Queue的maxConcurrentOperationCount设为了1,这里目的是想要让并发的请求串行的进行回调
为什么AF3.0中需要设置self.operationQueue.maxConcurrentOperationCount = 1而AF2.0却不需要?
AF3.0的operationQueue是用来接收NSURLSessionDelegate回调的,鉴于一些多线程数据访问的安全性考虑,设置了maxConcurrentOperationCount = 1来达到串行回调的效果
AF2.0的operationQueue是用来添加operation并进行并发请求的,所以不要设置为1
XMPP是什么
XMPP 是一种基于XML的协议,XMPP是一个分散型通信网络
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性,XMPP有超强的扩展性;XMPP中定义了三个角色,客户端,服务端,网关。通信能够在这个三者的任意两个之间双向发生,而他们的传输是XML流;
MPP工作原理:所有从一个客户端到另一个客户端的消息和数据都要通过服务端
XMPP允许建立并行的TCP套接字链接对所有连接上的客户端和服务器端。持久的套接字的连接使得XMPP能够更有效的支持高级的具有存在能力的应用在带宽和处理资源的使用中
小结
而XMPP的核心部分就是一个在网络上分片断发送XML的流协议.这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流
MAC地址和ip地址的区别
MAC地址就是在媒体接入层上使用的地址,也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部 前三个设备商编号 后三位设备ID
IP即指使用TCP/IP协议指定给主机的32位地址 通过DHCP协议动态获取IP地址
IP地址相当于你现在所处的地址,会随着你的移动发生改变,而mac地址相当于你的身份证号这些个人信息,是独一无二的,不会改变的
Ping是什么协议
ping也属于一个通信协议,是TCP/IP协议的一部分;利用“ping”命令可以检查网络是否连通;
PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序
Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议
它所利用的原理是这样的:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少