📝个人主页🌹:Eternity._
⏩收录专栏⏪:Linux “ 登神长阶 ”
🌹🌹期待您的关注 🌹🌹
❀Linux网络
- 📒1. 计算机网络背景
- 发展历程
- "协议"
- 📜2. 网络协议初识
- 网络协议的分层结构
- 📝3. 网络传输基本流程
- 网络传输流程图
- 数据包封装和分用
- 📚4. 网络中的地址管理
- 认识IP地址
- 认识MAC地址
- 📖5. 总结
🔍前言:在浩瀚的数字宇宙中,信息如同繁星点点,通过网络协议这一无形的纽带紧密相连。Linux,作为开源社区的璀璨明珠,其网络协议栈的强大与灵活性,为信息的传输与管理提供了坚实的基础。无论你是对网络技术充满好奇的初学者,还是希望深化Linux网络知识的专业人士,了解并掌握Linux网络协议,都是通往更深层次技术探索的必经之路
本文,正是为了引领你踏入Linux网络协议的神秘殿堂而精心准备。在这里,我们将从网络协议的基本概念出发,逐步揭开Linux网络协议栈的面纱,带你领略TCP/IP协议族的博大精深,以及Linux如何优雅地实现这些协议,确保信息的准确、高效传输
网络协议的学习之路或许充满挑战,但正是这些挑战,塑造了技术人的坚韧与智慧。因此,在本文中,我们力求以简洁明了的语言,结合生动的实例和直观的图表,将复杂的网络协议知识转化为易于理解的精华,助你轻松跨越学习障碍
让我们携手并进,共同揭开Linux网络协议的神秘面纱,领略其背后的技术之美!
📒1. 计算机网络背景
发展历程
计算机网络的发展可以追溯到20世纪60年代。当时,美国国防部的高级研究计划署(ARPA)启动了一个名为ARPANET的研究项目,旨在将分布在全美的计算机连接起来,实现资源共享和信息交流。ARPANET于1969年建成,成为了世界上第一个计算机网络
在随后的几十年里,计算机网络经历了从军用到民用、从局域网到广域网的快速发展。20世纪70年代,随着计算机和网络技术的不断进步,计算机网络开始向商业化和民用化方向发展。1974年,ARPANET采用了TCP/IP协议,这成为了今天互联网的基础。到了80年代,局域网(LAN)和广域网(WAN)开始普及,TCP/IP协议也成为互联网的标准协议,标志着互联网的正式建立
独立模式:计算机之间相互独立
网络互联:多台计算机连接在一起, 完成数据共享
局域网LAN:计算机数量更多了, 通过交换机和路由器连接在一起
广域网WAN:将远隔千里的计算机都连在一起
重要性
:计算机网络在现代社会中发挥着举足轻重的作用。它打破了数据的孤立状态,使得不同计算机之间能够高效地交换信息和共享资源。无论是工作、学习还是生活,计算机网络都已经成为人们不可或缺的一部分。它让人们能够随时随地访问互联网,获取各种信息和服务,极大地提高了工作效率和生活质量
“协议”
“协议” 是一种约定,计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式
关于计算机,计算机操作系统,硬件设备都是有很多不同的厂家一起生产的,但是要在不同厂家生产的计算机能够,畅通无阻的进行信息交流,这个时候就需要共同来制定一个标准,所有厂商都遵守这个标准,这就是网络协议
📜2. 网络协议初识
网络协议,简称为协议,是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。这些规则详细规定了如何建立连接、如何互相识别、如何发送和接收数据等
为什么要有协议呢?
- 在网络传输中,距离是越来越长的,在传输过程中可能发生丢包
- 目标机器的定位问题
- 如何让我们的报文,在经历无数个设备之后,还能准确的将数据推送到远端机器
- 送到数据后,还要解决如何使用数据的问题
这图上的每一步,都需要协议来解决
这个时候我们就需要用到协议,而协议就是一种约定!
网络协议的分层结构
大部分的解决方案都是层状的,完成软件的解耦合,方便未来进行软件的维护
为了减少协议设计的复杂性,网络设计者通常将复杂的通信问题划分为许多个子问题,并为每个子问题设计一个单独的协议。这些协议按照功能的不同被划分为不同的层次,形成了分层的网络体系结构。常见的网络协议分层结构有OSI七层模型和TCP/IP四层(或五层)模型
OSI七层模型:
OSI七层模型:从高到低依次为应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。每一层都为其上一层提供服务,并接受其下一层的服务
TCP/IP五层(或四层)模型:
TCP/IP四层(或五层)模型:将OSI七层模型中的表示层、会话层合并为应用层,从而形成了四层(或五层)结构。从高到低依次为应用层、传输层、网络层、数据链路层和物理层(五层模型还包括一个会话层)。TCP/IP协议簇就是基于这种分层结构设计的
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
物理层
: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层数据链路层
: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层网络层
: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层传输层
: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机应用层
: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层
在不同的系统中,网络的系统调用接口大同小异
报头
:在协议中,报头(Header)通常指的是数据包或帧的开头部分,其中包含了关于该数据包或帧的元信息。这些信息对于协议的正确路由和处理数据包/帧至关重要,确保成功地将它从发送方传递到接收方
报头的重要性
:报头在协议中扮演着至关重要的角色。它是数据包或帧的“身份证”,包含了必要的元信息和控制信息,以确保数据包能够正确、高效地传输到目标地址。同时,报头也是协议实现和调试的重要工具,通过分析报头信息,可以了解数据包在网络中的传输情况,诊断和解决网络故障
局域网:
📝3. 网络传输基本流程
网络传输流程图
跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
(Encapsulation)- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
封装的时候,一定要考虑后面的解包过程:
- 如何将报文中的报头和有效载荷进行分离 —> 约定
- 任何协议都要解决如何将自己的有效载荷交付给上一层的协议 —> 共性
- 每层协议都要解决这两个问题
封装:
解包:
📚4. 网络中的地址管理
认识IP地址
指令:ip -a
可以查看当前的ip地址
- IP地址是在IP协议中, 用来标识网络中不同主机的地址
- 对于IPv4来说, IP地址是一个4字节, 32位的整数
- 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一字节, 范围是
0 - 255
IP地址的意义是:路径选择 —> 从哪里来,到哪里去,IP地址是永远不变的
认识MAC地址
- MAC地址用来识别数据链路层中相连的节点
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)
MAC地址:上一站从哪里来,下一站到哪里去 —> 当下目标,MAC地址一直在变
令牌环:
令牌环网络中,所有的计算机或工作站被连接成一个逻辑或物理的环形拓扑结构,网络中数据的传输是通过一个特殊的控制信号,即“令牌”来管理的
📖5. 总结
回顾这段学习历程,我们一同探讨了网络协议的基本概念,深入了解了TCP/IP协议族的构成与运作机制,领略了Linux网络协议栈的优雅与强大。通过生动的实例和直观的图表,我们成功地将复杂的网络协议知识转化为易于理解的精华,让你在轻松愉快的氛围中掌握了Linux网络协议的核心要点
然而,这仅仅是学习Linux网络协议的起点。前方,还有更多未知与挑战等待我们去探索与征服。在未来的日子里,你将有机会深入学习更高级的网络协议,掌握更复杂的网络架构设计与管理技能,甚至参与到开源社区的贡献中,与全球的Linux爱好者共同推动技术的革新与进步
愿你们在Linux网络协议的广阔天地中,继续书写属于自己的精彩篇章,成就更加辉煌的技术人生!
希望本文能够为你提供有益的参考和启示,让我们一起在编程的道路上不断前行!
谢谢大家支持本篇到这里就结束了,祝大家天天开心!