趣谈网络协议01-05


01:为什么要学习网络协议?

协议三要素:语法、语义、顺序。

语法:规则和格式,例如括号要成对。
语义:每一段内容要有特定的意义。
顺序:因果关系

在浏览器里输入URL访问网页,使用了哪些协议?

DNS/HTTPDNS、HTTP/HTTPS 应用层协议
TCP/UDP 传输层
IP 网络层
ARP 链路层


02: 网络分层的真是含义是什么?

只要是在网络上的包(物理层中的buffer),都是完整的,可以有下层没上层,不能有上层没下层。

为什么需要mac地址?

因为只有ip地址,没有mac地址,消息发不出去。在ip报文端到端的传输过程中,源ip与目标ip地址是不变的,无法确定消息应该发往何处。所以需要mac地址,数据包在传输过程中,不断更新源mac地址和目表mac地址来确定要往哪里走。


03:ifconfig,查看ip地址的命令行

ifconfig、ip addr Linux下,ipconfig Windows下

ip地址分类

ip地址=网络号+主机号
A类=0+网络号(7)+主机号(24)
B类=10+网络号(14)+主机号(16)
A类=110+网络号(21)+主机号(8)
最大主机数=Math.pow(2,主机号)-2;(主机号全为0为网络地址,这里我理解为路由器ip,全为1为广播地址)

CIDR

格式:10.100.122.2/24
广播地址:10.100.122.255
子网掩码:255.255.255.0
最大主机数=Math.pow(2,主机号)-2;(同上)
ip地址&子网掩码=网络号

ip addr返回内容解析

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.10.11.92/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
  1. 该操作系统有两张网卡lo和eth0

  2. lo:全称loopback,是回环地址,经常被分配到127.0.0.1地址上,用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。

  3. <BROADCAST,MULTICAST,UP,LOWER_UP>

    BROADCAST:网卡有广播地址,可以发生广播包。
    MULTICAST:网卡可以发生多播包。
    UP:网卡处于启动状态。
    LOWER_UP:L1是启动的,即网线是插着的。

  4. mtu:最大传输单元 1500字节 包含MAC、IP、TCP、HTTP头部和正文

  5. qdisc pfifo_fast :queueing discipline排队规则。内核如果需要通过某个网络接口发送数据包,需要按照该网卡的qdisc排队规则把数据包加入队列。
    pfifo:先入先出队列
    pfifo_fase: 具有三个优先级不同的band波段,优先级band0>band1>band2,数据包根据ip头里的TOS字段分配到不同的band。

  6. link/ether:这个是MAC地址,唯一的,一块网卡一个MAC。

  7. 10.10.11.92/24为ip地址,scope后面为当前网卡可接受信息的范围,global表示对外,host表示只能支持本机内通信。

    IP地址具备定位功能,而MAC地址不具备


04:DHCP与PXE:IP是怎么来的,又是怎么没的?

如何配置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 addr up eth1

ip地址配置原则

    假设我旁边的机器ip地址为192.168.1.6,而我把本机ip地址设为16.158.23.6并企图从本机ping192.168.1.6。Linux默认的逻辑是如果目标ip地址和本机的一张网卡的ip地址处于同一网段,那么它会发送ARP请求,获取目标MAC地址。如果本机中没有任何一张网卡和目标ip地址在同一网段,那么它会先去请求网关。
    如果配置了网关,Linux会获取网关的MAC地址,将数据包发送至网关。如果没有配置网关,那么数据包无法发送。并且网关的配置必须与本机的网卡中的一张处于同一网段,否则无法配置成功。

DHCP

    动态主机配置协议
    当一台主机加入一个新的网络,发起DHCP Discover广播包,DHCP Server接收到消息,发送DHCP Offer,给主机提供一个ip地址。主机收到DHCP Offer以后,发送DHCP Request广播包,包含自己的MAC地址、即将接受的ip地址、接受Offer的DHCP Sever地址,告诉所有DHCP Server我已经获取到了ip地址。随后,该DHCP Server仍然以广播方式发送DHCP ACK包,自此主机获得了ip地址。

PXE

    预启动执行环境
    操作系统启动过程:

  1. 首先启动BIOS,这是一个特别小的系统,可以读取硬盘扇区,启动GRUB;
  2. 然后将权力交GRUB,GRUB加载内核;
  3. 然后将权力交给内核,内核启动,初始化操作系统。

    PXE工作流程

        当计算机启动时,首先启动BIOS,BIOS将PXE客户端载入内存,PXE客户端启动,发起DHCP请求,DHCP Server赋予其ip地址,并告知PXE服务端ip。
        计算机请求PXE服务端,因为涉及文件下载,PXE服务端上带有一个TFTP服务器。计算机请求到TFTP服务器,并获取操作系统文件。
        PXE执行该文件,安装操作系统。
    图片说明

05:物理层与数据链路层

    物理层代表设备:集线器(Hub),集线器采取广播模式发送数据包,连接同一台集线器的设备都能收到数据包。存在的问题:

  1. 数据包应该发给谁,应该谁接受?
  2. 大家都在发,怎么避免数据混乱?
  3. 发送时出现错误怎么办?

    数据链路层:解决物理层的问题。

  1. MAC地址可以对机器进行唯一标识。机器发送数据包前,在链路上广播,只有当目标MAC地址与接收方MAC一致时,接收方才会获取该数据。如果当本机不知道目标MAC时,发送ARP请求获取当前链路上所有ip的MAC。
    存在的问题:如果链路中主机过多,频繁广播数据包对信道资源是一种浪费。因此出现了二层设备交换机。当MAC1发送以广播方式发送数据包给MAC2,交换机一开始并不知道MAC2在哪,但是它会记录下MAC的位置,如此反复,交换机会获得所有主机的MAC地址。于是可以准确转发,不用再使用广播。
  2. 多路复用,信道划分。
  3. CRC循环冗余检测。