news 2026/8/7 17:29:39

Linux编程网络基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux编程网络基础

文章目录

  • 一、初识协议
    • 1. 协议的本质
    • 2.OSI七层模型
    • 3.TCP/IP五层(或四层)模型:
  • 二、网络传输的基本流程
    • 1.局域网通信
    • 2.跨网段通信
  • 三、对比IP地址和Mac地址

一、初识协议

1. 协议的本质

  • 协议是一种约定,协议本质是软件的、分层的,分层是解耦合的一种有效方式,解耦合是为了可维护性,不同主机同层协议之间是各自使用下层提供的结构能力来完成的通信。

2.OSI七层模型

  • • OSI七层⽹络模型称为开放式系统互联参考模型,是⼀个逻辑上的定义和规范;把⽹络从逻辑上分为了7层. 每⼀层都有相关、相对应的物理设备,⽐如路由器,交换机;但是, 它既复杂⼜不实⽤; 所以我们按照TCP/IP四层模型来讲解.

3.TCP/IP五层(或四层)模型:

TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求.

  • 物理层: 负责光/电信号的传递⽅式. ⽐如现在以太⽹通⽤的⽹线(双绞线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等. 集线器(Hub)⼯作在物理层.
  • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作. 有以太⽹、令牌环⽹, ⽆线LAN等标准. 交换机(Switch)⼯作在数据链路层.
  • ⽹络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)⼯作在⽹路层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到⽬标主机.
  • 应⽤层: 负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等. 我们的⽹络编程主要就是针对应⽤层.

物理层我们考虑的⽐较少,我们只考虑软件相关的内容. 因此很多时候我们直接称为 TCP/IP四层模型。
一般来说:

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

但是并不绝对. 很多交换机也实现了⽹络层的转发; 很多路由器也实现了部分传输层的内容(⽐如端⼝转发);

网络也是操作系统的一部分,TCP/IP协议也是用C/C++写的,协议本质就是结构体,所谓协议,就是通信双方都认识的结构化的数据类型

二、网络传输的基本流程

1.局域网通信

  • 两台主机在同⼀个局域⽹,是能够直接通信的
  • 每台主机在局域网上,要有唯⼀的标识来保证主机的唯⼀性:mac地址

mac地址

  • MAC地址⽤来识别数据链路层中相连的节点;
  • ⻓度为48⽐特位, 即6个字节. ⼀般⽤16进制数字加上冒号的形式来表⽰(例如:08:00:27:03:fb:19);
  • 在⽹卡出⼚时就确定了, 不能修改. mac地址通常是唯⼀的,但也有些⽹卡⽀持⽤⼾配置mac地址;
  • 在Linux中通过ifconfig来查看,在windows中通过ipconfig /all来查看;

    注意:
  • 以太⽹中,任何时刻,只允许⼀台机器向⽹络中发送数据
  • 如果有多台同时发送,会发⽣数据⼲扰,我们称之为数据碰撞
  • 所有发送数据的主机要进⾏碰撞检测和碰撞避免
  • 没有交换机的情况下,⼀个以太⽹就是⼀个碰撞域
  • 局域⽹通信的过程中,主机对收到的报⽂确认是否是发给⾃⼰的,是通过⽬标mac地址判定

在双方通信中,要进行报文的封装以及解包和分用
报⽂=报头+有效载荷
其中每一层的有效载荷是上一层传下来的数据,例如下图的传输层中,报头为传输层报头,有效载荷为应用层报头+“你好”;

在不同层完整报文有不同的叫法:

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报(datagram),在链路层叫做帧(frame).
  • 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装(Encapsulation)。
  • ⾸部信息中包含了⼀些类似于⾸部有多⻓, 载荷(payload)有多⻓, 上层协议是什么等信息.

在⽹络传输的过程中,数据不是直接发送给对⽅主机的,⽽是先要⾃顶向下将数据交付给下层协议(封装),最后由底层发送,然后由对⽅主机的底层来进⾏接受,在⾃底向上进⾏向上交付(解包和分用);

2.跨网段通信

  • IP在网络中,用来标识主机的唯一性
  • 公网IP具有全局性,私有ip只在局域网中有用

IP地址
IP 协议有两个版本, IPv4 和 IPv6 . 在本系列文章中,提到的IP协议, 默认都是 IPv4

  • IP 地址是在 IP 协议中, ⽤来标识⽹络中不同主机的地址;
  • 对于 IPv4 来说, IP 地址是⼀个 4 字节, 32 位的整数
  • 使⽤ “点分⼗进制” 的字符串表示 IP 地址, 例如 192.168.0.1 ; 用点分割的每⼀个数字表示⼀个字节, 范围是 0 - 255 ;

跨⽹段的主机的数据传输. 数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器

路由器通常有两个网卡,当主机A发现不是发给自己局域网主机的报文时,就将报文发送给路由器,由路由器传给下一个网段

三、对比IP地址和Mac地址

  • 通俗理解 IP地址在整个路由过程中,⼀直不变
  • Mac地址⼀直在变
  • 目的IP是⼀种长远目标,Mac是下⼀阶段目标,目的IP是路径选择的重要依据,mac地址是局域网转发的重要依据
  • IP网络层存在的意义:提网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽最底层网络的差异
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 10:31:13

C++中多态

文章目录前言一、多态的概念二、多态的定义以及实现三、抽象类四、多态的原理1. 虚函数表2. 多态的原理3. 动态绑定与静态绑定前言 本文中的代码都是在X64环境下编译运行的,涉及的指针都是8bytes,切换其他平台需要考虑指针问题。 一、多态的概念 多态是…

作者头像 李华
网站建设 2026/8/7 20:30:28

c++经典练习题-多分支

目录 1304. 冷饮的价格(2) 1044. 找出最经济型的包装箱型号 1039. 求三个数的最大数 1035. 判断成绩等级 1300. 小明暑假的零花钱 1322. 求数的量级? 1049. 汉译英 1391. 公交卡充值问题? 1668. 运动会成绩统计 1669. 上…

作者头像 李华
网站建设 2026/8/7 20:44:35

qt为什么转向用cmake放弃qmake

Qt 从 qmake 转向 CMake 是其构建系统战略的重大转型,这一转变在 Qt6 中全面落地。下面从 技术、生态、工程实践 三个维度,系统解释: 一、Qt 使用 CMake 的核心好处 1. 强大的跨平台与多编译器支持 CMake 原生支持: Windows&…

作者头像 李华
网站建设 2026/8/7 23:00:43

云屋音视频 SDK 凭何成为信创技术困局的 “破局者”?

云屋音视频 SDK:信创技术困局的破局先锋在信息技术应用创新不断加速的大环境下,企业对于音视频技术的需求层次显著提升,不再局限于基础功能,而是朝着国产化、安全合规以及自主可控的高阶方向发展。然而,传统音视频方案…

作者头像 李华
网站建设 2026/8/7 21:33:54

【怎么理解maven中的镜像和仓库?】

我们用大白话、最直接的方式来解释这个问题。 先看以下几个情况: 情况1:没有镜像(就像网购国外直邮) # 你想要一瓶可乐(比如spring-core.jar) # 你在中国,但可乐工厂(中央仓库&#…

作者头像 李华