【net1】tcp,route,iptables,macvlan

发布于:2025-03-16 ⋅ 阅读:(19) ⋅ 点赞:(0)


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