目录
网络发展
认识 “协议”
网络协议初始
协议分层
OSI七层模型
TCP/IP五层(或四层)模型
网络传输基本流程
编辑 协议报头
数据包封装和分用
网络中的地址管理
认识IP地址
认识MAC地址
网络发展
独立设计:计算机之间的相互独立
在早期的时候,计算机之间是相互独立的,此时如果多个计算机之间要协同完成某种业务时,就只能等一台计算机处理完成它的数据任务之后,再将数据传递给下一台计算机,然后下一台计算机再进行相应的业务处理,这样就导致了效率非常低下。
网络互联:多台计算机连接在一起,完成数据共享
这时,就有人设法将这些计算机连接在一起,当某个业务需要多台计算机协同完成时,就可以将共享的数据放到服务器中,进行集中管理,此时各个计算机就可以获得这些共享的数据,所以各个业务在处理就能随时进行切换了。
局域网LAN:计算机数量更多了,通过路由器连接在一起
在局域网中有一种设备叫交换机,交换机的作用是要完成局域网内数据的转发工作,也就是在局域网中将数据从一台主机转发给另一台主机。各个局域网之间通过路由器连接起来,路由器的主要任务是完成数据的路由转发工作。
广域网WAN:将远隔千里的计算机连接在一起
各个局域网之间通过路由器互相连接在一起,便组成了一个更大的网络结构,我们将其称之为“广域网”。实际局域网和广域网是一个相对概念,也可以将广域网看作一个较大的局域网。
城域网MAN:在一个城市范围内建立的计算机通信网。
校园网CAN:在一个校园范围内建立的计算机通信网。
城域网和校园网也是一种相对的概念,都可以将它看作一个大的局域网。
认识 “协议”
"协议"本质就是一种约定,通信双方只要曾经做过某种约定,之后就可以使用这种约定来完成某件事情,而网络协议是通信计算机双方必须遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容。
例如:
计算机之间的传输媒介是光信号以及电信号,通过“频率”和“强弱”来表示0和1这样的信息,要想传递不同的信息,就需要约定好双方的数据格式。
思考:只要通信的两台主机,约定好协议就可以了吗?
· 计算机生产厂商有很多
· 计算机操作系统,也有很多
· 计算机网络硬件设备,还是很多
· 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?
- 就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议。
网络协议初始
协议分层
理解分层
a. 软件设计方面的优势 -- 低耦合
b. 一般我们分层依据:功能比较集中,耦合度比较高的模块设为一层 -- 高内聚
c. 每一层都要解决特定的问题
比如:两个人在打电话的时候,站在工程师的角度上,这两个人并不是直接沟通的,而是甲方的电话讲甲说的话,记录下来,经过编码转码后,通过通信网络将信息从甲的电话传递到了乙方的电话,甲说的话就在乙的电话中经过编码转码,最后乙方在听到甲所说的话。
人和人之间通信使用的是语言,我们可以将其称为语言层。
电话与电话之间通信使用的是通信设备之间的相关接口,我们可以将其称之为通信设备层。
随着科技的进步,大家都用上了智能手机,此时下层使用的通信设备也就变了,或者其他国家也使用电话通信,此时上层的语言协议也就变了,但是我们仍然可以正常沟通。
分层最大的好处在于“封装”,在分层情况下,将某层的协议进行替换后,通信双方并不会因此受到影响。
OSI七层模型
· OSI(open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上定义的规范。
· 把网络从逻辑上分为7层,每一层都有相关,相对应的物理设备,比如:路由器,交换机。
· OSI七层模型是一种框架性的设计方法,其主要的功能就是帮助不同类型的主机实现数据传输。
· 它的最大优点将服务,接口和协议这三个概念明确地区分别开,概念清楚,理论也比较完整,通过七个层次话的结构模型使不同的系统不同的网络之间实现可靠的通讯。
· 但是,它既复杂又不实用,所以我们按照TCP / IP 四层模型来学习。
分层名称 | 功 能 | 每层功能概览 | |
7 | 应用层 | 针对特定应用的协议。 | |
6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换。 | |
5 | 会话层 | 通信管理。负责建立和断开通信连接(数据流动的逻辑通路)。管理传输层以下的分层。 | |
4 | 传输层 | 管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目标地址)。 | |
3 | 网络层 | 地址管理与路由选择。 | |
2 | 数据链路层 | 互链设备之间传送和识别数据帧。 | |
1 | 物理层 | 以“0”,“1”代表电压的高低,灯光的闪灭,界定连接器和网络的规格。 |
每一层都有自己匹配的协议,每一层协议都要解决自己的问题!
· 数据链路:如何把数据交付给和自己直接连接的下一台主机。
· 网络层:要有路径选择的能力。
· 传输层:容错纠错的能力。
· 应用层:解决应用方面的问题。
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它包括许多协议,组成TCP/IP协议簇。
TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络完成自己的需求。
· 物理层:负责光/电信号的传递方式,比如现在以太网通用的网线(双绞线),早期以太网采用同轴电缆(现在主要用于有线电视),光纤,现在的WiFi无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率,传输距离,抗干扰性等,集线器(Hub)工作在物理层。
集线器的作用:对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在它为中心的节点上。
· 数据链路层:负责设备之间的数据帧的传送和识别。例如:网卡设备驱动,帧同步(从网线检测到什么信号算作新帧的开始),冲突检测(如果检测到冲突就自动重发),数据差错效验等工作,有以太网,令牌环网,无线LAN等标准,交换机(Switch)工作在数据链路层。
· 网络层:负责地址管理和路由选择,例如:在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器(Router)工作在网络层。
· 传输层:负责两台主机之间的数据传输。例如:传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
· 应用层:负责应用程序间沟通。如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等。
物理层考虑的比较少,因此很多时候也可以称为TCP/IP四层模型。
· 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。
· 对于一台路由器,它实现了从网络层到物理层。
· 对于一台交换机,它实现了数据链路层到物理层。
· 对于集线器,它只实现了物理层。
但是并不绝对,很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(比如端口转发)。
网络传输基本流程
同一个网段内的两台主机进行文件传输
协议报头
例如:在买快递的时候,我们不只会收到要买的东西,还会收到快递盒子与盒子上的快递单,这个快递单就像 “报头”。
a. 协议每一层都有,而每一个协议最终表现就是协议都要有报头。
b. 协议通常是通过协议报头来表达的。
c. 每一份数据最终在被发送或者在不同的协议层中,都要有自己的报头。
报文 = 报头 + 有效载荷
两台计算机通过TCP/IP协议通讯的过程如下所示:
跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中要经过一个或者多个路由器。
一个设备至少要横跨两个网络,才能实现数据报网络转发 -> 路由器必须横跨至少两个网络 -> 路由器必须要有两个网络接口。
局域网LAN:
a. 使两台局域网的主机能够直接通信。
b. 局域网通信的原理
每一台机器都有自己的 “名字”,每一台主机都有网卡。
每一张网卡都有自己的MAC地址,表面自己在局域网中的唯一性。
数据包封装和分用
· 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
· 应用层数据通过协议栈发送到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
· 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
· 数据封装成帧后发送到传输介质上到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
数据封装的过程:
数据分用的过程:
网络中的地址管理
认识IP地址
IP协议有两个版本,IPV4和IPV6。IPV4用32个比特位来标识地址,而IPV6用128个比特位来标识地址。
· 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地址)。
如何在Linux上查看主机的MAC地址?
· ifconfig命令可以查看当前主机的网卡信息。
注意:ether就是以太的意思,云服务器上的MAC可能不是真正的MAC地址,可能是模拟出来的。
如何在windows上查看主机的MAC地址?
· 打开cmd窗口,ipconfig -all命令可以查看主机网卡信息。