计算机网络基础——1

目录

计算机网络基础------1

1.计算机网络背景

1.1网络的发展

要有一个观念:计算机是给人使用的,人和人之间需要协作,就注定了计算机之间也需要协作,所以计算机网络是一定会诞生的一个东西

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

一开始其实计算机之间是相互独立的

这个时候如果需要移动数据就需要用外设,比如将A的数据拷贝到外设然后再给到其B,这样效率就会很低

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

于是乎,每个实验室或者一个区域的计算机因为嫌外设传输介质麻烦,就弄了一个作用和服务器一样的东西,将几个计算机连接在一起了。从而实现高效的数据共享

但是随着发展,有些时候,一个实验室的计算机要和另外一个实验室的计算机交互数据怎么办呢?因此局域网LAN模式就出现了

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

然后继续发展,对更远距离,更多计算机都需要连接在一起的需求就出现了。

一个路由器或者几个路由器和交换机无法再解决计算机之间的连接了,这个时候广域网WAN模式就出来了

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

注意:

所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网.

1.2协议

1.2.1为什么会有协议

为了更好的理解协议,要先知道为什么会有协议

这里讲一个小故事来理解。

一开始原本只是两个近距离的计算机之间的通信,由于距离近,通信之间的障碍和成本低,那么用什么方式通信,就无所谓了。因为双方之间能容易得进行通信。【就像两个近距离的人说话,沟通成本是很低的(两个人没问题的情况)】

但是随着需求的增加,会出现,需要沟通的计算机的距离逐渐变长了。和人沟通一样,人与人之间的沟通一旦距离拉长,就很难进行有效沟通。很可能对面只能接收到一部分信息或者完全接受不到。同样的,计算机之间的通信一旦距离变长,那么通信的障碍就会越多,通信的成本就会越高

于是,为了降低通信的成本,就为计算机之间的通信制定了协议

1.2.2那什么是协议呢?

协议的本质就是一种约定

举个例子:

比如两个舍友即将毕业,为了工作要去不同的城市。为了节省他们之间通话的话费,他们约定,通话时间1秒就挂即为保平安,通话时间3秒就挂即为怎么不回微信、通话时间5秒即为正常通话,有其他事情说。

通过这样的约定来节省两个人之间的通信成本,而用计算机之间为了降低通信成本也会进行一个计算机之间的约定

这就是计算机通信之间的协议。而具体的协议等到后面学习的时候就会知道了

计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式

思考: 只要通信的两台主机, 约定好协议就可以通信了?

答案:

其实是不可以的

  1. 哪怕约定好的两台主机约定好协议,那也只能让两台主机进行简单的通信,一旦设计到多主机通信,就无法通信了
  2. 很多时候,两个主机之间的通信,并不是直达的,中间可能会有一个"中转站",这个时候,没有和中转站之间进行约定协议,就会导致通信失效。
  3. 协议是很复杂的,有很多层的,有些时候,简单约定单一层数的协议是不够完成整个过程的通信的
1.2.3理解网络协议

如何理解网络协议呢?

**首先任何协议都是需要计算机硬件做支撑的,那硬件的厂商有很多,都定制自己的协议,那如何通信?**因此就需要网络协议来让大家统一遵守这个协议,然后彼此之间相互通信

  • 用大白话来说就是:

计算机生产厂商有很多;

计算机操作系统, 也有很多;

计算机网络硬件设备, 还是有很多;

如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议(TCP/IP);

2.网络协议的学习

2.1协议分层

实际上的网络协议是分了很多层的,那为什么要分层呢?

下面举个例子:

就是人和人之间用电话举例:

人和人之间认为自己是在和对方聊天,但实际上不是的,人其实是在和通信设备之间通信,然后再由通信设备和通信设备之间通信,再由通信设备传给另一个人。这个过程分为语言层,和通信设备层。

那为什么要分层的,其实就是实现了更好的解耦,当语言层采用其他语言,其他协议,或者通信设备层采用了其他设备,其他协议,都能使这个模块结构不发生变化。

在这个例子中, 我们的协议只有两层; 但是实际的网络通信会更加复杂, 需要分更多的层次.分层最大的好处在于 "封装" . 面向对象例子

2.2理解分层

现在知道了网络协议需要分层,那为什么网络实际上要分这么多层呢?这个层数的数量为什么是这个数量呢?一定要设计成这样吗?

因此,需要再次理解一下分层

  • 分层的优势------可以做到高内聚,低耦合
  • 分层的依据------将功能比较集中,耦合度比较高的模块,放在一个层中
  • 分层的目的------让当前层解决特定问题

分层肯定不是随便分层的,肯定是有一个问题需要被解决,因此专门设计了一个层来解决这个问题

就像计算机网络,肯定也有自己的问题要解决,下面举个例子方便理解:

要把一个数据包从A发送到遥远的C,那么计算机网络需要解决以下几个问题:

  1. 如何把数据交付给和自己直连的下一台主机了【别说从A到遥远的C了,先发送距离近的B或者其他地方,能实现近的,才有能力去远的地方】
  2. 如何选择路径【能够交付数据给其他主机,现在要解决为什么要发送数据给这个主机,是因为该主机是目的地还是只是一个会经过的主机】
  3. 容错纠错能力【当发送错误的数据给主机的时候,能够重新发一份正确的】
  4. 解决应用方面的问题【数据包发送过去目的不是发送过去,而是为了解决一些问题的】

这只是一个不严谨的例子,为了更好的理解:网络为什么要分层,为什么要这样分层

因此就有相应的组织出来,对这些需求,做了相应的分层,这每个层都有自己相应的协议

2.3OSI七层协议

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

上面的说法有点官方,不太好理解这七层到底在干什么。

下面四层是计算机网络要做的事情,对应互联设备之间的数据交付能力,路径选择能力,容错纠错能力。

上面三层实际上在工程中是被压缩成了一层,统一为应用层。举个例子:

会话层:我看中了一个朋友,我想和他成为好朋友于是我加了他微信,加微信之后就是好朋友了嘛,并不是,因此我需要向他建立连接,当我说在吗,对方回应了,才是建立连接,此时叫做会话层。

表示层:其实就是当对方和我建立连接之后,我们两个开始说话,双方说话的形式和风格都不一样,但是随着双方的认可,我们形成了共同的表达方式。比如铁哥们之间要吃饭:只需要说:走?就可以了

应用层:成为好朋友是我的目的,当我成为好朋友之后,就可以开始好朋友之间的行为了,比如吃饭看电影。这是应用层

  • 理论上,计算机网络确实需要被分层7层,但是实际上在网络当中我们实现用不了这么多分层。因此它既复杂又不实用,所以实际上按照TCP/IP四层模型更多

2.4TCP/IP四层(五层)协议

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.

5层如下:

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.【双绞线就是墙上的一个接口,直接用网线插进入就可以用了。光纤不是网线,里面传输的是模拟信号,是需要拉一个光纤入户,然后通过光猫来讲模拟信号转化为数字信号,才能使用的】【集线器的作用:是将长距离传输衰减的信号进行效果放大】

  • 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.

  • 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.

  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.

  • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应层.

注意:

上图中的传输层和网络层是操作系统负责的,这里指的是全部所有的操作系统都要按照一个标准去实现这两层,只要你这个操作系统想要上网/使用计算机网络,也是这点决定了全球的主机能够互联,通信

而在应用程序中,应用层想要实现通信,就需要使用OS提供的对应的的系统调用(因为OS不相信任何人,之前学习OS讲过了),来实现传输层和网络层的功能,然后再经过数据链路层和物理层,然后最终实现通信

和OSI的七层的区别就是,将OSI的会话、表示、应用层压缩成了一个应用层

物理层我们考虑的比较少. 从数据链路层开始就可以算是软件层了,因此很多时候也可以称为 TCP/IP四层模型(不包括物理层)

小知识:为什么叫做TCP/IP协议呢?因为TCP是传输层最具有代表性的协议,而IP是网络层最具有代表性的协议【为什么最具有代表性呢,因为TCP/IP实现在OS内,所有要通信的计算机都要经过OS实现的网络层(IP)和传输层(TCP)】

一般而言:

  • 对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;

  • 对于一台路由器, 它实现了从网络层到物理层;

  • 对于一台交换机, 它实现了从数据链路层到物理层;

  • 对于集线器, 它只实现了物理层;

但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发),甚至现在的路由器都已经做到应用层了,可以说就是小型电脑了;

TCP/IP四层模型和OSI七层模型的概念_网络7层模型之间的关系-CSDN博客

3.网络传输的基本流程

3.1协议报头和局域网的理解

在谈这个网络传输图之前,先要谈一下局域网和协议报头的概念

  1. 什么是协议报头?

    举一个最简单的例子:

    我和一个商家网购,买了一个水杯,买的时候不是商家直接给我,而是通过顺丰,有顺丰自己内部的运输体系,将快递放到快递站点或者放到家门口。而我收到的不单单只有一个水杯,而是还收到了一个快递盒子和盒子上贴着的快递单。这个快递单就是报头!并且这个报头根本不是给我看的,是给快递员看的。所有顺丰快递的快递单的格式都是一样的,这个格式就是顺丰自己定的协议,所有快递站点看到这个单子就知道是顺丰的快递。这就是一个约定,一个协议,减少了沟通成本

    我网购了一个水杯,水杯送到我的手上不是我的目的,我使用它才是我的目的。而水杯它自己有自己对应的协议(如何使用这个水杯,水杯的信息之类的),这个叫应用层协议报头

    总结:

    1. 协议通常就是通过协议报头来表达的
    2. 协议每一层都有,每一个协议都要有对应的协议报头
    3. 每一份数据最终在被发送或者在不同的协议层当中,都要有自己的报头,即每一层都要有自己的协议报头
  2. 关于局域网要知道的

    • 局域网分为以太网、令牌环网、无线LAN等

    • 在局域网中,两台主机能够直接通信【因为每一台机器都有自己的"名字",每一个主机都有一个网卡,每一个网卡都有自己的MAC地址,这个MAC地址全球唯一,但是只用于当前局域网中,用于标识在局域网中的唯一性】

    • MAC地址是一串地址(后面会学),下面是在Linux和Window环境的MAC地址的查看

    • 局域网(以太网)通信的原理(初了解,不完全)

      我们知道在局域网中,两台主机能够直接通信,但是并不是直觉上感觉的,两台主机在"私聊",而是所有主机都能收到。过程如下:

      首先,每个主机都有自己的网卡,每个网卡都有唯一的MAC地址,假设主机1,对主机7的MAC地址发了一个消息,此时局域网内的所有主机都会收到这个消息,但是都不会响应,只有主机4会响应。

      注意:只允许一个主机在任何一个时刻在局域网中发消息,否则发生碰撞局域网【即不能出现一个主机在和另外一个主机通信的时候,有别的主机也在通信,这个时候可能会导致数据发生错误】

      因此站在系统角度来看,网络资源,可以看做是临界资源,但是由于是多主机操作,无法进行加锁之类的操作,只能是发生了碰撞之后,重新发送数据包

      这里只是简单了解,后面会学习的更加深入。

    • 局域网(令牌环网)的通信原理

      了解了以太网的,令牌环网的也就不难理解了。其实就是当一个主机拥有了令牌之后,才能被允许往局域网中发送数据,这个令牌是被携带一起发送过去的,当目标主机收到后,令牌也会想办法给到其他主机。

      总之就是有令牌的主机才能往主机发消息。没有的都不允许发消息。其实就是类似于锁

      这里也只是简单了解,后面会深入学习

    • 无线LAN是以太网的一种变种,主流是以太网。

3.2网络传输的流程

3.2.1同一网段内的网络传输

同一个网段内的两台主机进行文件传输.

光看上面的图可能不是很好理解,下面来举个例子方便理解:

用户需要发送的数据首先会到达应用层,然后向下封装交付,而不是直接发送给对方的应用层,是向下给到传输层,然后到网络层,然后到链路层,经过相应的链路层协议,到达对方的底层,链路层,然后向上解包分用,直至到达最上层。数据才能被解包出来,交给目标客户

这个传输的过程中,会有数据的向下封装和数据的向上解包分用。这里涉及到了封装和解包分用,下面来加深学习这个过程

3.2.2封装和解包分用
  • 不同的协议层对数据包有不同的称谓, 在传输层叫做段(segment), 在网络层叫做数据报 (datagram), 在链路层叫做帧(frame).

  • 应用层数据通过协议栈发到网络上时, 每层协议都要加上一个数据首部(header),称为封装(Encapsulation).

  • 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.

  • 数据封装成帧后发到传输介质上, 到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理

上面是关于封装和解包的概念,不是很好理解,下面是对数据的封装和对数据包的解包分用的过程进行理解:

当一个用户A向一个用户B发送了一个消息:你好【此时会发生如下的过程】

此时应用层会根据当前应用层的协议写一个报头(首部),与当前数据进行一个封装,形成一个报文(报文 = 报头 + 有效载荷)。然后将这个报文给到下一层--传输层,然后传输层也会根据当前层的协议(TCP),写一个报头,与当前有效载荷进行封装,然后将新的报文发送到下一层。如此,直至将数据封装到最底层,即链路层

下图是数据进行封装过程的图:

然后此时就会发送到网络(局域网)中,然后每一个主机都会收到这个报文,然后判断报文的目的MAC地址,是否是发送给自己的。不是就不接受。当主机B收到数据包后,就会开始进行解包,将当前层的报头拿到,然后将当前有效载荷,给到上一层,直至最上层(应用层),此时进行最后的解包,将应用层报头拿到,把数据给到用户B

理解了这个过程之后,要有一个认知:在网络协议当中,可以认为同层协议在直接通信,也可以认为是在向下层交付,这是不同的视角【因为,同层之间拿到的报文和有效载荷符合一个协议,就像用户A会认为自己在和用户B直接通信,因为符合汉语协议,在工程下,用户A会认为自己在和应用层(聊天软件)通信,然后向下交付】

理解了这个过程,其实又有两个问题出来了:

  1. 当前层拿到一个报文(实际就是一串2进制)后,如何判断哪里是当前层的报头 (对于当前层来说,拿到一个报文中,可能涵盖了多个层的报头),哪里是有效载荷呢?
  2. 在解包的过程中,如何判断当前层的有效载荷要交给上层的那个协议呢?

这两个问题是每一层协议都要面临的问题,也是必须要解决的问题

假设解决方案就是:采用定长报头,假如收到100字节的报文,规定了报头的长度是20字节,那么就直接将前20字节的数据拿出来就是报头,然后报头中一定要涵盖当前层要定向的交给上层的哪一个协议。这个指定当前层要交给上层的哪一个协议的行为叫------分用

下图是如何进行分用的图:

所以以后学习每一个协议,都要知道该协议是如何区分报文中当前层报头和有效载荷的,也要知道该协议是如何指定有效载荷要发送给上层的具体协议,也就是如何实现分用的

3.2.3跨网段的网络传输

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

过程和同一网段内的传输是大差不差的,区别是多了一个路由器来屏蔽底层网络的差异。

首先要知道,路由器在双方主机看来都是和自己直连的!因此数据能够直接发送给路由器,也因此,路由器在上图中一定会有两张网卡。

下面同样举例来理解:

当用户A想发一个你好给到用户B,此时数据会不断的向下封装数据,形成报文向下交付,直至到达链路层,此时根据以太网协议封装好的新的报文,发送给路由器。而路由器会对报文进行一个解包,然后根据主机B链路层执行的协议,重新根据令牌环协议做一个报头,封装一个新的报文发送给主机B的链路层。然后再经过主机B的向上交付,不断的解包和分用,最终将数据给到用户B

这就是路由器和IP地址在跨网段传输的作用------屏蔽底层协议的差距

4.网络的地址管理

4.1IP地址

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

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

IPv6的出现是因为IPv4能够表示的IP地址已经不够用了,一共才只能表示42亿多的IP地址,现在全球的入网设备都已经超过这个数量了。那为什么现在互联网还活的好好的?这是因为还有一些其他的技术在起作用

4.2MAC地址

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

4.3IP地址和MAC地址的区别

IP地址:可以说是最终目的地,即数据要去往的最终目的地。

MAC地址:可以说是一个路径节点,是一个阶段的目的地,是为了到达IP地址的路上要经过的一个节点。

为了更好的理解,下面举个例子:

我要从广州去上海,广州和上海就是两个IP地址,为了去到上海,我要先去深圳,再去汕头,再去泉州,再去厦门,再最终到上海。这其中深圳、汕头等都是MAC地址。是我为了到达最终IP地址,根据最终地IP地址的方向,选择了一个MAC地址往目的地趋近。

5.总结

下面结合前面所学的知识,对跨网段的网络传输过程来一个总结:

首先用户通过自己的主机向另外一个主机发送数据,需要通过自己的主机从应用层不断封装报文到最底层,然后去找路由器,找到路由器后,解包至网络层,查路由表等行为,然后继续封装,如此往复,然后去逐渐靠近最终目的IP地址。

外链图片转存中...(img-i42xtccM-1751906658107)

相关推荐
啟明起鸣44 分钟前
【网络编程】简易的 p2p 模型,实现两台虚拟机之间的简单点对点通信,并以小见大观察 TCP 协议的具体运行
c语言·网络·tcp/ip·p2p
追烽少年x44 分钟前
设计模式---观察者模式(发布-订阅模式)
网络·设计模式
promising-w3 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习
宝山哥哥3 小时前
网络信息安全学习笔记1----------网络信息安全概述
网络·笔记·学习·安全·网络安全
前端开发与ui设计的老司机3 小时前
从UI设计到数字孪生实战:构建智慧教育的个性化学习平台
学习·ui
X Y O3 小时前
神经网络初步学习3——数据与损失
人工智能·神经网络·学习
十秒耿直拆包选手3 小时前
Qt:主窗体(QMainwindow)初始化注意事项
c++·qt
荔枝吻3 小时前
【保姆级喂饭教程】Windows下安装Git Flow
windows·git·git flow
Dsocc4 小时前
TCP 动态选路协议全面研究:OSPF、BGP 与 IS-IS 的比较与应用分析
网络·网络协议·tcp/ip
YC运维4 小时前
RIP实验以及核心原理
运维·网络·智能路由器