拔开云雾的网络
技术整理:landy

1.开发人员眼中没有wan口和lan口
2.Switch和Port
3.PHY和MAC
4.Linux物理网口和虚接口
5.Linux Bridge
6.iptables和NAT
7.WAN连接
8.各种设置方法和使用

1.开发人员眼中没有WAN口和LAN口
当谈论网关设备时,人们总是会强调WAN和LAN,一定要从物理形态上区分出一个WAN口和一些LAN口,并牢牢记住,WAN口是用来接外网的,LAN口是用来接内网的,因为如果不小心把连接外网的那根网线连到了LAN口上,很有可能家里的网络就不通了;为此,开发商专门把无线路由器的网口用不同的颜色区分开来,WAN口一般是蓝色的,LAN口一般是黄色的那么,到底什么是WAN口,什么是LAN口呢?百度一下,可以搜索到不少关于WAN和LAN的说法,但大都让人看的晕头转向,没有谈到本质/核心的点子上;我要说的是,首先,作为开发人员,要去除脑袋里面的思维定式,不要从物理层去强行理解和区分WAN口和LAN口,它们并不是物理层的概念,它们是业务上的概念!如果强行要解释WAN口和LAN口,它们其实只表示一种相对的连接关系,如下图

WAN口是用来连接外部网络的,LAN口是连接内部网络的,仅此而已任何一个物理形态的口,都可以设置成WAN口和LAN口,只是开发人员给用户留不留设置接口的问题
2.Switch和Port
先来从物理形态上说起吧,业务上的WAN、LAN,最终对应到物理层的硬件上,其实就是Port,就是网线插进去的地方,不管是WAN还是LAN,它们都是Port,一样的物理形态和接口,RJ45标准,它们对应到ISO/OSI七层模型中,属于物理层,其功能简单来说,就是电信号的接收,转换为bit位,往复杂的说,里面学问多了去,CSMA/CD、编码解码、纠错检错等等;
通常家用路由器上会有多个Port,它们会接到一个Switch上,这个Switch或者是一个外置Switch芯片,或者是CPU内置的片上Switch,其功能就是连接多个Port,然后做转发,并且可以对Port设置Vlan、端口速率、QoS等;
好,Switch连接了多个Port,系统如何接收到这些Port上的数据呢?
3.PHY和MAC
前面说到,Port是物理层概念,负责接收电信号,其实这个功能是Port里的PHY芯片完成的,这里的PHY就是物理层,MAC是媒体访问控制子层,就是数据链路层的下半层,它们之间有标准的接口来连接,如MII、GMII、RGMII、SGMII等,MII是百兆接口,后面的是千兆接口,如下图

这里只表示一种连接关系的示意图,实际中并不是直接这样接的,还会存在FIFO、DMA控制器等复杂操作
这里可以是一个PHY对应一个MAC,也可以是一个MAC对应多个PHY,Switch芯片就是将多个PHY连接到一个MAC上;PHY和MAC可以是分开的,也可以是一个芯片集成
总之,PHY和MAC之间进行连接后,MAC就可以获取到物理层的数据了;MAC的作用就是成帧,将bit位组合成以太网协议的帧,当然作用还很多,这里不细说
系统可以控制到的是哪里呢?就是MAC,通过MAC与PHY连接的MII…接口,按照时序控制,从数据线读写数据,从MDC/MDIO线控制PHY芯片的工作
这里有一个比较重要的点,Linux里的网络设备,eth0这种网络接口,对应的就是MAC,有几个MAC,就有几个eth0、1、2,它们就是软件对CPU的MAC接口的抽象,一定是物理上实际存在的;关于详细的Linux网络设备数收发的流程,包括硬中断和软中断、NAPI机制、DMA操作以及协议栈处理,后面会再发文章专门总结
到目前为止,唯一一点和WAN、LAN有关的就是将某个Port接外网的话,设置其PHY和MAC接口为千兆,LAN口的话一般是百兆
4.Linux物理网口与虚接口
什么是物理网口,比如上文说到的eth0这种接口,你能通过ifconfig命令看到它,是因为Linux网络子系统为你维护了一个网络设备的对象,它抽象了所有网络设备的信息和功能。但是它不光光只有软件的抽象,而且是有物理实际实体的对应,说白了就是CPU的片上MAC接口,有几个MAC,最多就能有几个ethn。它一般是在网卡驱动的加载过程中,通过调用register_netdev()向内核注册的什么是虚接口,Linux虚拟网络设备的总称,有eth0:x、eth0.x、veth0等。为什么要有这么多种虚拟网络接口?这正是Linux网络强大的地方,它可以利用各种虚接口以及更上层的一些东西,组合出来各种花样,本文的核心正是总结其中的一小部分
4.1eth0:x
首先,它存在的前提是,必须存在eth0这个物理网口,它是依附于eth0的。当你在eth0的基础上创建了一个eth0:1,可以把它理解为一个软件层实际存在的网口,所有eth0收到数据,它都可以收到,可以为它单独设置IP等网络层信。网卡必须设置成混杂模式
eth0.x它的道理一样,必须存在eth0这个实体网口,作用是所有eth0收到的数据,带Vlan为x的数据都会被发送到eth0.x
4.2 怎么用
结合网关设备的WAN和LAN,如果switch只有一个MAC,如何做到WAN和LAN的分离?可以利用Vlan来区分,上图
对switch的多个Port设置不同的Vlan,这里的Vlan类型是进入Port的包被打上Port的Vlan,具体叫什么类型记不清了。总之对Port设置Vlan是有不同种类的,这里说的Vlan不是通常说的交换机上Vlan那种端口会对进入的包做判断,如果和端口Vlan不一致,就丢弃用Vlan区分了数据包的进入Port,Port1的Vlan为11,其他Port的Vlan为1。创建eth0.11和eth0.1,那么eth0.11接收到的数据一定是从Port1进入的,eth0.1接收到的数据一定是从其他Port进入的,这样就把Port区分出来了
5.Linux Bridge
好,理解了物理接口和虚接口的概念,可以做到将Port区分,从不同的Port进来的数据,我可以在软件上很好的区分了。但是,另外一个非常重要的问题是:WAN和LAN的数据如何互通?
家用路由器通常在WAN设置中有工作模式的区分,分别是路由(route)模式和桥(bridge)模式,这里的桥模式和Linux Bridge有什么关系呢?指的就是Linux Bridge!
Linux Bridge是干嘛的?可以简单的理解为一个Linux虚拟出来的软件Hub,它工作在2层,所有绑定到Bridge上的接口,当数据从一个接口进入时,Bridge会将它们从所有其他接口转发,forward。这里的接口就是上文说的物理接口或者虚接口Bridge既然可以做转发,那不就相当于接口互通了吗?我们来设想一个最最简单的路由器桥模式,上图
当把eth0.11和eth0.1都绑定到br0上以后,Port1和其他Port的数据就互通了。那我们这个网关设备现在是用来干嘛的呢?它现在只是一个桥接器了,不做任何上层业务,只做转发。用户设备接在所谓的LAN侧,通过DHCP、PPPoE或者静态IP,自己去访问WAN侧网络吧!

现在有一个小小的问题,这个桥机器,怎么管理它呢?那个家用路由器通常的管理地址怎么玩的呢?其实就是为br0设置一个IP地址。什么,br0还可以设置IP地址?
这里有一个点需要做铺垫,input和forward的概念,它们是属于更上层的iptables里的概念,但是又和这里的Bridge有着密不可分的关系,简单来说,Bridge收到数据包会做一系列判断,包括学习地址和转发。当Bridge自己有地址后,它会判断数据包的目的IP是不是自己,如果是自己,就叫input,否则,就叫forward。那么应用层创建一个Http Server绑定到br0上,当用户设置静态IP与br0地址在同一网段时,访问br0的地址,不就实现了本地管理吗?
如果需要远程管理呢?类似telnet或者外网中有其他管理环境,如何管理到这个设备?总之就是WAN侧有上级设备来管理这个桥接器,怎么办?
目前假定的是Port1,Vlan11这个端口是接外网的,就叫它所谓的WAN口吧,其他Port就处于LAN侧。这时就要使用到虚接口了,在eth0已经存在的前提下,eth0.11不要绑到br0上,只有LAN侧Port绑到br0上,然后在eth0.11上起PPPoE或者DHCP Client,拿到外网地址,不久可以实现远程管理了吗?

可是这样的话,WAN口和LAN口没有了连接,用户怎么通业务?
只能再起一个eth实体接口!比如eth1,然后将eth1和eth0.1绑定到br0,管理通道和数据通道分开

这样看起来很麻烦,而且组网也不方便,那么有什么更好的办法呢?那就是真正意义上的网关gateway,使用NAT转换的时候到了
iptables和NAT转换
不需要eth1,只要一个eth0,还是要做Vlan来区分连接外网的Port和内网的Port。eth0.1绑定到br0,eth0.11不绑定到br0。br0设置IP地址用于本地管理,同时起一个DHCP Server为内网用户分配IP地址。eth0.11起一个DHCP Client或者PPPoE,请求到外网地址,用作远程管理,同时也是数据通道。在eth0.11和br0之间做NAT转换,实现WAN侧和LAN侧的数据连接。

核心的iptables规则是
iptables -t nat -A chain_name -s lan_addr -o wan_ifname -j MSQUERADE
这条iptables规则的含义是源IP地址是LAN侧地址,从WAN接口发出的数据包,做IP伪装,其效果是外网在和内网用户设备通信时,内网的用户设备完全当作一个外网中的设备来处理,在出口会将其源IP修改为一个外网地址,这个过程叫SNAT。当外网数据到达WAN接口时,会将目的IP修改为内网该设备的IP,这个过程叫DNAT。
本质上是iptables为每条到外网去的数据流记录维护一个表,包括IP地址、端口号、协议等等,只要内网访问外网某个地址,这个外网地址的数据包就可以进入内网并到达这个设备。
各种设置方法和使用:
Linux网络属性配置
配置方式:
静态指定:
命令:
ifconfig:配置IP, NERMASK
route:路由
netstat: 状态及统计数据查看
配置文件
route:路由
动态分配: 依赖与本地网络中有DHCP服务
DHCP:Dyanmlc Host Configure Procotol
网络接口的命令方式
传统命名
以太网: eth[0-n] ,例如: eth0.eth1…
ppp网络:pppx [0,…] 例如 ,ppp0,ppp1…
可预测命名方案(contos):
支持多种不同命名机制:
Fireware, 拓扑结构
1 . 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,则根据次索引进行命名,如eno1,2…
2 . 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据次索引进行命名,如 ens1,2…
3 . 如果硬件接口的物理位置信息可用 , 则根据此信息命名,如 enp2s0…
4 如果用户显示定义,也可根据MAC地址命名,例如enx122161吧e10…
上述均不可用,仍使用传统方式命名;
Linux网络配置
ifconfig -a :显示所有接口,包括inative状态的接口口;
命令指定:
ifconfig eth1 IP /24 up 添加
ifconfig eth1 -ptomisc 移除
options:
- promisc
立即生效
route:路由查看及管理
 主机路由:目标地址为单个IP
 网络路由 : 目标地址为IP网络
 默认路由 : 目标为任意主机, 0.0.0.0/0.0.0.0
查看:
route -n
添加:
route add [-net|host] target [netmask Nm][ gw GW] [dev]lf
route add -net 10.0.0.0/8 gw 192.168.10.1 dev eth1
route add -net 0.0.0.0/0.0.0.0 gw 192.168.10.1
route add default gw 192.168.10.1
删除
route del -net 10.0.0.0/8 gw 192.168.10.1
route del default 删除默认网关

 netsat :显示路由:netstat -r-r :显示内核路由表-n:数字格式显示网络连接:netstat -t :TCP协议的相关连接,连接均有状态;FSM-u: UDP相关的连接 -w:raw socker 相关链接-a 所有状态-n: 以数字格式显示IP和Port;-e:扩展格式-p:显示相关的进程及PID
常用组合-tan    -uan  -tnl  -tual
传输层协议:tcp :面向连接的协议:通信开始之前,要建立虚链路;通信完成后还要拆除连接;udp: 无连接的协议;直接发送数据报文;显示接口的统计数据:netstat所有接口      netstat  -i
指定接口: netstat -Ieth1(无空格)
ifup,ifdow:通过配置文件/etc/sysconfig/network-scripts/ifcfg-xxx来识别接口并完成配置配置主机名hostname:查看:hostanme配置:hostname  HOSTNAME仅当前有效hostnamectlhostnamectl status :显示当前主机名信息hostnamectl set-hostname:设定主机名.永久有效;配置文件: /etc/sysconfig/network
DNS服务器指向
配置文件:/etc/resolv.conf
如何测试/etc/hostsnslookup/digdig -t A FQDN
iproute
管理IP地址添加ipip  addr add IFADDR dev IFCEip addr add 192.168.1.1/24 dev eth0label NAME:为额外的添加地址指明标签ip addr 10.1.1.10/8 dev eth0 label eth0:1broadcast  ADDRESS : 广播地址;会根据IP和NETMASK自动计算得到;global:全局可用link :接口可用host :仅本机可用ip addr  list :显示指定接口地址添加路由 ip route add  TYPE PREFIX via GW dev IFACE  src SOURCE_IPip route add  192.168.0.0/24 via 10.0.0.1 dev eth1  src 10.0.20.100ip route add default 删除ip  route  del  TYPE PREFIXip  route del 192.168.0.0/24ip route  list 列出路由表ip route flush  192/24  清空指定路由默认网关对未知的的接口都走2接口
清除指明接口所有地址ip addr flsh dev eth0ss命令选项-t :TCP协议相关链接-u:UDP协议相关链接-w:raw socker 相关链接-a 所有状态-n: 以数字格式显示IP和Port;-e:扩展格式信息-p:显示相关的进程及PID-m:内存用量-o:计时器信息ss -tan ' ( dport=:22 or sport = :22  )' 指明过滤端口为22配置文件:IP/NETMASK/GW/DNS等属性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE:接口名可通过大量的参数来定义接口属性;及vim文本编辑器编辑systme-config-network  ifcfg-IFACE配置参数DEVICE:此配置文件对应的设备的名称ONBOOT: 在系统引导过程中,是否激活此接口UUID:测设备唯一标示BOOTPROTO:激活此接口时使用设么协议来配置接口属性,常用的dhcp,bootp,none;TYPE: 接口类型,常见的有Ethernet , BridgeDNS1:第一DNS服务器指向;DNS2:备用DNS服务器指向;IPADDR: IP地址GATEWAY:默认网关NETMASK:子网掩码, Cenots7 :prefixPEERANS: 如果BOOTPROTO的值为"dhcp"是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许;NM_CONTROLLED: 是否使用NetworkManager 服务来控制接口     网络服务:network   NeteorkManagerchekconfig  --list 查看 网络服务状态管理网络服务配置文件修改之后,生效需要重启服务 systmectl  NETWORK [stop|start|restart|] service  关闭/启动/重启
支持两种配置方式但不可混用1每行一个路由条目TAEGET  via  GW2每三行一个路由条目ADDRES=TARGETNETMASK=MASKGATWAY=NEXTHOP
给接口配置多个地址ip addr之外 ,ifconfig或配置文件都可以;1ifconfig IFACE_LABEL IPADDR/NETMASKIFACE_LABEL:eth0:0,1...2,为别名添加配置文件;DEVICE=IFACE_LABELBOOTPROTO:网上别名不支持动态获取地址;static,none 别名的网卡只能自己手动设置不能动态获取

大家也可以多看看LINUX内核驱动,比如usb网络的等等,有了基础才能看内核代码,不然小心云里雾里,不知所云。加油。中国。

拔开云雾的linux网络相关推荐

  1. linux网络操作系统电大考试,国开2020年秋《linux网络操作系统》形考任务题库大全...

    国开2020年秋<linux网络操作系统>形考任务题库大全 信息只能转换和传递,但不可以再生.选择一项对 题目2未回答满分1.00 标记题目题干第三代移动通信系统即3G通信系统信息传输速率 ...

  2. 鸟哥的Linux私房菜(服务器)- 第六章、 Linux 网络侦错

    第六章. Linux 网络侦错 最近更新日期:2011/07/19 虽然我们在第四章谈完了连上 Internet 的方法,也大略介绍了五个主要的网络检查步骤.不过,网络是很复杂的东西, 鸟哥也是接触了 ...

  3. Linux网络编程必看书籍推荐

    首先要说讲述计算机网络和TCP/IP的书很多. 先要学习网络知识才谈得上编程 讲述计算机网络的最经典的当属Andrew S.Tanenbaum的<计算机网络>第五版,这本书难易适中. &l ...

  4. Java I/O演进与Linux网络I/O模型

    参考文章: 简书-浅谈Linux五种IO:http://www.jianshu.com/p/486b0965c296 一.linux基础概念 1.1 内存空间 linux系统中的使用的是虚拟存储器,即 ...

  5. linux学习——大话linux网络

    打算学习linux网络协议栈源码,从此迈上linux网络开发之路. 有目标是好滴,但是目前对linux网络相关的命令还不是很熟悉,所以...任重而道远啊... 先从使用linux网络特性开始吧,从一个 ...

  6. linux怎么命令设置网络连接,Linux网络操作命令

    文章目录 [隐藏] netstat nslookup host命令 finger Ping 命令 Linux 系统常用的网络操作命令包括netstat.nslookup. host finger 和p ...

  7. 【CentOS Linux 7】【Linux网络配置基础】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  8. 【Linux网络编程】广播

    00. 目录 文章目录 00. 目录 01. 广播概述 02. 广播地址分类 03. 广播的特点 04. setsockopt函数 05. 程序示例 06. 附录 01. 广播概述 在生活中广播无处不 ...

  9. Linux日常运维管理技巧(一)监控系统状态、监控网卡流量、监控IO性能、查看系统进程、查看网络状态、Linux下抓包tcpdump、Linux网络相关、DNS配置

    目录 监控系统状态 监控网卡流量 监控IO性能 查看系统进程 查看网络状态 Linux下抓包 Linux网络相关 监控系统状态 w/uptime查看系统负载 [root@zyshanlinux-01 ...

最新文章

  1. 【java】兴唐第三十一节课之反射
  2. 中国科协(深圳)海外人才离岸创新创业基地源创力中心开业,主打国际创业服务...
  3. 关于并发处理,下列哪些说法符合《阿里巴巴Java开发手册》
  4. python找人脚本_女朋友最近天天加班,用python写个定位脚本,直接抓到现场
  5. MySQL 和 Innobackup 不定期卡住的秘密
  6. 算法笔记_218:花朵数(Java)
  7. [转]Entity Framework走马观花之把握全局
  8. Ajax异步(客户端测试)
  9. mac svn工具_程序员或产品经理,这些Mac的效率工具一定不要错过
  10. SqlServer优化:当数据量查询不是特别多,但数据库服务器的CPU资源一直100%时,如何优化?...
  11. http://mirrors.aliyuncs.com/centos/7/extras/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http:/
  12. eclipsenbsp;mavennbsp;pluginamp;n…
  13. 问题五十三:怎么用ray tracing画参数方程表示的曲面(1)
  14. 和 对比_Yeezy350V2新灰橙真假对比
  15. 阿里云播放器直播rtsp、rtmp、flv流,flash播放直播流
  16. Windows游戏加速外挂-变速齿轮 学习笔记-【第一篇】
  17. Spring知识整合(主要SSM)
  18. 2021夏令营全记录·厦大信院SE
  19. 如何在python 设置输入字符的 颜色 背景色,前景色
  20. 寻觅那款你心仪的国际象棋app

热门文章

  1. lgv20刷twrp_LG V30+ 日版 L-01K 刷机解锁BL 刷入TWR 回复日版基带
  2. oracle中重做日志损坏,重做日志文件损坏的恢复笔记
  3. 干货 | 七年留美经验,帮你省钱自助游美国
  4. matlab表示颜色的词语三个字,三个字的形容颜色的词语
  5. 七牛 java 加水印_七牛云图片加水印
  6. 阿里api网关接口客户端demo,java实现源码,其他语言可参考
  7. python计算日期间的差值,python 计算时间、日期差值类
  8. (电脑问题) win10飞行模式无法关闭和突然连接不上网络解决方法
  9. IPv4头部结构具体解释
  10. 微信视频号封面怎么设置?怎么改?封面制作全教程,快来解锁!