路由器回流简介

(端口映射特例)

回流是什么?最简单的一个实例:

网吧内网一台主机192.168.0.2建了个WEB服务站点端口80,然后在网关(其内网地址是192.168.0.1、公网地址为218.4.218.4)上映射80端口到192.168.0.2的80端口,这样INTERNET上就能以http://218.4.218.4:80的地址访问到192.168.0.2的WEB站点了。

然后出现了个问题,在同网吧的另一台电脑192.168.0.3上,键入http://218.4.218.4:80,却无法访问该WEB站点。

就这个现象,我们就称之为“不支持回流”了,这里指的是网关上的映射方式不支持回流,所以说“回流”一说,是针对映射方式而言的。

现在我们来看常规情况下,是为什么会发生这种情况的

我以前对iptables特别感兴趣的时候,曾对这个问题非常迷惑不解,直到去年为了考试,学习网络基础的时候才搞明白这个事情

过程如下:

192.168.0.3要请求访问218.4.218.4的80端口,根据它掌握的路由表,它本身是不知道电脑218.4.218.4在哪里的,所以把将这个数据包发送给它的默认路由,即电脑192.168.0.1。

注意:这个数据包的源地址是192.168.0.3、源端口假设是1025、目标地址是218.4.218.4、目标端口是80、SYN标志位为1、这是建立TCP连接的第一次握手。

如果“把目标地址为218.4.218.4的数据包发给了192.168.0.1”你听起来觉得有点矛盾,那么我解释一下:其实这个数据包的目标IP地址是218.4.218.4,目标MAC地址却是192.168.0.1的

电脑192.168.0.1接收到了这份数据包(因为它的身份是路由器,所以允许接收和转发目标地址不是自已、MAC地址却是自已接口 MAC地址的数据包),它分析这个数据包的目标地址,发现这个数据包是需要中转到电脑192.168.0.2:80去的,于是它把这个数据包转发给了电脑 192.168.0.2:80。

注意:这个数据包的源地址是192.168.0.3、源端口是1025、目标地址为192.168.0.2、目标端口为80、SYN标志位为1。我们要注意这个数据包在转发后发生了变化了,即目标地址变了。

电脑192.168.0.2顺利接到了数据包,它马上作出回应,发送一个数据包给电脑192.168.0.3。

注意:这个数据包的源地址是192.168.0.2、源端口是80、目标地址192.168.0.3、目标端口为1025、SYN标志位为1、ACK标志位为1、这是建立TCP连接的第二次握手。

电脑192.168.0.3顺利接到了数据包,然而它发现这是一个来自192.168.0.2:80的回应,因为ACK标志位值为1摆在那里呢。它想不起来什么时候给192.168.0.2:80这个目标对象发送过SYN请求,它认为这是一个错误的数据包,于是决定把这个数据包丢弃。然后继续等待 218.4.218.4:80的回应,一直等到超时。

而电脑192.168.0.2这边,它等192.168.0.3:1025的第三次握手请求包发送过来,以便建立一个TCP的连接。同样也没有结果,一直等到超时。三次握手在规定的时间内没有完成,访问宣布流产了。

那么怎么样才能正常访问呢?也就是说怎么样形成“回流”呢?

玄机在于电脑192.168.0.1把第一次握手的那个数据包在转发时,不仅要修改目标地址和端口,也要修改源地址和端口,我们来看一下情况会有什么不同:

电脑192.168.0.1接收到了这份数据包(因为它的身份是路由器,所以允许接收和转发目标IP地址不是自已、MAC地址却是自已接口MAC地址的数据包),它分析这个数据包的目标地址,发现这个数据包是需要中转到电脑192.168.0.2:80去的,于是它把这个数据包通过自已的5201端口转发给了电脑192.168.0.2:80,并在内存里面记录下来了,192.168.0.1:5201已定位给了192.168.0.3:1025。

注意:这个数据包的源地址是192.168.0.1、源端口是5201、目标地址为192.168.0.2、目标端口为80、SYN标志位为1。

电脑192.168.0.2顺利接到了数据包,它马上作出回应,发送一个数据包给电脑192.168.0.1。

注意:这个数据包的源地址是192.168.0.2、源端口是80、目标地址192.168.0.1、目标端口为5201、SYN标志位为1、ACK标志位为1、这是建立TCP连接的第二次握手。

电脑192.168.0.1顺利接到了数据包,检查内存记录发现,这个数据包真正的收货人是192.168.0.3:1025,于是它把这个数据包转发给192.168.0.3。

注意:这个数据包的的源地址是218.4.218.4、源端口为80、目标地址为192.168.0.3、目标端口为1025。我们要注意这个数据包在转发后发生变化了,即源地址变了。这很重要!为什么会变,因为在它心目当中,192.168.0.2:80早已定位给了218.4.218.4:80,映射规则使然。

电脑192.168.0.3顺利接到了数据包,发现期待已久的218.4.218.4:80终于有了回音,它兴奋不已的发出第三次的握手请求。

注意:这个数据包的源地址是192.168.0.3、源端口是1025、目标地址是218.4.218.4、目标端口是80、ACK标志位为1、这是建立TCP连接的第三次握手。

跟前面的数据包一样,这个数据包会从192.168.0.1那里中转给192.168.0.2

以后192.168.0.2:80和192.168.0.3:1025之间来往通信的数据包,全部由192.168.0.1负责中转,“回流”构成了

路由器回流--内网不能访问网站的问题相关推荐

  1. 路由器_内网端口映射

    路由器_内网端口映射,nat_端口映射_工具_软件_远程桌面_连接端 口_花生壳_个人_FTP_服务器_WEB站点 1.让(家里)宿舍自己的电脑跟公司(外地)的电脑互相远程桌面连接(免得每次COPY东 ...

  2. 利用路由器实现内网穿透

    利用路由器实现内网穿透 问题背景 设备以及环境 过程 1. 安装vmware虚拟机以及centos7.5 64位系统 2. 更改网络的连接方式 3. 进入路由器后台管理页面,点击虚拟服务器应用进入 4 ...

  3. 通过路由器搭建内网穿透隧道

    通过路由器搭建内网穿透隧道 将本台计算机设置为一台服务器 控制面板中选择程序和功能,启用或关闭WINDOWS功能 选择左边启用或关闭 Windows 功能,勾选 Internet Informatio ...

  4. 极路由2hc5761刷华硕固件_极路由2_hc5761_mt7620刷openwrt实现NDR客户端拨号and开机自启动and内网无法访问...

    基于极路由HC5761版本 # 一.极路由刷openwrt 1.首先把极路由通过无线中继连接一个可以联网的wifi 2.开发者模式 ssh -p 1022 root@192.168.199.1 3.刷 ...

  5. 极路由2运行python安装_极路由2 大麦22D/203/204刷OPENWRT实现NDR客户端拨号AND开机自启动AND内网无法访问...

    极路由2 大麦22D/203/204刷OPENWRT实现NDR客户端拨号AND开机自启动AND内网无法访问 时间:2020-04-09 02:57:30 / 来源:爱搜路由 / 作者:转载 基于极路由 ...

  6. 【全过程记录】将windows电脑连接到ipad的rd client远程桌面,通过路由器搭建内网穿透隧道

    caiyi 2021/10/03 通过路由器搭建内网穿透隧道 将本台计算机设置为一台服务器 文章目录 一.找到内网ip 二.找到端口号 三.在ipad上同一局域网下连接 四.在不同局域网下连接 五.突 ...

  7. 树莓派构建内网域名访问php/python 多个虚拟web主机 bind9 nginx flask uwsgi pfm php7 python3

    文章目录 0 前言 1 php安装 2 nginx安装 3 python3安装 4 php web设置与测试 5 flask uwsgi 设置与测试 5.1 安装flask 5.2 安装uwsgi 5 ...

  8. 利用被入侵的路由器迈入内网——抓包,利用路由器漏洞入侵,进行流量劫持...

    from:https://www.anquanke.com/post/id/82638 去年开始利用路由器对目标内网进行渗透的方式方法开始研究,测试了一阵了.看到乌云之前有一篇翻译外国人的文章,讲路由 ...

  9. Ubuntu内网穿透搭建网站:设置跳转本地网页服务 6/17

    系列文章 Ubuntu内网穿透搭建网站:建立本地数据库 1/17 Ubuntu内网穿透搭建网站:安装WordPress 2/17 Ubuntu内网穿透搭建网站:设置WordPress连接数据库 3/1 ...

最新文章

  1. TensorFlow算子融合
  2. __try 内外不能有 c++ 代码,要封装成一个函数
  3. python怎么开发安卓程序_怎样用python开发安卓app-到底如何使用Python开发Android程序.txt...
  4. soso街景开发——在移动应用(网站)中的应用
  5. uglifyjs报错 webpack_基于vue2.X的webpack基本配置,教你手动撸一个webpack4的配置
  6. python读写excel模块pandas_Python3使用pandas模块读写excel操作示例
  7. Nginx 反向代理、动静分离、负载均衡及配置实例
  8. Oracle数据库基础教程:入门其实很简单
  9. scala 高阶函数学习
  10. HDU1285 确定比赛名次【拓扑排序】
  11. ajax load html页面,jQuery – AJAX load() 方法 | 菜鸟教程
  12. 关于加密与解密、签名与验签
  13. 小米android11账号补丁,小米10 MIUI11 解账户锁 可登小米账号 永不反锁 完美ROOT 解锁包...
  14. 华为交换机作为AC的条件
  15. 空间换时间的数据结构问题
  16. android手机分辨率
  17. Kubernetes_MindMap
  18. TracedModule: 更友好的模型表示方案,模型训练到部署的桥梁
  19. 必做: 1041、1024、1077、2218、1183(较难)
  20. Intel Barefoot Academy - P4实战特训营

热门文章

  1. S32K116调试记录(2)CAN接口调试
  2. 2016年全球50个创新趋势
  3. keil5的界面认识
  4. 引体向上高级技巧:停顿式引体向上!
  5. 独家:字节跳动计划布局消费金融牌照
  6. AZBIL FL7S-1W6W-CN03
  7. App安装来源追踪技术在渠道推广中有哪些意义?
  8. C# JSON、XML互转
  9. Unity自定义扩展方法
  10. 人们为什么玩游戏———节选自《游戏设计原理与实践》