[计算机网络学习笔记]:协议概述

引言

我们每天使用的互联网是如何构造出来的呢?全世界几十亿台设备是如何做到“互连”的?
计算机网络是计算机专业必不可少的子学科,了解这些貌似偏“硬”的知识好像对于我们写代码没有什么帮助,不过深入探索上述的两个问题对于理解整个网络体系有着很大的帮助。

首先来讲举例子,解释一些名词。

  • 网络 :我刚开始有自己的计算机的时候,理解的网络就是上网,能打开“百度”。实际上,在计算机学科中,两台(或者以上的电脑)在逻辑上链接在一起就形成了一个网络(逻辑上链接在一起,是这两台电脑可以互相发送一些数据,两台电脑好似一台)。
  • 互联网 :互联网实际上就是指多个网络之间再进行连接,形成一个统一的庞大网络,在互联网中的主机(电脑、手机等)可以相互通信。

[计算机网络学习笔记]:协议概述_第1张图片

  • 协议:这是在学习计算机网络中经常会碰到的名词。刚看到这个词我的脑子里总是蹦出两个人在纸上写一些条款签字画押。实际上,协议就是规定了一系列的规范(包括主机之间如何进行连接,主机之间发送的数据的格式如何,每一个字节表示什么意义等)。至于为什么要搞出协议这个东西,是因为全世界几十亿台设备,操作系统不同,每个网络有自己的一套传输规定,那么信息之间的传输岂不是乱套了?所以国际上有个组织制定了一些列的标准来约束信息,信息的规范化有利于传播。
  • RFC : Request for comments,征求修正意见书。这是一系列以编号排定的文件,文件收录了有关互联网的相关信息(包括各种协议的具体标准等等)。

目前先介绍这四个非常简单的名词。
学习网络知识的时候一定会碰到许许多多的名词,这些东西都是为了具体的应用实现而产生的,所以在碰到实际问题的时候再来解释更容易理解。


互联网的分层模型

由引言可知,互联网有多种多样的协议,开发网络应用或者构建网络,必须遵守这些协议。为了简化操作,实际上将互联网进行了分层。互联网的每一层都对应很多协议,层与层之间互不干扰,隐藏了各种协议的细节。可以类比写程序的时候每一个模块有完成不同的功能,模块与模块互不干扰,只需要提供一些接口进行通信即可。

  • 互联网的每一层是一个模块,有自己的一套协议规定,完成特定的功能。
  • 互联网的层与层之间是互不干扰的,但是层次之间可以提供服务(就是模块与模块之间预留一些接口进行通信)

现代互联网的典型分层模型是分为五层,如下所示:
[计算机网络学习笔记]:协议概述_第2张图片

其中橘黄色的向下的箭头表示本层会向下一层提供一些服务。这并不意味着数据只能从上层移交给下层。

下面我们就自下而上的简单的介绍一下每一层的作用以及其对应的协议。


物理层

我们说,处于同一个网络的主机之间是“逻辑”相连的,这是指两台主机之间没有线路相连却仍可以互相访问数据,那么肯定是有一个中转站的。

[计算机网络学习笔记]:协议概述_第3张图片

主机1,2之间没有线路相连。但是任意一台主机都是与中转站相连的(也可能是间接相连的)。

实际上,将两台主机用可以传输数据的媒介(双绞线、电缆,甚至是没有实体的无线波)连起来,就形成了最简单的网络。

物理层是我们看得见摸得着的,除此之外,物理层还规定了一些电气特性(比如用高电平代表1还是用低电平)等。


数据链路层

我们知道,电线可以传送电流,假设高电平代表1低电平代表0,那么接受方可以得到一串比特流。

可是我们怎么来解释这些比特流呢?多少个比特算作一组?
这就需要一些规定(协议)。
数据链路层的协议位于物理层之上,确定了0,1的分组方式和含义。

数据链路层有多种协议,等到后边详解时再做具体描述。

早期,每家公司都有自己的电信号的分组的方式,这很不利于不同网络之间的数据交互,后来他们被逐步淘汰,被一种称为以太网协议的规则给取代。(实际上还有其他的一些常用协议,我们到数据链路层篇再详细介绍)。

以太网协议

以太网协议规定将一组电信号打包,称为帧(Frame)。每一帧都分为两个部分,如下图所示:

这里写图片描述

  • Head:帧首部,记录了发送者、接受者、数据类型、协议类型等等信息。

  • Data:帧的具体内容

MAC地址

上面提到,以太网数据包的首部,包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?
以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC(Media Access Control )地址,翻译中文即媒体控制地址,有的书上也叫它以太网地址或者物理地址。

MAC地址共48位(6个字节),以十六进制表示。前24位由IEEE决定如何分配,后24位由实际生产该网络设备的厂商自行指定。

[计算机网络学习笔记]:协议概述_第4张图片

图为网卡。

所以,理论上来讲,只要有网卡都可以即被分配了MAC地址(MAC地址一定是世界唯一的),也就可以联网。(物联网的技术基础)。

如果是windows系统可以按照下列方式查看本地的mac地址。

cmd 模式下输入

ipconfig/all

假设运行结果为Physical Address. . . . . . . . . : 00-05-5D-E8-0F-A3
这就是本机的MAC地址了。
定义了MAC地址之后,一块网卡怎么会知道另一块网卡的MAC地址?
数据链路层还有一个ARP协议,可以解决这个问题。这个留到后面介绍,这里只需要知道,以太网数据包必须知道接收方的MAC地址,然后才能发送。

发送数据包

有了数据,MAC地址,那么数据是如何发送的呢?
这里我们简单说一下。

  • MAC地址表:可以假设有这么一张表,局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。(大家暂时把交换机理解成一种信息的中转站,它仅仅是转发数据包)。

  • 广播:如果MAC地址表里没有目的MAC地址与主机MAC地址的映射关系,那么交换机就会把这个帧发给同网络的所有机器,机器接受帧后会与自己的MAC地址对比,如果相同那么保留,否则丢弃该帧。


大致了解了数据包的定义、网卡的MAC地址、数据包的发送方式,可以对数据链路层上信息的交互有基本的认识。

网络层

有了MAC地址,理论上就可以让世界上任意两块网卡交互信息,不过,这样有很大的缺陷。

如果交换机的MAC地址表中没有目标主机,那么以太网采用广播方式发送数据包,不仅效率低,而且局限在发送者所在的子网络。也就是说,如果两台计算机不在同一个子网络,广播是传不过去的。
(想想也是,如果发送给全世界每台主机那么信息全乱套了)

因此,必须找到一种方法,能够区分哪些MAC地址属于同一个子网络,哪些不是。如果是同一个子网络,就采用广播方式发送,否则采用其他的方法(后文会涉及)。
遗憾的是,MAC地址本身无法做到这一点。它只与厂商有关,与所处网络无关。

这就导致了”网络层”的诞生。它的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做”网络地址”,简称”网址”。

于是,”网络层”出现以后,每台计算机有了两种地址,一种是MAC地址,另一种是网络地址。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。

网络地址帮助我们确定计算机所在的子网络,MAC地址则将数据包送到该子网络中的目标网卡。
因此,从逻辑上可以推断,必定是先处理网络地址,然后再处理MAC地址。

IP协议

规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。
目前广泛采用的IP地址是第四版本,又称IPv4。

IPv4规定IP地址是32bit二进制数构成的,习惯上我们每8bit分一组,转换为10进制表示IP地址。

例:

IP 32bit IP 十进制(又称点分十进制记法)
10101100 00010000 11111110 00000001 172.16.254.1

互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。
比如,IP地址192.16.8.1,这是一个32位的地址,假定它的网络部分是前24位(192.16.8),那么主机部分就是后8位(最后的那个1)。
处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说192.16.8.22应该与192.16.8.1处在同一个子网络。

至于到底前多少位表示网络号,会在后续的文章介绍。

简单来讲,IP协议的作用为 :

  • 为每一台计算机分配一个IP地址

  • 确定哪些IP地址属于同一个网络。

IP数据报

根据IP协议发送的数据,我们通常称之为IP数据报,它的格式类似于以太网帧,也分为首部 Head 和数据 Data

实际,IP数据报直接放进以太网帧的”数据”部分,因此完全不用修改以太网的规格。
这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。

所以,加入IP数据报的以太网帧,应该类似于下列的格式:

[计算机网络学习笔记]:协议概述_第5张图片


传输层

有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。

接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?
也就是说,我们还需要一个参数,表示这个数据报到底供哪个程序(进程)使用。
这个参数就叫做”端口”(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

端口是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

相比之下,网络层的功能是建立主机到主机的通信传输层的功能则是建立应用程序到应用程序的通信

UDP协议

加入端口信息,需要新的协议。最简单的实现称为UDP协议(user data protocol),它的格式几乎就是在原来IP数据报的前面加上了一个端口号。
这里写图片描述

TCP协议

UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。
为了解决这个问题,提高网络可靠性,TCP协议就诞生了。
这个协议比较复杂,大家可以简单理解为在UDP的基础之上添加了一些可以确保数据能够传送到的机制,当然接受者如果没有收到那么会重新发送。

应用层

应用层收到传输层的数据之后就要对数据解读,但是不同的程序传输的信息肯定格式有所差别,因此我们必须对不同的应用程序发出的数据进行规范,这就形成了应用层各种各样的协议。

例如,FTP协议、HTTP超文本传输协议(虽然它叫传输协议但是属于应用层)等等。

简而言之,应用层的协议规定了收到的数据报文该如何被解析。


本文引用了阮一峰-互联网入门很大篇幅的内容,加之理解修改,希望大家尊重原作者劳动成果,去原文看看可以有更大的收获。

你可能感兴趣的:(Network)