• 极客时间趣谈网络协议第一模块 通信协议综述 总结


    这个图贯穿全部

    只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。

    linux 查询ip地址:

    net-tools工具命令:ifconfig

    iproute2工具命令:ip addr

    如上输出的结果,192.168.31.122 就是一个 IP 地址。这个地址被点分隔为四个部分,每个部分 8 个 bit,所以 IP 地址总共是 32 位。

    在 IP 地址的后面有个 scope,对于 eth0 这张网卡来讲,是 global,说明这张网卡是可以对外的,可以接收来自各个地方的包。对于 lo 来讲,是 host,说明这张网卡仅仅可以供本机相互通信。

    这样产生的 IP 地址的数量很快就不够用了。因为当时设计 IP 地址的时候,哪知道今天会有这么多的计算机啊!

    因为不够用,于是就有了 IPv6,也就是上面输出结果里面 inet6 fe80::73a7:cc11:2993:f162/64。这个有 128 位,现在看来是够了,但是未来的事情谁知道呢?

    下面这个表格,详细地展示了 A、B、C 三类地址所能包含的主机的数量

     这里面有个尴尬的事情,就是 C 类地址能包含的最大主机数量实在太少了,只有 254 个。当时设计的时候恐怕没想到,现在估计一个网吧都不够用吧。

    而 B 类地址能包含的最大主机数量又太多了。6 万多台机器放在一个网络下面,一般的企业基本达不到这个规模,闲着的地址就是浪费。

    上表有私有ip地址这一栏、一般自己用就用C类的也就是192.168.xxx.xxx 作为私有ip就够用了,公有ip一般是A类得买。

    无类型域间选路(CIDR)

    无类型域间选路(CIDR)于是有了一个折中的方式叫作无类型域间选路,简称 CIDR。这种方式打破了原来设计的几类地址的做法,将 32 位的 IP 地址一分为二,前面是网络号,后面是主机号。

    从哪里分呢?你如果注意观察的话可以看到,192.168.31.122/24,这个 IP 地址中有一个斜杠,斜杠后面有个数字 24。这种地址表示形式,就是 CIDR。后面 24 的意思是,32 位中,前 24 位是网络号,后 8 位是主机号。

    伴随着 CIDR 存在的,一个是广播地址,192.168.31.255。如果发送这个地址,所有 192.168.31 网络里面的机器都可以收到。

    另一个是子网掩码,255.255.255.0。将子网掩码和 IP 地址进行 AND 计算。

    前面三个 255,转成二进制都是 1。1 和任何数值取 AND,都是原来数值,因而前三个数不变,为 192.168.31。

    后面一个 0,转换成二进制是 0,0 和任何数值取 AND,都是 0,因而最后一个数变为 0,合起来就是 192.168.31.0。这就是网络号。将子网掩码和 IP 地址按位计算 AND,就可得到网络号。

    MAC 地址

    一个网络包要从一个地方传到另一个地方,除了要有确定的地址,还需要有定位功能。 而有门牌号码属性的 IP 地址,才是有远程定位功能的。

    IP 地址是一个网卡在网络世界的通讯地址,相当于我们现实世界的门牌号码。是找到范围的。

    在 IP 地址的上一行是  link/ether 2c:f0:5d:ed:7f:f4 brd ff:ff:ff:ff:ff:ff,这个被称为 MAC 地址,是一个网卡的物理地址,用十六进制,6 个 byte 表示。

    MAC 地址更像是身份证,是一个唯一的标识。

    所以,MAC 地址的通信范围比较小,局限在一个子网里面。例如,从 192.168.0.2/24 访问 192.168.0.3/24 是可以用 MAC 地址的。一旦跨子网,即从 192.168.0.2/24 到 192.168.1.2/24,MAC 地址就不行了,需要 IP 地址起作用了。

    网络设备的状态标识

    我们再来看 <broadcast,multicast,up,lower_up>是干什么的?这个叫做 net_device flags,网络设备的状态标识。

    mtu 1500 :最大传输单元 MTU 为 1500,这是以太网的默认值。MTU 是二层 MAC 层的概念。MAC 层有 MAC 的头,以太网规定正文部分不允许超过 1500 个字节。正文里面有 IP 的头、TCP 的头、HTTP 的头。如果放不下,就需要分片来传输。

    qdisc pfifo_fast 是什么意思呢?qdisc 全称是 queueing discipline,中文叫排队规则。内核如果需要通过某个网络接口发送数据包,它都需要按照为这个接口配置的 qdisc(排队规则)把数据包加入队列。

    最简单的 qdisc 是 pfifo,它不对进入的数据包做任何的处理,数据包采用先入先出的方式通过队列。pfifo_fast 稍微复杂一些,它的队列包括三个波段(band)。在每个波段里面,使用先进先出规则。

    三个波段(band)的优先级也不相同。band 0 的优先级最高,band 2 的最低。如果 band 0 里面有数据包,系统就不会处理 band 1 里面的数据包,band 1 和 band 2 之间也是一样。数据包是按照服务类型(Type of Service,TOS)被分配到三个波段(band)里面的。TOS 是 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 link set up eth1

    动态主机配置协议(DHCP) 

    动态主机配置协议(Dynamic Host Configuration Protocol),简称 DHCP。如果是数据中心里面的服务器,IP 一旦配置好,基本不会变,这就相当于买房自己装修。DHCP 的方式就相当于租房。你不用装修,都是帮你配置好的。你暂时用一下,用完退租就可以了。

    当一台机器新加入一个网络的时候,只知道自己的 MAC 地址。怎么办?

    新来的机器使用 IP 地址 0.0.0.0 发送了一个广播包,目的 IP 地址为 255.255.255.255。广播包封装了 UDP,UDP 封装了 BOOTP。其实 DHCP 是 BOOTP 的增强版,但是如果你去抓包的话,很可能看到的名称还是 BOOTP 协议。

    这一步,我们称为 DHCP Discover

    如果一个网络管理员在网络里面配置了 DHCP Server 的话,他就相当于这些 IP 的管理员。当一台机器带着自己的 MAC 地址加入一个网络的时候,MAC 是它唯一的身份,IP 管理员知道这是一个新人,需要租给它一个 IP 地址,这个过程我们称为 DHCP Offer。同时,DHCP Server 为此客户保留为它提供的 IP 地址,从而不会为其他 DHCP 客户分配此 IP 地址。

    它会选择其中一个 DHCP Offer,一般是最先到达的那个,并且会向网络发送一个 DHCP Request 广播数据包,包中包含客户端的 MAC 地址、接受的租约中的 IP 地址、提供此租约的 DHCP 服务器地址等,并告诉所有 DHCP Server 它将接受哪一台服务器提供的 IP 地址,告诉其他 DHCP 服务器,谢谢你们的接纳,并请求撤销它们提供的 IP 地址,以便提供给下一个 IP 租用请求者。

    此时,由于还没有得到 DHCP Server 的最后确认,客户端仍然使用 0.0.0.0 为源 IP 地址、255.255.255.255 为目标地址进行广播。在 BOOTP 里面,接受某个 DHCP Server 的分配的 IP。当 DHCP Server 接收到客户机的 DHCP request 之后,会广播返回给客户机一个 DHCP ACK 消息包,表明已经接受客户机的选择,并将这一 IP 地址的合法租用信息和其他的配置信息都放入该广播包,发给客户机,欢迎它加入网络大家庭。

  • 相关阅读:
    EF ObjectQuery查询及方法
    Entity Framework --Entity SQL注意事项
    EF中Entity SQL用法
    Navicat for Oracle设置唯一性和递增序列
    Oracle添加自增长字段方法步骤
    MVC5项目中添加Wep API
    C#版 Winform界面 Socket编程 Client客户端
    C#版 Winform界面 Socket编程 Server服务器端
    给缺少Python项目实战经验的人
    python模块之collections
  • 原文地址:https://www.cnblogs.com/xcgShare/p/15897494.html
Copyright © 2020-2023  润新知