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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络 -> 正文阅读

[网络协议]计算机网络

OSI七层协议:

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层;

应用层:HTTP ,HTTPS,FTP,DNS
传输层:TCP、UDP
网络层:IP
数据链路层:ARP RARP

TCP/IP 四层协议
网络接口层、网际层、运输层、应用层

应用层:通过应用进程间的交互来完成特定的网络应用;
运输层:负责向两台主机之间的通信提供数据传输服务;
网络层:选择合适的网间路由和交换节点,确保数据及时送达;
数据链路层:

三次握手 & 四次挥手

三次握手过程: 首先,客户端向服务端发送一个SYN信号,随机产生当前序列号x,客户端进入SYN-SENT状态;第二,服务端接监听到客户端报文后,向客户端发送一个确认信号,打开SYN表示和ACK标志,随机产生当前序列号与,确认序列号为x+1,服务端进入SYN-RCVD状态;最后客户端接收到后,向服务端发送一个确认信号,打开ACK标志位,当前序列号为x+1;确认序列号为y+1,客户端进入ESTABLISHED状态;服务端接收后,也进入ESTABLISHED状态;之后就可以进行数据传输了。

进行三次握手的原因
1.同步双方序列号;
2. 确保双方都建立了连接;
3.防止已经失效的连接请求报文突然又传到了服务器。如果是两次握手,客户端第一次连接请求发送时,由于网络延迟等原因,导致服务端没有收到,此时客户端又重新发送了一个请求链接,服务端接收后返回一个确认信息,双方简历连接;通信完成后双方关闭连接,此时客户端旧连接到达了服务器,由于只有两次握手,服务端又与客户端重新建立连接了,会导致不必要的错误和资源浪费。

四次挥手过程:第一,客户端向服务器发送一个请求结束报文,打开FIN标志位,当前序列号为u,客户端进入FIN-WAIT-1状态;第二,服务端接收后,先向客户端返回一个确认报文,打开标志位ACK,当前序列号为v,确认序列号u+1,进入CLOSE-WAIT状态。此时服务端还能向客户端发送数据,直到全部发送完毕,服务端向客户端发送结束报文,打开FIN和ACK标志位,当前序列号w,确认序列号u+1,进入LAST_ACK状态;客户端收到后就向服务端发送一个确认报文,打开ACK标志位,当前序列号u+1,确认序列号w+1,客户单进入TIME_WAIT状态,等待2MSL后,进入CLOSED状态。服务端接收确认信号后,也进入CLOSED状态。

四次挥手的原因:因为服务端接收到客户端关闭连接请求后,可能还有数据要传送给客户端,所以先给客户端发送一个确认报文,等数据传送完毕后,在通知客户端进行连接关闭。
2MSL原因:MSL报文生存最大时间。确保服务端能够接收到客户端的确认应答。且同样防止已失效的连接请求报文出现在下一次连接请求中。

TCP&UDP

TCP 与UDP的区别

  1. TCP是面向连接的,UDP是无连接的,面向报文的;
  2. TCP的传输是可靠的,UDP是不可靠的,尽最大努力交付;
  3. TCP连接时一对一的,而UDP支持一对多,多对一,一对一和多对多。
  4. TCP的以字节流形式传输,UDP则传输的是数据报文段;
  5. TCP的传输效率较低,UDP的传输效率较高;
  6. TCP应用与要求可靠性高的场景,UDP是应用与要求通信速度高的场景。

TCP如何保证传输可靠性

  1. TCP会将应用数据分割成它认为合适的数据块;
  2. TCP对每一个数据包进行编号,接收方按照编号进行排序,将有序数据传输给应用层;
  3. 校验和:TCP维护首部和数据的校验和,用来检测数据在传输过程中是否有变化,如果收到的校验和有差错,将会丢弃这个数据报;
  4. TCP会丢弃重复的数据;
  5. 使用流量控制防止丢包;
  6. 拥塞控制:网络拥塞时,减少数据的发送;
  7. ARQ协议:实现可靠传输。
  8. 超时重传:防止丢包。

ARQ协议

**停止等待ARQ:**每发送一组报文,就会等待确认,收到确认信息后,再继续发送下一组报文;
重试重传:是指超过一段时间后,仍然没有接收到确认。所以在每发完一组信息后就会设置一个超时计时器,一般情况下重传时间比报文平均往返时长长一些。

连续ARQ协议:发送方维持一个发送窗口,这个窗口内的分组可以连续发送,不需要等待对方确认。接受方采用累计确认,对按序到达的最后一个分组发送确认,表明这个分组之前的所有分组都已经正确收到了。

拥塞控制

  1. 拥塞控制目的:避免发送发的数据填满整个网络
  2. 拥塞窗口:拥塞窗口cwnd是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。
  3. 拥塞窗口变化规则:网络出现拥堵就会减小,网络没有出现拥堵就会增大。而发送窗口大小就是拥塞窗口和接收窗口中的较小的那个值。
  4. 网络拥塞的判断:只要发送方在规定时间内没有接收到ack应答报文,即发生了超时重传,就认为网络出现拥塞。
  5. 拥塞控制的算法:
    慢启动
    慢启动就是在初始化的时候,拥塞窗口cwnd = 1,表示可以传一个MSS大小的数据。当收到这个数据的ACK应答报文后,拥塞窗口就会等于2,就能一次性发送2个数据;在接收到这两个数据的ACK应答报文后,拥塞窗口就会等于4…以此类推,也就是发送方每收到一个ACK,拥塞窗口cwnd的大小就加1。
    但拥塞窗口不会无止境增加,而是有一个ssthresh值,也就是慢启动门限。当cwnd 小于 ssthresh值时,使用慢启动算法,但当大于或等于这个门限值,就会启动拥塞避免算法。
    慢启动门限大小一般为:ssthresh = 65535字节
    拥塞避免
    拥塞避免就是:发送发每当收到一个 ACK 时,拥塞窗口cwnd就会增加 1/cwnd。
    当拥塞窗口不断增加时,可能会发生网络拥塞,这是就会对丢失的数据进行重传,触发重传机制,进入了拥塞发生算法。
    拥塞发生
    不同的重传机制会有不同的拥塞发生算法
    超时重传下得拥塞算法: 慢启动门限ssthresh设置为 ssthresh = ssthresh / 2;拥塞窗口大小重置为1;重新开始慢启动。
    快速重传:拥塞窗口变为原来的一半,即cwnd = cwnd / 2;慢启动门限设置为拥塞窗口大小,即 ssthresh = cwnd;然后进入快速恢复算法
    快速恢复
    拥塞窗口cwnd = ssthresh + 3 ( 3 的意思是确认有 3 个数据包被收到了)
    重传丢失的数据包
    如果再收到重复的 ACK,那么 cwnd 增加 1
    如果收到新数据的 ACK 后,设置 cwnd 为 ssthresh,接着就进入了拥塞避免算法

URL输入后

  1. DNS根据输入的URL进行域名解析,获得对应的IP地址;
  2. TCP三次握手建立连接;
  3. 浏览器发送http请求;
  4. 服务器处理请求返回http报文;
  5. 浏览器解析返回数据并渲染页面;
  6. TCP四次挥手断开连接。

HTTP & HTTPS

HTTP长连接和短链接

在HTTP1.1之前,http默认短链接。客户端与服务端没进行一次HTTP操作就建立一次连接,任务结束就中断连接。
从HTTP1.1开始,默认使用长连接,只需要建立一次连接,就能进行多次http通信。
长连接响应头:Connection : keep-alive; Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间

cookie和session的区别

相同点:cookie和session都是用来跟踪浏览器用户身份的会话方式;
区别:
cookie数据保存在客户端;session数据保存在服务端。
cookie不是很安全,因为可以分析存放在本地的cookie进行cookie欺骗,考虑安全性建议使用session;
session会在服务器上保存一定时间,当访问增多,会影响服务器性能。
一般登录等重要信息存在在session,其他信息存放在cookie中。

HTTP1.0 VS HTTP1.1

  1. 长连接:1.0使用短链接;1.1使用长连接;
  2. 新增了错误状态码:如409表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  3. 缓存处理:增加了更多可供选择的缓存头来控制缓存策略:Entity tag; If-Unmodified-Since; If-Match; If-None-Match;
  4. 带宽优化及网络连接的使用 :HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

HTTP VS HTTPS

  1. 端口:http默认80;http默认443;
  2. 安全性:http运行在TCP之上,所有传输内容都是明文;https是运行在SSL/TLS上的HTTP协议,所有传输内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器的证书进行了非对称加密。

---------补充-----

补充

http报文内容,和tcp的关系

请求报文:
请求方法		URL		协议版本
头部字段		值
...
请求数据

 响应报文:
 协议版本		状态码		状态码描述
 头部字段		值
 ...
 返回数据

Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。

TCP是底层协议,定义的是数据传输和连接方式的规范。
HTTP是应用层协议,定义的是传输数据的内容的规范。
HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP就一定支持TCP

HTTP GET 和POST的区别

  1. GET方法一般用于获取资源;POST方法一般用于表单等实体主体传输;
  2. GET方法的参数是放在URL末尾,POST方法一般放在请求体中。
  3. GET方法是安全、幂等的,由于是获取数据,不会产生副作用,可缓存;POST不是幂等的,且不可缓存。
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 19:10:26  更:2021-09-11 19:11:11 
 
开发: 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年11日历 -2024/11/26 1:45:55-

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