| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 计算机网络相关知识总结 -> 正文阅读 |
|
[网络协议]计算机网络相关知识总结 |
1.OSI七层结构、TCP/IP四层结构、五层协议结构 (这些要背一下)OSI七层结构:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 TCP/IP四层结构:链路层、网络层、传输层、应用层 五层结构:物理层、数据链路层、网络层、运输层、应用层 注:这里是按照从下往上的循序 ?2.关于传输层中TCP和UDP的理解TCP是面向连接的、可靠的数据流传输协议。流就是指不间断的数据结构,当应用程序采用TCP发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP为提供可靠性传输,实行了“顺序控制”或“重发控制”机制。另外还具备了流量控制(通过滑动窗口)、拥塞控制等功能提高网络利用率。 TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。根据TCP的这些机制,在IP这种无连接的网路上也能实现高可靠性的通信(主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)。 UDP提供的是面向无连接的、不可靠的数据流传输。UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。UDP在传输过程中可能会出现丢包。
1.TCP提供的是面向连接的。可靠的数据流传输协议。而UDP提供的是面向无连接的、不可靠的数据流传输 2.TCP保证数据传输过程中的安全性,UDP在传输过程中可能会出现丢包。TCP保证数据的顺序,UDP不保证 3.TCP注重数据的安全性,UDP数据传输快,因为不需要建立连接等操作,但是其安全性一般。 4.TCP有拥塞控制和流量控制,UDP没有。
TCP通过以下几种措施来保证数据的可靠传输: 1.对应用数据进行分割:将应用数据分割成TCP认为最适合发送的数据块 2.对数据包进行编号:TCP给要发送的每一个数据包进行编号,接收方按照编号对数据包进行排序,把有序数据传送给应用层。 3.校验和:这是一个端到端的校验,目的是检测数据在传输过程中的任何变化。如果接收端的校验有差错,说明数据在传输过程中出问题了,接收端将丢弃不再接受该数据。 4.流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。 5.拥塞控制:当网络拥塞时,减少数据的发送。防止过多的数据注入到网络中,避免传输链路过载 6.ARQ协议:该协议也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组 7.超时重传:当TCP发出一个报文段后,它会启动一个定时器,等待接收端确认收到这个报文段。如果不能及时收到一个确认。将重发这个报文段。
TCP利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。
为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。 TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。 慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。 3.TCP三次握手和四次挥手(面试会问) TCP三次握手 TCP提供面向有连接的通信传输。面向有链接是指在数据通信开始之前先做好两端之间的准备工作。所谓的三次握手是指建立一个TCP连接时需要客户端和服务器总共发送三个包以确认连接的建立。 三次握手的流程图: 三次握手讲解:
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。 第一次握手:是为了服务端确认对方 (客户端) 发送数据正常,自己接收数据正常。
服务端传回发送的ACK是为了告诉客户端,我接收到的信息就是你发送的信号,这表明从客户端到服务端的通信是正常的。而回传SYN是为了建立从服务端到客户端的通信。 ?TCP四次挥手
四次挥手的流程图:
?TCP设有一个保活计时器,显然,如果客户端出现了故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一次发送10个探测报文仍然没有反应,服务器就认为客户端出现了故障,接着就关闭连接。
所经历的过程:DNS域名解析、TCP连接、发送HTTP请求、服务器处理请求并返回HTTP报文、浏览器渲染、结束 1.DNS域名解析 当我们在浏览器中输入一个域名然后回车后,首先检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有对应的域名映射,如下所示:
如果有,则返回对应的IP地址。 如果没有,浏览器会发出一个DNS请求到本地DNS服务器找对应的IP地址,本地DNS服务器一般都是你的网络接入服务器商提供,中国电信、中国移动等 2.建立TCP连接:三次握手 解析出IP地址后,浏览器根据IP地址和默认端口443向网站的服务器发起请求,三次握手,建立TCP连接。 3.发送HTTP请求 建立好TCP连接后,浏览器(客户端)通过HTTP协议发送请求,请求从服务器端获取数据。 服务器处理客户端的HTTP请求后,就将请求的数据返回给浏览器。 4.关闭TCP连接:4次挥手 浏览器与服务器数据传送完毕后,四次握手,释放TCP连接。 5.浏览器回显 浏览器对数据进行解析并渲染显示。
HTTP是超文本传输协议,用于客户端和服务器端之间的通信,即在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范 。
1.Host字段? 客户端发送请求时,用来指定服务器的域名。 Host:www.A.com 有了host字段,就可以将请求发往同一台服务器上的不同网站。 2.Content-Length字段 服务器在返回数据时,会有Content-Length字段,表明本次相应的数据长度。 如上面则是告诉浏览器,本次服务器回应的数据长度是1000个字节,后面的字节就属于下一个回应了。 3.Connection字段? Connection字段最常用于客户端要求服务器使用TCP持久连接,以便其他请求复用。 HTTP/1.1版本的默认连接都是持久连接,但是为了兼容老版本的HTTP,需要指定Connection首部字段的值为Keep-Alive。 一个可以复用的TCP连接就建立了,直到客户端或服务端主动关闭连接。但是,这不是标准字段。 4.Content-Type字段?
上面的类型表明,发送的是网页,而且编码是UTF-8。 客户端请求的时候,可以使用?
上面代码中,客户端声明自己可以接受任何格式的数据。 5.Content-Encoding字段
上面表示服务器返回的数据采用了?gzip?方式压缩,告知客户端需要用此方式解压。 客户端在请求时,用?
混合加密: HTTPS 采用对称加密和非对称加密结合的「混合加密」方式,将服务器公钥放到数字证书中,来解决窃听风险。 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。 HTTPS 采用摘要算法来确保数据的完整性,解决了数据被篡改的风险。 ?HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,如图:
HTTPS是在HTTP和TCP之间加了一层SSL/TLS协议,所以建立连接流程如下: 1.首先建立TCP连接:三次握手。 2.然后建立SSL/TLS加密:
前两步也就是SSL/TLS的建立过程,也就是握手阶段。 3.发送HTTP请求。
?状态码分类: 1xx:表示目前是协议的中间状态,还需要后续请求 2xx:表示请求成功 3xx:表示重定向状态,需要重新请求 4xx:表示请求报文错误 5xx:服务端错误 常用状态码 101? 切换请求协议,从HTTP切换到WebSocket 200? 请求成功,有响应体 301? 永久重定向:会缓存 302? 临时重定向:不会缓存 304? 协商缓存命中 403? 服务器禁止访问 404? 资源未找到 400? 请求错误 500? 服务器端错误 503? 服务器端繁忙 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/28 5:56:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |