计算机网络(涵盖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的常用知识点给讲完了,现在我们开始项目部分,项目是一个订单管理系统,我们同时也会在项目之中也会讲一些前面没有用到的知识点。 项目大概流程如下: 核心的功能模块: 认证模块,用…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
