计算机网络基础1

小小的自我感动时刻

 经历过操作系统部分的拷打后,终于来到了计算机网络部分。网络虽然我们每天都在用,但是或许是因为太过于常见,而导致使用起来觉得很理所当然,深究其原理却又摸不着头脑,笔者从今天开始记录在学习计算机网络的过程中,一些重要的知识笔记和代码。尽可能有条理的分享我学到的知识。

计算机网络背景

  在没有网络的时候,一台机器无法和其他机器进行联系,因此代码文件这种东西只能先通过一些像U盘光碟这样的东西储存起来,然后再给另一台机器使用,这样的效率太低下了。

  随后出现了局域网,可以将几台机器进行连接

计算机网络基础1_第1张图片

局域网越来越多,然后就出现了广域网

计算机网络基础1_第2张图片

  但是局域网和广域网其实只是一个相对的概念,比如我们国内的广域网其实就可以看作一个很大的局域网。 

初始网络协议 

为什么要有协议?

 刚学网络可能对协议分层感到很抽象,举个例子,协议也就是约定。我们日常中想朋友进行交流,分享我们各自的信息,我们都说的是汉语,朋友能理解我说的汉语并提取信息,朋友对我也是如此,这其实就可以把汉语看作一种协议。

计算机网络基础1_第3张图片

  对于两台机器进行通信也是如此,我们需要先规定好双方的数据格式,这样才能理解对方发过来的信号的含义, 对于发送放也是如此。

  协议分层

为什么要分层?

  比如我们小时候用座机打电话

计算机网络基础1_第4张图片

从逻辑层面上来 ,我们跟朋友用汉语直接进行信息交流,而座机是用信号来传递信息的。

  因此从物理层面上来说,我们打电话的时候,我们的座机首先将我们说的话转化成了电信号这些,经过座机的处理后,再将处理好的信号依据座机之间的协议传给了对方的座机,然后这个座机处理好信号后,再播放给朋友。至此就完成一个通话流程。  

  在这个例子中,我们的协议只有两层,一层汉语协议,一层座机之间的协议。在网络通信中会更加复杂,因此需要分更多的层次。

分层的好处就是封装,可以使整个体系变得高内聚,低耦合,使其维护成本降低。

  OSI七层模型

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

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

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

 五层包括  物理层,数据链路层,网络层,传输层和应用层,对于每层的描述可以大概了解一下

计算机网络基础1_第5张图片

其中路由器这个东西,它不但在网络层中发挥了作用,它在数据链路层也可以起到交换机的作用,在物理层可以起到集线器的作用。 

OSI模型和TCP/IP模型分层的对比

计算机网络基础1_第6张图片 OS与我们现在要学的网络的关系

OS也就是操作系统,它和网络协议栈有什么关系呢?

计算机网络基础1_第7张图片 从上到下,用户可以看作是一个不会计算机的普通人,他只管用。

  用户操作接口可以看作是应用层。

在Linux内核模块中就有传输层和网络层

驱动程序就是数据链路层

网卡就是物理层

所以一个用户要是想要发送信息,那么就是从上到下,直到网卡。

计算机网络基础1_第8张图片

所以网络通信的本质就是贯穿协议的过程。 

 网络传输基本流程

TCP/IP的通讯流程

计算机网络基础1_第9张图片

数据包的封装和分用 

 就如之前打电话的例子,虽然在逻辑层面上,我们是直接与朋友通过汉语进行交流的。然而,在物理层面上,我们的声信号会被先转化成电信号等等,然后再发送到远端的朋友的座机,然后这个信号又被翻译成声信号播放给朋友。这个声信号变成电信号的过程就是封装。

计算机网络基础1_第10张图片

 比如,我们通过网络在用户层给朋友发送了一个  “你好”。然后我们是用qq发送的,对于应用层,也就是这个qq来说,“你好”就是有效载荷,在一层会把“你好”封装,加上一个报头,这个报头也可以是当前这个用户所使用的qq的版本。这样这个信息就变成了报文,因此报文 = 报头 + 有效载荷。然后再将这个报文给下一层,直到使用以太网发送到另一台机器上,然后朋友的机器接收到这个信息后,就会从下往上对这个信息进行解包,也就是分用,每一层的解包会提取报文的报头,最终到用户时变只剩下了“你好”。

对于封装和解包,我们需要记住以下总结:

1.几乎任何层的协议,都需要提供将报头和有效载荷分离的能力。

2.几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一种协议的能力。(分用)

分用的示意图

计算机网络基础1_第11张图片

以太网通信的原理 Mac地址

  首先我们要知道,每台主机在局域网上,都要有自己的唯一的一个标识。

在局域网中,每一个主机都有一个Mac地址来标记当前主机。来保证当前主机在这个局域网的唯一性。

计算机网络基础1_第12张图片 如图,有四台机器,它们通过一个网线连接在一起,一旦有机器想要给另一台机器发送消息,那么这个信息就会随着网线传输过去。但是我们发现,因为在这根网线上不只有这两台机器,因此其他机器也会收到这个消息,问题就来了,这样话发送信息岂不是没有隐私了吗?

  正常情况下,比如有H1向H4发送信息,那么这个信息中的特定位置包含了H1和H4的信息,其他机器收到这个信息后,首先会读取这部分信息,然后跟自己的进行对比,如果对比发现并不是发送给自己的信息,那么这个机器会直接丢掉这个包。

  我们的网卡有两种模式,一种是正常模式,对处理信息的方式如上;还有一种就是混杂模式,即便这个消息不是发送给自己的,机器依旧不会丢掉这个包。

  网络上的抓包就是基于这样的原理来获取信息的。

除了信息安全问题,还有一个就是当一台机器在发送消息的时候,如果此时还有一台机器在发送信息,那么就会发送失败,这个就是数据碰撞问题。发送主机都要执行碰撞避免的算法。

  如果一个局域网对请求的处理能力有限,但是需要处理的请求又很多时,网络就会变得卡顿,原因就是发生了很多数据碰撞。比如我们在军训或者疫情期间在操场排队做核酸时,如果人很多,那么网络就会变得很卡顿。

  如果一个局域网内的机器数量太多,可以使用交换机来划分碰撞域,这样可以减少碰撞的次数。

Mac地址和IP地址的关系 

IP地址可以标识唯一的一台主机,而Mac地址只能标识当前局域网内唯一的主机。

在远距离网络传输中,一台主机通过网络向另一台主机发送消息,中间可能会经过很多个路由器

计算机网络基础1_第13张图片

 通过在局域网类以太网的通信原理,信息从发送方,到目的地,它的Mac地址可能会不断变化,而IP地址是始终不变的。

关于IP协议

  IP协议有两个版本,分别是IPV4和IPV6。现在主流还是IPV4。

 IPV4协议,它是4字节,32位的整数。它的格式就是类似于192.168.1.1这样,每一个用点分隔的数字的范围是0~255,也就是一个字节的范围。不过目前IPV4可能已经有点不够用了,所以现在国家支持IPV6技术,只是现在推广度还不高,主流都还是IPV4。

在路由器的场景下简单通信流程 

计算机网络基础1_第14张图片

首先拓展一下令牌环网:

  令牌环网也是网络协议的一种,我们知道以太网通信,所有主机都能自由的发送信息,只是可能会发生数据碰撞而导致发送错误或失败。那么令牌环网就是在当前局域网内只有一块令牌,拥有令牌的主机才能发送信息,如果令牌传给了其他主机,那么发送信息的能力就只有得到令牌的主机才拥有,虽然听起来很像OS里面的锁,但是由于锁的概念只在OS中,所以这里管叫做令牌,不过令牌环网并没有以太网这么常用,所以这里只做了解。

分析通信流程

 比如在该场景中,用户发送了一个请求,那么这个请求就会从上到下依次进行封装,最后变成了帧,然后通过以太网被路由器所提取,那么首先路由器就要对这个帧进行解包,当然就读取到了关于Mac地址方面的信息,我们假设这个信息是Mac_c(发送方)和Mac_d(接收方)。然后路由器再根据IP信息(也分有发送方IP和接收方IP),分析接收方是否在路由器本地的局域网内,如果在,那么就重新封装然后发送给目的主机。这里需要特别注意的是,路由器拿到帧后,提取了对应层协议的报头信息后,是直接丢掉了报头信息,然后再重新封装成了一个新的帧,这个帧的Mac地址部分的发送方就变成了路由器--Mac_R,接收方依旧不变。

  那么如果不在本地的局域网内,那么路由器作为中间人会做相同的事情,直到找到了目的主机。然后如果目的主机使用的是以太网,那么就按照以太网的协议对数据进行解包分用,如果是令牌环网,那么就按照令牌环网的协议来,最终也是从下至上层层解包和分用到达用户手里,至此就完成了一次简单的通信。

补充知识

  计算机技术和通信协议是计算机网络产生与发展的两个基本要素。

一些协议 

HTTP协议是超文本传输协议。

DNS协议为域名解析协议。

FTP协议为文件传输协议。

SMTP协议为电子邮件传输协议。

UDP协议为用户数据报协议,在传输层工作。

TCP协议为传输控制协议,在传输层工作。

IP协议为网际协议,在网络层工作。

ARP协议为地址解析协议,在网络层工作。

ICMP协议为Internet控制报文协议,它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息,所以是通过IP协议来进行传输。

TCP协议为传输控制协议,在传输层工作。

UDP协议为用户数据报协议,在传输层工作。

SMTP协议为电子邮件传输协议,在应用层工作。

OSPF为开放的最短路径优先协议,在传输层工作。

在OSI模型中

 

传输层负责两端之间的数据传输。

网络层负责地址管理与路由选择。

数据链路层负责相邻设备之间数据帧传输,完成帧同步,差错控制,流量管理,链路管理。

物理层负责物理光电信号传输。

交换机在数据链路层,路由器在网络层。

MAC地址,也叫物理硬件地址,用于识别相邻的两个物理硬件设备,它的大小为:6字节。

MAC地址是物理网卡硬件地址,在出厂时就会设定,不能修改,它的大小是6字节,用于识别相邻设备,在链路层完成相邻设备之间的数据传输。

一台计算机可以绑定多个网卡,进而可以拥有多个MAC地址。

关于IP地址和Mac地址

  IP地址是一个数字,用于唯一标识网络中的一台主机。应用于网络层,基于网络拓扑描述起点和终点 。

Mac地址是物理网卡硬件地址,用于标识相邻设备,应用于链路层。

由于IP地址是一个逻辑地址,所以可以给MAC地址对应分配不同的IP地址,使网络通信更加灵活。

  当需要跨网络进行传递的时候,也就是意味着需要找到该数据包的下一跳的MAC地址,所以认为从发送方出来,首先先到到达本网段的路由器,所以获取本网段的路由器的MAC地址。

  每个网络都会有不同的网段,网段是该网络的标识,在该网络中分配的IP地址都会带有网段标识,标识自己所属网络,这样路由器才能进行路径规划,因此当主机改变所在网络时需要将IP地址改成该网段的ip地址,但是MAC地址不用修改,MAC地址本身也是不允许修改。

OSI的链路层通常同时使用报头和报尾进行封装。

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

  不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。

你可能感兴趣的:(计算机网络,linux)