前端计算网络常识

OSI七层模型
OSI ( Open System Interconnection )是理想化的模型,将网络进行分层,其目的是将
复杂的流程简单化,从而实现分而治之。(专人干专事)
一.网络分层的含义?
下层是为了上层提供服务的。
应用层:用户最终使用的接口
表示层:数据的表示、安全、压缩
会话层:建立和管理会话的
传输层:(主要提供安全及数据完整性保障)网络层不可靠,保证可靠的传输
网络层:(主要关心的是寻址) ,进行逻辑寻址,定位到对方,找到最短的路
数据链路层: (主要关心两个设备之间传递数据),建立逻辑链接,将数据组合成数
据帧进行传递 (差错校测,可靠传输)
物理层:(核心是传输数据比特流),不关心具体的传输媒体(双绞线、光纤、同轴
电缆、无线…)

举例:写给女朋友信的过程
1.应用层:你心里有很多想对女朋友说的话。这个就是应用层中的数据
2.表示层:将你想说的话进行整合,有调理的表示出来
3.会话层:我希望我的信只能我的女朋看到别人不行 (非女朋友偷看者死)
以上这三个就是我们完整信的内容。
4.传输层:我自己不好意思亲手交给她,找个快递来。告诉他我家504她家301,你发
吧~
5.网络层:快递说这不是开玩笑吗?你得给我个能找到他的地址 xxx 省 xxx 市 xxx 街
道 xxx 小区。还得添上你的地址, 原地址和目标地址。
6.数据链路层:信件到了快递总部,会进行分类增加标识,快递需要中转,先找到第
一个中转站发过去,之后根据目的地地址依次进行中转发送。
7.物理层:通过飞机、卡车将信邮寄到过去。
信件邮寄到目的地后,邮局会分配到对应的小区,找到对应的门牌号,我的女朋友就会拿
到对应的信件了。

二.地址
通信是通过 ip 地址查找对应的 mac 来进行通信的。 IP地址 是可变的(类似我们收
件地址)MAC地址是不可变的。
1.IP地址
IPV4 网际协议版本4 ,地址由 32 位二进制数值组成 例如:192.168.1.1 ,大概42亿个
IPV6 网际协议版本6 ,地址由 8个16位块的128位组成。 例如:
2408:8207:788b:2370:9530:b5e7:9c53:ff87 大约 3.4*10^38
2.MAC地址
设备通信都是由内部的网卡设备来进行的,每个网卡都有自己的mac地址(原则上唯一)

三.物理设备
1.物理层
中继器:双绞线最大传输距离 100M ,中继器可以延长网络传输的距离,对衰减的信
号有放大在生的功能。
集线器:多口的中继器,目的是将网络上的所有设备连接在一起 , 不会过滤数据,也
不知道将收到的数据发给谁。(采用的方式就是广播给每个人)
可以实现局域网的通信,但是会有安全问题,还会造成不必要的流量浪费。 傻,你
就不能记住来过的人嘛?每次都发送?
2.数据链路层
交换机:交换机可以识别已经连接设备的物理地址(MAC地址)。可以将数据传递到
相应的端口上
3.网络层路由器:检测数据的 ip 地址是否属于自己网络,如果不是会发送到另一个网络。没
有 wan 口的路由器可以看成交换机。 路由器一般充当网关,路由器会将本地 IP 地址
进行NAT
网关:两个子网之间不可以直接通信,需要通过网关进行转发

四.TCP/IP参考模型
Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议。 TCP/IP
协议实际上是一系列网络通信协议的统称,最核心的两个协议是 TCP 和 IP
1.什么是协议?
协议就是约定和规范。
数据链路层、物理层 :物理设备 (在五层模型中能称之为协议的都在三层以上)
网络层:
IP 协议:寻址通过路由器查找,将消息发送给对方路由器,通过 ARP 协议,发送
自己的mac地址
ARP 协议:Address Resolution Protocol 从 ip 地址获取 mac地址 (局域网)
传输层
TCP 、 UDP
应用层:
HTTP 、 DNS 、 FTP 、 TFTP 、 SMTP 、 DHCP
2.ARP协议
根据目的 IP 地址,解析目的 mac 地址ARP 缓存表
交换机MAC地址表
Internet 地址
物理地址
端口号
物理地址
192.168.1.2
B
1
A
2
B
3
C
有了源mac地址和目标mac地址,就可以传输数据包了
3.DHCP协议
通过 DHCP 自动获取网络配置信息 (动态主机配置协议Dynamic Host Confifiguration
Protocol)我们无需自己手动配置 IP
4.DNS协议
DNS 是Domain Name System的缩写, DNS 服务器进行域名和与之对应的 IP 地址转换的
服务器
顶级域名 .com 、
二级域名 .com.cn 、 三级域名 www.zf.com.cn , 有多少个点就是几级域名
访问过程:我们访问 zf.com.cn
操作系统里会对 DNS 解析结果做缓存,如果缓存中有直接返回 IP 地址
查找 C:\WINDOWS\system32\drivers\etc\hosts 如果有直接返回 IP 地址
通过 DNS 服务器查找离自己最近的根服务器,通过根服务器找到 .cn 服务器,将 ip
返回给 DNS 服务器
DNS 服务器会继续像此 ip 发送请求,去查找对应 .cn 下 .com 对应的 ip …获取最终的 ip 地址。缓存到 DNS 服务器上
DNS 服务器会对 ip 及 域名 进行缓存
五.TCP和UDP
两个协议都在传输层,我们经常说 TCP 是面向连接的而 UDP 是面向无连接的。
UDP 发出请求后,不考虑对方是否能接收到、内容是否完整、顺序是否正确。 收到
数据后也不会进行通知。
首部结构简单,在数据传输时能实现最小的开销
1.TCP
tcp 传输控制协议 Transimision Control Protocal 可靠、面向连接的协议,传输效率
低 (在不可靠的 IP 层上建立可靠的传输层)。 TCP提供全双工服务,即数据可在同一时间
双向传播。
1)TCP数据格式源端口号、目标端口号,指代的是发送方随机端口,目标端对应的端口
序列号:32位序列号是用于对数据包进行标记,方便重组
确认序列号:期望发送方下一个发送的数据的编号
4位首部长度:单位是字节,4位最大能表示15,所以头部长度最大为60
URG :紧急新号、 ACK :确认信号、 PSH :应该从TCP缓冲区读走数据、 RST :断开重新
连接、 SYN :建立连接、 FIN :表示要断开
窗口大小: 当网络通畅时将这个窗口值变大加快传输速度,当网络不稳定时减少这个
值。在TCP中起到流量控制作用。
校验和:用来做差错控制,看传输的报文段是否损坏
紧急指针:用来发送紧急数据使用
TCP 对数据进行分段打包传输,对每个数据包编号控制顺序。
2.TCP抓包

client.js
const net = require('net');
const socket = new net.Socket();
// 连接8080端口
socket.connect(8080, 'localhost');
// 连接成功后给服务端发送消息
socket.on('connect', function(data) {socket.write('hello'); // 浏览器和客户端说 hellosocket.end()
});
socket.on('data', function(data) {console.log(data.toString())
})
socket.on('error', function(error) {console.log(error);
});server.js

1)建立连接
1)我能主动给你打电话吗? 2)当然可以啊!那我也能给你打电话吗?
3)可以的呢,建立连接成功!
4)数据传输

const net = require('net');
const server = net.createServer(function(socket){socket.on('data',function (data) { // 客户端和服务端socket.write('hi'); // 服务端和客户端说 hi});socket.on('end',function () {console.log('客户端关闭')})
})
server.on('error',function(err){console.log(err);
})
server.listen(8080); // 监听8080端口四次挥手

1)我们分手吧 2)收到分手的信息
3)好吧,分就分吧 4)行,那就到这里了
为了防止最终的 ACK 丢失,发送 ACK 后需要等待一段时间,因为如果丢包服务端需
要重新发送 FIN 包,如果客户端已经 closed ,那么服务端会将结果解析成错误。
从而在高并发非长连接的场景下会有大量端口被占用。
3.UDPudp 用户数据报协议 User Datagram Protoco ,是一个无连接、不保证可靠性的传输层
协议。你让我发什么就发什么!
使用场景: DHCP 协议、 DNS 协议、 QUIC 协议等 (处理速度快,可以丢包的情况)
4.UDP抓包

server.js
client.js
udp.dstport ==41234
var dgram = require("dgram");
var socket = dgram.createSocket("udp4");
socket.on("message", function (msg, rinfo) {console.log(msg.toString());console.log(rinfo);socket.send(msg, 0, msg.length, rinfo.port, rinfo.address);
});
socket.bind(41234, "localhost");
var dgram = require('dgram');
var socket = dgram.createSocket('udp4');
socket.on('message',function(msg,rinfo){console.log(msg.toString());console.log(rinfo);
});
socket.send(Buffer.from('helloworld'),0,5,41234,'localhost',function(
err,bytes){console.log('发送了个%d字节',bytes);
});
socket.on('error',function(err){console.error(err);
});

5.滑动窗口
滑动窗口:TCP是全双工的,所以发送端有发送缓存区;接收端有接收缓存区,要发
送的数据都放 到发送者的缓存区,发送窗口(要被发送的数据)就是要发送缓存中的
哪一部分
核心是流量控制:在建立连接时,接收端会告诉发送端自己的窗口大小( rwnd ),每
次接收端收到数据后都会再次确认( rwnd )大小,如果值为0,停止发送数据。
(并发送窗口探测包,持续监测窗口大小)
6.粘包
Nagle 算法的基本定义是任意时刻,最多只能有一个未被确认的小段 (TCP内部控制)
Cork算法 当达到 MSS (Maximum Segment Size )值时统一进行发送(此值就是帧的大小 -
ip 头 - tcp 头 = 1460个字节)理论值
7.TCP拥塞处理 (队头阻塞,慢启动, 短连接)
举例:假设接收方窗口大小是无限的,接收到数据后就能发送 ACK 包,那么传输数
据主要是依赖于网络带宽,带宽的大小是有限的。
TCP 维护一个拥塞窗口 cwnd (congestion window)变量 ,在传输过程正没有拥塞
就将此值增大。如果出现拥塞(超时重传 RTO(Retransmission TimeOut) )就将
窗口值减少。
cwnd < ssthresh 使用慢开始算法
cwnd > ssthresh 使用拥塞避免算法
ROT时更新 ssthresh 值为当前窗口的一半,更新 cwnd = 1
传输轮次: RTT (Round-trip time) ,从发送到确认信号的时间
cwnd 控制发送窗口的大小。快重传,可能在发送的过程中出现丢包情况。此时不要立即回退到慢开始阶段,而是
对已经收到的报文重复确认,如果确认次数达到3此,则立即进行重传 快恢复算法
(减少超时重传机制的出现),降低重置 cwnd 的频率。

HTTP
一.HTTP发展历程
1990年 HTTP/0.9 为了便于服务器和客户端处理,采用了纯文本格式,只运行使用GET请
求。在响应请求之后会立即关闭连接。
1996年 HTTP/1.0 增强了 0.9 版本,引入了 HTTP Header(头部)的概念,传输的数据
不再仅限于文本,可以解析图片音乐等,增加了响应状态码和 POST , HEAD 等请求方法。
1999年广泛使用 HTTP/1.1 ,正式标准,允许持久连接,允许响应数据分块,增加了缓存
管理和控制,增加了 PUT、DELETE 等新的方法。 (问题 多个请求并发 管线化 http 队头
阻塞的问题)
2015年 HTTP/2 ,使用 HPACK 算法压缩头部,减少数据传输量。允许服务器主动向客户端
推送数据,二进制协议可发起多个请求,使用时需要对请求加密通信。
2018年 HTTP/3 基于 UDP 的 QUIC 协议。
二.HTTP/1.1
HTTP/1.1 是可靠传输协议,基于 TCP/IP 协议;
采用应答模式,客户端主动发起请求,服务器被动回复请求;
HTTP是无状态的每个请求都是互相独立
HTTP 协议的请求报文和响应报文的结构基本相同,由三部分组成。我始终认为,学好HTTP就是掌握HTTP中Header的使用
1.内容协商
客户端和服务端进行协商,返回对应的结果
const http = require(‘http’)
const server = http.createServer((req,res)=>{
res.end(‘hello’)
})
server.listen(3000)客户端
Header
服务端
Header
Accept
Content-Type
我发送给你的数据是什么类型
Accept
encoding
Content
Encoding
我发送给你的数据是用什么格式压缩 ( gzip 、
deflate 、 br )
Accept
language
根据客户端支持的语言返回 (多语言)
Range
Content
Range
范围请求数据

2.长连接
TCP 的连接和关闭非常耗时间,所以我们可以复用 TCP 创建的连接。HTTP/1.1响应中默
认会增加 Connection:keep-alive

3.管线化
如果值创建一条 TCP 连接来进行数据的收发,就会变成 “串行” 模式,如果某个请求过慢
就会发生阻塞问题。 Head-of-line blocking, HTTP/1.1中采用了管线化的方式,对一个
域名同时发起多个长连接实现并发。 默认 chrome 为6个。
同一个域名有限制,那么我就多开几个域名 域名分片

4.Cookie
Set-Cookie/Cookie用户第一次访问服务器的时候,服务器会写入身份标识,下次再请求
的时候会携带 cookie 。通过Cookie可以实现有状态的会话

5.HTTP缓存
强缓存 服务器会将数据和缓存规则一并返回,缓存规则信息包含在响应header中。
Cache-Control强制缓存存在有效期,缓存期内不会向服务端发送请求。超过时间后需要去服务端验
证是否是最新版本。

对比缓存
if-Modified-Since/if-None-Match (最后修改时间)、 Last-modified/Etag (指纹)
最后修改时间是秒级的,一秒内修改多次无法监控
最后修改时间修改了,但是内容没有发生变化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/44263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【排序 - 归并排序】

归并排序&#xff08;Merge Sort&#xff09;是一种高效的排序算法&#xff0c;基于分治&#xff08;Divide and Conquer&#xff09;策略。它将待排序数组分成两个较小的子数组&#xff0c;分别对它们进行排序&#xff0c;然后将排好序的子数组合并成一个整体有序的数组。归并…

qt connect 链接其他类的函数

在 Qt 中&#xff0c;connect 函数用于建立信号与槽的连接&#xff0c;使得当某个信号被触发时&#xff0c;与之连接的槽函数将被调用。如果你想连接其他类的函数&#xff0c;你需要确保满足以下条件&#xff1a; 信号与槽的匹配&#xff1a;信号和槽的参数类型和数量必须匹配…

愚人杯的RE题

easy_pyc pyc反编译成py文件 # uncompyle6 version 3.9.1 # Python bytecode version base 2.7 (62211) # Decompiled from: Python 3.11.8 (tags/v3.11.8:db85d51, Feb 6 2024, 22:03:32) [MSC v.1937 64 bit (AMD64)] # Embedded file name: enpyc.py # Compiled at: 2023…

html5——列表、表格

目录 列表 无序列表 有序列表 自定义列表 表格 基本结构 示例 表格的跨列 表格的跨行 列表 无序列表 <ul>【声明无序列表】 <li>河间驴肉火烧</li>【声明列表项】 <li>唐山棋子烧饼</li> <li>邯郸豆沫</li> <l…

opencv实现目标检测功能----20240704

早在 2017 年 8 月,OpenCV 3.3 正式发布,带来了高度改进的“深度神经网络”(dnn)模块。 该模块支持多种深度学习框架,包括 Caffe、TensorFlow 和 Torch/PyTorch。这次我们使用Opencv深度学习的功能实现目标检测的功能,模型选用MobileNetSSD_deploy.caffemodel。 模型加载…

Aop实现后端数据重复提交

一、思路 用户每次发送请求都有一个标记&#xff0c;这个标记设置成5s有效存到redis中。每次请求检查该标记是否有效&#xff0c;还有效就说明请求太频繁了。无效就说明请求之间时间间隔够了&#xff0c;可以继续请求了。 gitee地址&#xff1a;添加链接描述 二、实现 自定义…

机器学习与深度学习:区别与联系(含工作站硬件推荐)

一、机器学习与深度学习区别 机器学习&#xff08;ML&#xff1a;Machine Learning&#xff09;与深度学习&#xff08;DL&#xff1a;Deep Learning&#xff09;是人工智能&#xff08;AI&#xff09;领域内两个重要但不同的技术。它们在定义、数据依赖性以及硬件依赖性等方面…

空中交通新动能!2024深圳eVTOL展动力电池展区核心内容抢先看!

空中交通新动能&#xff01;2024深圳eVTOL展动力电池展区核心内容抢先看&#xff01; 关键词&#xff1a;2024深圳eVTOL展 动力电池 高能量密度电池 高性能电池材料 作为2024深圳eVTOL展重要组成部分&#xff0c;2024深圳eVTOL动力电池展将于9月23-25日在深圳坪山燕子湖国际会…

二刷算法训练营Day57 | 动态规划(17/17)

目录 详细布置&#xff1a; 1. 516. 最长回文子序列 2. 动态规划总结 详细布置&#xff1a; 1. 516. 最长回文子序列 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#x…

基于JAVA+SpringBoot+Vue的社区普法平台

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 社区普法平台旨在为社…

js函数表达式,一个重要的概念

最外面的括号在JavaScript中的IIFE&#xff08;Immediately Invoked Function Expression&#xff0c;立即调用函数表达式&#xff09;中起着重要的作用。让我们详细解释一下。 IIFE&#xff08;立即调用函数表达式&#xff09; IIFE 是一种常见的JavaScript设计模式&#xf…

Sqlmap中文使用手册 - Options模块参数使用

目录 1. Options模块的帮助文档2. 各个参数的介绍2.1 -h --help2.2 -hh2.3 --version2.4 -v VERBOSE 1. Options模块的帮助文档 Options:-h, --help Show basic help message and exit-hh Show advanced help message and exit--version …

Python程序封装成Windows服务实践

1. WinSW 工具概述 WinSW&#xff08;Windows Service Wrapper&#xff09;是一个轻量级的、开源的工具&#xff0c;用于将任何可执行文件&#xff08;包括exe、jar、脚本文件等&#xff09;包装成一个Windows服务。这意味着&#xff0c;原本设计为命令行应用或需要手动启动的…

threejs

1.场景清空&#xff0c;释放内容 // 假设你已经有一个Three.js的场景对象scene// 函数&#xff1a;清空场景中的所有对象 function clearScene(scene) {while(scene.children.length > 0){const object scene.children[0];if(object.isMesh) {// 如果有几何体和材质&#…

内存条必备知识

什么是内存条&#xff1f; 内存条&#xff1a;又称为随机存取存储器&#xff08;RAM&#xff09;&#xff0c;也叫主存&#xff0c;是与CPU直接交换数据的内部存储器。它可以随时读写&#xff08;刷新时除外&#xff09;&#xff0c;而且速度很快&#xff0c;通常用来暂时存储…

了解劳动准备差距:人力资源专业人员的战略

劳动准备差距是一个紧迫的问题&#xff0c;在全球人事部门回应&#xff0c;谈论未开发的潜力和错过的机会。想象一下&#xff0c;人才和需求之间的悬崖之间有一座桥&#xff0c;这促使雇主思考&#xff1a;我们是否为员工提供了足够的设备来应对未来的考验&#xff1f; 这种不…

安全开发基础篇--数据类型

安全开发基础篇–数据类型 注释&#xff1a;还是要特别说明一下&#xff0c;想成为专业开发者不要看本文&#xff0c;本文是自己从业安全以来的一些经验总结&#xff0c;所有知识点也只限于网络安全这点事儿&#xff0c;再多搞不明白了。 开发语言 笼统的按照是否编译成机器…

碳化硅陶瓷膜的基本性能

碳化硅陶瓷膜作为一种由碳化硅(SiC)材料制成的高温陶瓷膜&#xff0c;以其独特的性能在多个领域得到了广泛的应用。以下是碳化硅陶瓷膜的基本性能&#xff0c;详细阐述如下&#xff1a; 一、电绝缘性 碳化硅陶瓷膜通常具有较好的电绝缘性&#xff0c;这一特性在高温环境中尤为重…

牛刀小试--下三角对称矩阵压缩存储

解析博客: 矩阵存储和特殊矩阵的压缩存储_n阶对称矩阵压缩-CSDN博客 函数功能: //为N阶下三角矩阵初始化成的一维数组分配空间 void Init_triangular_matrix(int *&matrix); //返回二维下三角矩阵的值(压缩存取) int get_Value_triangular_matrix(int matrix[],int x,int …

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.07.01-2024.07.05

文章目录&#xff5e; 1.LLM Internal States Reveal Hallucination Risk Faced With a Query2.Fine-Tuning with Divergent Chains of Thought Boosts Reasoning Through Self-Correction in Language Models3.Investigating Decoder-only Large Language Models for Speech-t…