目录
- 网络协议
- 认识“协议”
- 网络协议初识
- 协议分层
- OSI七层模型(理论模型)
- TCP/IP五层(或四层)模型(工程实现模型)
- 网络中的地址管理
- MAC地址
- IP地址
- 网络传输基本流程
- 路由的本质
- 数据包封装和分用
- 网络协议需要解决的问题
网络协议
计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。
认识“协议”
本质:“协议”是一种约定。统一软硬件通信标准。既要有硬件标准,也要有软件协议。
计算机生产厂商有很多,计算机操作系统、计算机网络硬件设备也有很多,为了让这些不同厂商之间生产的计算机能够相互顺畅的通信,约定一个共同的标准大家都来遵守,就是网络协议。
网络协议初识
协议是软件,软件是可以分层的。协议在设计的时候,就是被层状的划分的。
为什么要划分成层状结构?
- 场景复杂
- 功能解耦,便于人们进行各种维护
通信的复杂,本质是和距离成正相关的。这是协议栈要解决的问题。
复杂体现在:
-
应用范畴:
- 如何处理数据(应用层)
-
通信范畴:
- 丢包(传输层)
- 定位问题(网络层)
- 解决下一跳主机的问题(数据链路层)
- 还有(物理层),不属于软件
上层应用如何写,操作系统怎么做,这就叫做网络协议。
协议分层
分层最大的好处在于“封装”。
先有OSI七层模型,再有TCP/IP协议
OSI七层模型(理论模型)
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器、交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
TCP/IP五层(或四层)模型(工程实现模型)
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层: 负责光/电信号的传递方式.。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决
定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。数据链路层:负责设备之间的数据帧的传送和识别。 例如网卡设备的驱动、帧同步(就是说从网线上检测
到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网, 无线LAN等标准。交换机(Switch)工作在数据链路层。局域网工作在数据链路层。网络层: 负责地址管理和路由选择。例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层.
传输层:负责两台主机之间的数据传输。 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型。
一般而言:
- 对于一台主机, 它的操作系统内核实现了从传输层到网络层的内容;
- 对于一台路由器, 它实现了从网络层到物理层;
- 对于一台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层;
但是并不绝对, 很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(比如端口转发)。
网络中的地址管理
MAC地址
局域网中表示主机的唯一性:MAC地址,即物理地址
每台主机都有自己独一无二的MAC地址,除非自己虚拟出来的网卡。
在Linux中,使用ifconfig
命令进行配置和显示网络接口。解决下一跳问题。
- MAC地址用来识别数据链路层中相连的节点。
- 长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示 (例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)。
IP地址
- IP协议有两个版本, IPv4和IPv6.
- IP地址是在IP协议中, 用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个
字节, 范围是 0 - 255;
网络传输基本流程
先来看一个例子,假设有两台主机:
协议报头:同层协议收到一个数据之后,在数据之外多出来的部分叫做报头,(报头是发送方和接收方互相传递属性字段的一个重要概念)。
数据交付:把协议栈想象成一个栈结构,那么从上往下可以看成压栈的过程(封装:添加报头)。自底向下交付可以看成弹栈的过程(解包:去掉报头,展开分析)。
当两个主机不在同一个局域网中怎样进行通信呢?
跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
A主机和B主机不在同一个局域网,没办法直接进行通信,需要经过路由器进行通信。路由器也是一台主机。由此可见,在使用TCP/IP协议的网络中,IP及其向上的协议,看到的报文都是一样的。差异主要体现在最底层的mac帧协议等底层协议上。
在此,ip就相当实现了这样一个功能:对不同的子网进行适配。
底层网络的差异化通过IP协议的存在产生了一种虚拟化的策略,让所有的主机看到相同的ip协议,从而解决底层的差异问题。
路由的本质
在通信过程中,发送信息和接受信息的主机的ip分别为源ip和目的ip。当前所在为源mac地址,路由的本质就是根据目的ip选择下一站去哪里(即下一个mac地址)。
即,传输过程中,源ip和目的ip不会改变,但是源mac地址和目的mac地址会改变。
数据包封装和分用
- 不同的协议层对数据包有不同的称谓。在传输层叫做数据段(segment),在网络层叫做数据报(datagram),在链路层叫做数据帧(frame)。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
- 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的“上层协议字段”将数据交给对应的上层协议处理,称为解包。
网络协议需要解决的问题
- 报文是要被封装的,如何解包?
- 决定我们的有效载荷交付给上层的哪一个协议的问题。