IP数据包传输的完整过程

2024-06-08 19:18

本文主要是介绍IP数据包传输的完整过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主机A与主机B通信,A Ping B,图1:A-交换机-B,AB同一子网
这里写图片描述
(1)ping数据包用的是ICMP协议,IP协议的一个子协议,位于三层,包含A的IP,B的IP,三层进行IP封装成包,进入二层

(2)A,B处于相同子网,查看缓存中对与目的对应得B第2层mac地址,如果存在,直接进行第2层封装成帧,经物理层信号编码,以0101010010这样的bits流传输在网络介质上。

(3)如果不存在B的MAC,则发送ARP广播请求B的MAC,ARP数据包经物理层进入交换机端口,需要进行源端口号学习,目的端口查找,B响应ARP请求,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。B通过ARP单播把B的MAC响应给A,此时再返回(2)的处理过程。

(4)当再进行A与B之间数据包转发,将直接用B的MAC地址封装,数据转发得以高速交换


主机A与主机C通信,A Ping C,图:A-交换机-路由器M-路由器N-交换机-C,AC不同子网
这里写图片描述
(1)两个机器不在同一子网内,A要与目的C通信,A要向“缺省网关”发出ARP包,而“缺省网关”的IP地址已经在A系统软件中设置。这个IP地址实际上对应路由器M的E0的IP地址。所以A对“缺省网关”的IP地址广播出一个ARP请求时,路由器M的E0口的MAC回复给A,此时A数据包的目的MAC替换为M的E0口MAC。

(2)MAC替换后,经物理层,传输到交换机物理层,再传到交换机数据链路层,再经数据数据链路层到物理层。

(3)经bit流传到路由器M的物理层,然后传到数据链路层,二层解封装,目的IP与路由器M三层IP路由表比较,若匹配正确,交给上层处理,否则会缓存数据包内容,然后根据目标地址查找路由表找到相关表项,得到NEXT HOP及出接口的MAC地址,用这两个地址作为新的目的及源MAC地址封装事先缓存的数据包,然后转发,这个过程称为帧的重写(REWRITE)。

(4)重复进行MAC替换后, 在路由器N中,找到与目的IP匹配表项,若N中存在C对应的MAC表项,则数据传输到C网络层,否则N发送ARP广播请求C的MAC。

(5)当C收到A的数据包后,再从A到C进行一次反向MAC替换过程。反向过程中,每一步省略掉ARP请求NEXT HOP的MAC,因为MAC表已经建立起来。


总结:
IP报文传输过程包括:
  1. Host sends packet to default gateway(主机将数据包发送到默认网关)
  2. Packet placed in frame(数据包被封装入帧)
  3. Router receives frame(路由器接到帧)
  4. Router finds destination network in route table(路由器在路由表中发现目标网络)
  5. Router chooses next hop toward destination(路由器选择一个更接近目标的下一跳)
  6. MAC address of next hop determined(下一跳的MAC地址被确定)
  7. Packet placed in frame(数据包被封装入帧)
  8. Repeats steps 2 through 7 as necessary(如果需要的话,重复步骤2~7)
  9. Router receives frame(路由器接到帧)
  10. Router finds network directly connected(路由器发现直连网络)
  11. MAC address of end host determined(最终主机的MAC地址被确定)
  12. Packet placed in frame to final destination(帧中的数据包被发送到最终主机)

               
在数据包端到端的传输过程中,逻辑地址始终不会发生改变,而MAC地址则随着具体链路的不同而不同。
  路由器在某一个入接口上接收到数据帧后,先检测目的地是否是自己。若是,则交给上层处理,否则会缓存数据包内容,然后根据目标地址查找路由表找到相关表项,得到NEXT HOP及出接口的MAC地址,用这两个地址作为新的目的及源MAC地址封装事先缓存的数据包,然后转发,这个过程称为帧的重写(REWRITE)。


ARP(Address Resolution Protocol,地址解析协议)有以下特点:
  ARP由ARP Request(广播)与ARP Reply(单播)组成。
  只有当发送方认为目标主机与自己位于同一逻辑网络(同一网段),ARP Request才会发出。
 属于本地的MAP(不同于FR MAP)IP地址与MAC地址均属于同一个设备(接口)。
 
             
封装
  所谓封装是指在发送方发生的自上而下的过程——在每一层为应用数据添加上特定的头部/尾部信息(PDU,Protocol Data Unit,协议数据单元)

解封装
  所谓解封装是指在接收方发生的自下而上的过程——逐层的去掉头部以及尾部信息

这篇关于IP数据包传输的完整过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043069

相关文章

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②