网络原理 | 网络基础概念复习

目录

网络中的重要概念

IP地址

端口号

协议

五元组

协议分层

OSI七层网络模型

[TCP/IP 五层(四层)模型](#TCP/IP 五层(四层)模型)

网络设备所在的分层

封装和分用


网络中的重要概念

IP地址

IP地址主要用于标识网络主机、其他网络设备的网络地址。在网络数据传输中,需要判断数据是从哪个主机传输到哪个主机的,此时就需要使用IP地址来进行标识。

IP地址是一个32位的二进制数,通常被分割为4个"8位二进制数",即四个字节。通常使用"点分十进制"的方式来表示IP地址,即a.b.c.d的形式(其中a,b,c,d都是0~255之间的十进制整数),使用点分十进制来进行表示是因为方便人们阅读。

在 windows 系统中,可以通过"Win + R,输入 cmd"的方式打开命令提示符,再使用 ifconfig 命令即可查询本地 IPv4 地址。例如我们本地的 IPv4 地址为 172.168.24.6,这是其"点分十进制"的表示方式,其对应的32位二进制表示即为:10101100.10101000.00011000.00000110。

端口号

在网络通信中,IP地址用于表示主机的网络地址,以确定我们是从哪里发送到哪里。而端口号主要用于区分当前主机上指定的应用程序(进程)。一个主机上使用网络的程序有很多,通过端口号我们可以区分当前主机收到的数据是要交给哪个程序来进行处理。

以收发快递为例,IP地址就相当于发货地址和收货地址,而端口号就相当于发件人和收件人,这样才能确保快递能正确送到。

端口号是一个2个字节的整数,其范围为 0 ~ 65535,对应二进制即从 00000000 00000000 ~ 11111111 11111111,进程通过绑定一个端口号来发送及接受网络数据。虽然端口号的范围是0 ~ 65535,但一般 0 ~1023这些端口是有特定含义的,因此我们在写代码时通常使用其他的端口号,以避免发生错误。

协议

协议是网络通信中最核心的概念,协议是进行一切通信的基础。

由于网络中的数据是基于 0/1 这种二进制数据来进行传输的,而这种二进制数据可能表示的文本数据、视频数据、图片数据等等,即使是同一个类型的数据,其格式也可能不同,就比如文本数据不同的编码方式得到的文本是不同的,而协议就是在约定通信双方的数据交互"规则",双方都按照同样的协议来构造/解析数据,这样才能保证发送方发送的数据接收方可以正确解析

协议的概念:协议即网络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。 协议最终体现在网络上传输的数据包的格式。

五元组

在网络通信中,五元组是指一组由五个元素构成的值,其用于唯一标识网络中一个连接的通信会话,这五个元素包括:

· 源 IP 地址:标识发起方(源主机)的 IP 地址

· 源端口号:发起方(源主机)使用的端口号,用于标识发起方(源主机)中该次网络通信发送数据的应用进程

**·**目的 IP 地址:标识接收方(目的主机)的 IP 地址

· 目的端口号:接收方(目的主机)使用的端口号,用于标识接收方(目的主机)中该次网络通信接收数据的应用进程

**·**协议号:标识发送进程和接收进程双方约定的数据格式

协议分层

网络通信十分复杂,如果仅使用一个协议来约定所有的网络通信细节,会导致这个协议非常庞大和复杂,因此需要将这个大的协议拆分成多个小的协议,让每个小的协议专注于解决一个/一类问题,再让这些协议相互配合。

协议分层,即将拆分出来的这些小协议中功能类似的协议放到同一层里,并且约定好层与层之间的交互关系。除此之外,还需要约定好协议之间不能随意相互交互,只能是相邻的层之间才可以交互。上层协议调用下层协议,下层协议给上层提供服务。

协议分层的优点

· 降低了使用的成本,使用某个协议的时候,不需要关注其他协议的实现细节

**·**降低整个体系的耦合性,以便可以灵活的变更某个层次的协议

当前互联网体系的现状就是"协议分层"的效果。其实分层就类似于面向接口编程,定义好两层间的接口规范,让双方遵循这个规范来对接。在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务)。对于使用方来说,不需要关心提供方是如何实现的,只需要使用接口即可;对于提供方来说,利用封装特性,隐藏了实现的细节,只需要开放接口即可,这样可以更好地扩展和维护。

当前常见的两种互联网的协议分层有:OSI七层网络模型和TCP/IP五层网络模型。

OSI七层网络模型

OSI即 Open System Interconnection,开放互联系统,OSI七层网络模型把网络从逻辑上分为了七层,自上而下分别为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。各层具体功能如下所示:

**·**应用层:针对特定应用的协议。应用层协议通过在网络通信的高层提供功能,确保各种应用(如电子邮件(SMTP)、文件传输(FTP、SFTP)、远程登录(SSH)等)的顺利运行。每种协议都针对特定的应用场景进行了优化,保证了数据传输的有效性与安全性。

· 表示层:表示层负责设备固有数据格式和网络标准数据格式的转换,它确保了来自应用层的数据可以被正确地传输,并能被接收方理解。

· 会话层:会话层负责不同计算机之间的通信管理,负责建立和断开通信连接并管理传输层以下的分层。 会话层 主要关注会话的管理和控制,而传输层则负责数据的可靠传输,确保数据完整性和无差错的传输。

· 传输层:传输层负责管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠的传输到目标地址)

· 网络层:负责地址管理与路由选择,网络层的主要任务是通过路由选择和地址管理来确保数据包能够从源主机传输到目标主机。

· 数据链路层:数据链路层负责互联设备之间传送和识别数据帧,也就是根据网络层规划好的路径进行具体的实施。

**·**物理层:物理层位于数据链路层和传输介质之间,主要负责数据的传输和接收。它直接与硬件设备(如网卡、传输介质)打交道,确保数据在物理介质上能够正确地传输。

然而 OSI 七层模型既复杂又不实用,因此在实际组建网络时并没有使用这种方式,而是使用OSI 七层模型中的部分分层,即 TCP/IP 五层(四层)模型来进行网络组建。

TCP/IP 五层(四层)模型

TCP/IP 五层模型自上而下分别为:应用层、传输层、网络层、数据链路层、物理层,而TCP/IP 四层模型自上而下分别为:应用层、传输层、网络层、数据链路层,这是因为物理层考虑得比较少。TCP/IP 五层模型是将OSI七层模型中的应用层、表示层、会话层融合到了一起,其它层的功能与 OSI 七层模型中一致。在此处再次说明TCP/IP 五层模型每一层的作用及常用的协议:

**·**应用层:应用层负责程序间的沟通,为应用程序提供网络通信接口,定义数据格式和交互规则,常见的协议有:SMTP(电子邮件传输)、Http/Https(网页浏览)、FTP(文件传输)、SSH(安全远程登陆)、DNS(域名解析)

· 传输层:传输层负责两台主机之间的数据传输。例如传输控制协议(TCP协议,面向连接、可靠传输(如网页、文件下载)),用户数据报协议(UDP协议:无连接,低延迟(如视频通话))。

**·**网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由)。

**·**数据链路层:数据链路层负责设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。有以太⽹、令牌环⽹,⽆线LAN等标准。

**·**物理层:负责光/电信号的传递⽅式。⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。

从传输层到物理层的过程,和企业管理十分类似。传输层就相当于企业中的董事长,其制定一个发展目标;而网络层相当于公司的高管,根据这个目标来规划出具体的实现方案,就相当于网络层路径规划和路由选择的过程;数据链路层相当于是员工,实施高管制定的具体实现方案;物理层相当于是办公所用到的基础设施。

网络设备所在的分层

**·**对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,其在 TCP/IP 五层模型的下四层工作;

**·**对于一台传统的路由器(三层路由器),其实现了从网络层到物理层,在 TCP/IP 五层模型的下三层。然而随着网络设备的不断发展,目前也有四层路由器;

**·**对于一台传统的交换机(二层交换机),其实现了从数据链路层到物理层,在 TCP/IP 五层模型的下两层。目前也有三层交换机和四层交换机。

**·**对于集线器,它只实现了物理层。

封装和分用

· 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame)。

· 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装 (Encapsulation)。

**·**首部信息中包含了⼀些类似于首部有多⻓,载荷(payload)有多⻓,上层协议是什么等信息。

· 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理。

此处以通过 QQ 来发送 "你好" 消息给另一个人为例来叙述网络通信中的封装和分用:

发送方视角

  1. 发送方在输入框输入 "你好" 字符串,点击发送按钮。此时 QQ 应用程序会取出输入框中的 "你好" 内容,并将其构造成一个 "应用数据包" 。"应用层数据包" 的构建需要使用应用层的网络协议,这个协议描述了 "应用层数据包" 的构造,此处的网络协议通常由程序员自己定义。

此处假设这个数据包的格式为:发送者 QQ 号;接收者 QQ 号;发送时间;发送正文\n,那么 1 中的 "应用层数据包" 可以构建为:1582654;6542512;2025-05-15 21:36;你好\n

网络传输中通常使用 "二进制的字符串" 来进行传输,因此需要将此处的数据包序列化为二进制字符串。此处为了方便起见,不对其进行转换,但实际的传输中是需要进行转换的。

  1. 在通过应用层的网络协议完成 "应用数据包" 的构建和序列化后,QQ 应用程序会调用操作系统提供的 API (传输层给应用层提供的 API)。通常操作系统会提供一个类似于 "发送数据" 这样的 API,然后应用程序会将上述构建好的应用层数据包作为参数传进来,此时应用层数据包就到了系统内核中传输层代码部分了。此时传输层会将上述的应用层程序包进一步封装成一个传输层数据包,计算机网络中的封装实际上就是 字符串 拼接

传输层的协议有很多,其中最主要的是 UDP 协议和 TCP 协议,我们假设此处使用 UDP 协议,那么此时 UDP 协议就会构建出 "传输层数据包",如下所示:

此处的 UDP 报头包含了 UDP 协议相关的一些信息,就比如发送者的端口号,接受的端口号等等。

  1. 传输层构造好数据之后,会继续调用 网络层 提供给传输层的 api,将数据进一步交给网络层进行处理。由于网络层和传输层都是系统内核中实现好的,其调用过程我们不需要关心。

网络层同样有很多协议,其中最主要的就是 IPv4 协议,简称为 IP 协议。

IP 协议会将上述的 "传输层数据包" 进一步封装,构造出 "网络层数据包",如下所示:

此处的 IP 报头包含很多信息,其中最主要的信息是发送方的 IP 地址和接收方的 IP 地址。

  1. 网络层会继续调用数据链路层的 api,将 "网络层数据包" 交给数据链路层进行处理,此处以数据链路层中的 以太网(即平时插网线上网的方式)为例。

此时 以太网 会将 "网络层数据包" 进一步封装为 "数据链路层数据包",如下所示:

  1. 上述得到的数据会进一步交给物理层(硬件设备),此时网卡会针对上述的二进制数据进行真正的传输操作,需要将二进制数据转换为 光信号/电信号/电磁波等。

以上就是网络通信中的封装过程。

接收方视角

  1. 接收方物理层收到光电信号,会将光电信号还原成二进制数据/

  2. 物理层将转换回二进制的数据交给数据链路层。与上述发送方视角对应,此时以太网拿到这个数据包后,就会对这个数据包进行解析,拿出这里的报头和载荷,根据报头中的信息进行一些处理。根据这个报头信息决定这个数据包是丢弃还是转发或是自己保留(向上解析)。数据链路层拿到的数据包如下所示:

  1. 数据链路层解析后的数据会交给网络层,当网络层协议拿到这个数据包后,IP 协议也会对这个数据包进行解析,取出 IP 报头和载荷,也是需要根据报头信息决定这个数据包是丢弃还是转发或者是保留(给上层协议) 。网络层拿到的数据包如下所示:
  1. 当数据传到传输层后,UDP 协议也要针对数据进行解析,取出 UDP报头和载荷,此处也需要将载荷中的内容进一步交给应用程序进行处理,其依赖 UDP 报头中的"接收者端口号" 来进行数据发送。传输层拿到的数据包如下所示:
  1. 此时数据发送到接收者 QQ 应用程序这里,QQ 就需要针对数据包来进行反序列化,之后再对反序列化后的数据进行进一步的逻辑处理。QQ接收到的"应用层数据包"如下所示:

以上以 QQ 发送消息为例,来对网络通信中的封装和分用进行了描述。

相关推荐
不之道12 分钟前
通过 wsl 安装 docker
运维·docker·容器
天翼云开发者社区13 分钟前
办公网络流量隔离:为高效办公保驾护航
网络·安全
和计算机搏斗的每一天27 分钟前
ip命令详解
服务器·网络·tcp/ip
XY.散人28 分钟前
初识Linux · IP分片
网络·网络协议·tcp/ip
tianyuanwo31 分钟前
深入解读tcpdump:原理、数据结构与操作手册
linux·运维·服务器·tcpdump
zhong_kh1 小时前
联邦+反射器 基础实验
网络
xjdksxkmd1 小时前
5.11作业
运维·服务器·网络
神经毒素1 小时前
WEB安全--Java安全--LazyMap_CC1利用链
java·开发语言·网络·安全·web安全
杰克逊的日记2 小时前
阿里云的网络有哪些
网络·阿里云·云计算
萌狼蓝天2 小时前
[SSL]1Panel添加阿里云DNS账户
网络·网络协议·阿里云·云计算·ssl