网络基础1

目录

[1 网络通信的问题](#1 网络通信的问题)

[2 网络的解决方案 -- 层状结构](#2 网络的解决方案 -- 层状结构)

[3 网络与系统的关系:](#3 网络与系统的关系:)


网络发展的背景:

1.对于我们国家来讲,网络的发展,不仅仅是互联网公司在发展,更是靠三大运营商持续建造通信基础设施来支撑的。

2.新的设备的诞生,集线器,网线,光纤,调制解调器,路由器,防火墙,服务器等等。这些设备各司其职:集线器和交换机负责在局域网内转发数据,网线和光纤负责物理传输,调制解调器负责信号转换,路由器负责在不同网络之间选择最佳路径,防火墙负责安全防护,服务器则负责提供各种网络服务。正是这些设备协同工作,才构成了完整的网络体系。

1 网络通信的问题

单台机器其实也是网络结构,因为各各模块也是需要进行通信,与网络最大的区别就是网络传播的距离长。这时就有了新的问题:

  1. 丢包了怎么办
  2. 目标机器的定位的问题
  3. 如何让我们的报文在经历了无数个设备之后,还能准确的把数据推送给远端机器

为了解决这些问题,就引入了约定了协议

计算机之间的传输媒介是光信号和电信号. 通过 "频率" ,"有无","强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式,定制全面的网络协议,不是只是软件层面的 0 和 1,还需要硬件的电器特性相同。

网络通信时一定会通过很多中间设备:

  • 如何保证把数据先交给下一跳设备
  • 在转发中如何进行路径选择,目标主机定位问题
  • 如果报文中间出现错误或者丢失
  • 送达的问题,还要解决如何使用数据的问题

每一个问题都需要协议来解决,所以需要的协议很多

2 网络的解决方案 -- 层状结构

因为大部分语言都提供继承的方案,就可以设计出层状的软件,可以方便地完成软件的解耦合,未来我们非常方便地进行软件的维护。

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

TCP/IP五层(或四层)模型

TCP/IP 是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层 的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。物理层我们考虑的比较少,因此很多时候也可以称为 TCP/IP 四层模型。

  1. 物理层:负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性。集线器(Hub)工作在物理层,可以在传播中放大信号,减少衰减。
  2. 数据链路层:负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。 有以太网、令牌环网, 无线LAN等标准。交换机(Switch)工作在数据链路层,用来划分碰撞域。
  3. 网络层:负责地址管理和路由选择。例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
  4. 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  5. 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 我们的网络编程主要就是针对应用层。

3 网络与系统的关系:

网络协议栈与操作系统的关系非常密切:用户要使用网络的功能,不是直接使用网卡,而是贯穿使用网络协议栈,而网络协议栈在操作系统中,因此要调用网络提供的系统调用接口,所以操作系统要实现网络协议栈的两层传输层和网络层。

为什么称为 TCP/IP 协议栈,因为这两个协议就是在操作系统内核实现的。多台主机操作系统可以不同,但是网络协议栈基本是一样的,因此可以互相通信

管理报文,先描述后组织,对数据结构的增删查改。协议通常是结构化字段表征的,也就是 struct ,这个结构化字段定义的对象,我们叫做协议报头。

MAC地址用来识别数据链路层中相连的节点,长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)在网卡出厂时就确定了,不能修改,全球唯一。MAC地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置MAC地址)。

在同一个局域网中,两台主机可以直接通信。在局域网通信时,所有人都可以收到信息,因为报文中包含发送者的 Mac 地址和目的 Mac 地址,所以其他主机只有发现与自己 Mac 地址相同才会接收,否则丢弃。但是可能发生碰撞,所以局域网还称为碰撞域,要执行碰撞避免算法,正确的发送数据,任何时刻,只允许一台主机在局域网中发消息,称为以太网,所以学校开大型会议时网就会卡,因为碰撞变多。局域网就是一个临界资源,碰撞避免和检测重发就是完成互斥访问。

模拟发送你好行为:

发送时要贯穿协议栈,通过每一层时都要对上一层进行添加报头,上一层的内容就是有效载荷。封装,一定要考虑后面的解包的过程,因此便有了两个问题:

  1. 如何将报文中,报头和有效负载进行分离,需要提前约定好。
  2. 任何协议都要解决如何将自己的有效载荷交付给上层的哪一个协议。

下图为数据封装的过程:

下图为数据分用的过程:

4 IP地址与 Mac地址

IP协议有两个版本, IPv4和IPv6。凡是提到 IP 协议, 没有特殊说明的, 默认都是指IPv4。

  1. IP地址是在IP协议中, 用来标识网络中不同主机的地址。
  2. 对于IPv4来说,IP地址是一个4字节,32位的整数。
  3. 我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1。 用点分割的每一个数字表示一个字节,范围是 0 - 255。

0,255.0,255.0,255.0,255 点分10进制ip地址,c/c++,一般都是字符串,但可以与整数风格转换。4个字节表示网络IP传递即可,不用使用字符串。IP地址分为 公网IP 和 内网IP。我们见到的实际都是内网IP,我们使用的云服务器是公网IP。公网IP,可以表示互联网中唯一的一台主机。

Mac地址可以标识局域网中唯一的一台主机,IP地址可以表示全网中的为一台主机 ,也可以是局域网中的一台。

当跨网络通信时:核心规律IP地址(最终地址)全程不变,MAC地址(下一站地址)每经过一个路由器就更换一次:

  • MAC的作用就是保证数据能稳稳地跳到"下一站",在同一段物理链路内,确保数据帧被正确的硬件网卡接收,并做差错校验。
  • 而IP的作用就是保证数据最终能跳到"终点站",跨网段时,帮沿途路由器决定数据包该往哪个大方向转发,帮我们做路径选择。

网络通信轮廓示意图:

不同局域网间通过路由器进行通信,IP地址不发生改变,Mac地址一直在改变

从 IP层 往上网络报文无差异,不用担心以太网和令牌环网的不同,通过 IP 层可以屏蔽底层的差异,一切皆IP,网络 IP 地址

本篇结束!

相关推荐
2601_962299881 小时前
Python编写Linux命令指南
linux·python·开发·命令·指南
此冬歌咏1 小时前
自动化服务器运维监控系统(python+shell)
linux·运维·服务器·开发语言·python·自动化
风景的人生1 小时前
虚拟机ip连不上(怀疑是最开始虚拟机复制造成的网络冲突)
linux·运维·服务器
老赵的博客1 小时前
c++QT之动态库加载常见报错
c++·qt
wabs6661 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
Cx330❀1 小时前
【Linux网络】深入TCP协议:从滑动窗口到拥塞控制与性能优化全景解析
linux·开发语言·网络·tcp/ip·ai·性能优化·ai编程
hetao17338372 小时前
2026-09-08 hetao1733837 的刷题记录
c++·算法
自动化监测Learner2 小时前
自动化监测数据传不出廊道?大坝通信组网选型实战:RS485、光纤、4G、LoRa、北斗短报文一篇讲透
运维·网络·自动化
代码村新手2 小时前
Linux-将普通用户添加到系统信任文件(sudoers file)白名单中
linux