Linux网络基础概念

Linux网络基础概念

文章目录

  • Linux网络基础概念
    • 1.计算机网络的发展过程
      • 1.1 独立模式
      • 1.2 网络互联模式
      • 1.3 局域网 LAN
      • 1.4 广域网 WAN
    • 2.计算机网络协议
      • 2.1 协议的概念
      • 2.2 什么是网络协议
      • 2.3 什么是网络协议簇
      • 2.4 OSI 七层模型
      • 2.5 TCP/IP 五层模型
    • 3.网络传输基本流程
      • 3.1 同局域网内的两台主机通信
      • 3.2 跨网络的两台主机通信
    • 4.各层间的通讯
    • 5.认识IP地址
    • 6.认识MAC地址

1.计算机网络的发展过程

1.1 独立模式

独立模式: 计算机之间相互独立

在早期的时候,计算机之间是相互独立的,此时如果多个计算机要协同完成某种业务,那么就只能等一台计算机处理完后再将数据传递给下一台计算机,然后下一台计算机再进行相应的业务处理,效率非常低下

Linux网络基础概念_第1张图片


1.2 网络互联模式

网络互联: 多台计算机连接在一起, 完成数据共享

独立模式太麻烦了,这时就有人设法将这些计算机连接在一起,当某个业务需要多台计算机协同完成时,就可以将共享的数据放到服务器中进行集中管理,此时各个计算机就都能获取到这些共享的数据,所以各个业务在处理就能随时进行切换了

Linux网络基础概念_第2张图片


1.3 局域网 LAN

局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起

后来这样的网络雏形逐渐发展,连入这个网络中的机器变得越来越多,于是就出现了局域网的概念,在局域网中有一种设备叫做交换机,交换机主要完成局域网内数据的转发工作,也就是在局域网内将数据从一台主机转发给另一台主机。各个局域网之间通过路由器连接起来,路由器主要完成数据的路由转发工作

Linux网络基础概念_第3张图片


1.4 广域网 WAN

广域网WAN: 将远隔千里的计算机都连在一起

各个局域网之间通过路由器相互连接在一起,便组成了一个更大的网络结构,我们将其称之为广域网。实际局域网和广域网是一种相对的概念,我们也可以将广域网看作一个比较大的局域网

Linux网络基础概念_第4张图片


2.计算机网络协议

2.1 协议的概念

  • “协议”本质就是一种约定,通信双方只要曾经做过某种约定,之后就可以使用这种约定来完成某种事情。而网络协议是通信计算机双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容
  • 协议是双方约定同一种语言,进行沟通,计算机之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息.,要想传递各种不同的信息,就需要约定好双方的数据格式
  • 协议总是指某一层的协议。准确地说,它是在同等层之间的实体通信时,有关通信规则和约定的集合就是该层协议,例如物理层协议、传输层协议、应用层协议

2.2 什么是网络协议

  • 计算机生产厂商有很多,计算机操作系统, 也有很多,计算机网络硬件设备, 还是有很多,如何让这些不同厂商之间生产的计算机能够相互顺畅的通信呢?
  • 这就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是网络协议
  • 网络协议是通信双方,进行网络通信时,约定通信所使用的数据格式

2.3 什么是网络协议簇

网络协议簇:指的是由很多网络协议组成的簇群,称之为协议簇


2.4 OSI 七层模型

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

如下图:

Linux网络基础概念_第5张图片

OSI七层模型图:

Linux网络基础概念_第6张图片


2.5 TCP/IP 五层模型

TCP/IP是一组协议的代名词,它还包括许多协议,共同组成了TCP/IP协议簇。TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求

由于一些历史问题,我们有时候说TCP/IP协议簇是四层也可以是五层,因为规定了网络接口层=数据链路层+物理层,我们一般还是说五层,方便与OSI一起记忆,如下图:

Linux网络基础概念_第7张图片

各层的作用:

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

与OSI七层模型各层的对应关系:

Linux网络基础概念_第8张图片


3.网络传输基本流程

3.1 同局域网内的两台主机通信

首先需要明确的是,同一个局域网内的主机是能够直接进行通信的,因为最初局域网设计的目的,就是为了让局域网内的主机能够进行通信

  • 网络数据的转发需要先经历自己的网络协议栈,进而通过网络将数据转化为光电信号,传输到对端机器,对端机器收到数据之后,需要经历自己的机器网络协议栈的层层向上提交,一直将数据提交到应用层的应用程序当中,如下图:

Linux网络基础概念_第9张图片

当用户要将文件传输给另一台主机前,该文件数据需要先通过网络协议栈进行封装:(FTP客户 -> 以太网驱动程序 )

  • 文件数据先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层
  • 传输层收到数据后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付
  • 网络层收到数据后,再添加上对应网络层协议的报头信息,接着将数据再交给链路层
  • 链路层收到数据后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕

数据封装完毕后就可以通过局域网将其发送给对端主机了,而当对端主机收到数据后,对应也需要通过网络协议栈对该数据进行解包与分用:(以太网驱动程序 -> FTP客户)

  • 链路层收到数据后,先将数据中对应链路层协议的报头信息提取出来,然后将剩下的数据交给网络层
  • 网络层收到该数据后,再将数据中对应网络层协议的报头信息提取出来,然后将剩下的数据继续向上进行交付
  • 传输层收到该数据后,再将数据中对应传输层协议的报头信息提取出来,然后将剩下的数据再交付给应用层
  • 应用层收到数据后,最后将数据中对应应用层协议的报头信息提取出来,至此便完成了数据的解包与分用

也就是说,任何一台主机在发送数据之前,该数据都要先自顶向下贯穿协议栈来完成数据的封装,在这个过程中,每一层协议都会添加上对应的报头信息;而任何一台主机收到数据后,都要先自底向上贯穿协议栈来完成数据的解包和分用,在这个过程中,每一层协议都会将对应的报头信息提取出来

一些概念的补充:

概念一:数据包封装和分用

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

下图为数据封装的过程:

Linux网络基础概念_第10张图片

下图为数据分用的过程:

Linux网络基础概念_第11张图片


概念二:什么是报头

  • 报头本质也是一种数据,报头一般是通过位段实现的,因此协议栈的每一层都有一个对应的位段来表示当前层的报头

数据的封装与解包:

  • 数据封装,实际就是不断给数据加上各种对应的报头,这些报头里面填充的就是对应的各种协议细节
  • 数据解包,实际就是不断从数据中提取对应的报头,并对提取出来的报头进行数据分析

概念三:报头与有效载荷

  • 当对端主机收到数据后,需要自底向上贯穿协议栈,依次进行数据的解包与分用。在这个解包的过程中,每一层的协议只需要提取出数据中对应的报头,然后对该报头进行分析处理,而剩下的数据则直接交付给上层就行了
  • 因为每一层的协议实际上只关心数据中与当前层对应的报头信息,而剩下信息的具体内容根本不必关心,我们将数据中除当前层的报头以外的数据叫做“有效载荷”
  • 需要注意的是,上层协议在数据封装时添加的报头信息,在下层协议进行数据解包时看来就是有效载荷。比如数据封装时应用层添加的报头信息,在对端主机进行数据解包时,在对端主机的传输层、网络层以及链路层看来,该应用层曾经添加的报头信息就是有效载荷

那我们如何将报头与有效载荷进行分离呢?

  • 协议栈的每一层都要从数据中提取对应的报头信息,而要将数据中的报头提取出来,首先就需要明确报头与有效载荷之间的界限,这样才能将它们进行分离。而每一层添加报头时都是将报头添加到数据的首部的,因此我们只要知道了报头的大小,就能够讲报头和有效载荷进行分离

获取报头大小的方法通常有两种:

  • 定长报头。顾名思义就是报头的大小是固定的
  • 自描述字段。报头当中提供了一个字段,用来表示报头的长度
  • 实际上每个协议都要提供一种方法,让我们获取到报头的大小,这样我们才能在解包时将报头与有效载荷进行分离

当前层如何知道应该将有效载荷交付给上层的哪个协议?

  • 实际在每种协议的报头当中,几乎都会包含一个字段,表明我们应该把分离出来的有效载荷交付给上层的哪个协议,这就是分用的过程

概念四:协议共性

  • 提供一个将报头与有效载荷分离的方法
  • 协议当中必须包含一个字段,表明应该将有效载荷交付给上层的哪个协议
  • 实际当我们要学习一种协议的时候,首先就应该明确这两点,因为当我们在解包的时候必须将报头与有效载荷分离,而当我们在分用的时候必须知道应该将有效载荷交付给上层的哪个协议

概念五:什么是碰撞

  • 当主机A在向主机B发送数据时,其他主机彼此之间可能也正在进行通信,甚至主机A在和主机B通信的同时也在和其他主机进行通信

  • 但同一局域网中的所有主机在通信时,使用的都是一个共同的通信信道,因此如果局域网内的多台主机同时进行通信,此时这些数据之间就可能会相互干扰

  • 每一个局域网都可以看作是一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,我们就称这两台主机在该碰撞域中发生了碰撞

如何判断发送出去的数据是否发生了碰撞?

  • 因为发送到局域网当中的数据是所有主机都能够收到的,因此当一个主机将数据发送出去后,该主机本身也是能够收到这个数据的。当该主机收到该数据后就可以将其与之前发送出去的数据进行对比,如果发现收到的数据与之前发送出去的数据不相同,则说明在发送过程中发生了碰撞,也就是说,主机实际是能够通过某种方式,知道曾经发送出去的数据是否发生了碰撞的

发生碰撞后是如何处理的?

  • 当一个主机发现自己发送出去的数据产生了碰撞,此时该主机就要执行“碰撞避免”算法。“碰撞避免”算法实际很简单:当一个主机发送出去的数据产生了碰撞,那么该主机可以选择等一段时间后,再重新发送该数据。这就像现实生活中的两个人同时想要说话,此时对方就都会说“你先说吧”,这实际上就是一种碰撞避免

3.2 跨网络的两台主机通信

上面说的都是同一局域网内的主机之间的通信,那跨局域网的两台主机之间是如何进行通信的呢?

  • 局域网之间都是通过路由器连接起来的,因此一个路由器至少能够横跨两个局域网。而这些被路由器级联局域网都认为,该路由器就是本局域网内的一台主机,因此路由器可以和这些局域网内的任意一台主机进行直接通信
  • 比如局域网1当中的主机A想要和局域网2当中的主机H进行通信,那么主机A可以先将数据发送给路由器,然后路由器再将数据转发给局域网2当中的主机H

Linux网络基础概念_第12张图片

如果采用不同通信标准的两个局域网内的主机通信呢?

如果路由器级联的两个局域网采用的是相同的通信标准,那么通信过程大致就是上述那样。但被路由器级联的局域网可能采用的是不同的通信标准,比如局域网1采用的是以太网,而局域网2采用的却是令牌环网

Linux网络基础概念_第13张图片

  • 由于以太网和令牌环网是不同的通信标准,它们给数据添加的报头也是不一样的,因此令牌环网当中的主机无法对以太网当中的数据帧进行解包
  • 这种情况实际是由路由器来处理的,路由器是工作在网络层的一个设备,我们可以认为路由器当中的协议栈是下面这样的:

Linux网络基础概念_第14张图片

  • 此时当数据要从局域网1发送到局域网2时,路由器收到局域网1的数据后,会先将以太网对应的报头进行解包,然后将剩下的数据向上交付给网络层,在网络层进行一系列数据分析后,再将数据向下交付给链路层,此时在链路层当中就会给该数据添加上令牌环对应的报头信息,然后再将该数据发送到局域网2当中,此时该数据就能够在令牌环网当中传输了

Linux网络基础概念_第15张图片


4.各层间的通讯

发送方与接收方各层之间必须采用相同的协议才能建立连接,实现正常的通信

  • 应用层之间必须采用相同的编码解码规则,才能保证用户信息传输的正确性
  • 传输层之间必须采用相同的端口号与协议关系,才能保证上层应用进程间的通信
  • 网络层之间必须采用相同的逻辑寻址过程才能保证数据不会传输到错误的目的地
  • 数据链路层之间如果协议不同,接收方无法“理解”数据的内容
  • 物理层之间必须硬件接口规格相同,否则接收不到信号

Linux网络基础概念_第16张图片

在实际的网络环境中,发送方和接受方之间会有很多的硬件设备起到中转的作用,在下图中假设了一种通信结构,在两台计算机之间增加了两台交换机和路由器,发送主机的数据会通过以下中间设备到达接受主机

Linux网络基础概念_第17张图片

步骤解析:

  • 发送主机按照前面讲解的内容进行数据封装
  • 从发送主机物理网卡发出的电信号通过网线到达交换机,交换机将电信号转换成二进制数据送往交换机的数据链路层。交换机根据数据帧头部的MAC地址将数据智能转发到对应的路由器设备,在转发前要重新将二进制数据转换成物理的电信号
  • 路由器接受到数据后,会拆掉数据链路层的MAC头部信息,将数据包送往网络层,路由器将检测数据包头部的目标IP地址信息,并根据该信息进行路由转发,将数据报文转发到下一路由器上,在转发前要重新封装新的MAC头部信息,并将数据转换成二进制
  • 之后的过程与前面大同小异。简单来说就是路由器接受电信号,将电信号转换成二进制数据发往网络层,然后根据MAC地址和IP地址进行重新封装转换为电信号进行转发,然后对应的交换机接受电信号,然后根据MAC地址传送到接收主机的网卡中

5.认识IP地址

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

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

IP地址的作用:可以在网络当中唯一标识一台主机,一个公网IP地址只能被一台机器所占有,一个机器可以拥有多个IP地址


6.认识MAC地址

MAC地址用来识别数据链路层中相连的节点

  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)

对于接收方而言,所有的网络数据都是需要经历网络协议栈的,但是,怎么区分网络数据到底属于哪一个应用程序的呢?

通过端口进行区分

你可能感兴趣的:(#,Linux网络协议与编程,网络,linux,网络协议)