本博客主要介绍了计算机网络参考模型,传输层与网络层协议、路由技术、网络设备在网络通信中各自发挥了什么作用;如果你好奇当你在访问一个网页时网络都发生了哪些行为以及是怎么发生的,相信在阅读完会有大概的了解。
基本原理
网络通信协议的基本原理是通过将信息数据经过编码和解码来传输。其中编码是指将消息数据编制成对应特定网络协议定义的报文格式,而解码则是指接收端从传输后的报文中解码出原来的消息数据的过程。常见的网络通信协议有HTTP、FTP、SMTP、Telnet等,而且这些协议都是以TCP/IP (传输控制协议/Internet协议)的网络协议家族作为基础的。
TCP/IP协议家族以四层模型为基础,这四层模型是指报文开始由最上层的应用层开始传输,然后经过传输层、网络层和数据链路层,最后到达网络节点,再被发送到目的地。这四层协议之间存在复杂的联系,其中前3层协议主要负责封装应用层数据,将其发送到指定网络,而最后一层则负责将数据封装成报文,并将报文传输到受端,以保证发送的报文能够在网络上传输的可靠性和安全性。
综上所述,网络通信的基础原理主要是在发起方和接收方之间传输数据,并经过编码和解码过程。这些数据在网络中传播时,采用TCP/IP协议族定义的4层协议,每层协议都有它独特的职责,并通过网络设备的通信来实现数据的传输。
网络参考模型
计算机网络模型中最被人熟知的就是OSI七层模型和TCP/IP五层模型。下面会介绍OSI各层的功能、数据的传输过程、并了解各网络设备与OSI各层的关系。
OSI参考模型
ISO/OSI七层模型介绍
ISO/OSI参考模型是一种用于设计、描述和实施通信网络的标准。它将网络通信系统分为7层,其中每一层都有一个专门的功能。这些层包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一层都与其他层有所关联,它们提供服务给其上一层,并使用来自它的下一层的服务。此外,每一层都有自己的协议,用于处理和管理数据流动。
各层功能介绍
物理层
定义接口特性
定义传输模式,如单工、半双工、双工
定义创术速率
比特同步
比特编码
数据链路层
成帧(定义帧的开始和结束)
差错控制,如帧错、位错
流量控制
访问控制
网络层
路由选择
流量控制
差错控制
拥塞控制
传输层
可靠传输、不可靠传输
差错控制
流量控制
复用复分
会话层
建立、管理、终止会话
使用校验点是绘画在通信失效时从校验点继续恢复通信、实现数据同步(如常见的大文件传输)
表示层
数据格式转换
数据加密加密
数据压缩和恢复
应用层
用户交互产生网络流量的程序(如HTTP、FTP、SMTP等)
TCP/IP参考模型
面向网络分层的另一个著名模型是TCP/IP参考模型,早期的TCP/IP参考模型是四层结构,后面再使用过程中借鉴OSI参考模型的7层结构,将网络接口层划分为物理层和数据链路层,进而形成了5层结构。
常见设备与层的对应关系
备注:现在也有三层的交换机、五层的防火墙
数据传输过程
数据封装
数据封装过程
1.应用层将传输的数据(文字、图片、音频等)通过各种特殊的编码过程转换成计算机可识别的二进制数据,这就是数据的“翻译”过程;
2.传输层把上层数据被分割成小的数据段,并为每段数据封装TCP报文头部(应用层的二进制数据往往都是海量的,若进行一次性传输的话,一旦网络出现问题导致数据出错就要重新传输,同时数据量过大也会加大数据出错的概率。因此,传输层将上层数据先分割成小的数据段再逐段传输,一旦出现数据传输错误,只需重传一小段数据即可);
3.网络层把上层数据被封装一个新的报文头部--IP 报文头部(标识网络的逻辑地址)。在IP报文头部中包含目标IP 地址和源IP 地址,网络传输过程中的一些中转设备(如路由器等)会根据目标IP 地址来逻辑导址,找到正确的路径并将数据传输到目的端;
4.在数据链路层,上层数据被封装了一个MAC头部,其内部有一个关键的字段信息--MAC 地址(硬件设备中的物理地址,它由一组 48位的二进制数组成,具有全球唯一性特点)。同IP报文头部类似,MAC报文头部中也封装着目标 MAC 地址和源 MAC地址;
5.物理层,将二进制数所组成的比特流被转换成电信号在网络中传输。
数据解封装
数据封装完毕并通过网络传输到接收方后,将进入数据的解封装过程,该过程是数据封装过程的逆过程。
1.物理层将电信号转换成二进制数据,并将数据传输至数据链路层;
2.数据链路层查看数据报文的目标MAC地址,判断其与自己的MAC地址是否匹配,如果匹配会将数据的MAC报文头部拆除并将剩余的数据送至上一层;如不匹配则会丢弃数据;
3.网络层进行与数据链路层类似的操作,判断目标IP与自己的IP地址是否相同,确定是否传输数据,并送至传输层;
4.传输层根据TCP报文头部判断数据段应送往哪个应用程序,并将之前分割的数据段重组送至应用层;
5.在应用层,重组所有二进制数据段并进行复杂的解码过程,还原发送者所传输的最原始的信息。
网络层协议
IP地址
IP地址为互联网上每一个网络和每一台主机分配一个逻辑地址,IP地址由32位二进制数组成,为方便记忆将32位二进制数分成四段,每段八位,中间用圆点隔开,然后再将每八位二进制数转换成一位十进制数。如10110111.11000000.00110111.10111111经过以上方式可以转成183.192.55.191。
IP地址分类
IP 地址由两部分组成:网络部分和主机部分。网络部分用于标识不同的网络,主机部分用于标识一个网络中特定的主机。互联网IP地址分为A、B、C、D四类,每个类型的IP地址可以在不同网络中使用,其中A类IP地址用于大型网络,B类IP地址用于中型网络,C类IP地址用于小型网络,D类IP地址是一种特殊的地址,它用于多播功能,可以用来传送一个数据包给多台计算机。
目前常用的是A、B、C类地址,假设IP格式为x.x.x.x,那么
A类IP地址由8位二进制数构成,最高一位为0,其中x的取值范围为1~126;
B类IP地址由16位二进制数构成,最高两位为10,x的取值范围为128~191;
C类IP地址由24位二进制数构成,最高三位为110,x的取值范围为192~223;
其中A、B、C类地址又划分一部分私有地址,用于内网使用
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
子网掩码
用于划分子网的IP地址,区分网络和主机,从而实现网络通信。它的作用是判断数据包是发往同一网络还是发往不同网络,并根据数据包中的目的地IP地址与子网掩码进行比较,以此来决定数据包是否能够正确传输到目的地。
A类地址的默认子网掩码是 255.0.0.0
B类地址的默认子网掩码是 255.255.0.0
C类地址的默认子网掩码是 255.255.255.0.
有了子网掩码后,只要把IP地址和子网掩码作逻辑“与”运算,所得的结果就是IP地址的网络地址。
IP数据包头格式
IP数据包头格式
版本:IP的版本号,目前使用最广的IP的版本为4,占用4bit,即IPv4;
首部长度:用于表示IP 数据包头长度,占用4bit;
优先级与服务类型:用于表示数据包的优先级和服务类型,8bit。在数据包中划分一定的优先级,用于满足QoS(服务质量)的要求;
总长度:用以指示整个IP 数据包的长度,最长为65535字节,包括包头和数据;
标识符:用于表示IP 数据包的标识符,标识符字段用于标识一个数据包,以便接收节点可以重组被分片的数据包;
标志:标志字段,标志和分片一起被用来传递信息;
段偏移量:用于表示段偏移量,13比特,段偏移量中包含的信息指出在一个分片序列中如何将各分片重新连接起来;
TTL:用于表示IP 数据包的生命周期,防止一个数据包在网络中被无限地转发下去。TTL对应一个数据包通过路由器的数目,数据包每经过一个路由器,TTL将减去1。数据包经过的每一个路由器都会检查TTL字段中的值,当值为0时,该数据包将被丢弃;
协议号:协议字段,指示在IP 数据包中封装的协议是TCP还是UDP,TCP 的协议号为6,UDP 的协议号为17;
首部校验和:目的主机和网络中的每个网关都要重新计算包头的校验和,如果数据在传输过程中没有被改动过,计算结果应该是一样的;
源IP地址:用于表示数据包的源地址;
目标IP地址:用于表示数据包的目的地址;
可选项:如创建该数据包的时间戳等
ICMP协议
是一种由网络设备(如路由器和计算机)之间使用的协议。它通常用于诊断和故障排除网络问题,确认主机的可达性,还可以用于测试和衡量网络性能。
如检查网络是否联通的ping命令
ARP协议
在局域网中,交换机通过MAC地址通信,获得目的主机的 MAC地址就需要使用地址解析协议(ARP)将目的IP地址解析成目的MAC地址。所以ARP的基本功能是将一个已知的IP地址解析成 MAC地址,使交换机通过MAC地址通信。
假设PC1发送数据给PC2,需要知道 PC2 的MAC地址,可是PC1如何知道PC2的MAC地址呢?这时候就可以通过 ARP请求广播实现。
1.PC1先检查自己的ARP缓存表,ARP缓存表是主机存储在内存中的IP地址和MAC地址映射表,表格格式如下(windos使用arp -a 命令可查看),如缓存表中没有PC2的MAC地址,这时,PC1会初始化 ARP请求过程(发送一个ARP请求广播),用于发现目的地的MAC地址;
2.主机 PC1发送 ARP 请求信息--目的地址为 MAC 广播地址(FF-FF-FF-FF-FF-FF)的 MAC 地址广播帧,从而保证所有的设备都能够收到该请求。请求信息中包括PC1 IP地址和MAC地址;
3.交换机收到广播帧后,发现为MAC地址广播,就将数据帧从除了接收口之外的所有接口转发出去,主机接收到数据帧后,开始进行IP地址的比较。如果目标IP 地址与自己的 IP 地址不同,则会丢弃这个数据包。只有PC2这台主机会在自己的 ARP 表中缓存 PC1的 IP地址和 MAC地址的对应关系,它发送一个ARP应答,单播PC1告诉自己的 MAC地址;
4.PC1在接收到这个回应的数据帧后,在自己的 ARP表中添加 PC2的 IP地址和 MAC地址的对应关系,在这个过程中、交换机记录PC1和PC2的MAC地址,之后再转发数据时,两者就会使用单播的方式。
路由技术
路由器工作在OSI参考模型的网络层,它的作用是为数据包传输选择最佳路径,最终送达目的地。
在只有一个网段的网络中,数据包可以很容易地从源主机到达目标主机;但如果一台计算机要和非本网段的另一台计算机进行通信,数据包可能就要经过很多路由器,如下图 数据包从A到达B有很多条路径可以选择,在这些路径中某一时刻总会有一条路径是最好的。为了尽可能地提高网络访问速度,就需要有一种方法来判断从源主机到达目标主机的最佳路径,从而进行数据转发,这就是路由技术。
路由器工作原理
路由器进行数据包的转发,如同一个人要去某地需要打开手机地图,路由器内部也有一个地图叫路由表,它包含该路由器掌握的所有目标网络地址和通过此路由器到达这些网络的最佳路径(下一跳路由地址)。
以下图为例,简单介绍下路由器转发数据的过程,1.0为网段192.168.1.0/24简写
1.主机1.1要发送数据包给主机3.1,因为它们的IP 地址不在同一网段,所以主机1.1会将数据包发送给本网段的网关路由器A;
2.路由器A接收到数据包,先查看数据包IP头部中的目标IP地址,再查找自己的路由表。数据包的目标 IP 地址是 6.1(属于6.0网段),路由器A在路由表中查到 3.0网段转发的接口是S0,于是路由器 A 将数据包从S0接口转发出去;
3.网络中的其他路由器也是按照这样的步骤转发数据的,直到到达路由器B,再用同样的方法从 E0 口转发出去,最后主机6.1 接收到这个数据包,如在转发数据包的过程中,如果在路由表中没有找到数据包的目的地址,则根据路由器的配置转发到默认接口或者给用户返回“目标地址不可达”的信息。
路由表
路由表是一种在计算机网络中用来存储路由器决定如何将数据从网络中一个点传送到另一个点的规则。路由表由一组条目组成,每个条目都包含一个IP地址、一个子网掩码和一个下一跳IP地址。当路由器收到一个数据包时,它会检查它的路由表,并根据路由表中的条目,将数据包传送到下一跳IP地址。
路由表也可以用于控制网络流量,因为它可以指定特定的IP地址和子网掩码,从而控制网络上的流量。它还可以让路由器通过不同的路径将数据包传送到目的地,从而实现最佳路由。
路由表还可以用于实现负载均衡,使用多条路由将数据平均分布在不同的路由器上,可以减少网络中的拥塞。
目标地址子网掩码接口下一跳IP地址
10.10.1.0255.255.255.0E210.10.2.0
工作过程
主要包含 4 个阶段:
邻居发现:运行了路由协议后,路由器会主动把自己的网段信息发送给相邻的路由器。既可以使用广播发送路由协议消息,也可以单播将路由协议消息发送给指定的邻居路由器。
交换路由信息:发现邻居后,每台路由器都将自己的路由信息发送给相邻的路由器,相邻路由器又发送给下一个相邻的路由器。经过一段时间后,每台路由器都会收到网络中所有的路由信息。
计算路由:每一台路由器都会运行某种算法,计算出最终的路由表来。
维护路由:为了感知突然发送的网络故障,比如:设备故障或线路中断等,路由协议规定相邻两台路由器之间,应该周期性发送协议报文。如果路由器在一段时间内,没收到邻居发来的协议报文,就认为邻居路由器失效。
路由算法
静态路由算法
不能自动更新路由表,必须手动配置,特点是简单可靠,适合拓扑变化不大的网络;
动态路由算法
路由器之间会定期交换路由信息,路由器会知道网络中其它网段的信息,动态生成路由表。如果网络出现变化,网段需要增删改时,只需要在相应的路由器上配置动态路由即可。不需要像静态路由那样,在所有路由器上进行修改。对于大型网络,路由器个数较多时,主要使用动态路由协议如RIP(路由信息协议)、OSPF(开放最短路径优先协议)和BGP(边界网关协议)来更新路由表,从而实现更高效动态路由。
查询访问一个网站经过多少跳路由,windows电脑可以通过tracert命令查看,linux可以同过traceroute查看
如访问google通过下图可以知道经过了6跳
案例介绍
浏览器访问页面
了解上面的知识点后下面这里案例会简单介绍下当我们在浏览器输入https://www.baidu.com,按下回车键的时候网络都发生了哪些行为以及是怎么发生的。
下图是一个常见的网路拓扑图
获取域名IP地址
PC1发送数据过程
1.当我们在电脑的浏览器输入baidu.com域名时需要知道该域名所绑定的服务器IP地址;
a.获取该IP地址会先检查浏览的缓存里面之前有没有访问过baidu.com域名,
b.如果没有的话再回检查本地hosts文件,查看里面有无添加ip-域名的映射关系,
c.若仍没有的话会将请求发送到电脑中配置的DNS服务器(假设本地配置的是8.8.8.8)
2.应用层会发起一个请求,内容为:"查询baidu.com的IP地址";
3.传输层会对应用层数据进行封装,主要封装了一个源端口和目标端口,假设源端口为303,DNS默认端口号是53,形成一个数据包送至网络层;
4.网络层也会对传输层的数据封装一个包头,主要是源IP地址和目标IP地址,如上图源IP为192.168.1.10(用1.10简写表示),目标IP是8.8.8.8;网络层封装数据时发现目标IP不在自己的网段范围内,当找不到IP地址的时候会去找网关(这里是路由器),准备把请求发到网关地址:192.168.1.1
5.来到数据链路层,上面说到在同一局域网内通信使用的是MAC地址,此时会对网络层的数据再加上目标MAC地址和源MAC地址,源MAC地址如图为AA-AA,目标MAC地址为CC-CC(通过ARP协议来获取的)
6.最后数据会顺着物理层来到网卡的接口, 通过网卡从网线中发出去,来到交换机这里;
交换机发送数据过程
7.交换机是二层设备只能解析到物理层和数据链路层的数据,因此可以查看到MAC地址,当发现目标MAC地址CC-CC挂在自己端口里,于是将数据包转发到连接的路由器对应的端口;
路由器发送数据过程
8.当数据通过网口来到路由器这里,由于路由器是三层设备可以解析到网络层数据,当发现目标MAC端口CC-CC是自己,于是接受该数据包把MAC头部信息解封装传到网络层,网络层发现目标IP是8.8.8.8并且没有和自己连接;
a.路由器有个WAN口是通向互联网的道路并分配一个公网IP地址,这里为20.20.20.20;
b.因为之前的IP地址是192.168.1.10为内网网段不能再公网进行传输,因此需要做一层网络地址转换(NAT),转成WAN口的IP地址路由器内部有个NAT映射表,假设NAT映射关系为192.168.1.10:303->20:20:20:20:505
c.此时路由器会把源IP地址改为20:20:20:20,源端口改为505,重新封装好会继续传到数据链路层
9.传到数据链路层,此时再次加上源MAC地址和目标MAC地址,此时源MAC地址为路由器WAN口为DD-DD,目标MAC地址为下一跳的路由器的MAC地址,假设为XX-XX;
10.最终经过物理层将最后封装好数据包从路由器的WAN口发送出去来到互联网上其他路由器;
DNS服务器数据接收
11.经过N次条状最终数据来到到目标DNS服务器
12.当DNS服务器收到数据确认数据无误后,开始一层一层解析拆包,最终知道这个“查询baidu.com的IP”请求,于是将对应的IP地址7.7.7.7在经过以上步骤发回,这里就不赘述了,原理类似;
PC1接受数据
13.最终获取到IP地址后,就可以向Baidu服务器发起请求获取首页数据,浏览器就可以完整的展示百度的首页啦。
好了,以上就是数据包在各层进行传输的大致流程了以及中间经过的网络设备各自发挥了什么样的作用。