第一讲 为什么要学习网络协议?
1. 协议三要素
- 语法
- 一段内容要符合一定的规则和格式
- 词法
- 一段内容要代表某种意义
- 顺序
2. 多种协议
- http -> tcp -> ip -> arp
- 路由协议
- OSFP和BGP
第二讲 网络分层的真实含义是什么?
1. 四个问题
- TCP协议进行三次握手的时候,IP层和MAC层在干什么
- 所有不能表示出层层封装含义的比喻,都是不恰当的
- TCP每发送一个消息,IP和MAC层的机制都要运行一遍
- 包经过A-B-C-D的路由,在经过B和C时,从A发出的包中,B的地址放在什么地方?如果放在IP协议中的目标地址,那么到达中转路由时,如何知道目的地?
- HTTP包经不经过二层设备?
- 经过
- 打开一个电商网站都需要经历那些过程?
2. 多层设备
- 二层设备
- 只处理MAC
- 三层设备
- 处理IP
第三讲 ifconfig:最熟悉又陌生的指令
1. 查看电脑IP
- windows
- ipconfig
- linux
- ifconfig
- ip addr
- 没有命令的主机可以安装net-tools和iproute2
root@test:~## ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff
inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::f816:3eff:fec7:7975/64 scope link
valid_lft forever preferred_lft forever
2. IP地址类型
类别 | IP地址范围 | 最大主机数 | 私有IP地址范围 |
---|---|---|---|
A | 0.0.0.0-127.255.255.255 | 16777214 | 10.0.0.0-10.255.255.255 |
B | 128.0.0.0-191.255.255.255 | 65534 | 172.16.0.0-172.31.255.255 |
C | 192.0.0.0-223.255.255.255 | 254 | 192.168.0.0-192.168.255.255 |
3. CIDR(Classless Inter-Domain Routing,无类型域间路由)
- 示例 10.100.122.2/24
- 其中24表示32位中前24位为网络号
- 10.100.122.255是广播地址,所有10.100.122网络中的主机都可以收到
- 255.255.255.0是子网掩码,转换成2进制,前24位都是1,后8位是0,将它与IP地址做AND操作,得到10.100.122.0,就是该IP的网络号
- 10.100.122.1 一般为出口地址
4. MAC地址
- 通过ip addr命令
- link/ether 00:0c:29:61:4d:d5 brd ff:ff:ff:ff:ff:ff
- MAC唯一性
5. 网络设备的状态标识 net_device flags
- <BROADCAST,MULTICAST,UP,LOWER_UP>
- UP: 网卡处于启动状态
- BROADCAST: 网卡有广播地址,可以发送广播包
- MULTICAST: 网卡可以发送多播包
- LOWER_UP: L1是启动的,即网线插着
- mtu 1500
- 最大传输单元为1500,以太网的默认值
- MAC层概念
- qdisc pfifo_fast
- qdisc: queueing discipline, 排队规则
- 最简单的qdisc是pfifo,即先进先出
- pfifo_fast稍复杂一点,包含三个波段(band),在每个波段内先进先出
- 三个band的优先级也不同,band 0最高,band 2 最低
- 数据包按照服务类型(Type Of Service, TOS)被分到三个波段中, TOS是IP头中的一个字段
第四讲 DHCP和PXE:IP是怎么来的,又是怎么没的
1. 设置ip
使用net-tools
$ sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up
使用iproute2
$ sudo ip addr add 10.0.0.1/24 dev eth1
$ sudo ip link set up eth1
2. 包的发送逻辑
- 首先判断目标IP地址和源IP地址是不是一个网段
- 如果是同一个网段,使用ARP协议找到目标地址的MAC地址
- 如果不是一个网段,就把包发给网关
3. DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议)
- 应用层协议,基于UDP,客户端端口68,服务器端口67
- DHCP Discover
源地址:0.0.0.0
目的地址:255.255.255.255
广播包封装了UDP,UDP封装了BOOTP(Bootstrap Protocol, 引导程序协议)
- DHCP Offer
是单播包,MAC地址为DHCP Discover中的客户机的MAC地址
选择第一个到达的DHCP Offer
-
发送DHCP Request广播包
告知接受的DHCP Server,并通知其他server撤销ip的分配
由于没有得到server的最终确认,仍然使用0.0.0.0
- DHCP ACK
单播包
DHCP Server在收到DHCP Request的时候,会广播一个DHCP ACK消息包,与客户机达成协议
- DHCP 流程图
- IP的收回与续租
- 租期过去50%时,向提供IP的DHCP Server发送DHCP request消息包
- DHCP Server收到请求后发送DHCP ACK包
- 客户机根据ACK包更新TCP/IP参数
- 预启动执行环境(Pre-boot Execution Environment, PXE)
- 分为客户端和服务器端
- 由于客户端没有操作系统,只能先放在BIOS里
- DHCP Server样例配置
- next-server:指向PXE服务器地址
ddns-update-style interim; ignore client-updates; allow booting; allow bootp; subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; option subnet-mask 255.255.255.0; option time-offset -18000; default-lease-time 21600; max-lease-time 43200; range dynamic-bootp 192.168.1.240 192.168.1.250; filename "pxelinux.0"; next-server 192.168.1.180; }
- PXE客户端启动后,发送DHCP请求,不仅能分配IP,还能得到PXE服务器地址
- PXE工作过程
- 启动PXE客户端,通过DHCP协议从DHCP Server获取IP地址、PXE服务器地址和启动文件pxelinux.0
- 通过TFTP协议向PXE服务器请求下载启动文件
- PXE服务器上往往还有TFTP服务器
- 客户端接收到启动文件后,开始执行,该文件指示客户端,向TFTP服务器请求计算机的配置信息pxelinux.cfg。
- TFTP服务器给PXE客户端发送一个配置文件,说明内核在哪里,initramfs在哪里,PXE客户端一次请求这些文件。
-
启动Linux内核