计算机网络(涵盖OSI,TCP/IP,交换机,路由器,局域网)
一、网络通信基础
(一)网络通信的概念
网络通信是指终端设备之间通过计算机网络进行的信息传递与交流。它类似于现实生活中的物品传递过程:数据(物品)被封装成报文(包裹),通过网络设备(集散中心)在不同的终端设备(收发点)之间传输。
(二)常见术语
-
数据载荷:最终需要传递的信息。
-
报文:网络中交换与传输的数据单元。
-
头部和尾部:在数据载荷前后添加的信息段,用于标识和控制数据传输。
-
封装与解封装:封装是将数据载荷添加头部和尾部形成报文的过程,而解封装则是获取数据载荷的过程。
-
网关与路由器:网关提供协议转换和路由选择功能,路由器则根据报文的目的地址选择最优路径进行转发。
二、网络设备与功能
(一)交换机
交换机是距离终端用户最近的网络设备,主要用于终端用户的网络接入和数据帧的交换。它工作在数据链路层,能够有效地隔离广播域,减少网络中的广播流量。
(二)路由器
路由器是网络层设备,负责在不同网络之间转发数据报文。它通过维护路由表来选择最佳路径,实现不同网络之间的通信。路由器还可以隔离广播域,支持广域网接入和网络地址转换(NAT)。
(三)防火墙
防火墙是一种网络安全设备,用于控制两个网络之间的安全通信。它通过监测和限制数据流,保护网络内部的信息安全。防火墙的主要功能包括:
-
隔离不同安全级别的网络。
-
实现访问控制和用户身份认证。
-
提供数据加密和虚拟专用网(VPN)功能。
-
执行网络地址转换(NAT)。
(四)无线设备
无线设备包括无线控制器(AC)、胖AP(Fat Access Point)和瘦AP(Fit Access Point)。它们通过Wi-Fi信号实现有线终端和无线终端之间的通信,是现代网络中不可或缺的一部分。
三、网络类型与拓扑结构
(一)网络类型
根据地理覆盖范围,网络可以分为:
-
局域网(LAN):覆盖范围较小,通常在几千米以内,如公司办公网络或家庭网络。
-
城域网(MAN):覆盖范围为一个城市,如宽带城域网或教育城域网。
-
广域网(WAN):覆盖范围广泛,连接多个城市甚至国家,如Internet。
(二)网络拓扑结构
网络拓扑是指网络设备之间的连接方式。常见的拓扑结构包括:
-
星型拓扑:所有设备都连接到一个中心节点,易于管理和扩展。
-
总线型拓扑:所有设备共享一条通信线路,成本低但可靠性较差。
-
环型拓扑:设备按环形连接,数据沿一个方向传输。
-
树型拓扑:类似星型拓扑的扩展,适用于大规模网络。
-
网状拓扑:设备之间有多条连接路径,可靠性高但成本高。
四、OSI与TCP/IP协议模型
(一)OSI七层模型
-
物理层:负责比特流在物理介质上的传输。
-
数据链路层:负责组帧、物理编址和差错控制。
-
网络层:负责数据包的寻径和转发。
-
传输层:建立端到端的连接,确保数据可靠传输。
-
会话层:管理通信双方的会话。
-
表示层:负责数据格式的转换。
-
应用层:为应用程序提供接口,如HTTP、FTP等。
OSI七层模型中,应用层、表示层和会话层直接提供用户所需的功能,属于用户层;传输层和网络层负责数据的端到端传输和路由,属于操作系统层;链路层和物理层处理数据的物理传输和设备间的通信,属于驱动与硬件层。

(二)TCP/IP模型
TCP/IP模型是互联网的主流协议模型,它简化了OSI模型,分为四层:
-
链路层:对应OSI模型中的物理层和数据链路层。
-
网络层:主要协议为IP,负责数据包的转发。
-
传输层:主要协议为TCP和UDP,负责端到端的通信。
-
应用层:提供各种网络服务,如HTTP、FTP、SMTP等。
TCP连接的建立与关闭
三次握手
TCP连接建立过程中,客户端和服务器通过三次报文交换来确认彼此的接收和发送能力,使用Wireshark抓包分析可以清晰地观察到这个过程。
-
客户端发送SYN报文:客户端向服务器发送一个SYN报文,表示请求建立连接,Wireshark会显示一个带有SYN标志位的TCP报文,序列号为客户端的初始序列号(ISN)。
-
服务器响应SYN-ACK报文:服务器接收到SYN报文后,回复一个SYN-ACK报文,表示接受连接请求,同时确认客户端的SYN报文。Wireshark中,这个报文将包含SYN和ACK标志位,ACK确认号为客户端的序列号加1,服务器还会生成自己的初始序列号(ISN)。
-
客户端发送ACK报文:客户端收到服务器的SYN-ACK报文后,发送一个带ACK标志位的报文,确认服务器的响应并完成连接建立。Wireshark中会显示客户端发出的ACK报文,确认号为服务器的ISN加1,连接正式建立。
四次挥手
由于TCP半双工,半关闭的特性,双方都需要独立的确认自己已经完成了数据的发送且双方都不能立刻关闭接收通道,所以需要四次挥手
-
第一次挥手: 客户端发送FIN报文表示没有数据要发送,此时,客户端进入半关闭状态,仍然可以接收服务器发送的剩余数据;
-
第二次挥手: 服务器收到客户端的FIN报文后,发送ACK报文确认客户端的关闭请求,此时,服务器仍然可以继续向客户端发送数据;
-
第三次挥手:当服务器的发送数据也完成时,会发送FIN报文,此时服务器进入半关闭状态,仍然可以接收客户端的数据。
-
第四次挥手: 客户端收到服务器的FIN报文后,发送一个ACK报文确认服务器的关闭请求。此时,客户端的接收方向也关闭,连接被完全断开。
为什么不能合并为三次挥手?
如果服务器在收到客户端的FIN报文后没有数据要发送,理论上,可以通过合并第二次和第三次挥手为三次进行关闭。然而,在TCP协议的标准操作中,即使服务端没有数据要发送,也必须遵循四次挥手的过程。这是因为TCP协议设计上强调可靠性和连接状态的准确同步。
原因:确保关闭请求的独立性,即使服务端没有数据要发送,它仍然需要先确认客户端的关闭请求(发送ACK报文),然后才能开始自己的关闭过程(发送FIN报文)
在实际验证中,为了模拟“服务端有剩余数据”的场景,我通过在服务端代码中加入sleep(睡眠)操作,故意延迟发送数据。在服务端完成初步的响应后,继续发送剩余数据。与“无剩余数据”对比,都抓取到了4次挥手的报文。
相关文章:
计算机网络(涵盖OSI,TCP/IP,交换机,路由器,局域网)
一、网络通信基础 (一)网络通信的概念 网络通信是指终端设备之间通过计算机网络进行的信息传递与交流。它类似于现实生活中的物品传递过程:数据(物品)被封装成报文(包裹),通过网络…...
云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色
一、Ansible-playbook实战 1.Ansible-playbook安装软件 bash #编写yml [rootansible ansible]# cat wget.yml - hosts: backup tasks: - name: Install wget yum: name: wget state: present #检查playbook的语法 [rootansible ansible]…...
《运维工程师如何利用DeepSeek实现智能运维:分级实战指南》
目录 智能运维革命:DeepSeek带来的范式转变DeepSeek核心运维能力全景解析分级实战场景与解决方案 3.1 初级工程师:自动化运维入门3.2 中级工程师:复杂系统诊断与优化3.3 高级工程师:架构级智能运维典型项目案例深度剖析 4.1 金融系统全链路监控体系构建4.2 电商大促资源弹性…...
windows事件倒计时器与提醒组件
widgets 这是桌面组件前端开源组件,作者称:项目还在持续完善中,目前包含键盘演示、抖音热榜、喝水提醒、生日列表、待办事项、倒计时、灵动通知、打工进度等多个组件 有vue编程能力的可以自己做组件 百度网盘 夸克网盘 桌面组件 | Ca…...
Mac OS JAVA_HOME设置
个人博客地址:Mac OS JAVA_HOME设置 | 一张假钞的真实世界 在MacOS上使用DMG文件安装了Jdk8 之后,在默认路径下找不到JDK的HOME路径: $ which java /usr/bin/java $ ls -l /usr/bin/java lrwxr-xr-x 1 root wheel 74 12 6 2015 /usr/b…...
6.3 DBMS的功能和特征
文章目录 DBMS的6大功能DBMS的3个特征DBMS的分类 DBMS的6大功能 DBMS包含数据定义,数据库操作(检索、插入、修改、删除),数据库运行管理(保证多用户环境下正常运行),数据组织、存储、管理&…...
C# ConcurrentQueue 使用详解
总目录 前言 在C#多线程编程中,数据共享如同走钢丝——稍有不慎就会引发竞态条件(Race Condition)或死锁。传统Queue<T>在并发场景下需要手动加锁,而ConcurrentQueue<T>作为.NET Framework 4.0 引入的线程安全集合&a…...
python脚本文件设置进程优先级(在.py文件中实现)
在 Python 代码中可以直接通过 psutil 模块或 系统调用 来设置进程优先级,无需依赖终端命令。以下是具体方法和示例: 1. 使用 psutil 模块(跨平台推荐) psutil 是一个跨平台库,支持 Windows、Linux 和 macOS。通过其 …...
基于Django快递物流管理可视化分析系统(完整系统源码+数据库+详细开发文档+万字详细论文+答辩PPT+详细部署教程等资料)
文章目录 基于Django快递物流管理可视化分析系统(完整系统源码数据库详细开发文档万字详细论文答辩PPT详细部署教程等资料)一、项目概述二、项目说明三、研究意义四、系统设计技术架构 五、功能实现六、完整系统源码数据库详细开发文档万字详细论文答辩P…...
el-table树状表格,默认展开第一个节点的每一层
效果如图 <template><el-table:data"tableData"style"width: 100%":tree-props"{ children: children, hasChildren: hasChildren }":expand-row-keys"expandRowKeys"row-key"id"expand-change"handleExpan…...
【雅思博客05】New Guy in Town
Daily Life ‐ New Guy in Town 原文: A: Oh, I don’t know if you heard, but someone moved into that old house down the road. B: Yeah, I know. I met the owner of the house yesterday as he was moving in. His name is Armand. A: Really? What’s h…...
【Spring详解三】默认标签的解析
三、默认标签的解析 Spring的标签中有 默认标签和 自定义标签,两者的解析有着很大的不同,这次重点说默认标签的解析过程。 DefaultBeanDefinitionDocumentReader.class 默认标签的解析是在 DefaultBeanDefinitionDocumentReader.parseDefaultElement()函…...
Windows 图形显示驱动开发-IoMmu 模型
输入输出内存管理单元 (IOMMU) 是一个硬件组件,它将支持具有 DMA 功能的 I/O 总线连接到系统内存。 它将设备可见的虚拟地址映射到物理地址,使其在虚拟化中很有用。 在 WDDM 2.0 IoMmu 模型中,每个进程都有一个虚拟地址空间,即&a…...
简单易懂,解析Go语言中的Channel管道
Channel 管道 1 初始化 可用var声明nil管道;用make初始化管道; len(): 缓冲区中元素个数, cap(): 缓冲区大小 //变量声明 var a chan int //使用make初始化 b : make(chan int) //不带缓冲区 c : make(chan stri…...
STM32 USB 设备的描述信息作用
在使用 STM32 USB 功能时 usbd_desc.c 文件中定义了一段宏,以下解每段宏的用途。 #define USBD_VID 1155 #define USBD_LANGID_STRING 1033 #define USBD_MANUFACTURER_STRING "STMicroelectronics" #define US…...
Redis字符串常见命令(String)
字符串常见命令(String) Redis 中的字符串类型是一种非常基础且常用的数据类型,它不仅可以存储任何形式的字符串(包括文本数据),还可以对数字字符串进行自增、自减等操作。以下是对 Redis 字符串类型常见命…...
Educational Codeforces Round 174 (Rated for Div. 2)(ABCD)
A. Was there an Array? 翻译: 对于整数数组 ,我们将其相等特征定义为数组 ,其中,如果数组 a 的第 i 个元素等于其两个相邻元素,则 ;如果数组 a 的第 i 个元素不等于其至少一个相邻元素,则 …...
基于知识图谱的问答系统:后端Python+Flask,数据库Neo4j,前端Vue3(提供源码)
基于知识图谱的问答系统:后端PythonFlask,数据库Neo4j,前端Vue3 引言 随着人工智能技术的不断发展,知识图谱作为一种结构化的知识表示方式,逐渐成为问答系统的重要组成部分。本文将介绍如何构建一个基于知识图谱的问答…...
面试知识点2
文章目录 1. Linux 与 DockerLinux 基本指令VMware 安装 CentOSDocker 拉取镜像创建容器、部署 Spring Boot 项目 2. 关系型数据库 MySQL数据库语法多表关联查询数据库索引 3. 事务与死锁事务的隔离级别死锁的原因和避免方法 4. 排序算法与数据结构二分查找快速排序常见数据结构…...
Django项目之订单管理part1
一.前言 我们前面把django的常用知识点给讲完了,现在我们开始项目部分,项目是一个订单管理系统,我们同时也会在项目之中也会讲一些前面没有用到的知识点。 项目大概流程如下: 核心的功能模块: 认证模块,用…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
