“回流”,光这个名词我听说也没多久的,不知是哪里给的这么一个雅号。

以前知道在映射上,有这么个事情。但一直以来也没个名称,也不好简单直观的描绘,现在总算有个俗称了,虽然只有八成的贴切,也是好的

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

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

然后出现了个问题,在同网吧的另一台电脑192.168.0.3上,键入[url]http://218.4.218.4:80[/url],却无法访问该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负责中转,“回流”构成了

具体在软件上的实现,不是我的事了

现在的“回流”应用常见于私服

Linux里的iptables可以增加一条规则来实现对回流的支持

很多硬件路由器不用设置就内建支持的

Win2K的ICS/NAT内建的映射是标准DNAT,同样是不支持的、除非用第三方工具

CC、RouterOS听说是支持的,不懂,没空去整过

SW现在还有好多人在问,好像是没辄,我不知道SW是不是能跟iptables一样灵活

BBIagent以前的版本没戏、现在不知

。。。。。(此处省略五千字)

不知大家明白了没有,反正我倒是有点糊涂了,继续睡觉去。。。

睡眠不足,乱写了一气,前面也许写错许多,而且老实说最后一段是写的没有耐心了

写得头痛,以后有空再作修改补充罢

oracle 数据回流,浅谈回流相关推荐

  1. 【竞赛相关】南大化院博士刘子腾:跨专业如何做数据竞赛浅谈

    作者:刘子腾,南京大学化学化工学院博士研究生 跨专业如何做数据竞赛浅谈 自我介绍 刘子腾,南京大学化学化工学院理论与计算化学研究所(ITCC)博士研究生,导师是马晶教授,主要研究方向是材料的多尺度模拟 ...

  2. HIVE 数据倾斜浅谈

    HIVE 数据倾斜浅谈 一.数据倾斜现象   map100%,reduce一直卡在一个值,如99%. 二.数据倾斜的原因   数据按key的hash值分配到reduce中,如果有的key值比较集中,就 ...

  3. 让数据站住脚-浅谈用户研究中的信度与效度

    让数据站住脚-浅谈用户研究中的信度与效度 在用户研究工作中,如何让自己的数据和结论更有说服力,是很重要的问题.最近将自己积累的用研信度和效度的笔记整理一下,罗列在文中,希望对大家有所帮助. 一.调查的 ...

  4. vb怎么样实时取mysql数据库数据_浅谈如何使用vb.net从数据库中提取数据

    1.设置从Model中的Sub Main 启动 2.程序结构 3.Model1 Imports System.Windows.Forms.Application Module Module1 Sub ...

  5. 深度|从数据仓库到数据湖——浅谈数据架构演进

    转载自https://mp.weixin.qq.com/s/321mkZsuxqXOme5hw_83mQ 网管产品需要从数据仓库的角度来看,才能获得完整的视图.数据集成真正从大数据的角度来看,才能明白 ...

  6. oracle19C冷热数据隔离,浅谈Oracle Database 19c

    Oracle Database 19c是大多数客户将其升级目标定位的版本,Oracle已将稳定性作为此版本的核心目标. 在Oracle Database 19c中,开发人员专注于修复已知问题,而不是添 ...

  7. 直播技术:从性能参数到业务大数据,浅谈直播CDN服务监控

    线上服务的有效监控和数据收集,一直是后端服务离不开的话题.直播作为一种经典的分布式系统,监控以及数据收集更是必不可少的工作.如何对海量的服务集群有效的监控和保活,又如何抓取集群中的碎片数据中来优化服务 ...

  8. 从性能参数到业务大数据,浅谈直播CDN服务监控

    线上服务的有效监控和数据收集,一直是后端服务离不开的话题.直播cdn作为一种经典的分布式系统,监控以及数据收集更是必不可少的工作.如何对海量的服务集群有效的监控和保活,又如何抓取集群中的碎片数据中来优 ...

  9. oracle外部结合,浅谈Oracle外部文件

    所谓Oracle外部文件外部文件,意味着这些文件从严格意义上来讲并不属于Oracle数据库的一部分.Oracle外部文件也就是属Oracle物理存储结构的一部分,属于外面嵌入到Oracle数据库内部的 ...

最新文章

  1. 机器学习-第九章 聚类
  2. 机器学习模型建立的几点建议
  3. 深度学习赋能视频编码
  4. 左神算法:用栈来求解限制后的汉诺塔问题(Java版)
  5. mysql之index
  6. 个人知识整理(javascript篇初识)
  7. 【原】oracle external table
  8. unity player 显示播放错误时的解决办法
  9. image 第二次使用就出错是怎么回事_第二次上机报告-RNA-seq (HISAT - SAMtools- StringTie - ballgown)amp;amp;Gene-Assembly
  10. tensorboard的安装与使用
  11. 太实用了!Schedule模块, Python 周期任务神器!
  12. 守望先锋:源氏跑酷之球图制作分享
  13. 美团点评旅游搜索召回策略的演进
  14. 记一次公众号开发途中的诡异事件
  15. 2020ECCV|EPNet: Enhancing Point Features with Image Semantics for 3D Object Detection阅读笔记
  16. LeNet-5 手写字体识别模型
  17. 9.C++例2-10 输入一系列整数,统计出正整数个数i和负整数个数j,读入0则结束。
  18. Linux 磁盘管理(RAID)--第五章
  19. 为解决iPhone绿屏问题,苹果将和这家中国公司合作
  20. VSFTPD配置方法手册

热门文章

  1. 【solidity智能合约基础】节约gas的利器--view和pure
  2. javascript返回上一步,后退的代码
  3. MySQL学习之路(五):MySQL删除数据库
  4. 【深度】IBC、HIT、PERL高效率太阳能电池的发展现状与趋势
  5. 学计算机语言难吗,为什么都说计算机语言难学?
  6. 计算机需要本科学历吗,本科生一定要过计算机一级吗
  7. 计算机一级考试可以自学吗?
  8. @Transient
  9. unity制作类似DNF动态血条(仅一层血条)
  10. OpenCV之高通滤波