网络通信--深入理解网络和TCP / IP协议

 计算机网络体系结构

 TCP/IP协议族

 TCP / IP 网络传输中的数据术语

网络通信中的地址和端口

window端查看IP地址MAC地址ipconfig -all

MAC层地址是在数据链路层的;IP工作在网络层的

MAC是48个字节,IP是32个字节

在子网(局域网)中通过MAC来寻址,上网时需要IP来寻址。

eg:在一个局域网环境(或wifi环境)中,当新加一台机器A到这个局域网来时,那么机器A需要想DMCH服务器申请一个IP地址,然后机器A拿到后,通过ARP协议将自己的MAC地址和IP地址向该局域网的其他机器进行公告。

 通信网路中的地址和端口号

端口工作在TCP层

为什么会有65535个端口?

        在TCP协议和UDP协议中有报文头里面有专门的字段(2个字节)来存放端口号,即2的16次方减一 等于65535个。(端口0表示所有的端口)

 

 问题:

         因为端口只有65535个,所以一台主机只能保持最多65535个TCP连接,对么?

        不对,对于服务端,服务端ip及端口不变,则源ip和源端口变化,源ip占4个字节(1个字节8个bit位)即2的32次方,源端口2个字节即2的16次方。两个相乘大致有200万亿个理论值

对于客户端,客户端不变,目标ip,目标端口变,而且客户端可以访问不同服务器的,当没有显示使用端口时,客户端的操作系统会默认复用端口去使用的。则在200万亿的基础上再乘以2的16次方。

 TCP特性

三次握手,四次握手

 TCP3次握手的漏洞之SYN洪泛攻击

一台新 PC 进行 Web 页面请求的历程

注意:因为本文档属于补充资料,课外阅读部分,所以并不会提供额外的
技术支持和答疑,敬请谅解。
场景和网络拓扑说明
场景:一名同学 X,入职成都一家新公司 NewCompany,年薪 50 万,公司福
利很好,给他派发了一台全新的笔记本电脑,现在 X 同学将他的电脑接入公司的
网络,准备打开百度的页面 www.baidu.com(IP 地址:
14.215.177.38),NewCompany 公司的 ISP 服务由四川电信提供,百度公司的 ISP
服务由北京电信提供

 

        假设其中笔记本电脑的 mac 地址是:11:22:33:44:55:66,网关路由器对 内的网关地址 192.168.5.1、对内的 mac 地址 22:33:44:55:66:11 和对外的 Internet 地址 120.68.34.89,因为 mac 地址主要用于局域网内的寻址,对外的 的 Mac 地址无关紧要。同时路由器还承担着 DHCP 服务器的职责。
        同时在我们下面的描述中,默认百度所有的数据内容都放在百度公司内部 的服务器之上,并没有使用 CDN 之类的机制。

交换机

 

工作在链路层,负责接收链路层入帧并将它们转发到链路层另一出口,交换 机自身对子网中的主机和路由器是透明的。交换机内部存在着交换机表,里面的 每一个表项都至少包含了①一个 MAC 地址;②通向该 MAC 地址的交换机接口。 对于从接口 X 接收到的一个链路层入帧,交换机的处理是:获得入帧中的目 的 MAC 地址,并在自己内部的交换机表寻找
1、如果没有对于目的地址的表项,交换机广播该帧。
2、表中有一个表项将目的 MAC 地址到达接口 X 联系起来。交换机丢弃该帧。
3、表中有一个表项将目的 MAC 地址与接口 Y≠X 联系起来。交换机通过将该 帧放到接口 Y 前面的输出缓存完成转发功能。
        交换机是即插即用设备,自学习的。交换机表初始为空,对于收到对于在每 个接口接收到的每个入帧,该交换机在其交换机表中存储 MAC 地址和接口的对应 关系。
        在实际工作中,常会听到类似于“汇聚交换机”、“核心交换机”之类的名 词,其实这些本质上都是我们下面要说到的路由器,因为这些交换机工作在网络 层而非链路层。

路由器

 

        路由器工作在网络层,在输入端口接受到数据包后,解析后根据 IP 地址, 在内部的路由表中寻找后,经过内部的交换结构往输出端口输送,使数据包可以 到达正确的 IP 地址。在路由寻址算法上有集中式路由选择算法和分散式路由选择算法两种。集中式路由选择算法最出名的就是图论中的 Dijkstra 算法,这种算法必须知道整个网络的情况。
        两种算法各有优劣,所以实际工作中两种算法会结合工作。可以这样理解, 一个 ISP 内部,使用了基于 Dijkstra 算法的 OSPF 协议;多个 ISP 之间采用的 BGP 协议,则算法思想接近分散式路由选择算法。
        比如我们上面的网络拓扑图中,四川电信和北京电信内部的路由器就可能使 用 OSPF 协议进行路由规划,四川电信和北京电信之间的路径可能就使用 BGP 协 议规划。当然路由表也可以手工配置。

准备:DHCPIP 等等

        当 X 同学首先将其笔记本 PC 与网络连接时,没有 IP 地址他就不能做任何事 情。所以,X 同学的笔记本 PC 所采取的一个网络相关的动作是运行 DHCP 协议 , 以从本地 DHCP 服务器获得一个 IP 地址以及其他信息。
名称解释 DHCP :动态主机配置协议,为一个新接入的主机分配一个 IP
        1 ) X 同学笔记本 PC 上的操作系统生成一个 DHCP 请求报文,并将这个 报文放入 UDP 报文段,该 UDP 报文段则被放置在一个具有广播 IP 目的地址 (255.255.255.255 )和源 IP 地址 0.0.0.0 P 数据报中,因为 X 同学的笔记本 PC 还没有一个 IP 地址。
        2)包含 DHCP 请求报文的 IP 数据报则被放置在以太网帧中。该以太网帧具 有目的 MAC 地址 FF:FF:FF:FF:FF:FF ,使该帧将广播到与交换机连接的所有设备 ; 该帧的源 MAC 地址是 X 同学笔记本 PC MAC 地址 11:22:33:44:55:66
        3)包含 DHCP 请求的广播以太网帧是第一个由 X 同学笔记本 PC 发送到以 太网交换机的帧。该交换机在所有的出端口广播入帧,包括连接到路由器的端口。
        4)路由器在它的具有 MAC 地址 22:33:44:55:66:11 的接口接收到该广播以太 网帧,该帧中包含 DHCP 请求,并且从该以太网帧中抽取出 IP 数据报。该数据报 的广播 IP 目的地址指示了这个 IP 数据报应当由在该节点的高层协议处理,因此 该数据报的载荷(一个 UDP 报文段)被分解向上到达 UDP DHCP 请求报文从此 UDP 报文段中抽取出来。此时 DHCP 服务器有了 DHCP 请求报文。
        5)假设 DHCP 服务器分配地址 192.168.5.10 X 同学的笔记本 PC DHCP 服 务器生成包含这个 IP 地址以及 DNS 服务器的 IP 地址( 120.69.56.46 )、默认网关 路由器的 IP 地址 (192.168.5.1 )和子网掩码( 255.255.255.0 )的一个 DHCP ACK 报 文。 该 DHCP 报文被放入一个 UDP 报文段中, UDP 报文段被放入一个 IP 数据报 中,IP 数据报再被放入一个以太网帧中。这个以太网帧的目的 MAC 地址是 X 同 学笔记本 PC MAC 地址( 11:22:33:44:55:66 )。
        6)包含 DHCP ACK 的以太网帧由路由器发送给交换机。因为交换机是自学 习的,并且先前从 X 同学笔记本 PC 收到(包含 DHCP 请求的)以太网帧,所以 该交换机知道寻址到 11:22:33:44:55:66 的帧仅从通向 X 同学笔记本 PC 的输出端 口转发。
        7 X 同学笔记本 PC 接收到包含 DHCP ACK 的以太网帧,从该以太网帧中抽 取 IP 数据报 , IP 数据报中抽取 UDP 报文段,从 UDP 报文段抽取 DHCP ACK 报 文。X 同学 的 DHCP 客户则记录下分配给它的 IP 地址和它的 DNS 服务器的 IP 地址。它还在其 IP 转发表中安装默认网关的地址。 X 同学笔记本 PC 将向该默认网关发送目的地址为其子网 192.168.5.X 以外的
所有数据报。

准备:DNS ARP

名词解释: DNS Domain Name System ,专门提供将主机名转换为其背后
IP 地址, DNS 协议运行在 UDP 之上,使用 53 号端口。
        当 X 同学 将 www. baidu. com URL 键入其 Web 浏览器时, X 同学笔记本
PC 需要知道 www. baidu. com IP 地址。
        8 ) X 同学笔记本 PC 上的操作系统因此生成一个 DNS 查询报文,将字符串 www. baidu. com 放入 DNS 报文中,该 DNS 报文则放置在 UDP 报文段中。该 UDP 报文段则被放入具有IP 目的地址 120.69.56.46( 在第 5 步中 DHCP ACK 返回的 DNS 服务器地址)和源 IP 地址 192.168.5.10 IP 数据报中。
        9) X 同学笔记本 PC 则将包含 DNS 请求报文的数据报放入一个以太网帧中。 该帧将发送( 在链路层寻址)到 X 同学公司网络中的网关路由器。然而,即使 X 同学笔记本 PC 经过上述第 5 步中的 DHCP ACK 报文知道了公司网关路由器的 IP 地址(192.168.5.1 ),但仍不知道该网关路由器的 MAC 地址(尽管网关路由器 和 DHCP 服务器是同一个路由器,但是 X 同学笔记本 PC 并不知道,而且实际生 活中,DHCP 服务器和网关路由器可能是分开的)。为了获得该网关路由器的
MAC 地址, X 同学笔记本 PC 将需要使用 ARP 协议。
名称解释:ARP 协议,地址解析(Address Resolution)协议,用以在同一个
子网内网络设备在网络层地址(如 IP 地址)和链路层地址(即 MAC 地址)之间
的转换,每台主机或路由器在其内存中具有一个 ARP 表( ARP table),这张表包
含 IP 地址到 MAC 地址的映射关系。RARP 以与 ARP 相反的方式工作,RARP 发
出要反向解析的物理地址并希望返回其对应的 IP 地址。
        10) X 同学笔记本 PC 生成一个具有目的 IP 地址 192.168.5.1 (默认网关) 的 ARP 查询报文,将该 ARP 报文放置在一个具有广播目的地址( FF:FF:FF:FF:FF:FF ) 的以太网帧中,并向交换机发送该以太网帧,交换机将该帧交付给所有连接的设 备,包括网关路由器。
        11)网关路由器在通往公司网络的接口上接收到包含该 ARP 查询报文的帧, 发现在 ARP 报文中目标 IP 地址 192.168.5.1 匹配其接口的 IP 地址。网关路由器因 此准备一个 ARP 回答,报文中说明了本机的 MAC 地址 22:33:44:55:66:11 对应 IP 地址 192.168.5.1 。它将 ARP 回答放在一个以太网帧中,其目的地址为 11:22:33:44:55:66 (X 同学笔记本 PC ),并向交换机发送该帧,再由交换机将帧交 付给 X 同学笔记本 PC
        12) X 同学笔记本 PC 接收包含 ARP 回答报文的帧,并从 ARP 回答报文中抽 取网关路由器的 MAC 地址( 22:33:44:55:66:11 )。
        13) X 同学笔记本 PC 现在能够使包含 DNS 查询的以太网帧寻址到网关路由 器的 MAC 地址。在该帧中的 IP 数据报具有 IP 目的地址 120.69.56.46 ( DNS 服务 器),而该帧具有目的 mac 地址 22:33:44:55:66:11 (网关路由器), X 同学笔记 本 PC 向交换机发送该帧 , 交换机将该帧交付给网关路由器。
名词解释:NAT 网络地址转换
        上面交付的数据帧中,IP 数据报内的源地址是 192.168.5.10 X 同学笔记本 IP ),但是这不是一个 Internet 使用的 IP 地址,是一个私有 IP 地址,在局域网 中使用的 IP 地址(私有 IP 地址包括: 10.0.0.0 ~ 10.255.255.255 172.16.0.0 ~ 172.31.255.255 192.168.0.0 ~ 192.168.255.255 )。
        于是网关路由器会进行 NAT (网络地址转换),简单来说, NAT 路由器收到 运输层报文,为该数据报生成一个新的源端口号,假设为 5002 ,将源 IP 192.168.5.10 )替代为路由器广域网一侧接口的 IP 地址 120.68.34.89 ,且将报 文中本来的源端口更换为新端口 5002 。当生成一个新的源端口号时,并在路由 器的 NAT 转换表进行记录。
        应答服务器并不知道请求数据报已被 NAT 路由器进行了改装,它会发回一
个响应报文,其目的地址是 NAT 路由器的 IP 地址,其目的端口是 5002 。当该报
文到达 NAT 路由器时,路由器使用目的 IP 地址与目的端口号从 NAT 转换表中检
索出 X 同学笔记本 IP 地址( 192.168.5.10 )和发出 DNS 报文时使用的端口号。于
是,路由器重写该数据报的目的 IP 地址与目的端口号,并向 X 同学笔记本转发
该数据报。
注意,后面的描述中,经由网关路由器在 Internet 和局域网内交换的报文都
默认进行了 NAT

准备:域内路由选择到 DNS

        14) 网关路由器接收该帧并抽取包含 DNS 查询的 IP 数据报。路由器查找该
数据报的目的地址( 120.69.56.46 ),并根据其转发表决定该数据报应当发送到
四川电信网络中 R1 路由器。 IP 数据报放置在链路层帧中,并根据寻找出来的链
路发送。
        15)在四川电信网络中 R1 路由器接收到该帧,抽取 IP 数据报,检查该数据
报的目的地址( 120.69.56.46 ),并根据其转发表确定出接口,经过该接口朝着
DNS 服务器转发数据报。
        16)最终包含 DNS 查询的 IP 数据报到达了本地电信 DNS 服务器。 DNS 服务
器抽取出 DNS 查询报文,在它的 DNS 数据库中查找名字 www. baidu. com ,找
到包含对应 www. baidu. com IP 地址 (14.215.177.38 )的 DNS 源记录。该 DNS
服务器形成了一个包含这种主机名到 IP 地址映射的 DNS 回答报文,将该 DNS
答报文放入 UDP 报文段中,该数据报将通过四川电信网络反向转发到公司的路
由器,并从这里经过以太网交换机到 X 同学笔记本 PC
        17 ) X 同学笔记本 PC DNS 报文抽取出服务器 www. baidu. com IP
址。最终,在大量工作后, X 同学笔记本 PC 此时准备访问 www. baidu. com 服务
器。

终于可以上网了:TCP HTTP

        18)既然 X 同学笔记本 PC 有了 www. baidu. com IP 地址,它能够生成 TCP
套接字),该套接字将用于向 www. baidu. com 发送 HTTP GET 报文。 在 X 同学笔记本 PC 中的 TCP 必须首先与 www. baidu. com 中的 TCP 执行三 次握手。X 同学笔记本 PC 因此首先生成一个具有目的端口 80 (针对 HTTP 的) 的 TCP SYN 报文段,将该 TCP 报文段放置在具有目的 IP 地址 14.215.177.38 ( www. baidu. com)的 IP 数据报中,将该数据报放置在目的 MAC 地址为
22:33:44:55:66:11( 网关路由器)的帧中,并向交换机发送该帧。
        19)在公司网络、 四川电信 网络、北京电信网络和百度网络中的路由器朝着 www. baidu. com 转发包含 TCP SYN 的数据报,使用每台路由器中的转发表,如 前面步骤 14~16 那样。
        20)最终,包含 TCP SYN 的数据报到达 www. baidu. com 。从数据报抽取出 TCP SYN 报文并分解到与端口 80 相联系的欢迎套接字。对于百度 HTTP 服务器和 X 同学笔记本 PC 之间的 TCP 连接生成一个连接套接字。产生一个 TCP SYNACK 报 文段。
        21)包含 TCP SYNACK 报文段的数据报通过百度、北京电信、四川电信和公 司网络,最终到达 X 同学笔记本 PC 的以太网卡。数据报在操作系统中分解到步 骤 18 生成的 TCP 套接字,从而进入连接状态。
        22)借助于 X 同学笔记本 PC 上的套接字 socket X 同学的浏览器生成包含 要获取的 URL HTTP GET 报文。 HTTP GET 报文则写入套接字,其中 GET 报文 成为一个 TCP 报文段的载荷。该 TCP 报文段放置进一个数据报中,并交付到 www. baidu. com,如前面步骤 18 20 所述。
        23)在 www. baidu. com HTTP 服务器从 TCP 套接字读取 HTTP GET 报文, 生成一个 HTTP 响应报文,将请求的 Web 页内容放入 HTTP 响应体中,并将报文 发送进 TCP 套接字中。
        24)包含 HTTP 回答报文的数据报通过百度网络、北京电信、四川电信 和 公司网络转发,到达 X 同学笔记本 PC X 同学的 Web 浏览器程序从套接字读取 HTTP 响应,从 HTTP 响应体中抽取 Web 网页的 html ,并最终显示了 Web 网页

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

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

相关文章

Ubuntu 常用命令之 scp 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 SCP(Secure Copy)是一种基于SSH(Secure Shell)的文件传输协议,它可以在本地和远程主机之间安全地复制文件。在Ubuntu系统下,我们可以使用scp命令来实现这个功…

java-sec-code中rmi

java-sec-code中rmi 暂时没有搞懂原理,这里只说明利用方法 java-sec-code 作者给出的是使用ysoserial进行利用 测试环境搭建 docker环境下,1099端口默认不开启,这里使用idea运行org.joychou.RMI.Server即可 个人电脑java环境分为1.8.381 1.8.…

Spring核心源码解析

Spring 框架核心源码 1、使用 Spring 框架 2、反射机制 IoC 控制反转 Inverse of Control 创建对象的权限&#xff0c;Java 程序中需要用到的对象不再由程序员自己创建&#xff0c;而是交给 IoC 容器来创建。 IoC 核心思想 1、pom.xml <dependencies><!-- 引入 …

pytorch张量的创建

张量的创建 张量&#xff08;Tensors&#xff09;类似于NumPy的ndarrays &#xff0c;但张量可以在GPU上进行计算。从本质上来说&#xff0c;PyTorch是一个处理张量的库。一个张量是一个数字、向量、矩阵或任何n维数组。 import torch import numpy torch.manual_seed(7) # 固…

机器学习-数学学习汇总

***I数学只是一个工具&#xff0c;会使用&#xff0c;能解决问题就可以了&#xff0c;精确例如到3.14够用就可以了*** 微积分作用&#xff1a;解决非线性问题 学习&#xff1a;27分。 高中数学&#xff1a; 1.高中数学所有知识点表格总结&#xff0c;高中知识点一个不漏&am…

RLHF对LLM泛化性和多样性的影响

paper&#xff1a;Understanding the effects of RLHF on LLM generalisation and diversity 0 背景知识 标准的RLHF finetuning pipeline一般包含3个阶段&#xff1a; supervised fine-tuning (SFT)。对预训练的模型进行用language modeling的方式进行微调。reward modelin…

【湖仓一体尝试】MYSQL和HIVE数据联合查询

爬了两天大大小小的一堆坑&#xff0c;今天把一个简单的单机环境的流程走通了&#xff0c;记录一笔。 先来个完工环境照&#xff1a; mysqlhadoophiveflinkicebergtrino 得益于IBM OPENJ9的优化&#xff0c;完全启动后的内存占用&#xff1a; 1&#xff09;执行联合查询后的…

AI时代Python量化交易实战:ChatGPT引领新时代

文章目录 《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅膀》关键点内容简介作者简介购买链接 《AI时代架构师修炼之道&#xff1a;ChatGPT让架构师插上翅膀》关键点内容简介作者简介 赠书活动 《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅…

Python深度学习028:神经网络模型太多,傻傻分不清?

文章目录 深度学习网络模型常见CNN网络深度学习网络模型 在深度学习领域,有许多常见的网络模型,每种模型都有其特定的应用和优势。以下是一些广泛使用的深度学习模型: 卷积神经网络(CNN): 应用:主要用于图像处理,如图像分类、物体检测。 特点:利用卷积层来提取图像特…

pvk2pfx.exe makecert.exe 文件路径

文件路径 C:\Program Files (x86)\Windows Kits\10\bin\XXXXX\x86

GBASE南大通用数据库在Windows和Linux中创建数据源

Windows 中数据源信息可能存在于两个地方&#xff1a;在 Windows 注册表中&#xff08;对 Windows 系统&#xff09;&#xff0c; 或在一个 DSN 文件中&#xff08;对任何系统&#xff09;。 如果信息在 Windows 注册表中&#xff0c;它叫做“机器数据源”。它可能是一个“用 …

产品原型设计软件 Axure RP 9 mac支持多人写作设计

axure rp 9 mac是一款产品原型设计软件&#xff0c;它可以让你在上面任意构建草图、框线图、流程图以及产品模型&#xff0c;还能够注释一些重要地方&#xff0c;axure rp汉化版可支持同时多人写作设计和版本管理控制&#xff0c;这款交互式原型设计工具可以帮助设计者制作出高…

软件工程中关键的图-----知识点总结

目录 1.数据流图 2.变换型设计和事务型设计 3.程序流程图 4.NS图和PAD图&#xff1a; 5.UML图 1.用例图 2.类图 3.顺序图 4.协作图 本文为个人复习资料&#xff0c;包含个人复习思路&#xff0c;多引用&#xff0c;也想和大家分享一下&#xff0c;希望大家不要介意~ …

PCL配置记录

PCL配置记录 1. Windows10vs2019pcl win10vs2019pcl 1.11.1 1.下载与安装 https://github.com/PointCloudLibrary/pcl/releases ) 双击exe安装 注意&#xff1a; ( ) 解压 “pcl-1.11.0-pdb-msvc2019-win64.zip”&#xff0c;将解压得到的文件夹中的内容添加“…\PCL…

基于JAVA的厦门旅游电子商务预订系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

TYPE C 接口知识详解

1、Type C 概述 Type-C口有4对TX/RX分线&#xff0c;2对USBD/D-&#xff0c;一对SBU&#xff0c;2个CC&#xff0c;另外还有4个VBUS和4个地线。 当Type-C接口仅用作传输DP信号时&#xff0c;则可利用4对TX/RX&#xff0c;从而实现4Lane传输&#xff0c;这种模式称为DPonly模式…

Leetcode 435 无重叠区间

题意理解&#xff1a; 给定一个区间的集合 intervals 要求需要移除区间&#xff0c;使剩余区间互不重叠 目标&#xff1a;最少需要移除几个区间。 解题思路&#xff1a; 采用贪心思路解题&#xff0c;什么是全局最优解&#xff0c;什么是局部最优解。 全局最优解&#xff0c;删…

使用Java语言判断一个年度是不是闰年

一、 代码说明 引入Scanner函数&#xff0c;将类命名为Judge类&#xff0c;使用try语句和catch语句将整体代码包围起来&#xff0c;使用if语句来判断是否为闰年&#xff0c;输入年份&#xff0c;然后得到相应的结论。 二、代码 import java.util.Scanner; public class Judg…

叮咚,微信年度聊天报告(圣诞节版)请查收~丨GitHub star 16.8k+

微信年度聊天报告——圣诞节特别版&#xff0c;快发给心仪的ta吧~ 开源地址 GitHub开源地址&#xff1a;https://github.com/LC044/WeChatMsg 我深信有意义的不是微信&#xff0c;而是隐藏在对话框背后的一个个深刻故事。未来&#xff0c;每个人都能拥有AI的陪伴&#xff0c;…

Microsoft Store 里有哪些好用的软件?

Windows 应用商店还是有不少干货软件的。 下面给大家推荐 12 款 Windows 应用商店里优秀实用的 UWP 应用软件&#xff0c;无广告、不流氓、体验好&#xff0c;强烈建议收藏&#xff01; 而且经过商店审核和限制&#xff0c;也更加安全、干净&#xff0c;不用担心有乱七八糟的…