计算机网络八股总结
这里写目录标题
- 网络模型划分(五层和七层)及每一层的功能
- 五层网络模型
- 七层网络模型(OSI模型)
- ==三次握手和四次挥手具体过程及原因==
- 三次握手
- 四次挥手
- TCP/IP协议组成
- ==UDP协议与TCP/IP协议的区别==
- Http协议相关知识
- 网络地址,子网掩码等相关计算
网络模型划分(五层和七层)及每一层的功能
五层网络模型
应用层:负责处理网络应用程序,如电子邮件、文件传输和网页浏览。主要协议包括HTTP、FTP、SMTP等。
传输层:提供端到端的通信服务,确保数据的可靠传输。主要协议有TCP(传输控制协议)和UDP(用户数据报协议)。
网络层:负责数据包的路由和转发,使数据包能够通过网络从源主机传输到目的主机。主要协议是IP(因特网协议)。
链路层(数据链路层):在物理层提供的服务基础上,建立数据链路连接,传输以“帧”为单位的数据包,并采用差错控制与流量控制方法。
物理层:负责比特流的物理传输,即处理数据传输的物理介质,如网线、网卡等。

七层网络模型(OSI模型)
物理层:与五层模型中的物理层相同,负责比特流的物理传输。
数据链路层:与五层模型中的链路层相同,负责建立数据链路连接,传输帧数据。
网络层:与五层模型中的网络层相同,负责数据包的路由和转发。
传输层:与五层模型中的传输层相同,提供端到端的通信服务。
会话层:负责在两个通信实体之间建立、管理和终止会话。
表示层:处理数据表示和编码,确保不同系统间的数据能够正确交换。
应用层:提供网络应用服务,如文件传输、电子邮件等。
三次握手和四次挥手具体过程及原因
三次握手
第一次握手:客户端向服务器发送一个SYN包,并附带一个随机生成的序列号,请求建立连接。
第二次握手:服务器收到SYN包后,返回一个SYN-ACK包作为应答,同时包含一个确认序列号(对客户端SYN包的序列号加1)和一个服务器自己的随机序列号。
第三次握手:客户端收到SYN-ACK包后,返回一个ACK包,该包的序列号是对服务器SYN-ACK包中的确认序列号加1。至此,三次握手完成,连接建立。
为什么要三次握手?
在只有两次"握手"的情形下,假设Client想跟Server建立连接,但是却因为中途连接请求的数据报丢失了,故Client端不得不重新发送一遍;这个时候Server端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候Client端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下Server端将先后收到2次请求,并持续等待两个Client请求向他发送数据…问题就在这里,Cient端实际上只有一次请求,而Server端却有2个响应,极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,"三次握手"很有必要!
四次挥手
第一次挥手:客户端发送一个FIN包给服务器,表示客户端不再发送数据。
第二次握手:服务器收到FIN包后,发送一个ACK包给客户端,表示已收到客户端的关闭请求。
第三次握手:服务器完成数据传输后,发送一个FIN包给客户端,表示服务器也不再发送数据。
第四次握手:客户端收到服务器的FIN包后,发送一个ACK包给服务器,表示已收到服务器的关闭请求。至此,四次挥手完成,连接关闭。
为什么要四次挥手?
试想一下,假如现在你是客户端你想断开跟Server的所有连接该怎么做?第一步,你自己先停止向Server端发送数据,并等待Server的回复。但事情还没有完,虽然你自身不往Server发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!
使用TCP的协议:FTP(文件传输协议)、Telnet(远程登录协议)、SMTP(简单邮件传输协议)、POP3(和SMTP相对,用于接收邮件)、HTTP协议等。

注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:“acknowledge"确认标志”;FIN:"Finally"结束标志。
TCP/IP协议组成
TCP/IP协议(传输控制协议/因特网协议)并不直接对应OSI模型的某一层或几层,而是更接近于一个协议族的概念,它涵盖了从网络接口层到应用层的多个协议。不过,为了简化讨论,我们可以将TCP/IP协议族按照其功能划分成几个层次,这些层次与OSI模型有一定的对应关系,但并非严格一致。
TCP/IP协议族通常被划分为以下四个层次(也有说法将其划分为五层,但这里我们采用四层的划分方式):
网络接口层(对应OSI模型的物理层和数据链路层):
这一层负责数据在物理网络上的传输,包括数据的封装成帧、帧的同步、差错控制等。
具体的协议取决于物理网络类型,如以太网、令牌环网等。
网络层(对应OSI模型的网络层):
主要负责数据包的路由和转发,确保数据包能够从源主机传输到目的主机。
最核心的协议是IP(因特网协议),它定义了数据包的格式、寻址方式和路由机制。
其他协议还包括ICMP(因特网控制消息协议)、IGMP(因特网组管理协议)、ARP(地址解析协议)和RARP(逆地址解析协议)等。
传输层(对应OSI模型的传输层):
提供端到端的通信服务,确保数据的可靠传输或提供无连接的数据报服务。
主要协议有TCP(传输控制协议)和UDP(用户数据报协议)。
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议;UDP则是一种无连接的、不可靠的、基于数据报的传输层通信协议。
应用层(对应OSI模型的应用层、表示层和会话层):
负责处理网络应用程序,提供具体的网络服务。
常见的应用层协议包括HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)、POP3(邮局协议版本3)、IMAP(互联网邮件访问协议)、Telnet(远程终端协议)、SSH(安全外壳协议)、DNS(域名系统)等。
需要注意的是,TCP/IP协议族中的每一层都依赖于其下一层提供的服务,并为其上一层提供服务。同时,不同层之间的协议是相互独立的,每一层都处理自己的数据和服务,并通过接口与相邻层进行交互。这种分层的设计使得TCP/IP协议族具有良好的可扩展性和灵活性。
UDP协议与TCP/IP协议的区别
连接性:TCP/IP是面向连接的协议,而UDP是无连接的协议。
可靠性:TCP/IP提供可靠的传输服务,通过三次握手和四次挥手确保数据的完整性和顺序;而UDP不保证数据的可靠性,可能会出现丢包、乱序等问题。
应用场景:TCP/IP适用于对可靠性要求较高的场景,如文件传输、网页浏览等;而UDP适用于对实时性要求较高、对可靠性要求不高的场景,如视频直播、语音通话等。
Http协议相关知识
HTTP(超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它是基于TCP协议之上的应用层协议,由请求和响应组成,采用客户端-服务器模型。HTTP是无状态的,即每次请求都是独立的,服务器不会保留之前请求的信息。HTTP请求由请求行、请求头部和请求体组成,响应由状态行、响应头部和响应体组成。
HTTP 协议包括哪些请求?
GET:请求读取由URL所标志的信息。
POST:给服务器添加信息(如注释)。
PUT:在给定的URL下存储一个文档。
DELETE:删除给定的URL所标志的资源。
HTTP 中, POST 与 GET 的区别
1)Get是从服务器上获取数据,Post是向服务器传送数据。
2)Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。
3)Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。
4)根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
I. 所谓 安全的 意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
II. 幂等 的意味着对同一URL的多个请求应该返回同样的结果。
网络地址,子网掩码等相关计算
随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以其能提供的主机地址也越来越稀缺,目前除了使用NAT在企业内部利用保留地址自行分配以外,通常都对一个高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用。
这里主要是为了在网络分段情况下有效地利用IP地址,通过对主机号的高位部分取作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某类地址的更多子网。但创建更多的子网时,在每个子网上的可用主机地址数目会比原先减少。
什么是子网掩码?
子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。
在计算子网掩码时,我们要注意IP地址中的保留地址,即" 0"地址和广播地址,它们是指主机地址或网络地址全为" 0"或" 1"时的IP地址,它们代表着本网络地址和广播地址,一般是不能被计算在内的。
子网掩码的计算:
对于无须再划分成子网的IP地址来说,其子网掩码非常简单,即按照其定义即可写出:如某B类IP地址为 10.12.3.0,无须再分割子网,则该IP地址的子网掩码255.255.0.0。如果它是一个C类地址,则其子网掩码为 255.255.255.0。其它类推,不再详述。下面我们关键要介绍的是一个IP地址,还需要将其高位主机位再作为划分出的子网网络号,剩下的是每个子网的主机号,这时该如何进行每个子网的掩码计算。
下面总结一下有关子网掩码和网络划分常见的面试考题:
利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。
- 将子网数目转化为二进制来表示;
如欲将B类IP地址168.195.0.0划分成27个子网:27=11011;
- 取得该二进制的位数,为N;
该二进制为五位数,N = 5
- 取得该IP地址的类子网掩码,将其主机地址部分的的前N位置1即得出该IP地址划分子网的子网掩码。
将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,得到 255.255.248.0
利用主机数来计算
如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:
- 将主机数目转化为二进制来表示;
700=1010111100
- 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为N,这里肯定 N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位;
该二进制为十位数,N=10;
- 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255,然后再从后向前将后 10位置0,即为:11111111.11111111.11111100.00000000,即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址 168.195.0.0的子网掩码。
还有一种题型,要你根据每个网络的主机数量进行子网地址的规划和计算子网掩码。这也可按上述原则进行计算。
比如一个子网有10台主机,那么对于这个子网需要的IP地址是:
10+1+1+1=13
注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址。
因为13小于16(16等于2的4次方),所以主机位为4位。而256-16=240,所以该子网掩码为255.255.255.240。
如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为14+1+1+1=17,17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。
相关文章:
计算机网络八股总结
这里写目录标题 网络模型划分(五层和七层)及每一层的功能五层网络模型七层网络模型(OSI模型) 三次握手和四次挥手具体过程及原因三次握手四次挥手 TCP/IP协议组成UDP协议与TCP/IP协议的区别Http协议相关知识网络地址,子…...
AMD CMD UMD CommonJs ESM 的历史和区别
这几个东西都是用于定义模块规范的。有些资料会提及到这些概念,不理清楚非常容易困惑。 ESM(ES Module) 这个实际上我们是最熟悉的,就是ES6的模块功能。出的最晚,因为是官方出品,所以大势所趋,…...
人工智能数据基础之微积分入门-学习篇
目录 导数概念常见导数和激活导数python代码绘制激活函数微分概念和法则、积分概念微积分切线切面代码生成案例链式求导法则反向传播算法(重要) 一、概念 二、常见导数及激活导数 常见激活函数及其导数公式: 在神经网络中,激活函数用于引入非线性因素&…...
【PSINS】ZUPT代码解析(PSINS_SINS_ZUPT)|MATLAB
这篇文章写关于PSINS_SINS_ZUPT的相关解析。【值得注意的是】:例程里面给的这个m文件的代码,并没有使用ZUPT的相关技术,只是一个速度观测的EKF 简述程序作用 主要作用是进行基于零速更新(ZUPT)的惯性导航系统(INS)仿真和滤波 什么是ZUPT ZUPT是Zero Velocity Update(…...
多态(上)【C++】
文章目录 多态的概念多态的实现多态产生的条件什么是虚函数?虚函数的重写和协变重写协变 析构函数的重写为什么有必要要让析构函数构成重写? 多态的概念 C中的多态是面向对象编程(OOP)的一个核心特性,指的是同一个接口…...
如何驱动一枚30年前的音源芯片,YMF288驱动手记 Part2
一些问题 在上一篇里面虽然策划了想要驱动YMF288所需要做的事情以及目标。但是,在板子打出来后,我在进一步的研究中,发现我犯了个错误,那就是YMF288并不是使用现在很多轻量化的嵌入式,比如ESP32常用的I2S协议的&#x…...
yarn webpack脚手架 react+ts搭建项目
安装 Yarn 首先,确保你已经安装了 Node.js 和 Yarn。如果还没有安装 Yarn,可以通过以下命令安装: npm install -g yarn创建项目 使用 create-react-app 脚手架创建一个带有 TypeScript 的项目,node更新到最新版,并指定…...
防蓝光护眼灯有用吗?五款防蓝光效果好的护眼台灯推荐
现在孩子的很多兴趣班和课后辅导班都是在线上举行,通常对着手机电脑长时间。电子产品有大量蓝光和辐射,会伤害到孩子的眼睛。但为了学习,也是没办法。护眼台灯的出现可以让孩子们的眼睛得到保护,防止蓝光对眼睛的伤害。防蓝光护眼…...
Mac使用Elasticsearch
下载 Past Releases of Elastic Stack Software | Elastic 解压tar -xzvf elasticsearch-8.15.1-darwin-x86_64.tar.gz 修改配置文件config/elasticsearch.yml xpack.security.enabled: false xpack.security.http.ssl: enabled: false 切换目录 cd elasticsearch-8.15.1/…...
DevOps -CI/CD 与自动化部署
DevOps - CI/CD 与自动化部署详解 DevOps 是一种结合开发(Development)与运维(Operations)的方法论,旨在通过工具和文化变革,促进软件开发和运维之间的协作,提升软件交付的效率、质量和稳定性。…...
单体架构系统是不是已经彻底死亡?
单体架构系统并未“彻底死亡”,尽管在复杂和大规模的应用场景中,它可能不再是首选的架构模式。单体架构系统,也称为巨石系统(Monolithic),在软件发展过程中是最广泛的架构风格之一,出现时间最早…...
mathorcup发邮件:参赛必看邮件撰写技巧?
mathorcup发邮件的注意事项?如何使用mathorcup发信? 无论是提交参赛作品、咨询比赛规则,还是与组委会沟通,一封清晰、专业的邮件都能为你赢得更多机会。AokSend将为你详细介绍mathorcup发邮件的撰写技巧,帮助你在比赛…...
ESP01烧入AT出厂固件
ESP01是一种常见的WIFI模块,其核心是esp8266,常用于给主控拓展WIFI功能,因其体积较小、集成度高、造价便宜,常受到消费者喜爱,ESP01常用的开发方式有两种,一种是利用基于Arduino框架作为独立设备开发&#…...
Qt 开发:深入详解 Qt 的信号与槽机制——彻底搞懂QT信号与槽
一、概念 Qt 的信号与槽(Signals and Slots)机制是一个用于对象间通信的核心特性。这个机制使得对象能以松散耦合的方式进行通信,从而提升了代码的模块化和可维护性。 信号(Signal):对象状态的变化或事件…...
民间故事推广系统小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,民族文化管理,节日类型管理,传统节日管理,故事类型管理,民间故事管理,系统管理 微信端账号功能包括:系统首…...
关于武汉芯景科技有限公司的IIC缓冲器芯片XJ4307开发指南(兼容LTC4307)
一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.总线超时,自动断开连接 当 SDAOUT 或 SCLOUT 为低电平时,将启动内部定时器。定时器仅在相应输入变为高电平时重置。如果在 30ms (典型值) 内没有变为高…...
C++ 异常
这里写目录标题 1.C语言传统的处理错误的方式2.C异常概念3.异常的用法3.1 异常的抛出和捕获3.2 异常的重新抛出3.3异常安全3.4 异常规范 4.自定义异常体系5.标准库异常体系6.异常的优缺点 1.C语言传统的处理错误的方式 传统的错误处理机制: 1. 终止程序,…...
ST官方 VSCode 插件安装及配置工程参考
写在前头 VSCode的用法和插件是月初参加ST官方北京站举办的线下培训中,厂家AE工程师给我们讲的,不同于已经很多人用的(并且一直在吵的)keil assistant什么的,用的是CMake编译,抛弃了原有的keil,…...
使用Pandas读取和写入数据库的Python函数实现
使用Pandas读取和写入数据库的Python函数实现 Pandas是一个强大的数据处理和分析库,广泛应用于数据科学和机器学习领域。结合数据库操作,Pandas可以极大地简化数据的读取和写入过程。本文将详细介绍如何使用Pandas实现读取和写入数据库的函数,涵盖数据库连接、数据读取、数…...
Redis——常用数据类型hash
目录 hash常用命令hsethgethdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhdecrby 哈希的编码方式哈希的应用 hash 常用命令 hset HSET key field value [field value ...]//时间复杂度O(1) //返回值:设置成功的键值对的个数hget HGET key field//hdel HDEL key…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
FTP(File Transfer Protocol)本身是一个基于 TCP 的协议,理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况,主要原因包括: ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
