趣谈网络协议笔记之通讯协议综述
1 为什么要学习网络协议
(1)只有通过网络协议,才能使一大片机器互相协作、共同完成一件事。
(2)通过ip和网络号按位与,可以判断目标ip是否和自己属于同一网段
(3)同一网段通讯全靠吼(ARP 协议)
(4)如果跨网段通讯
- 会把请求转发给默认网关(192.168.1.1),(主要依靠ARP协议发给默认网关,默认网关会返回自己的MAC地址,这也就是所谓的MAC层)
- 网关往往是一个路由器,到某个ip怎么走,这个叫做路由表
- 路由如何转发通过路由协议(OSPF 和 BGP)
2 网络分层的真实含义
之所以网络要分层是因为不同层次之间有不同的沟通方式
(1)总经理之间沟通的时候,经理将总经理放在口袋里,然后组长将经理放进口袋里,员工在把组长放在口袋里。
(2)所以TCP发送每一个消息,都会带上IP层和MAC层。因为TCP没发送一次消息,IP层和MAC层所有的机制都会运行一遍。
(3)网络上跑的包都是完整的,可以有下层没上层,但绝对不可能有上层没下层。
网关如何判断IP是自己网段内还是希望自己转发出去的呢?
- 子网掩码和网络号按位与即可判断
3 ifconfig 熟悉又陌生的命令行
(1)其他查看 ip 地址的方法
- ip addr
(2)ip 地址是网络世界中的通讯地址,相当于我们现实世界中的门牌号(有定位功能)
(2)MAC地址相当于现实世界中的身份证号,无地位功能
(3)CIDR 用来判断是不是本地人
(3)CIDR 无类型域间选路
- 将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号 10.100.122.2/22
MAC地址是物理网卡地址,在同一网段中通过ARP协议(广播)可以找到
网卡参数详解
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
MAC地址的上一行 <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 65536 qdisc noqueue,叫作net_device flags, 网络设备的状态标识。
UP表示网卡处于启动的状态
BRODCAST表示这个网卡有广播地址,可以发送广播包
MULTICAST表示网卡可以发送多播包
LOWER_UP表示L1是启动的,即网线插着呢
mtu 65536表示最大传输单元为65536
qdisc全称是queueing discipline, 中文叫排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的qdisc把数据包加入队列。
最简单的qdisc是pfifo, 它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。
pfifo_fast稍微复杂一些, 它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。
三个波段的优先级也不相同。
band0的优先级最高,band2的优先级最低。
如果band0里面有数据包,系统就不会处理band1里面的数据包,band1和band2之间也是一样。
数据包是按照服务类型(Type of Service, TOS)被分配到三个波段里面的,TOS是IP头里面的一个字段,代表了当前的包是高优先级,还是低优先级的。
4 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)真正配置的时候一定不是手动配置的,而是使用配置文件进行配置的
不同配置文件格式不同,但无非就是 CIDR,子网掩码,广播地址和网关地址
(3)DHCP (动态主机配置协议)
BOOTP 主要用于客户机从服务器获得自己的 IP 地址,服务器的 IP 地址以及启动映象文件名。
如果一个管理员配置了DHCP Server 的话,当一个新的机器加入到这个网络的时候(会发送BOOTP request 请求),自动分配管理员配置的 ip 段中空闲的
BOOTP 主要用于客户机从服务器获得自己的 IP 地址,服务器的 IP 地址以及启动映象文件名。
最终达成租约的时候,还会发送广播让大家都知道
(4)预启动执行环境 (PXE)
管理员不仅能够自动分配IP地址,还能帮你自动安装操作系统
思路:
- 将光盘里面要安装的操作系统,放到一个服务器上,让客户端自行下载。
- 在 BIOS 启动之后
(1)PXE 协议分为:客户端和服务端
由于还没有操作系统,只能把客户端放到 BIOS 里面,当计算机启动的时候,BIOS把客户端调到内存里面,就可以连接到服务器做一些操作
DHCP Server 的一个样例配置
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; }
客户端启动后, DHCP 会为其分配一个IP 地址,还可以知道 PXE 服务器在哪里,也可以知道如何从PXE服务器上下载某个文件,去完成初始化的操作。