1通信协议
1.HTTP/HTTPS
HTTP经过SSL/TLS协议再进入到TCP传输层,就是HTTPS协议;
一般HTTP的端口号为80,HTTPS的端口号为443
SSL/TCL协议层主要职责就是借助下层协议的信道安全的协商出一份加密密钥,并且用此密钥来加密HTTP请求响应报文;
它解决了以下三个方面的问题:
1、 提供验证服务,验证本次会话实体身份的合法性;
2、 提供加密服务,强加密机制能够保证通信过程中的消息不会被破译;
3、 提供防止篡改服务,利用HASH算法对消息进行签名,通过验证签名保证通信内容不被篡改;
4、 对称加密:;
密钥只有一个,加密、解密都是这个密码,加解密速度快,典型的对称加密算法有DES 、AES 、RC4等;
1、 非对称加密:密钥成对出现,分别为公钥和私钥,从公钥无法推知私钥,反之,从私钥也无法推知公钥解密非对称加密速度较慢,典型的非对称加密算法有RSA 、DSA 、DSS等;
2、 Hash算法,这是一种不可逆的算法,它常用于验证数据的完整性;
因为HTTPS是基于TCP/IP协议通信的,属于可靠传输,所以它必须要先进行三次握手,完成连接的建立。接着是SSL的握手协议,此协议非常有效的让客户端和服务器之间完成相互之间的身份验证以及密钥协商;
1、 客户端浏览器向服务器发送SSL/TLS协议的版本号、加密算法的种类、产生的随机数,以及其他需要的各种信息;
2、 服务器从客户端支持的加密算法中选择一组加密算法与HASH算法,并且把自己的证书(包含网址地址、加密公钥、证书颁发机构等)也发送给客户端;
3、 浏览器获取服务器证书后验证其合法性,验证颁发机构是否合法,验证证书中的网址是否与当前正在访问的地址一致,通过验证的浏览器会显示一个小锁头,否则,提示证书不受信;
4、 客户端浏览器生成一串随机数并用服务器传来的公钥加密,再使用约定好的Hash算法计算握手消息,发送到服务器端;
5、 服务器收到握手消息之后用自己的私钥解密,并用散列算法验证,这样双方都有了此通信的密钥;
6、 服务器再使用密钥加密一段握手消息,返回给客户端浏览器;
7、 浏览器用密钥解密,并用散列算法验证,确定算法与密钥;
通过以上7步之后,就可以利用此次协商好的密钥进行通信;
2.HTTP请求/响应模型
通常,一个HTTP请求/响应的工作流程可以使用以下4个步骤来概括:
1、 客户端浏览器先要与服务器建立连接,即通过三次握手建立连接;
2、 建立连接之后,客户端发送一个请求到服务器,这个过程其实是组装请求报文的过程;
3、 服务器端接收到请求报文,对报文进行解析,组装成一定格式的响应报文,返回给客户端;
4、 客户端浏览器接收到响应报文之后,通过浏览器内核对其进行解析,按照一定的外观进行显示,然后与服务器断开连接;
3.解析HTTP报文
1、 请求报文:;
请求行(由请求方法字段、URL字段和HTTP协议版本字段组成)、请求头、请求体
请求头部常见的典型属性:
- User-Agent:
客户端请求的浏览器类型,更确切的说,是客户端应用程序的名称,不同版本、不同厂商的值都可能不同;
- Accept:告诉服务器客户端可以识别的媒体类型列表。这个属性值可以是一个或者多个MIME类型的值,服务器可以根据这个判断是否发送这个媒体类型;
- Host:
- Cookie:
- Referer:
- Cache-Control:
1、 响应报文:;
响应行、响应头部、响应体
响应行:包含协议版本、状态码以及描述
响应头部:包含若干个属性与属性值
响应体:一般存放我们真正需要的文本;
常用的状态码:
- 200 :请求成功
- 400:客户端请求有语法错误,服务器无法识别
- 401:请求未经授权
- 403:服务器收到请求,但拒绝提供服务
- 404:请求资源不存在;
- 500:服务器发生不可预期的错误;
- 503:服务器当前不能处理客户端的请求,一段时间之后可能恢复正常;
常用的响应报文头:
- Cache-Control:服务器通过该报文头属性告诉客户端如何对响应进行缓存;
- Location:该属性用于网页重定向;客户端浏览器解析报文之后就直接重新跳转到这个地址;
- Set-Cookie:利用这个属性,服务器端可以对客户端的Cookie进行设置;
2.套接字通信
套接字通信是应用层与TCP/IP协议族通信的中间抽象层,它是一组接口。应用层通过调用这些接口发送和接收数据。
TCP/IP通信协议族中有两种套接字类型,分别是流套接字和数据报套接字,分别对应TCP协议和UDP协议。
一个TCP/IP套接字有一个互联网地址、一个协议以及一个端口号唯一确定;
1.单播通信
一对一的模式;
2.组播通信
一对多的模式;
特点:
- 节省网络资源;
- 有针对性地向组内成员传播;
- 可以在互联网上进行传播;
- 没有可靠传输协议,会导致数据不可靠;