计算机中的IP地址和子网掩码的关系:标识该计算机所在的网络号、子网号以及主机号,当访问某个ip时,首先将此ip与本地子网掩码进行“与”运算,判断是否与本机ip和本机子网掩码“与”运算的结果一致。若一致,即要访问的ip与本机ip处于同一网段,查找本地arp表(arp广播,获取待访问ip的MAC地址),封装MAC帧,通过网卡发送出去,不经过网关,直接通过MAC地址访问。
例:A的ip地址为192.168.31.44,子网掩码为255.255.255.0;B的ip地址为192.168.31.201,子网掩码为255.255.255.0,两个设备都连接在同一路由器上,两个默认网关都设置为路由器lan口的ip,192.168.31.1,两者相互ping的情况如下:

计算机中的IP地址和子网掩码的关系:标识该计算机所在的网络号、子网号以及主机号,当访问某个ip时,首先将此ip与本地子网掩码进行“与”运算,判断是否与本机ip和本机子网掩码“与”运算的结果一致。若一致,即要访问的ip与本机ip处于同一网段,查找本地arp表(arp广播,获取待访问ip的MAC地址),封装MAC帧,通过网卡发送出去,不经过网关,直接通过MAC地址访问。
例:A的ip地址为192.168.31.44,子网掩码为255.255.255.0;B的ip地址为192.168.31.201,子网掩码为255.255.255.0,两个设备都连接在同一路由器上,两个默认网关都设置为路由器lan口的ip,192.168.31.1,两者相互ping的情况如下:

A与B单向认为同网段

1. A ping B (A子网掩码:255.255.255.0)
 输入arp -a查看本机arp缓存表

输入ping 192.168.31.201

此ip地址首先和A的子网掩码进行“与”运算,得出网络号为192.168.31.0,而A的网络号也是192.168.31.0,处于相同网段,故不需要通过网关。A查找本地arp表,没有该ip地址与物理地址的映射,故发送arp广播请求查询,获得指定ip的物理地址,将ICMP指令封装MAC,发送到B。

B收到此ICMP指令,将A的IP和MAC地址记下,开始给A发送回复,A的ip和B的子网掩码计算后得到与B相同的网段,因此无需经过路由,封装MAC帧后发送到A,此PING完成一个完整过程。

2.A ping B (A子网掩码:255.255.255.192)

此时将A的子网掩码设置为255.255.255.192,即多了两位子网位。此时B的ip与A的子网掩码计算得到的网段与A不同,将先通过默认网关192.168.31.1,再转到B,A ping B如下:

进行路由跟踪:

B收到request包后,由于B认为A与自己同网段,因此先查询本地arp缓存,没有则进行arp广播,谁的ip是192.168.31.44?获取到A的MAC地址,封装发送给A,至此,完成ping的全过程。示意图如下:

此过程中,正是由于B发回的reply包不经过网关,因此A端收到的icmp reply信息中的ttl为B发送时候设置的ttl,为64。

3.B ping A(A子网掩码:255.255.255.192)

B认为A是与自己同网段,进行arp广播获取MAC地址,封装echo request发给A。而A认为与B不同网段,echo reply发包交给A设置的默认网关(待访问的ip网段自己认为不一致就访问网关),但大多数的路由器网关都开启了状态检测(详情参考iptables),状态检测的意思是指如果一个数据包是对先前从网关发出去的包的回复,则网关不用检查任何规则允许该数据包进入并返给请求者。但是在目前此种情况下,网关没有收到本应该从B发往A通过网关的request包,此时A发给自己的reply包就拒绝,通过wireshark抓包分析,A收到了B的request包,同时将reply包发给网关,但B始终没有收到网关转发的reply包,这刚好符合网关状态检测。此过程示意图如下:

结论:大多数网关具有状态检测功能,对于不符合规范的连接不进行转发,这也正是实验2、3中网关能够转发request包,却不能转发reply包的原因。

A与B互相认为不同网段

A的ip:192.168.31.240,子网掩码:255.255.255.252(30位)

B的ip:192.168.31.252,子网掩码:255.255.255.252(30位)

从A来看B的ip,A的ip&mask!=B的ip&A的mask,认为B不同网段;

从B来看A的ip,B的ip&mask!=A的ip&B的mask,认为A不同网段;

A ping B:

A将数据包发送到默认网关,网关转发给B,B认为A不同网段,也转发给网关,网关再发送给A,TTL=63,示意图如下:

wireshark抓包分析:

A端抓包:

 A发送的request初始ttl为A主机默认ttl(128),经过网关后ttl-1变为127,这一点可以从B端抓包分析;

B端抓包:

B端收到网关发送过来的包中的ttl为127,发送reply包,由于B默认ttl为64,此后经过网关到A,所以A接受的reply包ttl为63,这也说明cmd里执行ping命令后收到的是回复信息中的ttl。

B ping A:

B将数据包发送到默认网关,网关转发给A,A认为B不通网段,也转发给网关,网关再发送给B,TTL=63,示意图如下:

B发送request包时ttl为64,经过网关到A,A收到的ttl为63。

A发送reply至网关,ttl为128,经过网关到B,B收到的ttl为127。

A端抓包:

B端抓包:

总结:

  1. 大部分路由器开启了状态检测,request和reply必须按照顺序通过,反之则拒绝转发。
  2. ping命令中收到的回复ttl指的是从远端主机到本主机过程中经过的路由数后剩下的值,该值=远端默认发送的ttl值-经过的路由数。

网关状态检测 echo request/reply相关推荐

  1. babyos2(39) network(5) -- icmp echo request, reply, receive

    前面为babyos2 实现了发送IP数据报,但只测试了同一个局域网内发送,而当目的IP跟发送发自己的IP不在同一局域网内时,babyos2会把IP数据报发往网关.而如何测试是否发送成功,首先想到的是p ...

  2. VB多层防火墙技术的研究-状态检测

    word完整版可点击如下下载>>>>>>>> VB多层防火墙技术的研究-状态检测(源代码+系统+开题报告+中期报告).rar-VB文档类资源-CSDN下 ...

  3. Tengine 反向代理状态检测

    Tengine 反向代理状态检测 安装Tengine: 编译安装 ./configure --prefix=/usr/loca/nginx make && make install 配 ...

  4. 《笑傲网湖》第五回 状态检测防火墙

    今天,我们进行状态检测防火墙的原理介绍.同时附送网络地址转换原理的简单介绍! 随着华山派的不断扩大,整个内部网络也越来越庞大.每天都有大量的数据与外界交互,处于网关处的防火墙要处理的数据包越来越多,虽 ...

  5. nginx两台文件服务器集群,keepalived结合nginx状态检测脚本实现对web服务器集群的高可用...

    实验环境 两台CentOS-7.5虚拟机 web1:10.0.11.203 web2:10.0.11.204 VIP :10.0.11.210 web类型:nginx 客户端:自用笔记本(win10) ...

  6. tp5登出_tp 5框架实现登录,登出及session登录状态检测功能示例

    本文实例讲述了tp 5框架实现登录,登出及session登录状态检测功能.共享给大家供大家参考,详细如下: 1,访问http://localhost/tp5/admin.php时,判断有没有登录: 想 ...

  7. 脑机接口应用于驾驶员的疲劳状态检测综述

    今天Rose分享一篇伍冬睿教授的关于驾驶员疲劳状态检测综述,主要包括非接触式例如计算机视觉以及接触式包括脑电等在驾驶员的疲劳状态检测! 伍教授在机器学习.脑机接口方向做了很多探索,包括集成学习方法.脑 ...

  8. Linux系统状态检测及进程控制--2

    Linux系统状态检测及进程控制--1(http://crushlinux.blog.51cto.com/2663646/836481) 4.僵死(进程已终止,但进程描述符存在,直到父进程调用wait ...

  9. iptables的基础知识-iptables中的状态检测

    2019独角兽企业重金招聘Python工程师标准>>> iptables的基础知识-iptables中的状态检测:iptabels被认为是Linux中实现包过滤功能的第四代应用程序. ...

最新文章

  1. 为什么三维重建才是计算机视觉的最终归宿?
  2. 关于使用TestNG的retry问题
  3. 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
  4. C语言中的隐式声明是什么,有什么危害?warning: implicit declaration of function ‘xxx’
  5. 实验6 数据查询--高级查询
  6. 太吾绘卷第一世攻略_建平中学高二数学周练卷(2020.09)
  7. PAT 乙级 1001. 害死人不偿命的(3n+1)猜想 (15) Java版
  8. 计算机程序编辑的英语,编译程序是为把高级语言书写的计算机程序翻译成面向计算机的目标程序而使用的计算机程序...
  9. like mybatis 用法_Mybaits中Like 的使用方式以及一些注意点
  10. HTML5-Ajax文件上传(转)
  11. USB接线引脚定义图
  12. 工资计算器的小demo
  13. 读《暗时间》,学会思考
  14. 仿制苏宁易购—静态网页
  15. 博客第二课-静态主页
  16. grread使用例子 lisp_Autolisp编程心得
  17. OGS标准以及常见的标准服务
  18. Xutils中网络请求
  19. 复合文档的二进制存储格式研究(word,xls,ppt...)
  20. Vscode——远程开发(Windows为主机,Ubuntu为服务器)

热门文章

  1. 36氪发布《2021年中国电子签名行业研究报告》,法大大成行业头部代表
  2. 合肥工业大学——java(最新版)——第一次作业
  3. 【数据分析】全球医疗卫生开放数据概览
  4. linux下socket通信,server和client简单例子
  5. skywalking内部测试服务器安装记录
  6. Matlab LCL滤波器设计验证
  7. Silverlight认识
  8. 瑞萨R78族Flash读写操作详细探讨
  9. android美柚日历控件,仿美柚大姨妈日历
  10. Hibernate: Duplicate entry for key错误排查