当前位置: 首页 > backend >正文

【Linux笔记】——网络基础

🔥个人主页🔥:孤寂大仙V
🌈收录专栏🌈:Linux
🌹往期回顾🌹: 【Linux笔记】——线程池项目与线程安全单例模式
🔖流水不争,争的是滔滔不息


  • 一、计算机网络的定义
  • 二、协议
    • OSI七层模型简介
    • TCP/IP五层(四层)模型
    • 为什么要有协议?
  • 三、网络传输流程
    • MAC地址
    • 网络协议栈
    • ip地址

以下内容是为了学习网络做过渡,有些概念是不具体的。有些概念后面的具体章节会具体谈。

一、计算机网络的定义

计算机网络是指通过通信链路和交换设备将多台计算机系统连接起来,实现资源共享和信息交换的系统。它允许不同地理位置的计算机和设备进行数据通信和资源共享。

局域网LAN:计算机数量多了,通过交换机和路由器将计算机连接到一起。是一个相对小的概念。
广域网WAN:将相隔万里的计算机都连在一起。

上面的“局域网“和”广域网”只是一个相对的概念。

二、协议

“协议”是一种约定,需要签订“协议”的双方,都遵守这份协议。比如生活中我们打电话,接通的时候都会说一声“喂”来确定与对方建立了通讯,这就是通话双方的“协议”。

当然完善的协议,需要更多更细致的规定,并让参与的人都要遵守。一般具有定制协议或者标准的资格的组织或者公司都是业界公认或者具有江湖地位的组织或者公司。

ISO(国际标准化组织)ITU(国际电信联盟)IETF(互联网工程任务组)IEEE(电气和电子工程师协会)等这些组织都是制定协议的国际租着。

分层设计

协议本质也是软件,在设计上为了更好的进行模块化、解耦合、也是被设计成了层状结构。分层设计实现了解耦和,可维护性强。

OSI七层模型简介

OSI(Open Systems Interconnection)模型是一个用于理解和设计网络体系结构的框架,由国际标准化组织(ISO)于1984年提出。它将网络通信过程分为七个层次,每一层都有特定的功能和协议,确保不同系统之间的互操作性。

物理层(Physical Layer)

物理层负责在物理介质上传输原始比特流。它定义了电气、机械、功能和规程特性,如电压、电缆类型、接口类型等。常见的设备包括集线器、中继器和网卡。

数据链路层(Data Link Layer)

数据链路层负责在直接相连的节点之间可靠地传输数据帧。它处理物理地址(MAC地址)、错误检测和流量控制。常见的协议包括以太网(Ethernet)和PPP(Point-to-Point Protocol)。

网络层(Network Layer)

网络层负责在不同网络之间进行数据包的路由和转发。它处理逻辑地址(IP地址)和路径选择。常见的协议包括IP(Internet Protocol)、ICMP(Internet Control Message Protocol)和ARP(Address Resolution Protocol)。

传输层(Transport Layer)

传输层负责端到端的通信,确保数据的可靠传输。它处理错误恢复、流量控制和数据分段。常见的协议包括TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。

会话层(Session Layer)

会话层负责建立、管理和终止应用程序之间的会话。它处理会话控制和同步。常见的协议包括RPC(Remote Procedure Call)和NetBIOS。

表示层(Presentation Layer)

表示层负责数据的格式化和转换,确保不同系统之间的数据兼容性。它处理数据加密、压缩和字符编码。常见的协议包括SSL(Secure Sockets Layer)和TLS(Transport Layer Security)。

应用层(Application Layer)

应用层负责提供网络服务和应用程序接口。它处理用户请求和应用程序之间的通信。常见的协议包括HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)和SMTP(Simple Mail Transfer Protocol)。

OSI七层模型为网络通信提供了一个标准化的框架,使得不同厂商和系统能够互操作,同时也为网络故障排除和性能优化提供了理论基础。

在这里插入图片描述


OSI七层网络模型称为开放式系统互联网参考模型,是一个逻辑上的定义和规范。把网络从逻辑上分为了七层,每一层都有相关相对应的物理设备,比如路由器,交换机。**OSI七层模型是一种框架性的设计方法,其主要的功能就是帮助不同类型的主机实现数据传输。**它最大优点是将服务、接口和协议这三个概念明确的区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的网络之间实现可靠的通讯。在实际开发中应用层会话层表示层我们通常都看作是接下来我们应用层,接下来我们按照TCP/IP四层模型来讲解。

TCP/IP五层(四层)模型

TCP/IP是一组协议的代名词,包括许多协议组成了TCP/IP协议族。

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、 早期以太网采用的的同轴电缆(现在主要用于有线电视)、 光纤, 现在的 wifi 无线网使用电磁波等都属于物理层的概念。 物理层的能力决定了最大传输速率、 传输距离、 抗干扰性等. 集线器(Hub)工作在物理层.

  • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、 帧同步(就是说从网线上检测到什么信号算作新帧的开始)、 冲突检测(如果检测到冲突就自动重发)、 数据差错校验等工作. 有以太网、 令牌环网, 无线 LAN 等标准. 交换机(Switch)工作在数据链路层.

  • 网络层: 负责地址管理和路由选择. 例如在 IP 协议中, 通过 IP 地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.

  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.

  • 应用层: 负责应用程序间沟通, 如简单电子邮件传输(SMTP) 、 文件传输协议(FTP) 、 网络远程访问协议(Telnet) 等. 我们的网络编程主要就是针对应用层.

一台主机,它的操作系统内核实现了从传输层到物理层的内容
一台路由器,实现了从网络层到物理层
一台交换机,实现了从数据链路层到物理层
集线器只实现了物理层

为什么要有协议?

上面我们说的OSI七层模型也好,TCP/IP协议也好只是从概念上说明了有什么协议,并没有理解为什么要有协议。

单个主机中,集成了那么多硬件,CPU、内存条、磁盘、显卡、等等,这些硬件在整个计算机运作的时候遵循冯诺依曼体系必须彼此进行交互。交互的时候,可定就会有协议让硬件彼此能过进行交互。这些协议都在本地主机各自的硬件中,通讯成本低问题少。

网络不就是让每个主机进行通讯吗,但是网络通信有个最大的问题就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就得解决问题,所以需要新的协议。

有TCP/IP五层协议的本质就是通信的主机距离变远了。 在TCP协议中这五层设计的不就是为了实现通讯吗主机到网络再到对应主机,TCP/IP五层协议不就是为了通讯服务的。

在这里插入图片描述


TCP/IP 协议的本质是一种解决方案
TCP/IP 协议能分层, 前提是因为问题们本身能分层
在这里插入图片描述
TCP/IP协议的各层,在操作系统中都有对应实现,操作系统提供了协议的运行环境和系统调用接口,供应用层使用,实现网络通信。主机上的操作系统不同,比如Windows操作系统能和Linux操作系统进行通讯,但是所有的主机上的操作系统的网络协议栈都是一样的遵循相同的标准,这个标准就是协议。

在这里插入图片描述
双方同层之间有相同的结构体,用同样的代码实现协议,用同样的自定义数据类型,天然就要"共识",能够识别对方的数据,这是不是就是约点。

协议就是通信双方都认识的结构化的数据类型。
协议栈是分层的,所以每一层都有双方的协议,同层之间互相可以认识对方的协议。

三、网络传输流程

局域网(Local Area Network,LAN)是指在有限的地理范围内,如家庭、办公室、学校或建筑物内,通过通信设备和传输介质连接起来的计算机网络。局域网通常用于共享资源、数据传输和通信。
局域网具有高传输速率、低延迟和较小的覆盖范围。常见的传输介质包括以太网电缆、光纤和无线信号。局域网的拓扑结构包括星型、环型、总线型和网状型等。
以太网(有线),令牌环网、无线LAN(wifi),都属于局域网。

以下传输流程以以太网为例

MAC地址

MAC地址(Media Access Control Address)是网络设备的唯一标识符,用于在局域网(LAN)中识别设备。它是一个48位的硬件地址,通常表示为12个十六进制数字,每两个数字之间用冒号或连字符分隔,例如00:1A:2B:3C:4D:5E。

MAC地址的作用是MAC地址在数据链路层(OSI模型的第二层)中用于确保数据包能够准确地发送到目标设备。它在局域网中用于设备之间的通信,尤其是在以太网和Wi-Fi网络中。
在这里插入图片描述

在一个局域网中有多台主机,每个主机都会有它的唯一Mac地址。以太网中任何时候只允许一台主机向网络中发送数据,如果有多台主机同时发送数据,会发生数据干扰,称为数据碰撞(所以当我们在人特别多的地方网就不好使)。没有交换机的情况下一个以太网就是一个碰撞域,为了避免上面的数据碰撞会进行碰撞检测和碰撞避免。所有主机从网络中拿数据,网络本质就是一个共享资源,可以把网络理解为临界资源,那么为了避免数据碰撞的碰撞避免算法就是互斥属性。

网络协议栈

网络协议栈是计算机网络中用于实现网络通信的分层结构模型。它将复杂的网络通信过程分解为多个层次,每一层负责特定的功能,并通过标准化的协议与相邻层进行交互。
在这里插入图片描述
上图是TCP/IP协议的网络协议栈,在网络协议栈中,每一层都有协议。虽然报文从一台主机的的协议层通过向下封装的过程通过网络传到目标主机再从下到上进行解包,但是同层之间认为自己在和对方同层协议进行直接通信(不管是发送主机还是目标主机),

在这里插入图片描述
分用:在接收方主机中,将从传输层收到的数据,根据端口号或其他标识,分发给正确的上层应用进程。
分离:通常是指在数据的传输过程中,逐层“分离”每一层的头部信息,得到纯净的上层数据。
分用决定交给哪个上层应用,分离分开协议报头和有效数据。

报头部分, 就是对应协议层的结构体字段, 我们一般叫做报头
除了报头, 剩下的叫做有效载荷(有效载荷其实就是数据)
报文=报头+有效载荷
在这里插入图片描述

采用自顶向下封装的方式,是贯穿了操作系统以及协议栈,前面说了提供了协议的运行环境和系统调用接口,供网络协议栈中的每个层使用。

不考虑应用层协议,任何协议报头都要有和有效载荷分离的能力,报头中必须包含如何将自己的有效载荷交付给上层的那一个具体协议。底层收到报文,但是该报文不是发送给我的,数据链路层直接丢弃。

ip地址

IP地址(Internet Protocol Address)是互联网协议地址的简称,用于标识网络中的设备。每个连接到互联网的设备都有一个唯一的IP地址,以便在网络中进行通信和数据传输。
IP协议有IPv4和IPv6协议,现在主流使用的IPv4协议。IPv6的出现主要是解决ip地址不够用的问题。
跨网段的主机的数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。

区分ip地址和mac地址

ip地址是全局寻址,是当前发送信息的主机是起点到接收信息的目的主机是终点,是一头一尾的概念。
mac地址是局部寻址,信息传播途中信息不会直接到终点会有多个路由器或者交换机,是标识发送信息主机与下一个路由器,一个局部的概念,表示发送信息途中的中转站的概念。
在这里插入图片描述

IP 地址在整个路由过程中, 一直不变。Mac 地址一直在变。目的 IP 是一种长远目标, Mac 是下一阶段目标, 目的 IP 是路径选择的重要依据, mac 地址是局域网转发的重要依据。

在这里插入图片描述
在这里插入图片描述
如上图,用户a数据从上而下一层一层的封装报头,然后发送出去。报文中封装了目的ip和源ip,路由器拿到报文,会发现这个报文的目的ip不属于这个局域网,然后路由器会对报文解包,分析ip后重新封装然后传给另一个局域网。这个报文当前封装报头的协议已经不是之前一开始那个报头的协议了,是路由器封装的新的协议报头。
IP 网络层存在的意义: 提供网络虚拟层, 让世界的所有网络都是 IP 网络, 屏蔽最底层网络的差异。

http://www.xdnf.cn/news/8085.html

相关文章:

  • 【Java面试】从Spring Boot到Kafka:技术栈与业务场景全面剖析
  • 5G 网络切片深度解析
  • Python----循环神经网络(Word2Vec的优化)
  • 《JVM G1 源码分析和调优》笔记
  • C++23 容器推导指引中对于分配器的非推导语境(P1518R2)
  • 用 Deepseek 写的 html+js 密码生成器
  • 【软件使用】RSS(Really Simple Syndication)
  • WebSocket 从入门到进阶实战
  • LeetCode 76题「最小覆盖子串」
  • 嵌入式学习的第二十六天-系统编程-文件IO+目录
  • Axure安装与基础
  • 计算机网络 第三章:运输层(二)
  • day1 大模型学习 Qwen系列学习
  • Java求职面经分享:Spring Boot到微服务,从理论到实践
  • RISC-V 开发板 MUSE Pi Pro Gstreamer 编码UVC及MIPI CSI摄像头视频流
  • flutter 项目调试、flutter run --debug调试模式 devtools界面说明
  • 每日Prompt:像素风格插画
  • HarmonyOS NEXT~鸿蒙系统下的Cordova框架应用开发指南
  • React中常用的钩子函数:
  • ubuntu20.04vscode使用C++20(调整gcc版本vscode设置)
  • 【Spark集成HBase】Spark读写HBase表
  • 深度解析Pytest中Fixture机制与实战案例
  • VSCode GitHub Copilot 安装与使用完全指南
  • (初级)前端初学者入门指南:HTML5与CSS3核心知识详解
  • 【Ubuntu修改串口延时(Latency Timer)为1毫秒(设备拔插或系统重启后自动生效)】
  • 矩阵短剧系统:如何用1个后台管理100+小程序?技术解析与实战应用
  • SQL概述和定义
  • HarmonyOS开发-自定义倒计时功能
  • 基于系统整合的WordPress个性化配置方法深度解析:从需求分析到实现过程
  • SQLite 创建表