Ping的整个过程
来源:互联网 发布:大作家写作软件 编辑:程序博客网 时间:2024/05/22 06:21
先说相同网段:
- 主机A要去Ping主机B, 主机A会封装两层报文,主机A先检查自己MAC地址中是否有B的MAC地址,如果没有就向外发送一个ARP广播包
- 交换机收到这个ARP后,会检查在交换机中是否包含B的MAC地址,如果有就直接返回给A;如果没有就向所有端口发送ARP,该网段的主机的MAC如果与B的MAC地址不同就丢弃,如果主机B收到了该ARP就马上返回相同格式的ARP
- 这时主机A已经有了B的MAC地址,就把B的MAC地址封装到ICMP报中,向主机B发送一个回显请求
- 主机B收到该报文后,知道是主机A的一个回显请求,就会返回一个相同格式的报文。这样就完成了同一个网段的Ping的过程
ping某个域名的过程
- 首先本机发送域名请求数据到PC设置的DNS ip
- PC通过子网掩码判断DNS ip是本网段还是跨网段(这里只考虑跨网段)
- 由于是跨网段,PC发送DNS域名解析数据包到PC设置的网关ip上。(此时先要进行二层的mac转发,PC查看本机arp缓存表,如果表中有网关的mac地址,直接转发,如果没有,使用arp解析协议解析到网关的mac地址。之后封装成数据帧发送到三层网络层)此时PC发送三层数据到网关,源地址为PC内网地址,目的地址为DNS ip地址。而在二层源mac地址为PC mac地址,目的mac地址为网关mac地址。
- 路由内网网关收到数据包,根据数据包的目的地址,查看路由表。根据路由表发送数据到下一跳上。(发送前,数据到达路由外网端口,会根据nat地址转换配置。形成一条内网ip+port与外网ip+port的一一对应关系。)
- 发送到下一跳和内网通信都是一样的,查看路由arp缓存表,如果有下一跳mac地址,就直接发送,没有的话需要arp协议解析一下。
- 对端路由收到数据包,再接着根据路由表判断下一跳。这样一跳一跳地,最后到达DNS服务器。服务器将查询结果返回。
- 返回的数据包在ISP的网络里最后寻址到你的路由器上,你的路由器收到数据包后,会查询路由nat连接表,寻找ip+port关系对应的内网ip。拆分数据包,封装成帧,最后PC收到域名对应的ip地址。
【到这里,域名解析过程完成,接下来ping对方ip,过程与上面几乎一样】
- 再发起一次PC到目的域名ip地址的一次ping请求信息
- PC通过子网掩码判断对方ip是本网段还是跨网段(这里只考虑跨网段)
- 由于是跨网段,PC发送数据包到网关ip上。
- 路由内网网关收到数据包,根据数据包的目的地址,查看路由表。根据路由表发送数据到下一跳上。(发送前,数据到达路由外网端口,会根据nat地址转换配置。形成一条内网IP+port与外网ip+port的一一对应关系。)
- 发送到下一跳和内网通信都是一样的,查看路由arp缓存表,如果有下一跳mac地址,就直接发送,没有的话就是要arp协议解析一下。
- 服务器收到数据包后,会重新构建一个ICMP应答包,然后返回。
- 返回的数据包在ISP的网络里最后寻址到你的路由器上,你的路由器收到数据包后,会查询路由nat连接表,寻找ip+port关系对应的内网ip。拆分数据包,封装成帧,最后PC收到ICMP应答数据包。
整个过程到此结束。在整个这个过程中,源ip地址和目的ip地址是不变的(内网到路由器段不算在内)而mac地址是变的。
0 0
- Ping的整个过程
- Ping的整个过程。ICMP报文是什么
- ping命令整个过程详解
- ping命令整个过程详解
- FLEX应用的整个过程
- 编译链接的整个过程
- 编译链接的整个过程
- 编程的整个过程
- driver_register 的整个过程
- Spring初始化的整个过程
- 访问百度的整个过程
- 动态链接的整个过程
- 静态链接的整个过程
- 个人做网站的整个过程
- 兔子--自学ps的整个过程
- URL访问网站的整个过程
- 网页http请求的整个过程
- POI导出excel的整个过程
- JAVA基础笔记(十七)JVM
- iOS开发CoreLocation框架
- Windows平台分布式架构实践 - 负载均衡
- Java面试题全集(中)
- JPA注解
- Ping的整个过程
- 树莓派3 ROS语音包开发之类封装(上)
- poj2155(线段树套线段树)
- vim配置python自动补全
- cookie
- bug记录
- 摘自 10条提升Android性能的建议
- 聚类分析总结
- 重写listview/gridview 的onMeasure方法,解决与ScrollView的冲突