IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 说说网路通信协议 -> 正文阅读

[网络协议]说说网路通信协议

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:8080
https默认使用443端口,发送域名请求时相当于请求域名绑定的IP:8443

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链路建立之后,后续数据可以双方都进行发送,不需要发送请求头。
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-08 11:53:51  更:2021-08-08 11:54:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 14:49:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计