说说网路通信协议

1. 网络层次划分

通过上图,基于TCP/IP 4层模型来看,网路分层与网络通信协议对应关系为:

  • 应用层 ——> http、telnet 、ftp 、smtp等应用协议
  • 传输层 ——> tcp、udp等传输协议
  • 网络层 ——> ip 网络协议(IP地址, 路由器)
  • 网络接口层,就涉及到网络设备通过光电介质传输数据(网桥,交换机等)

由此可知,我们发出的http请求,是要经过tcp进行数据传输控制,再经ip寻址进行资源定位的

2. 何为HTTP / IP / TCP / UDP / FTP等协议

  • HTTP: Hyper Text Transfer Protocol 超文本传输协议
  • IP:Internet Protocol 网际互连协议
  • TCP:Transmission Control Protocol 传输控制协议(面向连接的、可靠的传输层通信协议)
  • UDP:User Datagram Protocol  用户数据报协议(无连接的传输协议,如telnet)
  • FTP: File Transfer Protocol 文件传输协议
  • Telnet: 远程登陆协议
  • DNS:域名解析协议
  • SMTP:邮件传送协议
  • POP3:邮局协议

2.1 HTTP协议的发展

2.2 HTTP状态码        

状态码定义了很多,具体分为以下5大类

  • 2** 开头 (请求成功)表示成功处理了请求的状态代码
  • 3** 开头 (请求被重定向)表示要完成请求,需要进一步操作(重定向)
  • 4** 开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理(可能跨域)
  • 5** 开头 (服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误

每一类记住一些常见的即可,比如:

200 - 请求成功,服务器已成功响应返回

302 - 请求被重定向,服务器处理完请求后,会重定向到一个新的资源地址返回给客户端,这时可以看到浏览器地址栏请求地址已自动切换

304 - 未修改, 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容

400 - 请求错误,服务器无法解析客户端发出的请求

403 - Forbidden, 访问被禁止,nginx代理服务经常可以看到这样的响应页面

404 - 请求路径地址错误

405 - 请求方法禁用,比如GET, POST请求方法与服务端允许的不一致

500 - 服务器内部异常错误等

502 - 错误网关, 服务器作为网关或代理,从上游服务器收到无效响应

504 - 网关超时, 服务器作为网关或代理,但是没有及时从上游服务器收到请求

2.3 TCP建立连接的3次握手4次挥手

2.3.1 TCP建立连接时3次握手,通俗点解释就是:

客户端(第1次):我要准备发送请求数据(发出SYN报文为号)

服务端(第2次):收到,我准备好了,你发吧(发出SYN+ACK报文,ACK即确认)

客户端(第3次):好的,我知道你准备好了,接下来我就开始发送了

服务端:(你知道我知道就行了,那我就不再客套,免回了)

 2.3.2 TCP断开连接前4次挥手,再通俗点解释就是:

客户端(第1次):我数据发完了,要准备断开连接了(发出FIN报文为号)

服务端(第2次):收到,我知道你没数据请求了(发出ACK报文确认)

服务端(第3次):我也没数据要再发给你了(发出FIN+ACK报文为号)

客户端(第4次):收到,我知道你也没数据响应了(发出ACK报文确认,断开连接)

3. 网络通信安全

3.1 HTTP 与 HTTPS

http 默认使用80端口,比如请求时只输入IP不输端口,即相当于请求IP:80
https默认使用443端口,发送域名请求时相当于请求域名绑定的IP:443

nginx默认监听80 及 443端口;8080 及 8443是tomcat等容器的默认端口

HTTPS 相当于 HTTP + SSL/TLS,加密传输,身份认证,比HTTP安全,但加解密导致效率降低

  • SSL (Secure Socket Layer,安全套接字层)
  • TLS (Transport Layer Security,传输层安全协议)  (TLS是SSL的继任者,建立在TCP之上)

3.2 加密

分为对称加密和非对称加密

  • 对称加密,简单点理解,就是加密密钥与解密密钥是一样的,即单密码。

常见的对称加密有:

DES(Data Encryption Standard)、AES(Advanced Encryption Standard)

  • 非对称加密,有一对公钥及私钥,公钥对外公开,私钥自己持有,用于解密公钥加密的密文

常见的非对称加密有:RSA(由RSA密码学3位发明者的姓氏开头字母拼写)

3.3 摘要算法

数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(如:128位或256位等)的密文。这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。“数字摘要“使https能确保数据完整性和防篡改。

常用的摘要加密算法有:MD5, SHA等.

另外提下,Base64不属于摘要加密算法。Base64就是一种基于64个可打印字符来表示二进制数据的编码方法,由于HTTP协议是文本协议,所以Base64一般用于在HTTP协议下传输8Bit字节码的二进制数据,如图片字节流等。

3.4 签名

数字签名技术就是对“非对称密钥加解密”和“数字摘要“两项技术的应用,它将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。只要私钥不泄露,别人就无法假冒发送方的签名。数字签名的过程如下:
明文 --> hash运算 --> 摘要 --> 私钥加密 --> 数字签名


3.5 证书

CA根证书一般都由国家权威机构颁发,具有信赖度。

证书可以防止数据被篡改,保证数据的完整性。

浏览器默认都会内置CA根证书,其中根证书包含了CA的公钥

常用加密方式:

AES密钥加密原始数据,RSA私钥加密AES密钥,RSA私钥加密原始数据摘要生成签名,

然后生成证书(含RSA公钥),最后将加密数据,加密AES密钥,签名一同发送给接收方。

说明:由于RSA非对称加密原始数据有长度限制,不能超过RSA公钥长度,且加解密效率也比AES要低,因此原始数据都采用AES对称加密。

大概加解密流程:

 结果完整性及是否被篡改验证:

4. WS / WSS

Websocket是html5提出的一个协议规范,是为解决客户端与服务端实时通信。本质上是一个基于tcp,先通过HTTP/HTTPS协议发起一条特殊的http请求进行握手后创建一个用于交换数据的TCP连接,ws对应http, wss对应https。

websocket请求头标识

Connection: Upgrade

Upgrade: websocket

WebSocket优势

浏览器和服务器只需要要做一个握手的动作,在建立连接之后,双方可以在任意时刻,相互推送信息。同时,服务器与客户端之间交换的头信息很小。

HTTP与Websocket长连接的区别

  • HTTP1.1通过使用Connection:keep-alive进行长连接,HTTP 1.1默认进行持久连接。在一次 TCP 连接中可以完成多个 HTTP 请求,但是对每个请求仍然要单独发 header,Keep-Alive不会永久保持连接,可以在任何一次请求完成后关闭。它有一个保持时间,可以在不同的服务器(如Nginx)中设定这个时间。这种长连接是一种“伪链接”
  • websocket的长连接,是一个真的全双工。长连接第一次tcp链路建立之后,后续数据可以双方都进行发送,不需要发送请求头。
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值