一、导语
本文面向有一定计算机网络基础的读者,通过实验剖析请求环节中的报文附加一些类比,帮助读者更清晰的了解常用的网络协议工作细节。 本文数据链路层以以太网为例介绍。 概念链接: MAC地址 IP地址 子网掩码 默认网关 。
二、网络体系结构介绍
了解本文要介绍的细节,需要先行了解计算机的模型结构,如下图介绍了osi体系结构、TPC/IP体系结构、五层协议体系结构。
详细的分层介绍不在本文中赘述,具体可参照 文档 。 协议介绍: 1、ARP协议:地址解析协议,即Address Resolution Protocol的缩写,它的作用是把IP地址翻译成MAC地址,数据数据链路层的协议; 2、 IP协议:网际协议,即Internet Protocol的缩写,工作在网络层,支持基于IP地址进行网络通信; 3、RIP协议:路由信息协议,即Routing Information Protocol的缩写,工作在网络层,基于此让路由器可以动态的感知网络的变换从而调整自身的路由表,本文介绍的是RIPv1; 4、TCP协议:传输控制协议,即Transmission Control Protocol的缩写,工作在传输层,是一种面向连接的、可靠的、基于字节流的传输层通信协议; 5、UDP协议:用户数据报协议,即User Datagram Protocol的缩写,工作在传输层,是一种比tcp简单很多的面向数据包的通信协议,提供不可靠的通信服务; 6、HTTP协议:超文本传输协议,即HyperText Transfer Protocol的缩写,工作在应用层,即日常我们访问网站所使用的应用层协议。
三、网络
- 相同的网络和不同的网络(IP寻址的网络)
相同的网络通信在数据链路层就可以完成通信,不需要网络层设备,网络层设备常用的就是路由器了;不同的网络需要通过网络层设备,即路由器根据路由表进行数据转发,来完成通信。 我们以子网掩码的方式来介绍相同的网络和不同的网络。 一个IP地址可以认为是由网络号和主机号构成,网络号相同就是相同的网络。我们日常在配置和查看我们电脑的配置发现除了有IP地址,还有子网掩码需要配置,如下图:
IP地址与子网掩码做逻辑与计算后,得到的就是IP地址对应的网络号了,网络号后面的部分就是主机号了。比如IP地址为192.168.1.100,子网掩码是255.255.255.0,那么IP地址和子网掩码做逻辑与计算后得到的192.168.1.0就是网络号了,后面的100就是同一个网络下的主机号了。
2、不同的网络间通讯说明
上图以电话号码作为类比对相同网络内通信和不通网络通信进行说明。作为类比,网络号就相当于电话号码的区号,主机号就相当于电话号码的号码部分。相同网络通信就类似于拨打同一个城市内的电话,因为区号相同,这是拨打号码无需加区号直接拨打就可以接通本市内的号码了;如果拨打长途电话,那么呼叫首先要通过区号找到长途电话所在的城市,让后所在的城市再找寻具体的被叫号码,从而实现长途呼叫的实现,在网络通信中,就是要通过路由器找到不同网络中另外一个网络,然后再另外一个网络内将请求发送到目标主机。 从上图还可以看出,同一个城市(同一个区号)下电话号码不能出现相同,但是不同的城市(不同的区号)是可以有相同的号码的,最终区号 号码的组合必须要是唯一的。类比于网络就是相同的网络下主机号都是不同的,但是不同的网络下主机号可以相同,网络号 主机号必须也是唯一的(本文不考虑NAT等对ip地址的映射转换)。
四、实验使用的网络
网络拓扑如上图所示。网络中有两台客户端和一台web服务器组成网络终端设备,由一台交换机和两台路由器组成网络部分。 客户端1和客户端2及交换机同属于一个网络192.168.0.0/255.255.255.0,web服务器属于一个网络192.168.1.0/255.255.255.0,路由器1和路由器2之间的链接属于一个网络192.168.3.0/255.255.255.252,共三个不同的网络组成。
五、以太网的通信
上图示意了以太网的帧结构和以太网通信过程。 从图中可知,数据链路层的以太网是通过MAC地址来寻找目标节点的。对于经典的总线结构以太网,当机器发送数据时,是通过广播的方式把数据报文发送到总线上所有的节点,其他节点收到数据报文后判断报文中的目的MAC地址和自己的MAC是否一致,一致则接收,不一致则丢弃数据。 接入交换机的以太网,当机器发送数据时,起初交换机也会把数据广播到所有的端口,接收终端的处理方式和上述一致;但是交换机每次会记录端口进来的接口的MAC地址和端口的映射关系,后续交换机就会先查询映射表,映射表中存在记录的交换机就只会把数据发往相应的端口号,不再广播到每个端口了。交换机记录的映射表如下图。
有了这张表后,交换机会根据以太网帧中的目的MAC地址将数据转发到相应的端口。
六、MAC地址和IP地址
当我们在浏览器地址栏输入目标节点的ip地址(域名也是通过DNS查询得到IP地址)后,计算机需要把请求数据发送到目标节点。从上述介绍可知,IP是基于数据链路层的,数据链路层的以太网通讯只会根据MAC地址寻找目标节点,所以第一步就需要把IP地址转换为MAC地址,这里引入要介绍的第一个协议ARP。 网络中的节点会缓存同一网络下的IP地址和MAC地址的映射关系,当一个新的网络刚冷启动,映射表是空的,当开始第一个IP网络请求时,请求节点会广播ARP报文,去查询目标IP地址对应的MAC地址,ARP报文示例如下:
通过上述的ARP请求和应答,源节点就知道了IP192.168.0.3对应的MAC地址为0001.638e.ed83,并且会把映射关系缓存起来。
这是知道下一节点的MAC,数据链路层的以太网就是携带IP数据报发送到下个节点了。如果后续还有数据要发到相同的目的IP地址,就不需要再次发送ARP请求了,可以直接从缓存中查询到。当然为了适应节点的变更,ARP缓存也不是永久的,到期会删除缓存重新请求获取的。
七、路由器的转发
上文介绍到,不在同一个网络的请求需要通过路由器转发,那么路由器要如何知道需要把请求转发到哪里呢,这里引入要介绍的RIP协议。不同的路由器间通过RIP报文交换路由信息,维护路由表,RIP报文是定时广播发送的以使路由器及时获取到网络的变化。同时RIP协议(本文基于RIPv1介绍)基于UDP协议发送,然后UDP报文又是基于IP报文发送的,所以本章节先介绍IP协议,其次介绍UDP协议,再介绍RIP协议。
1、IP协议
网络会根据目的IP地址把IP报文发到目的节点,同时携带了源节点IP地址用于接收目的节点的返回数据。 2、UDP协议
UDP是一种不可靠的协议,数据直接发送,不会涉及重试、链接等,协议简单、发送高效。 3、RIP协议
4、完整RIP协议报文
5、路由表
路由表中除R标识的外都是直接链接在路由器上的,路由器根据上述的路由表查询到目的网络和所在的端口并把数据发送出去。R标识表示通过RIP生成的路由信息,可以看到要到达网络192.168.1.0/24,需要经过192.168.3.2所在的端口GE0/1发送出去。
八、一次web请求
按照上述的拓扑图,web服务器的IP地址为192.168.1.2,用客户端1(IP为192.168.0.2)的浏览器访问web。 1、从拓扑图可知,示例网络由两台路由器、三个网络组成,即从客户端1访问web服务器是需要跨网络的,先看一下从客户端1到web服务器IP报文是如何发送的。
将图中的路由跳转结合拓扑图可知,客户端1发送的请求先到路由器1,然后到路由器2,由路由器2把请求发到web服务器。 在客户端1输入目的IP192.168.1.2后,客户端1通过将目的IP和子网掩码进行对比,发现不在同一个网络,所以客户端1把请求发送到默认网关192.168.0.1上,即路由器的端口GE0/0上。路由器1接收到请求后,查询本机的路由表,通过于路由表中的子网掩码和网络对比,命中如下的路由表记录。
随即把请求通过路由器1的端口GE0/1发送到IP192.168.3.2,即路由器2的端口GE0/1。路由器2收到请求后,用同样的方式查询本机的路由表,命中路由表如下。
路由器2随即把请求通过端口GE0/0发出,web服务器是链接到端口GE0/0的,所以请求本正确的发送到目标节点,即web服务器了。 2、当在客户端1的浏览器输入http://192.168.1.2后,冷启动的网络会进行ARP广播及通过RIP生成路由表,这些在上文中已经介绍,这里不再赘述。我们知道HTTP协议是基于TCP协议的,那么请求开始需要TCP三次握手建立链接,详情如下报文展示。
上述三次握手后,TCP链接建立,并且随着第三次握手携带发送数据,完成了HTTP请求的发送。
web服务器发送响应数据。客户端1接收到HTTP响应之后,整个请求就完成了,这个时候客户端1发起断开TCP链接的报文,开始四次挥手断开TCP链接。
客户端1发起断开TCP链接请求,一次挥手。
web服务器确认客户端1断开TCP请求,并发起断开TCP链接请求,属于第二第三次挥手。
客户端确认web服务器发起的TCP链接请求,完成四次挥手,TCP链接断开。 3、web请求流程
上述为HTTP请求和响应的报文内容。
九、结语
本文是通过一个结合示例报文详细信息,来展示完整的网络数据传输流程,帮助读者从整体上了解网络通信的流程。 欢迎沟通交流。