目录
一、网络协议初识
1、协议分层
2、OSI七层模型
3、 TCP/IP五层(或四层)模型
4、对网络协议栈的理解
二、网络传输基本流程
1、网络传输流程图
1.1、同一个网段内的两台主机进行文件传输
1.2、跨网段的主机的文件传输
三、数据包封装和分用
四、网络中的地址管理
1、IP地址
2、MAC地址
一、网络协议初识
1、协议分层
在这个例子中,我们的协议只有两层。但是实际的网络通信会更加复杂,需要分更多的层次。分层最大的好处在于 "封装" 。把相关的问题放到一起,不相关的问题分开,实现高内聚,低耦合。
软件分层之后,每一层都只关注自己同层的功能,只使用下层的接口,任何一层出现问题,都不会直接影响另一层,减少后期开发者的维护成本。
2、OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
- 把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
- 但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解。
3、 TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层:负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
- 数据链路层:负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
- 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层
物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。由于网络协议栈中,处于核心地位的,一定是属于操作系统范畴的,因此整个协议栈被命名为TCP/IP协议栈。
一般而言
- 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。
- 对于一台路由器,它实现了从网络层到物理层。
- 对于一台交换机,它实现了从数据链路层到物理层。
- 对于集线器,它只实现了物理层。
但是并不绝对,很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)。
4、对网络协议栈的理解
由于Linux下一切皆文件,所以对于网络的管理可以被归属为对网卡的管理,也就被归属为对文件系统的管理。
我们要学习的网络,本质就是操作系统的一部分。操作系统的种类非常多,但是网络(操作系统内的TCP/IP)只能有一种。把网络协议栈隶属于文件系统,是大部分操作系统具体实现方案的一个细节。
数据链路层的标准是不一样的,因为他是在网卡驱动层实现的。局域网环境的不同,网卡驱动就不同,数据链路层的实现就不同。
二、网络传输基本流程
1、网络传输流程图
1.1、同一个网段内的两台主机进行文件传输
两个主机通信的本质,是两个主机的OS与网络协议栈在通信。网络协议栈的每一层都有自己的协议,协议的表现形式是协议报头。
类比到我们日常的网购中,我们买了东西,最后并不是直接收到了买到的商品,而是一个包裹,包裹上面贴着快递单。虽然这个快递单对于我们自己来说不是必须的,但是对于快递员来说是必须要有的。在物流体系中,快递单 + 商品,才是物流的主体。同理,在每一层协议中,协议报头 + 有效载荷才是协议的主体。
现在,张三向李四发了一条消息,消息会从张三的应用层开始,依次向下,每一层都会把上层交给自己的数据作为自己的有效载荷,并添加一个报头,最后通过以太网发送给李四。冯诺依曼体系决定了李四在收到数据时,一定是硬件层先收到的。硬件层收到后,会把信息交付给上一层,依次向上,每一层都会把自己的报头与有效载荷分离,最后传递到李四的应用层,最终传递给用户李四。
总结:
- 每一层,都会把上层交给自己的数据作为自己的有效载荷
- 每一层,都有自己的协议报头
- 对应的层,报头 + 有效载荷 = 自己要发送的报文。
- 在逻辑上,同层协议,都认为自己在和对方的同层协议在通信。
- 同层协议,能够互相认识对方的报头。能做到:
a.将报头进行和有效载荷的分离。
b.将有效载荷交付给上层的哪一个具体协议。 - 任何协议都要有两个基本功能:
a.报头必须要能够和有效载荷分离。
b.报头必须能支持将有效载荷交付给上层:数据报分用。
宏观上,一个报文自顶层开始要发给对方的顶层,需要经历的从上到下的贯穿协议栈叫做封装,将报文自底向上进行交付叫做解包 + 分用。
任何人要通信,需要有唯一的标示符,对于计算机也是如此,每台计算机都配有网卡,网卡在出厂时,就在内部被写入了sn号,也称MAC地址,全球唯一。
1.2、跨网段的主机的文件传输
数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
路由器也是一台主机,至少要级联两个子网,至少要有两个网络接口。
现在,张三向李四发送了一条信息,数据从张三的应用层依次向下传递,每层都会添加自己的协议报头,最后发送给路由器。由于网络中有很多主机,为了能够准确的把数据传递给指定主机,就需要通过IP地址标识所有的主机。
IP地址在现在的协议中叫做IPV4,对应一个 4 字节的整数。常见为 192.168.X.Y ,这是一种字符串风格的点分十进制方案的IP地址,其每一个字节是 8 个比特位,所以取值范围为[0.0.0.0,255.255.255.255] 。IP地址标识公网中主机的唯一性。
张三的报文在自顶向下发送的时候,会经过网络层,在网络层中根据目的IP查询路由表,确定目标主机与自己不在同一个网络,并把报文添加报头(包含目的IP,为报文定制最终目标,路上根据该地址进行路径选择)后向下交付给自己的数据链路层,并添加链路层的报头(包含目的MAC,根据路径选择的结果,来选择下一跳主机)。以上工作完成后,报文就会通过内网被转发到路由器了。
报文被转发到路由器的数据链路层后,会进行向上传递,把报文传递到网络层,由于网络层的报头中含有目的IP,所以路由器就可以根据目的IP进行下一站的路径选择。并把报文向下传递到数据链路层,添加报头,包含已选择路径的目的MAC,最终通过令牌环传递给李四。
IP协议及其以上的协议都没有看到任何网络方面的差异,IP协议以下,网络可以有明显的差异。这是因为IP地址屏蔽了底层网络的差异,这时路由器+IP协议的作用。所以IP是全球网络的底层基础。
三、数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
- 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理。
下图为数据封装的过程:
下图为数据分用的过程:
四、网络中的地址管理
1、IP地址
IP协议有两个版本:IPv4和IPv6。凡是提到IP协议,没有特殊说明的,默认都是指IPv4。
- IP地址是在IP协议中, 用来标识网络中不同主机的地址;
- 对于IPv4来说, IP地址是一个4字节, 32位的整数;
- 我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
2、MAC地址
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)