news 2026/3/3 13:59:35

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/3/3 19:21:17

智能零碳管理系统功能与实现

智能零碳管理系统旨在帮助企业有效管理和监控其碳排放,同时为公众用户提供有用的碳排放信息和咨询服务。本文将详细介绍该系统的功能模块与Django模型代码的实现。一、系统角色与权限总结 1. 管理员 审核企业碳排放数据(可设置不合格提醒) 发…

作者头像 李华
网站建设 2026/2/17 10:28:19

你是否正在经历这些知识管理的 “隐形内耗”?​

技术文档散落在语雀、GitHub、本地硬盘,新员工入职像 “寻宝”;写一份部署手册要熬 4 小时,修改迭代还要跨平台同步;搜索 “token 过期解决方案”,返回几十篇无关文档,翻半天找不到重点;敏感数据…

作者头像 李华
网站建设 2026/2/25 19:36:23

快速排序(Quick Sort)的“死穴”

快速排序(Quick Sort)的“死穴”,也就是它的最坏情况。简单来说,它的意思是:如果你运气不好,选的基准值(Pivot)太极端,快速排序就会变得非常慢,慢得像冒泡排序…

作者头像 李华
网站建设 2026/2/26 17:18:04

25、技术探索:Google App Engine、Zenoss与Python包管理

技术探索:Google App Engine、Zenoss与Python包管理 一、Google App Engine数据查询与路由 在Google App Engine开发中,数据查询与路由是重要的环节。以下是一段用于从数据存储中获取最后10条记录并进行处理的代码: collection = [] #grab last 10 records from datasto…

作者头像 李华
网站建设 2026/2/22 8:50:55

每日一练:流星雨

题目描述贝西听说一场非凡的流星雨即将来临;报告称这些流星将撞击地球并摧毁它们所碰到的任何东西。为了安全,她发誓要找到一个安全的位置(一个从未被流星摧毁的地方)。她目前在坐标平面的原点放牧,想要移动到一个新的…

作者头像 李华
网站建设 2026/3/3 20:07:04

21、SNMP网络管理与数据中心发现实战

SNMP网络管理与数据中心发现实战 1. 配置Net - SNMP 当你要在想要监控的客户端上安装Net - SNMP时,应使用主机资源MIB(Management Information Base,管理信息库)来编译Net - SNMP。具体操作步骤如下: ./configure -with-mib-modules=host运行 configure 时,它会尝试…

作者头像 李华