IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 数据转发过程 -> 正文阅读

[网络协议]数据转发过程

写在最前面:这是我第一次写博客(刚刚上大三),老师建议我们可以把学会的东西写下来并记录下来,以达到学习的目的。所以我来了。第一次写,肯定有许多见解浅显甚至错误的地方,还需要各位大佬们指正,谢谢!

?

0(看看了解一下),数据的传输过程在以太网中依赖于TCP/IP协议簇和底层协议的配合。计算机网络将网络层次划分成五种不同的层次,由高到低分别为:应用层,传输层,网络层,数据链路层,物理层。在这里我们假设要进行端到端的通信,主要分析传输层,网络层,数据链路层。

1,数据转发过程概述

? ? ? ?数据可以在同一网络或者不同网络中间转发,所以数据转发的过程也可以分为本地转发和远程转发。以校园网的拓扑为例。首先我们的PC(personal computer)直接连上的就是局域网(私网),当我们需要访问远端的web服务器(公网)时便需要走网关(普遍意义上的路由器)。假设此时我们的PC1需要访问服务器1的web服务,并且假设两者已经建立了TCP连接。

?//这里的公网网段不太严谨(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,这里为了方便就将就用了,还请读者见谅)

2,TCP封装(传输层)

? ? ? ?从应用层下来的数据首先要执行加密压缩(这里的加密和压缩是OSI模型中会话层和表示层的功能)后才到达了传输层,要进行传输层的封装(此时是TCP封装,而传输层有两种协议TCP和UDP因此有两种封装方式:TCP封装 UDP封装 )。

?Web服务是基于传输层的TCP协议封装数据并转发,所以如上图从应用层下来的数据经历加密和压缩后由传输层进行TCP封装,即在数据Data部分加上TCP头部。此时的得到的数据PDU(协议数据单元)我们称之为:数据段(Segment)。此时注意TCP头部的目的端口号80(Destination Port:80)表示数据应该交付给的应用层的http协议下的web服务进行处理。目的端口号的不同,代表要交付的上层的协议也不同,这里列举几个常见的目的端口号(

? ? ? ? ??FTP(数据连接)----- 20? ? ? ? ? ? ??//文件传输协议·TCP

? ? ? ? ? FTP? (控制连接)? ?----- 21

? ? ? ? ?Telnet? ? ----- 23? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //远程终端协议·TCP

? ? ? ? ?Smtp? ? ?----- 25? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //电子邮件传输协议·TCP

? ? ? ? ?DNS? ? ?-----?53? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//域名系统·TCP/UDP

? ? ? ? ?TFTP? ? ?----- 69? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //简单文件传输协议·UDP?

? ? ? ? ?HTTP? ? ? ----- 80? ? ? ? ? ? ? ? ? ? ? ? ? ? //超文本传输协议·TCP

? ? ? ? ?POP3? ? ? ?----- 110? ? ? ? ? ? ? ? ? ? ? ? ?//邮局协议版本3·TCP

? ? ? ? HTTPS? ? ----- 443? ? ? ? ? ? ? ? ? ? ? ? ?//超文本传输安全协议·TCP

源端口号(Source Port)为主机随机选择的端口号,与以上的知名端口号不同。TCP报文段首部的其他字段就不一一介绍,感兴趣的读者可自行了解。所以当我们在进行了TCP的封装后,传输层向高层用户屏蔽了下面网络的核心的细节,导致对于应用进程来说,似乎传输层提供了应用进程间的逻辑通信。但是为了了解数据的转发过程,我们还需要继续往下研究。

3,IP封装(网络层)

? ? ? 当PC 1完成了传输层的封装以后,便进入了网络层的数据封装,在进行IP层的封装时,如果IP报文的大小大于网络的最大传输单元MTU的值,可能还会被分片。分装好后的数据PDU我们称之为数据包(Packet)

?? ? ?如上图在进行IP封装(在数据部分加上IP头部,此时的数据部分对于网络层来说包括TCP Header和Data)的时候首先需要明确源地址和目的地址,源地址Source IP Address:10.0.15.1即PC 1 自己的私网的IP地址,目的地址Destination IP Address:172.16.10.1即为服务器Server 1 的IP地址。

? ? ? ?生存时间TTL字段的作用是用来减少网络环路造成的影响,默认TTL的值为255。路由器转发一个数据包时,该值会被减1,如果路由器发现收到的数据包该值减为0。若目的地址为自己的地址则直接交付上层处理,若不是自己的地址则丢弃该数据包。*Tracert就是发送一个TTL=1的报文来跟踪数据的转发

? ? ? ?协议字段值标识了传输层所使用的协议,这里该字段的填充值为0X06(Protocol:0X06)表示传输层使用的是TCP协议。这里列举几个常见的协议字段值(

? ? ? ? ICMP? ?-----? ? 0X01? ? ? ? ? ? ? ?//网际控制报文协议

? ? ? ? IGMP? ?-----? ?0X02? ? ? ? ? ? ? ?//网际组管理协议

? ? ? ? TCP? ?-----? ?0X06? ? ? ? ? ? ? ? ?//传输控制协议

? ? ? ? UDP? ?-----? ?0X11? ? ? ? ? ? ? ? ?//用户数据报协议

? ? ? ? OSPF? ?-----? ?0X59? ? ? ? ? ? ? ?//开放式最短路径优先(区域间路由协议的一种)

? ? ? 剩下的IP报文头部的其他字段值就不一一赘述,感兴趣的读者可自行查看相关文献。

4,以太网封装(数据链路层)

? ? ? ?当我们完成了网络层的封装以后,接下来就到了数据链路层的封装,以太网封装。以太网中数据帧的封装格式有两种:IEEE802.3格式和EthernetⅡ帧格式。简单来看他们之间的区别在于帧Length/Type的值取值的范围(IEEE802.3帧:Length/Type<=1500(0X05DC)? ;? ?EthernetⅡ帧:Length/Type>=1536(0X0600)? )。这里我们只讨论与上文联系的EthernetⅡ帧,这也是目前以太网中应用最多的帧。

? ? ? 好的,现在我们进行数据链路层的EthernetⅡ帧封装,如图

在数据链路层的封装中,IP Header + TCP Header + Data对于帧来说就是数据部分。即在数据部分前面加上EthernetⅡ的帧头,以及在数据部分尾部加上帧尾FCS(帧校验序列)。做完这些事情后,我们将得到的数据称为:数据帧(Frame)。这里稍微讲解一下帧头的3个字段。

D.MAC(Destination.MAC,目的Mac地址)在最前面,表示这个帧我要发送到目的哪个物理网卡的物理地址上,这个地址可以是单播地址(1对1),组播地址(1对多),广播地址(1对所有(同一个局域网段内))。

S.MAC(Source.MAC,源Mac地址)表示本机此时正在使用的那个网卡的物理地址(*一台设备可能有多个网卡,以太网卡,无线网卡等等,具体是用什么方式连接网络,进行数据通讯,那么就封装的是哪个网卡的Mac地址。闲扯一下,虽然网卡的Mac地址在它出厂的时候就已经固化在ROM里面了,只读不写,但是读出来的Mac在操作系统中是可以更改的,更多可以参考苹果的设备)这个地址只能是单播地址。

Type字段表示数据帧中封装的数据遵循哪个IP层的协议。这里的Type=0X0800表示数据是一个IPv4的数据包。这里列举几个常见的Type字段值(

? ? ? ? ? ?IPv4协议? ?------? ?0X0800

? ? ? ? ? ?IPv6协议? ?------? ?0X86dd

? ? ? ? ? ?ARP协议? ?------? ?0X0806

? ? ? ? ? ?帧中继ARP? ?------? ?0X0808

? ? ? ? ? ?RARP协议? ? ------? ?0X8035

? ? ? ? ? ?Apple Talk地址解析协议? ?------? ?0X80F3

? ? ? ? ? ?SNMP协议? ?------? ?0X814C

? ? ? ? ? ?PPP协议? ?------? ? 0X880B

? ? ? ? ? ?MPLS协议(单播)? ?------? ?0X8847

? ? ? ? ? ?MPLS协议(组播)? ?------? ?0X8848

? ? ? ? ? ?PPPoE协议(发现阶段)? ?------? ?0X8863

? ? ? ? ? ?PPPoE协议(会话阶段)? ?------? ?0X8864

5,数据在局域网和公网中的转发。

? ?? ? ?如果你看到了这里,证明你已经清楚的知道,这些数据在转发之前是如何在设备中封装的,解封的过程和封装一样,一层层从最外面给它脱掉“衣服”,每脱掉一层就发送给上层查看,一直到这个过程结束,这里就不啰嗦了。

好的,那么首先是在局域网中的转发:

? ? ? ? 还记得之前提到的图片嘛,不记得了,没关系,我Ctrl+V让你少滚一下鼠标滑轮。

? ? ??这里我们继续,PC 1要访问访问Server 1上的Web服务,并且已经按照约定打包封装好了数据帧。那么对于这个数据帧,首先我们知道它的目的IP地址(172.16.10.1/24)不是PC 1自己这个网段(10.0.15.0/24)里面的数据。那么这个数据帧就要经过网关(网关,字面意义上的网络的关口,对于局域网的用户来说所有访问外网的流量,我并不关心它之后由哪些路由器等等网络设备转发出去,我只关心我要出去,就必须要走网关。所以当你在本机的cmd窗口里arp-a试图查看百度的ip地址和Mac地址的映射关系时,不好意思,你找不到。有的只是,网关的ip地址和Mac地址的映射项,以及本局域网内所有你访问过的网络设备的ip地址和Mac地址的映射项等等,例如PC 2)来转发出去。这里的网关就是直连该网段的路由器AR1的一个端口GE0/0/0,它的ip地址是10.0.15.254/24。而封装的数据帧的D.Mac地址就是网关的Mac地址。

? ? ? ?数据帧首先从Ehternet0/0/1要走到接入交换机LSW 1。在到了LSW 1上时,交换机会查看自己的MAC地址表(Mac地址和端口的映射关系表),发现,噢原来目的mac地址是网关的mac地址,好的,那我就由我的GE0/0/1接口发送出去,到网关(AR1的G0/0/0)好吧。行,此时交换机打开并检查了数据帧,并对比了它的Mac地址表,然后转发出去。所以在局域网中的二层数据转发类比,交换机(层二设备)只是查看了数据帧后根据Mac地址表转发出去,并没有重新封装解封装。

? ? ? ?好的,现在我们的数据帧到了网关(GE0/0/0)。路由器AR1,接收到数据帧后首先会将数据帧打开(路由器是层三的设备,所以会查看到数据帧的IP层),然后对比自己的路由表发现,去往172.16.10.0/24网段的数据应该从自己的GE0/0/2口(10.1.15.1)转发到AR2的GE0/0/0口(10.1.15.2)。注意,这个时候路由器就会进行帧的重新封装和解封装。怎么封装呢,如图:

?

目的Mac地址就是AR2的GE0/0/0口的物理地址。而源地址就是自己AR1上GE0/0/2口的物理地址。将数据帧重新分装成帧后,转发出去。

? ? ? ? 到达AR2后也是类似上文所说,查看数据帧打开路由表,然后根据路由表知道了该转发到下一跳的地址后,重新解封装和封装数据帧并转发。最后到了对应网段,转发出去。所以在广域网中三层转发类比,路由器(层三设备)查看了数据包后根据路由表重新对帧进行了封装和解封装(添加一个新的二层帧头帧尾)后,再进行转发。

? ? ? ?好了到此为止,数据的转发过程基本上很浅显的讲完了,因为我本人能力有限,很多地方肯定写得还不够好,希望读者能指正,共勉,感谢阅读!

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:59:41  更:2021-10-16 20:00:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/29 17:52:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码