网络基础3-1(细谈IP协议头, 网络层,子网划分,路由选择,数据链路层,以太网帧格式,MAC地址,再谈ARP协议)

IP协议

IP协议头格式

在这里插入图片描述

  1. 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4
  2. 4位头部长度(header length): IP头部的长度是多少个。32bit, 也就是 length * 4 的字节数. 4bit表示大 的数字是15, 因此IP头部大长度是60字节
  3. 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位 TOS分别表示: 最小延时, 大吞吐量, 高可靠性, 小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet这样的应用程序, 小延时比较重要; 对于ftp这样的程序, 大吞吐量比较重要.
  4. 16位总长度(total length): IP数据报整体占多少个字节. 64K
  5. 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个 id都是相同的.
  6. 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁 止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 后一个分片置为1, 其他是0. 类似于一个结束标记
  7. 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了后一个报文之外, 其他报 文的长度必须是8的整数倍(否则报文就不连续了).
  8. 8位生存时间(Time To Live, TTL): 数据报到达目的地的大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
  9. 8位协议: 表示上层协议的类型
  10. 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
  11. 32位源地址和32位目标地址: 表示发送端和接收端.
  12. 选项字段(不定长, 多40字节): 略

网络层

功能:地址管理与路由选择

路由选择

在复杂的网络传输中对数据的传输选择一条合适路径

IP地址不能随意分配,因为随意分配就有很大概率造成IP地址冲突(数据无法发送)
解决方法:将IP地址的分配规范起来
每个路由器都能够组建一个局域网,这个局域网就应该具有自己的网络标识(网络号),这个路由器向自己组建的局域网中的主机分配的IP地址都应该包含这个网络标识
同时为了在局域网中,能够唯一标识一个主机,IP地址中还应该包含主机标识(主机号)
IP地址的组成:网络号+主机号
IP地址的分配规范起来后,只需要对网络号的取值进行规范就可以了,相邻的网络不能具备相同的网络号
一个路由器上相连的所有网络网络号不能相同,因为这些网络都属于相邻网络,数据到了路由器上之后,一旦网络号冲突就会导致路由器不知道数据该给谁

网段的划分

IP地址分为两个部分, 网络号和主机号

  1. 网络号: 保证相互连接的两个网段具有不同的标识;
  2. 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

早期将IP地址划分为五类

  1. A类 0.0.0.0到127.255.255.255
  2. B类 128.0.0.0到191.255.255.255
  3. C类 192.0.0.0到223.255.255.255
  4. D类 224.0.0.0到239.255.255.255
  5. E类 240.0.0.0到247.255.255.255

随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就 分配完了, 而A类却浪费了大量地址;

  1. 例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.
  2. 然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.

现在的网段划分

CIDR(Classless Interdomain Routing):
  1. 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  2. 子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾;
  3. 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;
  4. 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;
示例

有一个网络ip:192.168.122.132,netmask:255.255.255.0;现在要将这个网络平均划分为四个子网,请问每个子网ip地址范围以及子网掩码
解:

	通过ip地址和子网掩码得到的原网络的主机号个数:256
	通过ip地址和子网掩码得到原网络的网络号192.168.122.0
	平均划分四个子网,则每个子网主机号个数64个;0~63 就是00111111按位取反
	子网掩码 = 255.255.255.192
	192.168.122.0 ~ 192.168.122.63   255.255.255.192
	192.168.122.64 ~ 192.168.122.127 
	192.168.122.128 ~ 192.168.122.191
	192.168.122.192 ~ 192.168.122.255

注意事项

  1. 相邻的网络不能具有相同的网络号
  2. RFC1918规定,能够用于组建私网的网段,只有以下几种网段:
10.*.*.*   172.16.*.* ~ 172.31.*.*  192.168.*.*
特殊的ip地址
  1. 主机号全为1的IP地址:192.168.122.132 255.255.255.0 局域网的udp广播地址 例如:192.168.122.255
  2. 主机号全为0的IP地址:网络号—标识一个网络 例如:192.168.122.0
  3. 每一个局域网中,这两个主机号是不能分配给主机的,意味着主机号虽然有256个,但是能够分配给主机的只有254个
  4. 127.0.0.1 本地回环网卡地址----虚拟网卡地址—用于本机内的网络回环测试

注意事项

  1. 一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
  2. 路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
  3. 不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之 间的IP地址就可以重复了
  4. 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 外层的运营商路由器, WAN口IP就是一个公网IP
  5. 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级 替换, 终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换).
  6. 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服 务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

路由选择

  1. 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  2. 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  3. 依次反复, 一直到达目标IP地址
    在这里插入图片描述
    在这里插入图片描述
    那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表;

路由表

在这里插入图片描述

  1. 路由表可以使用route命令查看
  2. 如果目的IP命中了路由表, 就直接转发即可;
  3. 路由表中的后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配 时,就按缺省路由条目规定的接口发送到下一跳地址

链路层

功能:负责相邻设备结点之间的数据帧传输;eth–以太网协议;交换机

以太网

  1. “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的 内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  2. 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
  3. 以太网是当前应用广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

以太网帧格式

在这里插入图片描述

  1. 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的
  2. 2字节上层协议类型
  3. 帧协议类型字段有三种值,分别对应IP、ARP、RARP
  4. 帧末尾是CRC校验码。

MAC地址:

物理网卡设备的硬件地址 uint8_t mac[6],负责定位相邻的设备

  1. MAC地址用来识别数据链路层中相连的节点;
  2. 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  3. 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址).

MTU–最大传输单元

在这里插入图片描述
MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

  1. 以太网帧中的数据长度规定小46字节,大1500字节,ARP数据包的长度不够46字节,要在后面补填充 位;
  2. 大值1500称为以太网的大传输单元(MTU),不同的网络类型有不同的MTU;
  3. 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分 片(fragmentation);
  4. 不同的数据链路层标准的MTU是不同的;
MTU对IP协议的影响

由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.

  1. 将较大的IP包分成多个小包, 并给每个小包打上标签
  2. 每个小包IP协议头的 16位标识(id) 都是相同的;
  3. 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是 后一个小包, 是的话置为1, 否则置为0);
  4. 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层
  5. 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据
MTU对UDP协议的影响
  1. 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.
  2. 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在 网络层被分片, 整个数据被丢失的概率就大大增加了
  3. udp传输过程中,任意一个分片出问题,整个数据包都会被丢弃,分片越多,危险越高
  4. 因此udp数据包在应用层都需要由用户根据mss分割成合适的大小

一个报文最大大小64K包含ip头部 udp头部数据大小不能超过64K - 20 - 8

udp数据大小 mtu < size < 64K - 20 - 8 就会在网络层进行数据分片,到了对端就会进行分片重组
在这里插入图片描述

MTU对TCP协议的影响

  1. TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的大消息长度, 称为MSS(Max Segment Size);
  2. TCP在建立连接的过程中, 通信双方会进行MSS协商
  3. 理想的情况下, MSS的值正好是在IP不会被分片处理的大长度(这个长度仍然是受制于数据链路层的 MTU).
  4. 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值
  5. 然后双方得知对方的MSS值之后, 选择较小的作为终MSS
  6. MSS的值就是在TCP首部的40字节变长选项中(kind=2);
  7. MSS–最大报文段大小—实际的最大数据大小:MTU-IP头部-TCP头部1500 - 20 - 20 = 1460

ARP协议

ARP协议的作用

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.

  1. 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
  2. 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢 弃;
  3. 因此在通讯前必须获得目的主机的硬件地址;

ARP协议格式在这里插入图片描述

  1. 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况 是多余的,但如果链路层是其它类型的网络则有可能是必要的
  2. 硬件类型指链路层网络类型,1为以太网;
  3. 协议类型指要转换的地址类型,0x0800为IP地址;
  4. 硬件地址长度对于以太网地址为6字节
  5. 协议地址长度对于和IP地址为4字节;
  6. op字段为1表示ARP请求,op字段为2表示ARP应答

ARP协议的工作流程

  1. 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
  2. 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
  3. 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如 果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
为什么要有缓存表? 为什么表项要有过期时间而不是一直有效?

在以太局域网内数据包传输依靠的是MAC地址,IP地址与MAC对应的关系依靠ARP表,每台安装有TCP/IP协议的主机(包括网关)都有一个ARP缓存表。该表中保存这网络中各个电脑的IP地址和MAC地址的对照关系。
ip地址动态分配,上一次保存的关系就失效了,所以保存时间不会很长

局域网的ARP攻击

你给我一个请求,我不是你的请求对象,但是我还是给了你的响应信息,然后你就把数据发给我了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值