Skip to content

网络协议

常见网络协议

架构网络协议例子
应用层DHCP HTTP HTTPS RTMP P2P DNS GTP RPC
传输层UDP TCP
网络层ICMP IP OSPF BGP IPSec GRE
链路层ARP VLAN STP
物理层网络跳线

IP 地址

ifconfig/ipconfig

mac ifconfig

bash
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
	nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=400<CHANNEL_IO>
	ether 98:01:a7:a5:e7:01
	inet6 fe80::149c:8a3c:d2d:2d7c%en0 prefixlen 64 secured scopeid 0x5
	inet 192.168.63.83 netmask 0xffffff00 broadcast 192.168.63.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	options=460<TSO4,TSO6,CHANNEL_IO>
	ether 82:13:1a:8c:29:c0
	media: autoselect <full-duplex>
	status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	options=460<TSO4,TSO6,CHANNEL_IO>
	ether 82:13:1a:8c:29:c1
	media: autoselect <full-duplex>
	status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=63<RXCSUM,TXCSUM,TSO4,TSO6>
	ether 82:13:1a:8c:29:c0
	Configuration:
		id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
		maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
		root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
		ipfilter disabled flags 0x2
	member: en1 flags=3<LEARNING,DISCOVER>
	        ifmaxaddr 0 port 6 priority 0 path cost 0
	member: en2 flags=3<LEARNING,DISCOVER>
	        ifmaxaddr 0 port 7 priority 0 path cost 0
	nd6 options=201<PERFORMNUD,DAD>
	media: <unknown type>
	status: inactive
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
	options=400<CHANNEL_IO>
	ether 0a:01:a7:a5:e7:01
	media: autoselect
	status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
	options=400<CHANNEL_IO>
	ether 7a:f8:70:1a:9f:49
	inet6 fe80::78f8:70ff:fe1a:9f49%awdl0 prefixlen 64 scopeid 0xa
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
llw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=400<CHANNEL_IO>
	ether 7a:f8:70:1a:9f:49
	inet6 fe80::78f8:70ff:fe1a:9f49%llw0 prefixlen 64 scopeid 0xb
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
	inet6 fe80::9f78:3a44:b57b:ea9d%utun0 prefixlen 64 scopeid 0xc
	nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
	inet6 fe80::db9a:b93a:b24c:5234%utun1 prefixlen 64 scopeid 0xd
	nd6 options=201<PERFORMNUD,DAD>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
	nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=400<CHANNEL_IO>
	ether 98:01:a7:a5:e7:01
	inet6 fe80::149c:8a3c:d2d:2d7c%en0 prefixlen 64 secured scopeid 0x5
	inet 192.168.63.83 netmask 0xffffff00 broadcast 192.168.63.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	options=460<TSO4,TSO6,CHANNEL_IO>
	ether 82:13:1a:8c:29:c0
	media: autoselect <full-duplex>
	status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	options=460<TSO4,TSO6,CHANNEL_IO>
	ether 82:13:1a:8c:29:c1
	media: autoselect <full-duplex>
	status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=63<RXCSUM,TXCSUM,TSO4,TSO6>
	ether 82:13:1a:8c:29:c0
	Configuration:
		id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
		maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
		root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
		ipfilter disabled flags 0x2
	member: en1 flags=3<LEARNING,DISCOVER>
	        ifmaxaddr 0 port 6 priority 0 path cost 0
	member: en2 flags=3<LEARNING,DISCOVER>
	        ifmaxaddr 0 port 7 priority 0 path cost 0
	nd6 options=201<PERFORMNUD,DAD>
	media: <unknown type>
	status: inactive
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
	options=400<CHANNEL_IO>
	ether 0a:01:a7:a5:e7:01
	media: autoselect
	status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
	options=400<CHANNEL_IO>
	ether 7a:f8:70:1a:9f:49
	inet6 fe80::78f8:70ff:fe1a:9f49%awdl0 prefixlen 64 scopeid 0xa
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
llw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=400<CHANNEL_IO>
	ether 7a:f8:70:1a:9f:49
	inet6 fe80::78f8:70ff:fe1a:9f49%llw0 prefixlen 64 scopeid 0xb
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
	inet6 fe80::9f78:3a44:b57b:ea9d%utun0 prefixlen 64 scopeid 0xc
	nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
	inet6 fe80::db9a:b93a:b24c:5234%utun1 prefixlen 64 scopeid 0xd
	nd6 options=201<PERFORMNUD,DAD>

IPv4

192.0.0.1 分隔四个部分 每个部分 8 位 32 位

32 位的 IP 地址分配地址 5 类

类别前几位网络号主机号
A 类07 位24 位
B 类1 014 位16 位
C 类1 1 021 位8 位
D 类1 1 1 0多播组号 28 位
E 类1 1 1 1 0留待后用(27 位)

A B C 三类地址包含的主机数量

类别IP 地址范围最大主机数私有 IP 地址范围
A0.0.0.0-127.255.255.2551677721410.0.0.0-10.255.255.255
B128.0.0.0-191.255.255.25565534172.16.0.0-172.31.255.255
C192.0.0.0-223.255.255.255254192.168.0.0-192.168.255.255

无类型域间选路 CIDR

32位的IP地址一分为二,前面是网络号,后面是主机号

  • 10.100.122.2/24 => 类似这种形式 CIDR => 32 位中,前 24 位是网络号,后 8 位是主机号
  • 广播地址 同一网络号里面的机器都能收到
  • 子网掩码 255.255.255.0

网络号的计算

子网掩码和 IP 地址按位计算 AND

D 类地址

  • 组播地址:某个组的机器都能收到
  • eth0 网卡 global => 可以对外,可以接收来自各个地方的包
  • lo host 本机相互通信
    • loopback 环回接口
    • 127.0.0.1

IPv6

128 位

IP 地址如何计算广播地址、子网掩码

???

MAC 地址

网卡的物理地址,十六进制,6 个 byte 表示

  • MAC 地址号全局唯一(网卡生产出来就带着这个地址)
  • 一个网络包从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能
  • IP 地址才有远程定位功能
  • MAC 地址像是身份证,是一个唯一的表示
  • MAC 地址有一定定位功能的,范围非常有限

网络设备的状态标识

<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500

  • net_device_flags 网络设备的状态标识
类型作用
UP网卡处于启动状态
BROADCAST网卡有广播地址,可以发送广播包
MULTICAST网卡可以发送多播包
LOWER_UPL1 启动,网线插着
MTU最大传输单元 MTU 为 1500,以太网的默认值
qdisc_pfifo_fastqueueing discipline 排队规则

MTU

二层 MAC 层的概念,以太网规定 MAC 头带正文合起来不允许超过 1500 字节,正文里面有 IP 的头,TCP 的头,HTTP 的头,如果放不下,就需要分片来传输

qdisc_pfifo_fast

内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc(排队规则)把数据包加入队列

Released under the MIT License.