【网络】-- 网络基础

11 篇文章 0 订阅

(本文是网络的宏观的概念铺垫)

目录

计算机网络背景

网络发展

认识 "协议"

网络协议初识

协议分层

OSI七层模型

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

报头

以太网

碰撞

路由器

IP地址和MAC地址

IP地址与MAC地址总结

IP地址

MAC地址


计算机网络背景

网络发展

        是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:

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

        如:有三个人,每个人做的不同的事物,但是是需要协作的完成。

        而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据内容放入到光盘中等,才能交给下一个人。传输具有人为操作,这样效率就会十分的低下,所以在这样的需求下,也就有了网络。

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

         于是想到了将,三人的计算机链接到一个主计算机上,于是前一个人完成,将数据推送到主计算机上,然后下一个人来获取。于是便提高了效率,这就是初步的网络雏形。

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

        后来随着协作人数的增加,计算机数量的大量增加,于是多台计算机直接通过交换机和路由器连接在一起。

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

        每一个协作群体都有一个局域网,但是有时候需要协作群体之间进行协作,于是有了广域网WAN,将远隔千里的计算机都连在一起。

        局域网与广域网,只是为了在学术上而区分出来的,但是从技术的角度。其二者只是一个相对的概念,无非就是主机数变的更多了,并没有明显的局域网和广域网的区别。但是由于不同场景下的描述问题,所以这个概念也是重要的。

        局域网与广域网:看网络规模

认识 "协议"

        "协议" 本质上就是一种约定。通过这种约定,来让我们在某些通信场景当中,达到更快速的进行通讯的目的。

#问:为什么需要协议这个东西?

        主要原因是因为,如果我们加了网络,两台主机的通讯的距离就变得非常得长了,主机A想向主机B发送数据。数据也是有类别的,如有一些数据就是单纯的数据:用户信息,有一些数据具有特殊的含义,比如说有一些数据是想让目标主机进行数据的删除、控制对方的主机等,所以说数据是具有类型的。

        就如同文件:文件 = 文件中数据和代码(内容) + 文件的属性信息,其本质上在计算机的体现是都是0、1。但是需要我们在认知的时候,我们需要知道数据是具有类别的,所以因为数据是具有不同类别的,所以对应不同类别的数据,需具有不同的处理方式。

        为了能够快速的让两个相隔千里之外的计算机,能够区分出数据是哪些类别,每一种特别类型种的某一些特别的数据的含义,所以就需要通过以提前约定好的方式来减少双方通讯成本的问题。 

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

理解"协议"的一个小故事:

        假如一天用手机打电话变的很贵很贵,然后我们出门在外,需要向家里进行告知自己情况的时候。

我们与家里的父母规定:

  • 电话响一声:我们过的和好,不用担心,也就是报平安。
  • 电话响二声:我们的资金不够了,需要一些资金。
  • 电话响三声:我们有紧急事情,需要进行电话的沟通。

        我们通过在离家之前与家里人进行了约定之后,这种电话响几声的约定就是所谓的达成的"协议"。之所以立这么一个协议就是因为这样可以减少我们的成本(也就是此故事当中的电话费)。

        如果我们没有进行约定,那么如报平安就需要进行口头上的一大堆话,对于都是报平安行为,这就是浪费资源的、效率很低的。如果我们提前约定好,那么我们只需要发一个很简单的数据,对方就能立即的知道我们表达的是什么。(对方可以按照最短的预期做出行为 —— 通讯更高效

#问:是不是只需要通信的两台主机, 约定好协议就可以了?

        并不是这样的,就比如不同语言的人,约定后使用"1"来表示干什么事情,但是由于二者的语言不一样,所以就导致了,虽然传递的是同一个约定的"协议",但是对方却不能理解。

        如此,虽然本质上的"约定"是成立了,但是表达(发送)层面上根本无法识别对方的含义。

  • 计算机生产厂商有很多。
  • 计算机操作系统, 也有很多。
  • 计算机网络硬件设备, 还是有很多。

#问:如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?

        所以,约定了一个共同的标准,大家都来遵守,这就是网络协议(软件维护) —— 也就是行业标准。(硬件标准、软件协议二者缺一不可)

Note:

        只要网络存在,网络就是一个一定具有:硬件上有标准、软件上有协议的一个结合体,才能正常的进行,于是才能在全球将网络的范围扩大。

网络协议初识

协议是由软件来维护的约定:

        1、计算机内部是可以存在多种协议的,所以操作系统需要对多种协议进行管理 —— 先描述,再组织。所以,所有的协议(约定)在操作系统内核内核层面上,就是结构体对象

        2、协议的本质就是软件,软件是可以进行"分层"的。

软件分层:

        C++中,所写的各种类,所写好的类就可以在main函数中进行创建对象,然后使用类当中的方法,这就是一种软件分层。main函数里的创建对象就叫做使用对象,编写类的时候,类内部就叫做方法的具体实现,所以就相当于将方法的实现使用的这两层,就叫做软件层。

        Linux中的一切皆文件,Linux内核为了维护文件看待方式的通用性,所以将所有的文件都看作对应的struct_file对象,即使用内部包含的指针,来指向底层的不同的方法。这也叫做软件层。

        多态的继承关系,有基类、有派生类,每一层继承的体系就是可以理解为一个软件层


Note:
        软件是可以被分层的。

        3、所以软件在设计的时候,就是被层状的划分的!

协议分层

现实生活中的分层(打电话):

        在技术层面上:A与C并不是直接的在沟通交流,而是A通过将说话的声音交给了手机,然后A的手机再和C的手机进行通讯,然后C的手机通过将A手机发过来的信息进行解码,然后转换为语音,播放给C。

日常的打电话就是一种分层的概念:

  • 人的语言层:利用语言的沟通。
  • 底层:是两部手机通过它们的"语言"在互相通讯。

所以,可以说人打电话至少是两层协议(两层通讯的机制)

        而当有两个外国人使用手机打电话的时候,相当于将上层协议切了,切成由汉语体系变为英语体系。这个时候并不影响下层协议,于是双方依旧可以使用电话进行通讯

        然而,如果将底层的手机通讯变为了无线电通讯,或者,再如何的交换,都不会影响上层语言的沟通。

(从此我们可以理解一个问题)

#问:为什么要划分为层状结构?

  • 场景复杂

        比如说两个人很闲(咸鱼),就坐在一起,但是说话还需要人来传达(这是不合理的)。 比如说两个人很忙(老板),需要沟通一些事,以为太忙碌了,所以让助手进行信息的传达(这就是合理的)

  • 功能解耦 —— 每一层解决不同的问题,便于人们进行各种维护。

        人打电话,电话与人的关注不同,人想着传达什么信息,电话想着这么传递信息。这其中人和电话关注的点是不同的,但是必须是人和电话,共同来完成打电话这么一个行为 —— 所以软件分层的时候,就让同层对应的角色,关注于自己本层的功能。不同层的关注不同的,然后通过接口式的互相调用。

        便于维护:电话出问题就修电话,与上层无关。

由于层状结构的优点,所以网络协议也是层状的。

        通讯的复杂,本质上是和距离成正相关的!

#问:复杂体现在哪里?——  正是协议栈要解决的问题。

  • 通讯范畴:
  1. 丢包 —— 发出的数据对方没有收到。
  2. 定位问题 —— 如何找到对应的主机。
  3. 解决下一跳主机的问题 —— 主机信息传递中,所经路由器。

        所以,只要大方向上完成以上三个问题,最后数据才能够被对方接收到。于是对于这各种问题,在软件分层当中一一解决。但是还有一个问题,就是可以这些信息是干什么的?所以我们需要表明目的 —— 数据处理

  • 应用范畴:
  1. 如何处理数据 —— 将收到的信息做处理。

Note:

        所以单纯的将对应的数据,从A主机运送到B主机,我们需要以下的层数:

        这个对应的层数划分,就是对应的5层协议,分别叫做:应用层传输层网络层数据链路层物理层。将基于这样的分层的方式,在现在的应用层的场景当中一般叫做:基于TCP / IP协议定制好的层状协议。

        协议:既包含上层应用怎么写,又包括操作系统怎么做,这就叫做网络协议。

        所以,网络通讯时:实际上我们用的是传输层向上提供的系统调用,然后我们通过系统调用完成网络通讯。

融汇贯通的理解:

        所以网络编程,依旧是系统编程,因为我们用的依旧是操作系统。所以学习网络也就是学习操作系统。

        其中,以此五层的通讯方式称为TCP / IP协议。而传输层中最重要的协议就是TCP,网络层中最重要的协议就是IP,所以这种协议叫做TCP / IP。原因就在于这两种协议在操作系统中实现,是两个最重要的通讯范畴的核心协议,于是整个协议以TCP / IP来进行命名了。


        然而事实上,在当初的整个网络协议定制的标准化组织,在定义协议的时候并不是严格按照我们上面说所的方案来定的,其是按照自己的方案定出来的,我们称之为:OSI七层模型。

OSI七层模型

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

        其中下四层和之间所说的TCP / IP协议完全一样,然而上面的三层被压缩成一层,叫做应用层。

融会贯通的理解:

        首先,是先有OSI的7层模型。后有,TCP / IP的5层模型。它们二者之间就和蓝图具体实现的关系一样。

        OSI(理想状态)定出来的7层模型标准(不一定就是定标准的人,来写代码实现标准),所以实现的时候,因为应用层比较复杂,没有办法在操作系统实现,采取了将上三层变为一层,交给用户自己来解决。

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

        TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
        TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
  • 物理层:负责光 / 电信号的传递方式。比如:现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wififi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)、调制解调器(Modem)工作在物理层,第一个用于信号放大,第二个数字信号与模拟信号互相转化等。
  • 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。数据链路层就是对应的局域网(局域网工作的位置)
  • 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)路由器(Router)工作在网路层。
  • 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。可以说工作的是:发送数据的主机自己。
  • 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。

        物理层属于硬件层,所以考虑知道的不用过多。因此很多时候也可以称为 TCP/IP四层模型。

一般而言:
(以下不是全面的,是最基本的)
  • 对于一台主机,从操作系统内核实现了从传输层到网络层的功能,然后再到数据链路层实现(驱动层)
  • 对于一台路由器,它实现了从网络层到物理层。
  • 对于一台交换机,它实现了从数据链路层到物理层。
  • 对于集线器,它只实现了物理层。

补充:

        但是并不绝对。很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如:端口转发)。

        同一个网段内的两台主机进行文件传输,每一个网络分层,也就是软件分成都有其的功能。 每一层都有其代表性的协议:

        为了将上述图讲清,而需要引入的概念。

#问:如果两台主机在同一个局域网之下,那这两个主机能不能直接通讯?

        能够通讯,并且还会通讯的很顺畅。数据在局域网当中通讯时,我们的数据是可以直接在局域网当中,两台主机是可以直接通讯的。就如同玩游戏时联机的局域网。

我们的数据,并不能凭空的从对应的应用层到对方的应用层:

  • 从逻辑上讲:我们认为应用层和对方的应用层在直接通信。
  • 从物理上讲:对应的应用层是无法将其的数据,发送到对方的应用层。

所以,学习网络要站在物理结构上。

 每层都要有自己的协议定制方案,每层协议都要有自己的协议报头:

  • 从上到下交付数据的时候,要添加报头。
  • 从下到上递交数据的时候,要去掉报头。

报头

#问:什么是协议报头?

         一个故事帮助理解:就如同我们在网购之后,商家将货物的寄出,不可能将我们所购买的商品放在盒子里,就直接给顺丰,而是需要填对应的快递发货单

        然后将快递发货单贴到对应的包裹上,我们在拿到包裹也就可以确认信息,然后信息就没有用了,直接扔掉。

快递发货单是给顺丰,我们完全可以不看。于是可以将这个行为,想象成两层的模型:

  • 卖家
  • 买家

        最关心的是:我要买,你要卖。但是对应的卖家要将商品给我们,需要将商品向下交付的时候,就要让顺丰结合卖家将单子填好,填好的单子,既不给卖家看,也不给买家看,是给顺丰看的。这样顺丰才知道,是谁发,是谁收。于是买家收货的时候收到单子 = 收到报文。这个时候我们所收到的东西多了一个"报文",不是关心的,多出来的单子 = 报头

        协议报头:当上层把数据交给下层时,下层也是有自己的协议的,那么下层需要做的就是将上层给予的数据,结合它那一层所对应的报头,给其多添加一部分的报头的数据。以供对方的同层协议未来的解报头,来对数据进行读取 —— 直说:同层当中收到一个数据之后,在数据之外多出来的部分 = 报头。

        报头的意义:发送方和接受方互相传递属性字段的非常重要的概念。

        对应的层,就可以通过对应的该层的报头知晓有效载荷对应哪一层,并将有效载荷交给上层。同样的每一层依次的识别对应的报头,然后依次的传递有效载荷,依次的交付。以此,自底向上的好处就是,对方发送"你好",接收方收到"你好"。

总结:

  • 封装的本质:添加报头
  • 解报的本质:去掉报头 && 展开分析

可以将封装的时候理解为压栈,解报的时候理解为出栈。

融汇贯通的理解:

        之所以其能够完美的执行,是因为:对应的协议层只能够协议通行。所以在每一层之下,每一层都认为自己在与对方进行逻辑上的沟通。

以太网

#:两台主机如何在局域网下通讯。 

        我们用以太网链接的这两个对应的主机,对应的就叫做的局域网,我们可以将这个以太网的横线,想象成网线,以太网是局域网的一种,它的通讯的原理可以简易的想象成:

        就如同一个班级在进行点名,老师A进行一一的点名,当点同学F的时候,老师A点名的这个行为,学生B、C、D、E是都听到了的(在坐的所有人都是听到的),但是只有学生F答了一声到。而学生F向老师A说的时候,同样的学生B、C、D、E也是都听到了的(在坐的所有人都是听到的)。所以,可以说A和B是在进行众目睽睽之下进行定向的通讯

        而之所以学生B、C、D、E,并未做出反应,是因为老师A并未喊道他们,而他们之所以能知道喊的不是他们就是因为他们也听到了的(接收到了的)

局域网通讯实际上:

        发出数据的主机在全部局域网中,进行"大声"("开麦")。与同学一样,每一台主机都是具有自己的"名字"的。也就是说,其实每一台主机都是接收到信息的,但是它会将主机名进行对比,发现叫的不是自身,于是就会将报头对应的数据直接进行抛弃,所以只会有对应的主机拿到对应的数据,进而进行向上交付,从而拿到地址。

碰撞

        如果有一天:B、D进行正常的交流,A一看不开兴的,居然不带他,于是他开始捣乱,我们知道网线的传输其实就是物理的光电信号,于是会不会导致A发出的信号将B发出的信号出现杂糅?于是信息就出现无法识别,这就叫做 —— 局域网内数据通讯时,发生了碰撞问题。(就如同课上有人聊天,导致无法听清老师讲课)。

碰撞问题的处理:
       局域网里的主机是可能进行对应的,叫做碰撞避免,说白了就是出现碰撞就等一等
,然后等一段时间后再进行从发(课上需要聊天的同学等到下课聊)

融汇贯通的理解:

        所以,有趣上可以说:我们如果想黑掉一个局域网,去对应的局域网里乱说话就可以了,发一堆垃圾数据,来影响大家无法正常通讯(就是攻击)

对于发一堆垃圾数据,我们是需要通过一定的方式绕过以太网驱动程序 —— 不要乱搞!!要就玩自己的局域网

局域网中表示主机的唯一性:MAC地址 —— 每台主机对应的名字,是由48位的二进制数构成的,查看的时候一般是以十六进制进行显示。MAC地址是一个写入到网卡的地址,在我们的笔记本出厂的时候网卡的MAC地址就确定了(全球唯一)(并不排除有一些虚拟策略能够帮我们虚拟化出很多的网卡、MAC地址)

        我们可以使用对应的ifconfig命令,查看Linux下的网络设备设置。

总结:

  1. 主机发送数据:向下封装。
  2. 主机交互数据:自底向上进行交付。
  3. 主机网络中通信:采用局域网通讯原理。

#问:不在同一个局域网之下的主机,是如何进行通讯的?

        这个时候我们就需要一个关键的点:路由器。 

路由器

  • 三个设备:主机、路由器、主机。
  • 两个局域网:使用局域网进行连接。

        左侧主机,想将数据交给右侧主机的时候,需要进行封装,然后并不能将数据直接通过网络交给右侧主机(一个使用以太网,一个使用令牌环网)。

        左侧主机左侧主机发送信息,必须经过设备路由器,因为两个主机不在同一个局域网,所以没法直接通讯,左侧主机因为和路由器同局域网,所以只能交给路由器。同样的路由器也是一个主机,所以其能够将数据发送,交给与其处于同一个局域网的右侧主机

        路由器:通过路由器的间接的方式,实现不同局域网的主机之间的通讯。

        在如上面的,不同局域网下的主机进行通讯的问题。A主机向让B主机接收到他所发的信息,拿到B主机的MAC地址是没有任何用处的,因为无法直接向B主机通讯(不在同一个网)。这个时候A主机只能够使用B主机的IP地址

#问:A主机是怎么拿到的B主机的IP地址?

        这个IP地址是有"人"给A主机的。如:访问网页的地址,就是通过分析它而得到的对应的IP地址。

IP地址和MAC地址

就如同我们唐僧的取经路:

  • 唐僧的出发地到目的地:东土大唐 -> 西天。
  • 唐僧的长途跋涉途中:东土大唐 -> …… -> 车迟国 -> 黑风岭 -> …… ->西天。

  • 源IP -> 目的IP:是永远都不会改变的。
  • 源MAC -> 目的MAC:会根据当前所处的位置,不断的进行变化。

目的MAC是受目的IP的影响的,以此到达目地的IP。

(下面的MAC是不同的)

Note:

        在IP层及其往上层的协议看来,数据都是一样的,差异化主要体现在IP层以下的最底层。在使用TCP / IP协议的网络中,IP及其向上的协议,看到的报文都是一样的。

        于是,通过IP协议的存在,向中间的路由器向上交付的时候"托一层", 路由器向下交付的时候"穿一层",使得在不同子网中有着适配的功能。底层网络的差异化,通过IP协议的存在而产生了对应的虚拟化策略,以此让上层看到的同层数据都是一样的,利用MAC地址的差别实现恒定不变的IP地址实现

用于理解的草图:

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)
  • 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理。

        下图为数据分用的过程。

        接收方,接收到了底层的对应的数据帧,以太网驱动程序要在对应的数据帧中,根据相关以太网首部,能够解析出其对应的有效载荷,应该交给上层的哪一个协议。

IP地址与MAC地址总结

IP地址

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

MAC地址

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

川入

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值