网络数据传输过程

netfilter在数据包必须经过且可以读取规则的位置,共设有5个控制关卡。这5个关卡处的检查规则分别放在5个规则链中(有的叫钩子函数(hook functions)。也就是说5条链对应着数据包传输路径中的5个控制关卡,链中的规则会在对应的关卡检查和处理。任何一个数据包,只要经过本机,必然经过5个链中的某个或某几个。

PREROUTING      数据包刚进入网络接口之后,路由之前

INPUT             数据包从内核流入用户空间

FORWARD         在内核空间中,从一个网络接口进入,到另一个网络接口去。转发过滤

OUTPUT           数据包从用户空间流出到内核空间

POSTROUTING     路由后,数据包离开网络接口前

链其实就是包含众多规则的检查清单,每一条链中包含很多规则。当一个数据包到达一个链时,系统就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则就继续检查下一条规则,如果该数据包不符合链中任一条规则,系统就会根据该链预先定义的默认策略来处理数据包。

1、网络数据传输的基本流程

数据从上层进入到传输层,加上源端口和目标端口成为数据段(如果是UDP则成为数据报),再进入网络层加上源IP和目标IP成为数据包,再进入链路层加上源MAC地址和目标MAC地址成为数据帧,这段过程是一种"加头"封装数据的过程。数据经过网络传输到达目标主机后,逐层"剃头"解包,最终得到data纯数据内容。

2、本机数据路由决策

其实,进程间数据传输的方式有多种:共享内存、命名管道、套接字、消息队列、信号量等。上面描述的OSI通信模型只是数据传输的一种方式,它特指网络数据传输,是基于套接字(ip+port)的,所以既可以是主机间进程通信,也可以是本机服务端和客户端进程间的通信。

无论如何,网络数据总是会流入、流出的,即使是本机的客户端和服务端进程间通信,也需要从一个套接字流出、另一个套接字流入,只不过这些数据无需路由、无需经过物理网卡(走的是LoopBack)。当接收外界发送的数据时,在数据从网卡流入后需要对它做路由决策,根据其目标决定是流入本机数据还是转发给其他主机,如果是流入本机的数据,则数据会从内核空间进入用户空间(被应用程序接收、处理)。当用户空间响应(应用程序生成新的数据包)时,响应数据包是本机产生的新数据,在响应包流出之前,需要做路由决策,根据目标决定从哪个网卡流出。如果不是流入本机的,而是要转发给其他主机的,则必然涉及到另一个流出网卡,此时数据包必须从流入网卡完整地转发给流出网卡,这要求Linux主机能够完成这样的转发。但Linux主机默认未开启ip_forward功能,这使得数据包无法转发而被丢弃。Linux主机和路由器不同,路由器本身就是为了转发数据包,所以路由器内部默认就能在不同网卡间转发数据包,而Linux主机默认则不能转发。

下图可以很好地解释上面的过程:

本文是为了介绍防火墙的,充当防火墙的主机需要至少两块网卡,所以有必要解释下数据流入和流出时,Linux主机是如何处理的。

首先要说明的是,IP地址是属于内核的(不仅如此,整个tcp/ip协议栈都属于内核,包括端口号),只要能和其中一个地址通信,就能和另一个地址通信(这么说不严谨,准确地说是能路由这两个地址),而不管是否开启了数据包转发功能。例如某Linux主机有两网卡eth0:172.16.10.5和eth1:192.168.100.20,某192.168.100.22主机网关指向192.168.100.20,它能ping通192.168.100.20,但也一样能ping通172.16.10.5,因为地址属于内核,从eth1进来的数据包被内核分析时,发现目标地址为本机地址,直接就产生新数据包回应192.168.100.22,根据路由决策,该响应包应从eth1出去,于是192.168.100.22能收到回复完成整个ping过程。

在此过程中,没有进行数据包转发过程,因为流出的响应包是新产生的,而非原来流入的数据包。如果流入和流出的包是一样的(或者稍作修改),则数据流入后不能进入用户空间,而是直接通过内核转发给另一个网卡。数据包从网卡1交给网卡2,这个过程就是转发,在Linux主机上由ip_forward进行控制。例如,网卡1所在网段主机ping网卡2所在主机时,数据包流入网卡1后就需要转交给网卡2,然后从网卡2流出。

报文的大体流向:

转载于:https://www.cnblogs.com/renyz/p/11389102.html

linux中级之防火墙的数据传输过程相关推荐

  1. linux中级篇--网络相关命令

    网络相关命令 Linux中常见的网络相关命令如下表所示,本书将选取其中使用较频繁的命令进行讲解. 命令 说明 格式 ifconfig 显示或设置网络设备 ifconfig [网络设备][选项]- pi ...

  2. Linux下不同服务器间数据传输

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  3. Linux代理服务器与防火墙安装与应用

    环境介绍:两台Linux系统(一台用于防火墙[两张网卡,一张连接外网,一张连接内网],一台XP客户机测试用 在2.0内核中,网络防火墙的操作工具名称是ipfwadm 在2.2内核中,网络防火墙的操作工 ...

  4. linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  5. IPsec ***数据传输过程

    以下是一个数据包经IPsec×××隧道的传送过程(如ICMP包),由左边的×××保护子网内的PC机向右边×××保护子网内的PC机传送数据时,左边PC发送的数据由左××× eth1内口接收后发现需要经过 ...

  6. 网络中数据传输过程的解析

    网络中数据传输过程的分析     我们每天都在使用互联网,我们电脑上的数据是怎么样通过互联网传输到到另外的一台电脑上的呢?把自己的理解写一下,可能有很多细节还没有能的很清楚!希望在以后可以使之更加的完 ...

  7. linux下不同服务器间数据传输(wget,scp)

    一.wget是Linux下最常用的http/ftp文件下载工具1.wget断点续传,只需要加上-c参数即可,例如:代码:wget-chttp://www.abc.com/abc.zip-Oabc.zi ...

  8. linux红帽子怎么设置防火墙,RedHat Linux如何设置防火墙

    为它具备最好的图形界面,无论是安装.配置还是使用都十分方便,而且运行稳定,因此不论是新手还是老玩家都对它有很高的评价,但他同时也跟普通操作系统一样需要保护.下面是学习啦小编跟大家分享的是RedHat ...

  9. Debian (Linux)安装UFW防火墙

    Debian (Linux)安装UFW防火墙 1ufw简介 UFW,即简单防火墙,是iptables的接口,旨在简化防火墙的配置过程. 尽管iptables是可靠且灵活的工具,但对于初学者而言,可能很 ...

  10. linux关闭防火墙stop,linux如何关闭防火墙

    我的linux不想开启防火墙了,想要关闭,该怎么办呢?下面由学习啦小编给你做出详细的linux关闭防火墙方法介绍!希望对你有帮助! linux关闭防火墙方法一: 重启后生效 开启: chkconfig ...

最新文章

  1. vue 将字符串最后一个字符给替换_一步一步的实现Vue(一)
  2. 全职宝妈跨专业备考信息系统项目管理师【52,52,51】
  3. psp中java,PSP编程概述
  4. 找零兑换(递归解法)
  5. 假期七天实习参观有感
  6. 虚拟机安装win7的ghost镜像系统
  7. 数据智能、孪生城市——展望未来智慧城市产业发展
  8. 企鹅智库发布《2019-2020中国互联网趋势报告》
  9. 为什么要测款,直通车测款怎样设置
  10. python登陆pc微信_GitHub - ccboby/WechatPCAPI: 微信PC版的API接口,可通过Python调用微信获取好友、群、公众号列表,并收发消息等功能。...
  11. 每一首歌曲的背后都有一段感人的故事……
  12. 计算机科学与技术专业成功人士,我校2002级计算机科学与技术专业校友重返母校...
  13. number of items to replace is not a multiple of replacement length
  14. gsoap应用---利用gsoap工具生成代码
  15. Thymeleaf 表单回填
  16. jQuery 查找后代元素
  17. 人在旅途——》张家界之旅:20180419
  18. 同步linux服务器时间
  19. matlab中 trapz函数,trapz(matlab中trapz函数用法)
  20. 一个简单的Chrome浏览器“清理缓存”插件应用开发

热门文章

  1. linux逻辑表达式,循环结构,函数
  2. PHP中的unset的使用问题
  3. sparse模式下multicast配置
  4. 两种方式从Mac计算机上的启动板菜单中删除应用程序?
  5. 如何使用Movavi Video Editor编辑婚礼影片?
  6. VMware mac虚拟机如何安装Windows系统
  7. python:关于读取文件的指定行的问题
  8. Linux KVM构建及管理
  9. [python] 在指定目录下找文件
  10. N60E-O发布 不同CPU或将改变服务器市场?