目录
[1.1 认识协议](#1.1 认识协议)
[1.2 协议分层](#1.2 协议分层)
[4.1 数据包封装与分用](#4.1 数据包封装与分用)
[4.2 网络传输基本流程](#4.2 网络传输基本流程)
[4.2.1 以太网通信](#4.2.1 以太网通信)
[4.2.2 令牌环网](#4.2.2 令牌环网)
[4.2.3 认识IP地址和路由器](#4.2.3 认识IP地址和路由器)
一、协议
1.1 认识协议
"协议"是一种约定,计算机中通过高低电平代表1和0就是一种约定,要通过01信号传输各种不同的信息,就需要更多的约定
例如我们平时收快递的时候,不止收到了物品,还有快递包装上贴着的快递单。快递单上就有许多约定好的字段,例如姓名字段、电话字段、地址字段等,这就是一个快递公司约定的协议
又例如以前还在用座机通信时,打电话要花钱。去上学时想和家里报个平安但是又想省钱,就可以跟家里人约定电话响一声代表平安,响两声代表......这也是我们和家里人约定的一个协议
我们的语言也是协议,摩斯密码也是协议,协议都是由人们共同约定并赋予其含义的。
市场中那么多的公司,有生产硬件的,有开发软件的,还有写操作系统的......如何让不同厂商之间生产的计算机能够相互顺畅的通信呢?就需要有人制定一个共同的标准,大家都来遵守这个标准,这就是网络协议。
1.2 协议分层
在实际中,协议也分为多层,每层协议各司其职才能完成长距离的通信
例如中国人用座机打电话进行通信,其中就可以分为语言层和通信设备层。在打电话时看似双方在直接进行沟通,但实际上是一方将数据传输到自己所用的座机,座机再将数据传输给对方的座机,对方的座机再将数据传输给对方。在语言层中双方通过汉语这个协议进行沟通,在通信设备层数据则按照座机所使用的协议进行传输
如果变更语言层,则英国人用座机通信时语言层就采用英语这个协议;如果变更通信设备层,则中国人用无线电通信时则数据按照无线电所使用的协议进行传输
实际的网络通信中则会更加复杂,需要将协议分为更多层
二、OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型又称开放式系统互联参考模型,是一个逻辑上的定义和规范。其将网络从逻辑上分为了七层,每一层都有相对应的物理设备,比如交换机、路由器
OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输。它的最大优点在于将服务、接口和协议这三个概念明确地区分开,通过七个层次化的结构模型使不同系统不同网络之间实现可靠的通讯
| | 分层名称 | 功能 | 每层功能概览 |
| 7 | 应用层 | 针对特定应用的协议 | 例如电子邮件有电子邮件协议、文件传输有文件传输协议、远程登录有远程登录协议 |
| 6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换 | 接收不同表现形式的信息,如文字流、图像、声音等 |
| 5 | 会话层 | 通信管理,负责建立和断开通信连接。管理传输层以下的分层 | 何时建立连接、何时断开连接以及保持多久的连接 |
| 4 | 传输层 | 管理两个节点之间的数据传输,确保数据被可靠地传输到目标地址 | 是否有数据丢失? |
| 3 | 网络层 | 地址管理与路由选择 | 经过哪个路由传递到目标地址? |
| 2 | 数据链路层 | 互连设备之间传送和识别数据帧 | 数据帧与二进制数据流之间的转换 |
1 | 物理层 | 以"0"和"1"代表电平高低,界定连接器与网线的规格 | 二进制数据流与电子信号之间的切换,连接器与网线的规格 |
---|
但OSI七层模型过于复杂且不实用,所以我们主要了解TCP/IP五(四)层模型
三、TCP/IP五(四)层模型
TCP/IP协议是一组协议的代名词,它还包括许多其他协议,组成了TCP/IP协议簇
TCP/IP通讯协议采用了五层的层级结构,其中:
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等,用户进行网络编程主要就是针对应用层
- 传输层:负责两台主机之间的数据传输,如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机
- 网络层:负责地址管理和路由选择,例如在IP协议中通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器(Router)就工作在网络层
- 数据链路层:负责设备之间的数据帧的传送和识别,例如网卡设备的驱动、帧同步、冲突检测、数据差错校验等工作,有以太网、令牌环网、无线LAN等标准,交换机(Switch)工作在数据链路层
- 物理层:负责光/电信号的传递方式,例如现在以太网通用的双绞线、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的WIFI无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等,集线器(Hub)工作在物理层
网络协议栈的结构:
|----------------------------------------------------------------------------------------|-------------|
| 应用层: DNS,URI,HTML,HTTP,TLS/SSL,SMTP,POP,IMAP,MIME,TELNET,SSH,FTP,SNMP,MIB,SIP,RTP,LDAP | 应用程序 |
| 传输层: TCP,UDP,UDP-Lite,SCTP,DCCP | 操作系统 |
| 网络层: ARP,IP,ICMP | 操作系统 |
| 数据链路层 | 设备驱动程序和网络接口 |
| 物理层:硬件 | 设备驱动程序和网络接口 |
网络协议栈的层次结构中,每一层都有协议,其中传输层和网络层最重要,因此作为名字的一部分
物理层我们一般考虑的比较少,因此也可以称为TCP/IP四层模型
网络协议栈和我们的操作系统息息相关,物理层的网卡属于硬件,网络通信的本质就是在访问硬件(网卡)。传输层和网络层是Linux内核中的模块,提供对应的系统调用以供应用层的开发者使用网卡
四、网络传输
4.1 数据包封装与分用
在逻辑上,数据直接在通信双方之间传递,但实际上网络通信时发送的数据都需要自上而下贯穿发送者的协议栈到达底层,并经过网络传输到接收者的协议栈底层,再自下而上贯穿接收者的协议栈到达上层
对于用户发送的数据包,不同的协议层对其有不同的称谓。数据包在传输层叫做段(segment),在网络层叫做数据报(datagram),在数据链路层叫做帧(frame)。
数据包从应用层通过协议栈发送到网络的过程中,每经过一层协议就需要加上一个数据首部(报头),这个过程称为封装,数据包称为有效载荷。在报头中通常包含一些例如报头长度、有效载荷长度等信息,不同协议的报头其格式也各不相同
有效载荷加上报头就成为一个完整的报文 ,上层的报文传递到下层后就变为了下层的有效载荷,再经过下层封装报头后继续向下传递,这就是数据包封装的过程。到达链路层封装为帧后传输到网络中,到达目的主机后再经过层层解包将不同协议层的报头与有效载荷分离,并根据报头中的信息判断将有效载荷交给上层的哪一个协议
在解包时,下层的有效载荷变为上层协议的报文,在解包过程中根据报头中的某些字段判断其属于上层的哪个协议并传递的过程称为数据包的分用
所以通信的过程,其实就是对数据包不断的封装和解包的过程。因为这个过程在协议栈中进行,因此几乎每一层的协议,都需要具备能够将有效载荷和报头分离的能力,并且能够正确将有效载荷交付给上层对应的协议。
4.2 网络传输基本流程
跨网段的主机进行数据传输,数据帧从源主机到目标主机的传输过程中要经过一个或多个路由器
两台主机通过TCP/IP协议通信的过程如下所示:
4.2.1 以太网通信
(1)原理
每台主机在局域网中,都需要有自己唯一的一个标识
例子:我是一个老师,在上课发卷子时说"张三上来拿卷子",这时只有张三来拿卷子,其他同学为什么不来?
一定是所有同学都听到了我的这句话,但只有张三符合我话中的"标识",即能够标识班里同学唯一性的名字(假设无人重名),因此只有张三做出了反应。
实际上这就是以太网的通信原理,在发送数据的时候,源主机将自己要发送的数据帧在局域网中进行广播,连接局域网的每个节点都能够接收到这个帧。节点通过比较自己的MAC地址和数据帧中包含的目的地MAC地址来判断该帧是否是发往自己的,一旦确认是发给自己的,则复制该帧做进一步处理,否则将帧直接丢弃。
什么是MAC地址?每张网卡都有一个48位长度的唯一序列号,这就是MAC地址,一般以16进制数字加上冒号的形式来表示(例如08:00:27:03:fb:19)。MAC地址在网卡出厂时就确定了,不能被修改且通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能冲突,且有些网卡也支持用户配置MAC地址)
(2)数据碰撞问题
有时局域网中有人正在下载大量数据,或者在人多的场合中网络就会很卡。又例如网络攻击中攻击者向局域网中发送大量垃圾数据,导致以太网发送数据碰撞问题。
因此,以太网中发送数据帧的主机都需要执行碰撞避免的机制,例如CSMA/CD协议或CSMA/CA协议。简单来说就是错峰出行,尽量避免同时发送数据帧,尽可能确保任何时刻内局域网中只有一台主机在发送数据帧,并且发送数据帧的主机需要进行碰撞检测
局域网中的所有主机共同构成碰撞域,主机越多,就越容易发生数据碰撞。交换机可以减少数据碰撞发生的概率,其原理是如果两台需要通信的主机都在交换机的一侧,那么交换机就不会再将数据传输到另一侧;如果一侧发生了数据碰撞,交换机不会将碰撞的数据传输到另一侧。交换机实现了划分碰撞域的功能。
局域网的通信原理基于碰撞域和碰撞检测
(3)网卡工作模式和局域网
网卡有多种工作模式,其中普通模式即只接受MAC地址匹配的数据帧,其他帧一律丢弃。而混杂模式是网卡收到数据帧后即使MAC地址不匹配,也将帧向上层传递。
我们可以将局域网看作是连接到该局域网的所有主机所共享的资源,因此局域网也是临界资源。确保任何时刻内局域网中只有一台主机在发生数据帧的原因就是要保证主机对局域网的互斥访问
4.2.2 令牌环网
令牌环的原理就是获得特定令牌数据的主机才有资格向局域网中发送数据,类似局域网的锁
以太网有自己的协议,令牌环网也有自己的协议。得益于协议的分层,即使某个局域网替换了过去所使用的协议,也不会影响到其他层
4.2.3 认识IP地址和路由器
IP协议又分为IPv4版本和IPv6版本,本文中只介绍IPv4版本的IP协议
IP地址用于标识一台主机在全网内的唯一性,是一个4字节32位的整数,通常也使用"点分十进制"的字符串形式来表示IP地址,例如192.168.0.1。像这样用点分隔的每一个数字表示一个字节,范围为0~255。IP地址分为公网IP和私有IP,私有IP可能重复
IP地址也用于在网络中进行路径规划,数据帧在网络的传输中,其源IP和目的IP是不变的 ,这是数据帧最初的起点和最终的终点。就好比一个人从广州去北京旅游,他的起始出发点和最终目的地是不变的。但数据在路由器之间转发时,其源MAC地址和目的MAC地址会一直变动,MAC地址标识了数据上一次发出的路由器和下一次要到达的路由器,以确保数据能够到达正确的路由器。所以MAC地址的使命只在于在某个局域网中进行路径定位
总结:IP地址标识起点和终点,MAC地址标识路径中的站点
通过判断数据帧的源IP和目的IP是否在同一子网也可以判断该数据帧是否需要被交给路由器跨网段传输
路由器也有自己的IP地址和MAC地址。一台主机在跨网段发送数据帧的过程中,首先要知道自己所在局域网中的路由器的MAC地址并填充到数据帧对应字段中,再将帧传入局域网交付给路由器。路由器在拿到帧后对其进行局部解包得到数据帧的目的IP
前面提到,路由器工作在网络层,因此路由器在对报文进行处理后不能直接发送给对应主机,而是需要将报文传输给下层,重新封装对应局域网链路层协议的报头后再自底向上穿过协议栈传输给目标用户。
因此即使不同局域网使用的链路层协议不同,对于路由器之上的协议层而言是没有差异的,路由器屏蔽了底层网络的差异化。
关于协议和网络传输等更多细节,在后续会慢慢提及
完.