当前位置: 首页 > news >正文

【net1】tcp,route,iptables,macvlan

文章目录

  • 1.局域网:CSMA/CD
  • 2.互联网:ARP,NAT,路由表比映射表复杂
  • 3.tcp协议:telnet,tcpdump,syn/accept队列
  • 4.linux的route指令:route add
    • 4.1 案例:从ubuntu机器ping 199.199.199.199,配置路由使能通
  • 5.防火墙iptables:(ip+tables)对网络上数据包通过表的形式进行规则的修改
    • 5.1 filter表:3个链
    • 5.2 nat表:4个链
  • 6.macvlan:可将网卡(不一定是真实的物理网卡)虚拟出多个接口,这网卡称为master或父接口,这些虚拟接口和外面环境通信都是通过父接口
    • 6.1 bridge模式:ip netns add ns001 / ns002
    • 6.2 private模式:Fb/OcpOBMC和X86的Ubuntu上验证过, Kernel均5.0+
      • 编译Kernel:BMC/CPU OS的Linux Kernel Config里面加CONFIG_MACVLAN=m/y
      • 创建网卡 & 配置路由表:以eth0为目标物理网口,虚拟网口的MAC地址自定义,mode可以选择private不能互通,bridge内部互通等


1.局域网:CSMA/CD

1.早期通过双绞线(只能有一台设备进行数据发送),通过10100…高低电平就能表示数据信号。标识:1–>3,3需要表明自己身份是3。

2.通过集线器广播给所有设备,2345自己分辨是我的消费了,不是我的数据包丢弃。如果1,2同时广播,4收到2个消息混合解析不出,导致1,2这两个数据包全没法用。针对上面问题提出CSMA/CD协议:发送前进行载波侦听,检测这链路上有没有其他人正在发送数据,没有的话再进行数据发送防冲突。hub集线器缺点:1.进行数据的广播会导致带宽利用率较低。2.在链路上同时只能有一个设备发送数据,链路利用率低。3.没有标识,只是广播出去,让设备自己判断是不是自己的,工作效率低。
在这里插入图片描述
3.如下机器1想发到机器3,通过SW寻址到3号口。SW记录了地址(mac地址)和端口(此处端口不是电脑端口而是交换机端口)的映射关系不用广播。买来SW是张空表,怎么建立映射关系?如下机器A插上来后要向B发送数据,发现是空表,确定A是1号口,B找不到就往每个端口发,4号口对B做出了回应,表记录B对应4号口。桥接(如没有映射关系,C和D都对应5,5口转到另一个SW,量大之后不断桥接引起消息洪泛)实现几千条存储,几千条不够至少几十亿。如下mac和端口的映射表不是路由表,局域网(家庭网,校园网等)使用SW效率高。
在这里插入图片描述
win下ipconfig /all查看无线或有线网的mac地址。
在这里插入图片描述

2.互联网:ARP,NAT,路由表比映射表复杂

SW映射表只能实现几千存储,如果表中记录满了,新的来会把旧的替代,所以跨网用路由器(也称网关)。如下家庭网是整个网络2,每台机器都有自己的路由表如ubuntu有路由表,路由器也是linux系统也有路由表。本台电脑的路由表会写默认网关是192.168.0.1(这个点在路由器上),本台电脑就会把数据包发到路由器上,这个路由器自己也有路由表路由到1.52这个网卡,1.52和1.254和1.1在同一个网段下很容易找到。
在这里插入图片描述
ping 192.168.1.254可通,那么网络内传输如1.52—>1.254即网络内怎么传数据的呢?同一网段一找就找到这样的说法是错的,若是这样为什么有了IP地址还要mac地址呢?ip地址(抽象地址)不能直接通信,只能用mac地址(真实地址)通信:ARP协议广播询问谁的ip是1.254,1.254收到这询问就会回复一下,说我的地址是1.254,我的mac地址是。。。1.52知道了1.254对应的mac地址就会在mac层(数据链路层)进行传输。越往上层(往里)ip层包着还有tcp层,ip数据包里数据部分还会有tcp的头,再往上层(往里)还可能有http的头,最后的数据才是我们要传的数据。
在这里插入图片描述
获取mac地址都是通过ARP协议(cat /proc/net/arp),如下ip的源目地址是不变的,一直为0.102和1.254,只有mac地址一直在切换(竖着对比)。有个特例NAT(网络地址转换协议):源地址ip也会进行切换。
在这里插入图片描述
网线连接机器(ifconfig eth0 192.168.1.123 netmask 255.255.255.0)和PC电脑:更改适配器选项 - 以太网- 右击属性 - 配置 如下。
在这里插入图片描述

# echo $1 |grep -Eq "^([0-9a-f][02468ace])    (([:]([0-9a-f]{2})){5})$"  
# 如 1A ( A这一位也就是bit40必须为偶数 )    :44:bb:66:f3
check_macaddr()
{
   
    re="([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}"  # [[:xdigit:]] 表示匹配任意 一个 十六进制数字(0-9,A-F,a-f),{1,2}表示前面的模式可以出现一次或两次,最后的:表示匹配一个冒号字符
    if [[ ! $* =~ ${re} ]]; then
        usage
    fi
}
check_parameter()
{
   
    mac=$1
    strlen=${
   #mac}
    if [ $# -ne 1 ] || [ "$strlen" -ne 17 ];then
        usage
    fi
    check_macaddr "$mac"
}
set_mac()
{
   
    mac=$(echo "$mac" | sed 's/://g'| tr '[:a-z:]' '[:A-Z:]')  # 删除冒号并将小写转为大写
	# 写mac进eeprom
}

# /recipes-plats/network/files/eth1_mac_fixup.sh  

相关文章:

  • C语言每日一练——day_5
  • Windows中的用户变量和系统变量
  • 【写作模板】JosieBook的写作模板
  • 浏览器控制台的特殊执行方式,暂存变量的作用域 和 同步/异步行为解释
  • 数据结构——单链表list
  • 运算符在C和C++中的用法和区别(简洁易懂版)
  • 3806.小郑花式喝酒(java)
  • 环路广播风暴演示图
  • 写了一个二叉树构造函数和画图函数,方便debug
  • 【HTML】一、基础标签
  • ETL与ELT核心技术解析:如何选择最优数据集成方案
  • SelectDB 实时分析性能突出,宝舵成本锐减与性能显著提升的双赢之旅
  • 使用纯CSS 实现 侧边栏 拖拽效果
  • 【15】单片机编程核心技巧:逻辑运算与位操作实战
  • Android UI 组件系列(二):Button 使用详解与常见属性
  • 全链条自研可控|江波龙汽车存储“双轮驱动”体系亮相MemoryS 2025
  • Pytesseract识别图片
  • 12 DHCP的内容和HTTP的改良
  • LeetCode27移除元素
  • Android12 使用自定义签名key替换系统默认testkey
  • 市场监管总局召开平台企业支持个体工商户发展座谈会
  • 山东:小伙为救同学耽误考试属实,启用副题安排考试
  • 李强会见巴西总统卢拉
  • A股三大股指涨跌互现:银行股领涨,两市成交12915亿元
  • 科普|揭秘女性压力性尿失禁的真相
  • 英媒:英国首相住所起火,目前无人伤亡