【计算机网络】简学深悟启示录:网络基础

文章目录

1.计算机网络背景

图中看出,这是一个传统的、非网络化的(单机)计算机工作模式,是早期计算机系统中的一种低效工作流程,计算机之间没有互联(局域网或互联网

为什么要建立计算机网络或集中式数据库

  1. 效率极低(串行处理):用户必须排队使用机器,无法并发(同时)工作
  2. 数据孤岛(Data Silos)A 电脑不知道 B 电脑里有什么,数据无法整合,业务流程割裂
  3. 资源独占:一个人在使用机器时,其他人只能干等,造成人力资源的浪费
  4. 物理限制:业务流程受限于物理位置,人必须跟着机器走,而不是数据跟着人走

后来,通过共享同一台服务器,实现资源共享,三人能够并行工作,数据在服务器,客户端随时调用,解决了人找数据的低效问题

再后来,引入了两个关键的网络互联设备:交换机 (Switch)路由器 (Router) ,这也形成了局域网

  • 交换机 (交换机 - Switch)

    • 作用 :负责内部沟通
    • 左侧:一台交换机连接了3台电脑。这3台电脑之间的高速数据传输由这台交换机处理,不需要经过路由器
    • 右侧(级联) :展示了交换机的扩展能力。上面的交换机不仅连了电脑,还连了下面另一台交换机。这种级联 (Cascading) 方式允许网络接入更多的电脑(当一台交换机端口不够用时)
  • 路由器 (路由器 - Router)

    • 作用 :负责跨网沟通
    • 关键点:它位于正中央,连接左边的网络和右边的网络。如果左边的电脑想发消息给右边的电脑,数据必须经过这台路由器进行"指路"(路由)。它起到了隔离广播风暴和互联不同网段的作用

全球几十亿台电脑如果都连在一个大交换机网络里,光是"广播"消息就能瞬间把网络堵死;且无法划分部门权限,所以需要两台设备,通过增加交换机和级联,网络可以连接几十台甚至上百台电脑,而不像图2那样受限于一根线或一台设备

当网络快速发展后,企业级网络就需要跨越地理限制,将分布在全球各地的分公司连接起来的,通过多个路由器连接,这就形成了广域网

总结:

阶段 模式 核心特征 解决的问题
1 单机独立 人肉跑腿,数据隔离 (原始状态,问题多)
2 基础局域网 一根线连服务器 解决了数据共享和排队问题
3 结构化局域网 交换机组网 + 路由器隔离 解决了网络扩容和部门隔离问题
4 广域网 (WAN) 路由器跨地域互联 解决了地理距离限制问题

2.认识协议

2.1 协议的概念

简单来说,协议就是计算机之间沟通的"语言"和"规则"

想象一下:

  • 大阪的电脑想给洛杉矶的电脑发一张图片
  • 大阪电脑说的是"日语"(某种特定的二进制编码格式)
  • 洛杉矶电脑只听得懂"英语"(另一种格式)
  • 中间的路由器如果没有任何规则,根本不知道该把这包数据往哪里扔

协议的作用就是规定: 大家都说同一种语言,都遵守同一套交通规则。只有这样,数据才能准确无误地从一台机器传到地球另一端的另一台机器

2.2 协议分层

举个例子,我们打电话的时候声音的传播是通过层层解析,转化为物理硬件能够识别的方式进行信息传播的

OSIOpen System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是⼀个逻辑上的定义和规范,把网络从逻辑上分为了7层,每⼀层都有相关、相对应的物理设备,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整

1. 基础硬件层(底层)------ 负责"修路和运输"

这三层主要由硬件设备处理,这也是你之前看到的交换机和路由器工作的地方

  • 第 1 层:物理层 (Physical Layer)

    • 定义 :以"0"、"1"代表电压高低、灯光闪灭;界定连接器和网线的规格
    • 通俗理解 :就是网线、光纤和网卡接口。它负责把数据变成电信号发出去
    • 对应设备:网线、集线器
  • 第 2 层:数据链路层 (Data Link Layer)

    • 定义:互连设备之间传送和识别数据帧;分段转发
    • 通俗理解 :它负责把这一堆"0"和"1"整理成一个有头有尾的**"数据帧"**。它保证数据能从这台电脑传到那台电脑(同一局域网内)
    • 对应设备交换机 (Switch)
  • 第 3 层:网络层 (Network Layer)

    • 定义:地址管理与路由选择;决定"经过哪个路由传递到目标地址?"
    • 通俗理解 :它负责导航 。给每个设备发一个 IP地址,然后决定走哪条路去美国洛杉矶
    • 对应设备路由器 (Router)(就是你在图3 image_0d9b01.png 和图4 image_0d357f.png 看到的设备)

2. 核心传输层(中层)------ 负责"物流管理"

  • 第 4 层:传输层 (Transport Layer)
    • 图片定义:管理两个节点之间的数据传输;负责可靠传输(是否有数据丢失?)
    • 通俗理解 :它是快递员。如果包裹丢了(丢包),它负责重新发一份;如果包裹太大了,它负责拆成小份发。它保证数据完整地送到对方手中

3. 应用软件层(高层)------ 负责"拆包和使用"

这三层主要在电脑的操作系统和软件里运行,离用户(你)最近

  • 第 5 层:会话层 (Session Layer)

    • 定义:通信管理。何时建立连接、何时断开连接以及保持多久?
    • 通俗理解:就像打电话时的**"接通"和"挂断"**。它管理你和服务器之间的对话窗口
  • 第 6 层:表示层 (Presentation Layer)

    • 定义:设备固有数据格式和网络标准格式的转换;接收不同表现形式的信息(如文字、图像、声音)
    • 通俗理解 :它是翻译官 。把网络传来的二进制代码翻译成你的屏幕能显示的图片(JPG)、文字(TXT)或声音(MP3
  • 第 7 层:应用层 (Application Layer)

    • 定义:针对特定应用的协议(电子邮件、远程登录、文件传输)
    • 通俗理解 :就是你直接使用的功能。比如你要发邮件(SMTP协议),看网页(HTTP协议),传文件(FTP协议)

总结:数据是如何"旅行"的?

当你在大阪给洛杉矶发一封邮件时,流程是这样的:

  1. 应用层到会话层(7-5层):邮件内容被打包,格式转换好
  2. 传输层(4层):为了防止丢失,数据被打上标记
  3. 网络层(3层)路由器给包裹贴上"收件人:洛杉矶"的标签,并选择路线
  4. 数据链路层(2层)交换机把数据送到路由器的端口
  5. 物理层(1层) :变成电流,顺着海底光缆飞向美国

到达美国后,过程反过来 (从 1 层到 7 层),直到洛杉矶的电脑屏幕上显示出"你有一封新邮件"

其实在网络角度,OSI 定的协议 7 层模型其实非常完善,但是在实际操作的过程中,会话层、表示层

是不可能接入到操作系统中的,所以在工程实践中,最终落地的是 5 层协议

3.网络传输基本流程

3.1 MAC 地址

MAC 地址是在设备出厂时,直接烧录在网卡(网络芯片)里的硬件。理论上,全世界每一台联网设备(手机、电脑、智能冰箱)的网卡都有一个独一无二的 MAC 地址。无论你把电脑从北京搬到上海,还是从家里连到星巴克,你的 IP 地址会变,但 MAC 地址永远跟着你的网卡走

它由一串 16 进制 的数字和字母组成,中间通常用冒号或短横线分开

  • 例如:00:1A:2B:3C:4D:5E
    • 前一半00:1A:2B):代表厂商(比如这是苹果生产的,还是华为生产的)
    • 后一半3C:4D:5E):是该厂商生产的流水号

🤔IP地址和MAC地址有什么区别?

IP 地址在网络层,负责告诉你数据要送到哪个城市、哪个小区,这是路由器 看的东西
MAC 地址在数据链路层,负责在同一个小区(局域网)里,精准地交到谁手里,这是交换机看的东西

工作流程举例:

  1. 快递员(路由器)根据 IP 地址把包裹送到了你们公司的"传达室"。
  2. 分拣员(交换机)拿到包裹,但他不看你是哪里的(IP),他只看你的身份证号(MAC
  3. 他大喊:"谁是 00:1A...?"
  4. 你的电脑举手:"是我!"
  5. 交换机就把数据通过那根网线精准地传给你,而不是传给隔壁同事。

3.2 数据封装与解包

当两台联网设备进行通信时,用户发送的部分叫做有效载荷,网络通信必须要经过多层处理,才能保证传输信息可靠性、有序性、准确性,为了让服务端获取到每一层需要的信息,就需要在有效载荷前加上每一层的报头,报头就是对应协议层的结构体字段,这整个要发送的数据就是报文,这样经过层层封装再层层解包就能准确通信

报文 = 报头 + 有效载荷

3.3 IP 地址

3.3.1 IPv4 和 IPv6

IP 地址是互联网协议地址的缩写,本质是分配给网络中每台设备的唯一标识,用于在网络中定位和通信,相当于设备在网络里的"门牌号"

目前主流使用的是 IPv4 ,未来会逐步过渡到 IPv6,两者的核心区别是地址长度和数量。

理论上有 2 32 2^{32} 232 个,但由于早期分配不均,现在公网 IPv4 地址已非常稀缺,这也是私有IPNAT技术出现的原因

NAT技术是啥?

传统 NAT 仅能实现内网私有 IPv4 和公网 IPv4 的转换,但它的扩展技术 NAT64 可以实现内网 IPv4IPv6 的连接,这种双栈技术能够很好的过渡 IPv4IPv6 网络地址的转换

IPv6 理论上有 2 128 2^{128} 2128 个,数量极其庞大,能满足未来万物互联的需求(比如每台智能设备都能分配独立公网 IP)。目前在服务器机房、5G 网络、物联网设备中逐步普及,你的 Linux 服务器若配置 IPv6,可直接被外网访问,无需 NAT 映射

3.3.2 公有IP和私有IP

  1. 公有IP(公网IP)

    全球唯一,由互联网服务提供商(ISP,比如电信、阿里云)分配,可直接在互联网上被访问。你部署C++服务或AI应用的Linux服务器,若要让外网用户访问,必须配置公有IP(静态公有IP需向运营商申请)

  2. 私有IP(内网IP)

    仅在局域网内唯一(但是在不同局域网可能相同),不同局域网之间可以重复使用,无法直接被外网访问,需要通过NAT技术转换成公有IP才能上网。你本地电脑、虚拟机、Docker容器的IP,都是私有IP;同一局域网内的设备通过私有IP互相通信(比如你用虚拟机的IP访问里面的服务)。

    • 常用网段(你必须记住的3个):
      • A类:10.0.0.0 ~ 10.255.255.255
      • B类:172.16.0.0 ~ 172.31.255.255
      • C类:192.168.0.0 ~ 192.168.255.255

3.4 跨网络传输

当局域网和局域网之间传输时,就需要路由器转发 IP,以太网协议中,数据链路层的报头会带有源地址和目标地址的信息,实际上所有局域网里的设备都会收到一整个报文,并进行信息比对,如果不对就舍弃,正确就发送给路由器进行转发 IP。通常如果是在局域网内通信会使用交换机,避免大量数据通过同一总线造成的数据错误和丢失,进而避免数据碰撞

接收端使用的令牌环协议和以太网协议很像,当路由器接收到数据时,会将信息打包成令牌,在接收设备的局域网环形比对,找到对应端口时,就将打包好的报文发送到正确设备

IP 地址在整个路由过程中,一直不变,Mac 地址一直在变

4.IP地址与端口号

当传输数据时,传输到哪个主机不是目的,传输到主机的特定进程才是目的,所以端口可以理解为告诉操作系统传输的数据要交给哪个进程来处理。IP 在网路层,Port 在传输层

端口号通常会进行分类:

  • 知名端口号: 绑定常用应用层协议,端口号固定(0-1023
  • 动态分配端口号: 供客户端程序临时使用(1024-65535),由操作系统在客户端发起连接时动态分配,连接结束后释放,避免端口冲突

另外,一个进程可以绑定多个端口号,但是一个端口号不能绑定多个进程。所以我们通过 IP+Port 就能实现向互联网唯一进程通信,如:192.168.2.5:8080,我们称该组合为套接字 socket

5.常见协议

用户想要访问网络功能,必须通过系统进行调用,那么协议在这中间就起到一个标准化调用的作用

  • TCP协议: 面向可靠通信的传输层协议,应用在网页浏览、文件传输等,适合可靠传输

    • 有连接: 通信前需通过"三次握手"建立连接,通信后通过"四次挥手"关闭连接,类似"先拨通电话再交流"
    • 可靠传输: 通过确认机制、重传机制、流量控制等保障数据无丢失、无乱序
    • 面向字节流: 数据以连续字节序列的形式传输,可按需拆分/重组,适配大文件传输等场景
  • UDP协议: 面向高效通信的传输层协议,应用在视频通话、实时游戏等对延迟敏感、可容忍少量数据丢失的场景,适合灵活传输

    • 无连接: 通信前无需建立连接,直接发送数据,类似"直接发邮件无需确认对方是否在线"
    • 不可靠传输: 无确认、重传机制,数据可能丢失或乱序
    • 面向数据报: 数据以独立的"数据报"为单位传输,每个数据报独立处理

6.网络字节序

网络字节序是指网络传输中数据的排列规则,TCP/IP 协议规定采用大端字节序,即先发送的数据(低地址)存放数值的高位字节。因此,无论主机本身是大端还是小端架构,在网络通信时都必须遵守这一标准:发送端若为小端机需先转换为大端序(大端机则无需转换),接收端再根据自身情况解析,通常通过调用标准库函数来进行主机字节序与网络字节序的转换,以确保数据在不同机器间能被正确识别

7.sockaddr结构

sock就是套接字,可以理解为我们把需要传送的目的地址等等信息打包好,然后形成一个抽象接口,供开发者调用,这就是sock编程

这一个个 sock 接口,可以理解为 structstruct sockaddr 可以理解为 void*,在调用网络接口传参的时候基本都是传 sockaddr 形式的,为的就是方便统一接口,后面这两个就是基于 sockaddr 的不同接口

IPv4IPv6 的地址格式定义在 netinet/in.h 中,IPv4 地址用 sockaddr_in 结构体表示,包括 16 位地址类型, 16 位端口号和 32IP 地址


希望读者们多多三连支持

小编会继续更新

你们的鼓励就是我前进的动力!

相关推荐
北冥有渔jy5 小时前
BT6.0常见的BUG
网络·安全·bug·蓝牙
油丶酸萝卜别吃5 小时前
如何使用http-server --cors启动页面?
网络·网络协议·http
想不明白的过度思考者6 小时前
Java网络聊天室——OverThinker-ChatRoom
java·开发语言·网络
sdszoe49226 小时前
思科设备密码与远程telnet管理
网络·智能路由器·telnet·思科网络设备远程管理
Biteagle6 小时前
P2PK:比特币的「原始密码锁」与比特鹰的技术考古
网络·网络协议·p2p
兩尛6 小时前
计算机网络-八股
计算机网络
杰瑞不懂代码6 小时前
基于 MATLAB 的 BPSK 在 AWGN 信道下误码率仿真与性能分析
开发语言·网络·matlab
gaize12137 小时前
如何确保服务器的安全性
网络·安全·web安全
鲨莎分不晴15 小时前
强化学习第五课 —— A2C & A3C:并行化是如何杀死经验回放
网络·算法·机器学习