01.计算机网络导论
引言
协议分层
协议分层使我们可以将大任务化简成几个更小、更简单的任务。模块化指的是独立的协议层。一个协议层(模块)可以定义为一个具有输入和输出而不需要考虑输入是如何变成输出的黑匣子。当向两台机器提供相同输入得到相同输出时,它们
就可以相互替换。
TCP/IP协议族
-
分层架构
-
地址和数据包名称
在应用层,我们通常使用名称(比如someorg.com)或者邮箱地址(比如so.mebody@coldmail.com)定义提供服务的站点。在传输层,地址被称为端口号,端口号的作用是在源和目标之间定义应用层程序。端口号通过各程序的本地地址来辨别多个同时运行的本地程序。在网络层,这些地址在整个因特网范围下是全球化的,网络层的地址独一无二地定义了该设备与因特网的连接。链路层地址,有时称为MAC地址,是在本地定义的地址,每一个链路层地址在计算机网络局域网(LAN)或广域网(WAN)中定义一个特定的主机或者路由器。
应用层
应用层模式
在网络的生命周期中,应用程序发展出了两种模式来为两个应用程序彼此交互提供服务:客户机-服务器模式和端到端模式。
-
传统模式:客户机-服务器模式
服务提供者是一个应用程序,叫作服务器进程,这个进程一直运行,等待另一个叫作客户端进程的应用程序通过因特网连接请求服务。通常一些服务器进程可以提供某特定种类的服务,但是向这些服务端进程请求服务的用户会很多,因此很多服务器进程需要一直运行,而客户端程序只在需要时运行。一些传统服务仍然在使用这种模式,包括万维网(WWW)和它的超文本传输协议(HTTP)、文件传输协议(FTP)、安全外壳协议(SSH)、邮件服务等等。 -
新模式:端到端模式
在端到端模式中,不需要一直运行并等待客户端进程连接的服务器进程。这个责任是在端与端之间共享的。一台与网络相连接的计算机可以在一个时间段提供服务又在另一个时间段接收服务。一台计算机甚至可以在同一时间提供和接收服务。
这个模式完全适用的领域之一是网络电话。通过电话通信确实是一个端到端活动,任何一方都没有必要一直运行来等待另一方的呼叫。端到端模式可以使用的另一个领域是当一些计算机与网络连接来互相共享一些东西的时候。例如、一个网络用户有一个需要与其他网络用户共享的文件时,不需要将这个文件夹变成服务器并且一直运行服务器进程来等待其他用户的连接和获得这个文件。
标准客户机-服务器模式
- 万维网(WWW)和超文本传输协议(HTTP)
-
万维网
-
Web客户端(浏览器)
各种各样的供应商提供了能解释和显示网页的商用浏览器。它们几乎使用了相同的体系结构。每个浏览器通常由三部分构成:控制器、客户端协议和解释器。
控制器接收来自键盘或鼠标的输入 使用客户端程序存取文挡。在文档被存取之后,控制器使用一个解释器在屏幕上显示文档。客户端协议可以是稍后要描述的协议中的一种,HTTP、FTP。根据文档类型,解释器可以是HTML、Java或Ja aScrip。 -
Web服务器存储网页。每当请求到达时,相应的文档会发送至客户端。
-
统一资源定位符(URL)
作为文件,网页需要唯一的标识符来将它和其他网页区分开来。定义一个网页需要3个标识符:主机、端口和路径。然而,在对网页进行定义之前,需要告诉浏览器我们想要使用的客户机-服务器应用程序,这叫作协议。这意味着我们得要4个标识符来定义网页,第一个是用来得到网页的工具种类,剩下三个的组合定义目标对象(网页)。协议:为了访问网页需要的第一个标识符是客户机-服务器程序的缩写。比如HTTP。主机标识符:主机标识符可以是服务器的IP地址或服务器的特定名称。端口号:端口号通常是为客户机-服务器应用程序预定义的16位整数。路径:路径标识该文件在基本的操作系统中的名字和位置。
-
- 超文本传输协议(HTTP)是一个用来定义如何编写客户机-服务器程序以便从网络中检索网页的协议。HTTP客户端发送请求。
文件传输协议(FTP)
文件传输协议(FTP)是TCP/IP提供的标准协议,用于从一台计算机复制文件到另一台计算机。虽然从一个系统到另一个系统的文件传输看起来简单直接,但有些问题必须首先处理。例如,两个系统可能使用不同的文件命名约定。两个系统也可能有不同的方式表示数据。两个系统有不同的目录结构。所有这些问题都被FTP使用非常简单优美的方法解决了。
FTP的基本模式,客户端由三部分组成:用户接口、客户端控制进程和客户端数据传输进程。服务器由两部分组成:服务器控制进程和服务器数据传输进程。控制连接建立在控制进程间,数据连接建立在数据传输进程间。
FTP中的两个连接有着不同的生命周期。控制连接在整个交互式FTP会话中都是保持打开的,而数据连接为每个文件传输活动打开和关闭。每次涉及使用文件传输命令时,它就打开,文件传输结束后,它就关闭。当控制连接打开,如果需要传输多个文件,数据连接可以打开和关闭多次。
域名系统(DNS)
为了确认一个实体,TCP/IP协议族使用唯一定义了该主机和网络之间连接的IP地址。但是,人们更愿意使用名字而不是数字化的地址。因此,网络需要一个可以将名称映射到地址的目录系统。这和电话网络是相似的,电话网络为了使用电话号码而非姓名而设计,人们可以保存一份私人文件来将名字映射到相应电话号码,也可以直接通过电话簿来打电话。
端到端模式
准备好共享资源的网络用户成为同位体(peer)并逐渐构成网络。当网络中的一个同位体有可共享的文件(例如,一个音频或视频文件)时,这个文件对于其他同位体而言是可获得的。感兴趣的同位体可以与存储该文件的计算机连接并下载这个文件。在一个同位体下载这个文件之后,这个文件可用于其他同位体的下载。随着更多同位体加入和下载该文件,这个文件的更多副本就会提供到组中。由于同位体列表可能增长也可能收缩,因此问题是该模式应当如何跟踪忠实的同位体和文件位置。为了回答这个问题,我们需要把端到端模式分成两类:集中的和分散的。
-
集中网络
在一个集中的端到端网络中,目录系统列出同位体和它们提供了什么以使用客户机-服务器模式,但是文件的存储和下载都使用端到端模式完成。在这种网络中,一个同位体先通过一个中央服务器注册,然后同位体提供它的IP地址和它准备共享的文件列表。
为了寻找一个特定文件,同位体向主服务器发送一个查询要求。服务器在它的目录中搜索并给出存有该文件副本的节点的IP地址。同位体连接这些节点之一并下载文件。随着节点加入和离开同位体,这个目录一直在更新。
集中网络使目录的维护得到简化,但是也造成一些障碍。访问目录可能产生巨大的流量并使系统变慢。这些中心服务器很容易受到攻击,如果它们全都出现故障,整个系统就会停机。 -
分散网络
分散P2P网络不依赖于集中目录系统。在这个模型中,同位体组织形成一个在物理网络之上的逻辑网络,称为重叠网络。 基于重叠网络中节点之间的连接方式,分散P2P网络分成结构化的和未结构化的两大类。
-
在一个未结构化的P2P网络中,节点随机地连在一起。在未结构化的P2P中进行搜索不是很有效,因为寻找一个文件的查询涌入网络并造成巨大的流量,即使这样这个查询请求也不一定得到解决。
-
结构化的网络使用一组预设的规则来链接节点,这样一个查询就可以有效且高效地解决。为了达到这个目的,最常用的技术是分布式散列表(DHT)。很多应用都使用了DHT,包括分布式数据结构(DDS)、内容分布式系统(CDS)、域名系统(DNS)、P2P文件共享。一个使用DHT的常用P2P文件共享协议是BT下载。
传输层
TCP/IP协议族中的传输层位于应用层和网络层之间,它从网络层接收服务并且为应用层提供服务。传输层作为一个客户程序和服务器程序之间的联络,是一个进程间连接。传输层是TCP/IP协议族的核心部分,它是一个在网络中从一点向另一点进行数据传输的端与端之间的逻辑媒介。
传输层服务
-
进程间通信
传输层的第一个责任是提供进程间通信。进程是使用传输层服务的应用层实体(运行中的程序)。
网络层负责在计算机层面的通信(主机间通信)。网络层协议只能将消息传输到目的计算机。然而,这是一个不完整的传递,这个消息仍然需要被传递给正确的进程。这就是传输层协议的工作,它的责任是将消息送抵相应的进程。 -
端口号
本地主机和远程主机用IP地址进行定义。为了定义这些进程,我们需要第二个标识符,称为端口号。在IP协议族中,端口号是 65535(16位)之间的整数。
传输层协议
-
用户数据报协议(UDP)
用户数据报协议(UDP)是不可靠的无连接传输协议。它除了提供进程间通信而不是主机间通信以外,没有向网络层服务添加任何东西。UDP是一个极简单同时开销最少的协议。如果一个进程想要发送一条短的消息且不关心可靠性,那么就可以使用UDP。通过UDP发送一条短消息比用TCP发送造成发送者和接收者之间的互动要少得多。UDP数据包,也叫作用户数据报,有一个固定大小为8字节的头。由于UDP用户数据报是存储在总长度为65535字节的IP数据报中的,所以其整体长度会比较短。
-
传输控制协议(TCP)
传输控制协议(TCP)是一个面向连接的可靠协议。它明确地定义了连接设施、数据传输和连接拆卸段以提供面向连接的服务。这里面向连接的服务指的是在(来自应用层的)同一消息中的所有数据包(段)之间有连接(关联)。TCP使用序列号来定义段的顺序。序列号与每一段的字节数有关。比如在一个6000字节的消息中,第一段的序列号是0,第二段的序列号是2000,第三段的序列号是4000。这样,如果一段丢失了,接收者会持有另外两段直到发送者重置丢失的那段。在传输层,TCP将一些字节组合成一个叫作段的数据包。TCP在每一段之前加上一个头(目的是方便控制),并且将这些段发送至网络层进行传输。这些段都封装在IP数据报里。
网络层
TCP/IP协议族中的网络层负责源到目的地(主机间通信)的消息发送。
网络层提供的服务
-
打包
在源主机侧对传输层数据进行打包,对来自目的主机网络层的数据包进行拆包。通过三个步骤完成。- 源网络层协议从传输层协议接收数据包,添加包含源地址和目的地址以及其他层协议所需信息的头。
- 网络层协议在逻辑上将该数据包传递至目的地处的网络层协议。
- 目标主机接收网络层数据包,解除有效负荷的封装并将其传输至上一层协议。
如果在源主机或路径中的路由器处时数据包为碎片状,网络层有责任等待直到所有碎片到达,对它们重新组合并发送至上一层协议。传输层的有效负荷可以封装在几个网络层数据包中。
-
数据包传递
网络层的数据包传递是无连接且不可靠的。在网络层传递的数据包是不可靠的,这意味着这些数据包可能损毁、丢失或者重复。我们要通过使用传输层协议中的TCP才能保证消息没有损毁。如果在传输层的一个有效负荷(由于数据链路层的不可靠传递)损毁了,TCP会丢弃这个数据包并且要求重新发送。网络层的传递也是无连接的,但是这里的无连接不是说发送者和接收者之间没有物理连接,而是说网络层对每个数据包的处理是单独的。换句话说,属于相同传输层有效负荷的数据包之间是没有联系的。如果一个传输层数据包由4个网络层数据包构成,那么无法保证这4个数据包到达的顺序与它们发送的顺序相同,这是由于每个数据包都可能依照不同的路径到达目的地。目的地的传输层负责等待和接收所有数据包,再将它们组合在一起并传送至应用层。
-
路由
网络层有一个和其他层一样重要的职责就是路由。网络层负责将数据包从它的源传送到目的地。物理网络是网络(LAN和WAN)和连接这些网络的路由器的集合,这意味着从源到目的地有不止一条路线。网络层的责任是在这些可能的路线中找到最优路线,它需要有一些特定的策略来定义最优路线。在现在的网络中,这需要通过在数据包到达时运行一些路由协议来帮助多个路由器协调它们对于周边的知识并且提出一致的路由表来实现。
网络层协议
-
第四版网际协议(IPv4)
- IPv4地址
在TCP/IP协议族的IPv4层中用来标记每个设备和互联网之间的连接的标识符叫作网络地址或IP地址。
有三种较普遍的表示法来表现IPv4地址:二进制表示法(以2为底)、带点的十进制表示法(以256为底)和十六进制表示法(以16为底)。在二进制表示法中,IPv4地址展示为32位。为了使IPv4地址更易读,通常将它写成十进制的形式 ,不同字节利用小数点分开。这个格式被称为带点的十进制表示法。带点的十进制表示法中每个数字都在0~255之间。
32位的IPv4地址也是分级的,但是只分成两个部分。地址的第一部分叫作前级,定义网络;地址的第二部分叫作后缀,定义节点(设备和网络的连接)。前缀的长度是n位,后缀的长度就是32-n位。前缀和后缀的长度取决于网络(组织)的站点。 - IPv4数据报
IP使用的数据包叫作数据报。数据报是一种长度不一的数据包。这种数据包包括两部分:头和有效负荷(数据)。头的长度是20~60字节,并且它包含路由和传递时必要的信息。注意,一个字节是8位。
- IPv4地址
-
第六版网际协议(IPv6)
IPv4的一些地址耗尽之类的缺点促进了20世纪90年代早期IP协议的一种新版本的出现。IPv6是一个在扩大IPv4的地址空间的同时重新设计IP数据包的格式并修改一些辅助性协议的计划。下面展示了IPv6协议中的主要改变。- IPv6地址
为了防止地址耗尽,IPv6使用128位来定义任何连接到网络的设备。地址显示为二进制或冒号十六进制的格式。第一个格式用来在计算机中存储地址,第二个格式是供人类使用的。IPv6中的地址事实上定义了三个等级:站点(组织)、子网和到主机的连接。
- IPv6地址
数据链路层
TCP/IP协议族没有定义数据链路层中的任何协议。这一层是网络中连接起来后可以构成因特网的区域。这些网络,有线或者无线,都接收服务并将服务提供给网络层,这正可以为我们提供当今市场上有多少种标准协议的线索。
因特网是通过连接设备(路由器或者交换机)胶合在一起的网络的组合体。如果一个数据报是从一台主机传输到另一台主机,它需要通过这些网络传递。
节点和链接
虽然应用层、传输层和网络层的通信都是端到端的,但数据链路层的通信是节点对节点的。网络中一点的数据单元需要穿过很多网络(LAN和WAN)才能到达另外一点。这些LAN和WAN都是通过路由器连在一起的。传统上会将两个端主机和路由器看作节点,它们之间的网络看作链接。
相关文章:
01.计算机网络导论
引言 协议分层 协议分层使我们可以将大任务化简成几个更小、更简单的任务。模块化指的是独立的协议层。一个协议层(模块)可以定义为一个具有输入和输出而不需要考虑输入是如何变成输出的黑匣子。当向两台机器提供相同输入得到相同输出时,它…...
API网关:SpringCloud GateWay
一. 网关的作用及背景 1.API网关的作用 请求路由 在我们的系统中由于同一个接口新老两套系统都在使用,我们需要根据请求上下文将请求路由到对应的接口。 统一鉴权 对于鉴权操作不涉及到业务逻辑,那么可以在网关层进行处理,不用下层到业务…...
【Leetcode 383】赎金信 —— 哈希表 有注解
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1: 输入&#…...
Linux 常见的冷知识集锦
一、前言 本文旨在记录那些常见的Linux概念和名词,但这些又没经常直接使用到,更多在底层运行,见过却又不是特别清楚的碎片知识,以温故知新。 二、知识点和概念说明 2.1、POSIX标准/协议 POSIX(Portable Operating S…...
【喜报】科大睿智祝贺青岛海信网络科技通过CMMI5级评估
青岛海信网络科技股份有限公司成立于1998年,是海信集团B2B产业的核心力量。其主要从事城市交通、公共交通、智慧公路、交通枢纽、智慧停车、智能网联、大数据管理、城市治理、应急管理、轨道交通智能化和医院、校园、园区等智能化建设领域的产品和解决方案开发、…...
2024全国大学生电子设计大赛全国初赛 E题 三子棋游戏装置 一等奖满分最简方案
感想:电赛初赛控制类题还是蛮简单的,别被五花八门的硬件搞懵了(决赛当我没说)。抓住核心,理念都是通用的。我是计科专业的,因此选择的控制类E题,相对来说背的知识要少很多,更考验智商…...
尚品汇-ES(三十一)
目录: (1)封装搜索相关实体对象 (2)搜索接口封装 (3)在service-list-client模块添加远程接口 (1)封装搜索相关实体对象 搜索参数实体:SearchParam 搜索参…...
NC 跳台阶
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 一只青蛙一次…...
linux 文件编程
1. 标准IO 也称为标准输入输出(Standard Input/Output),是计算机编程中一种常见的IO操作方式,特别是在C语言及其衍生语言中广泛使用。它主要通过标准C库中的函数来实现,提供了丰富的接口用于数据的输入和输出。 文本文…...
【后端速成 Vue】实现动态表白墙
前言: 通过前面几篇的文章的讲解,已经学习到了很多的 Vue 指令了,那么现在就将学习到的指令利用起来,做一个小的 demo。 最终效果图: 通过效果图可以发现,一共有这几个功能: ● 渲染列表&…...
【日常开发】 java返回ECharts数据结构封装
java返回ECharts数据结构封装 一、前端页面示例图如下: 二、准备测试数据: 三、后端 格式封装代码: 四、最终结果: 🎈边走、边悟🎈迟早会好 一、前端页面示例图如下: 二、准备测试数据&am…...
Table表格控件实现单选功能
Table表格控件实现单选功能 <el-tableref"tableRef"height"385"style"--el-table-border-color: none"row-key"contractId"highlight-current-rowsingle-selectselect"handleSelect":data"contractInfo">&l…...
AI技术加速落地 港科广联手思谋打开智能缺陷检测新纪元
AI 技术应用落地的元年,工业是主战场,尤其是工业缺陷检测。 在“生产制造-缺陷检测-工艺优化-生产制造”的智能制造闭环链条中,基于AI的智能缺陷检测扮演着“把关者”的角色。但这个把关者长期以来却缺少一个称手的工具——样本量大、精度高…...
Python爬虫开发:BeautifulSoup、Scrapy入门
在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非…...
数据科学、数据分析、人工智能必备知识汇总-----常用数据分析方法-----持续更新
数据科学、数据分析、人工智能必备知识汇总-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/140174015 文章目录 一、对比分析法1. 按时间和地区2. 同比和环比 二、分组分析法三、结构分析法四、交叉分析法五、矩阵分…...
学习vue Router 一 起步,编程式导航,历史记录,路由传参
目录 起步,安装 1. 安装 2. 使用 命名路由 编程式导航 1. 字符串模式 2. 对象模式 3. 命名路由模式 历史记录 replace的使用 横跨历史 路由传参 1. query路由传参 2. 动态路由传参 3. 二者的区别 起步,安装 router 路由 因为vue是单页应用…...
Qt/C++最新地图组件发布/历时半年重构/同时支持各种地图内核/包括百度高德腾讯天地图
一、前言说明 最近花了半年时间,专门重构了整个地图组件,之前写的比较粗糙,有点为了完成功能而做的,没有考虑太多拓展性和易用性。这套地图自检这几年大量的实际项目和用户使用下来,反馈了不少很好的建议和意见&#…...
Laravel + Thinkphp 生成二维码
安装依赖 composer require endroid/qr-code 编写ThinkPhP代码 public function index() {// 创建二维码内容$qrCode new QrCode(Hello World);// 设置二维码的配置$qrCode->setSize(300);$qrCode->setMargin(10);// 获取二维码图像$writer new PngWriter();$result…...
2408C++,C++20的无侵入式反射
原文 C17基于结构绑定的编译期反射 事实上不需要宏的编译期反射在C17中已用得很多了,比如struct_pack的编译期反射就不需要宏,因为C17结构绑定可直接得到一个聚集类的成员的引用. struct person {int id;std::string name;int age; }; int main() {person p{1, "tom&qu…...
抽象工厂模式(Abstract factory pattern)- python实现
抽象工厂模式的通俗示例 想象一下,你正在经营一家家具店,你需要从不同的供应商那里采购不同的家具系列。有的供应商提供的是现代风格家具,包括现代沙发、现代椅子和现代桌子;而有的供应商提供的是古典风格家具,包括古…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...
spring boot使用HttpServletResponse实现sse后端流式输出消息
1.以前只是看过SSE的相关文章,没有具体实践,这次接入AI大模型使用到了流式输出,涉及到给前端流式返回,所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...
