【网络】网络层和数据链路层详解

基本概念

TCP作为传输层控制协议,其保证的是数据传输的可靠性和传输效率,但TCP提供的仅仅是数据传输的策略,而真正负责数据在网络中传输的则传输层之下的网络层和链路层。
IP协议的本质:提供一种能力,将数据跨网络从A主机送到B主机,即数据的路由。

ip协议报头

在这里插入图片描述

  • 4 位版本号(version):指定 IP 协议的版本,对于 IPv4 来说,就是 4。
  • 4 位首部长度(header length):4 个比特位能够表示的范围是 0(0000)到 15(1111),其单位是 4 字节,也就是说能够表示从 0 到 60 字节。如果 IP 报文没有选项字段,那么 4 位首部长度填写的就是 5(0101)。
  • 8 位服务类型(Type Of Service)3 位优先权字段已经被弃用,4 位 TOS 字段和 1 位保留字段(必须置为0)。4 位 TOS 分别表示:最小延时、最大吞吐量、最高可靠性和最小成本。4 位 TOS 字段表示 IP 报文的转发属性,其中最小延时表示经过转发该报文,不能在路由器上停留太久;而最大吞吐量就是可以对 IP 报文进行一定的累积,以发送更多的数据;最高可靠性就是将该报文转发给可靠性的路径上。这四者相互冲突,只能选择一个。对于 ssh / telnet 这样的应用程序,最小延时比较重要;对于 ftp 这样的程序,最大吞吐量比较重要。
    16 位总长度(total length):表示 IP 数据报整体占多少个字节,有效载荷的字节数等于 16 位总长度减去 4 位首部长度 * 4。
    8 位生存时间(Time To Live, TTL):数据报到达目的地的最大报文跳数。一般是 64,每次经过一个路由,TTL 就要减 1。如果一直减到 0 还没到达,那么就丢弃该报文,这个字段主要是用来防止出现路由循环。
    8 位协议:表示上层协议的类型,即 UDP 协议或 TCP 协议。
    16 位头部校验和:使用 CRC 进行校验,来鉴别头部是否损坏。如果校验失败,那么报文会直接被丢弃,上层的 TCP 协议会对该报文进行重传。
    32 位源地址和 32 位目标地址:表示发送端和接收端的 IP 地址,可以根据目的 IP 地址选择最优的路径来进行数据包转发。
    选项字段:不定长,最多 40字节。
    16 位标识(id):唯一的标识主机发送的报文。如果 IP 报文在数据链路层被分片了,那么每一个片里面的这个 id 都是相同的。
    3 位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为 1 表示禁止分片,这时候如果报文长度超过 MTU,IP 模块就会丢弃报文。第三位表示 “更多分片”,如果分片了的话,最后一个分片置为 0,其他是 1,类似于一个结束标记。
    13 位分片偏移(framegament offset):是分片相对于原始 IP 报文开始处的偏移,其实就是在表示当前分片在原报文中处在哪个位置。

如何将报头和有效载荷分离?

固定长度+自描述字段(首部长度)(同tcp)

  • 16位总长度字段表示整个IP数据报的大小(包括报头和有效载荷)。通过读取这个字段,并减去IP报头的长度(由4位首部长度字段确定),就可以得到有效载荷的大小。
  • 在读取有效载荷后,IP协议会根据报头中的8位协议字段来确定上层协议类型。这个字段表示了有效载荷所使用的上层协议(如TCP、UDP等)。然后,IP协议会将有效载荷传递给相应的上层协议进行处理。

ip网段

  • ip地址由网络号+主机号构成。
  • 路由器本质也是一个子网的主机,也要配置ip地址。
  • 路由器一定要至少连接2个子网,路由器也就相当于在两个子网,因此要配置多个ip。
  • 路由器一般是子网中的第一台设备,一般ip地址是:网络号.1
  • 路由器本身能构建子网,并对子网中的ip进行管理
    在这里插入图片描述

特殊的ip地址

将ip地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。
将ip地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包

私有IP和共有IP

  • 一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
    路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
  • 不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之间的IP地址就可以重复了.
  • 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,
  • 最外层的运营商路由器, WAN口IP就是一个公网IP了.
  • 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换).
    在这里插入图片描述

管理ip地址

  • 管理IP地址采用DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)技术
  • 主要作用就是集中地址管理、分配IP地址,使网络环境中的主机动态获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
  • DHCP是一个基于UDP的应用层协议,一般的路由器都带有DHCP功能,因此路由器也可以看作一个DHCP服务器

当我们连接WiFi时需要输入密码,本质就是因为路由器需要验证你的账号和密码,如果验证通过,那么路由器就会给你动态分配了一个IP地址,然后你就可以基于这个IP地址进行各种上网动作了。

路由

先找目标网络,再找目标主机

当IP要将数据跨网络从一台主机发送到另一台主机时,其实不是直接将数据发送到了目标主机,而是先将数据发送到目标主机所在的网络,然后再将数据发送到目标主机。
因此数据在路由时的第一目的并不是找到目标主机,而是找到目标网络所在的网络,然后再在目标网络当中找到目标主机。
数据路由时之所以不一开始就以找目标主机为目的,因为这样效率太低了。
找主机的过程本质是排除的过程,如果一开始就以找目标主机为目的,那么在查找的过程中一次只能排除一个主机。
而如果一开始先以找目标网络为目的,那么在查找过程中就能一次排除大量和目标主机不在同一网段的主机,这样就可以大大提高检索的效率。

路由表

在这里插入图片描述

  • 如果目的ip命中了路由表,则直接转发到目的ip所在的路由器或终点,如果目的ip与路由表所有条目都不匹配,那么就会转发到默认的下一跳路由器地址。

数据链路层解决的问题

上文提到的将数据从一个路由器转到另一个路由器,从一个节点转到另一个节点,这些工作其实就是ip协议下层的数据链路层所做的工作。其中数据链路层最典型的代表协议就是MAC帧。

MTU

MAC帧作为数据链路层的协议,它会将IP传下来的数据封装成数据帧,然后发送到网络当中。但MAC帧携带的有效载荷的最大长度是有限制的,也就是说IP交给MAC帧的报文不能超过某个值,这个值就叫做最大传输单元(MaximumTransmission Unit,MTU),这个值的大小一般是1500字节。

MTU对udp的影响

  • 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报.
  • 这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败. 那么这就意味着, 如果UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了。

MTU对tcp的影响

  • TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size);(存在于tcp报文的选项字段)
  • TCP在建立连接的过程中, 通信双方会进行MSS协商.(通常在握手时通过syn的选项字段发送给对面)
  • 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU).
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.
  • 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.MSS的值就是在TCP首部的40字节变长选项中(kind=2);

分片和组装

  • 数据的分片不是经常需要做的,实际在网络通信过程中不分片才是常态,因为数据分片会存在一些潜在的问题,比如分片可能会增加丢包的概率。
  • 数据的分片和组装发生在IP层,不仅源端主机可能会对数据进行分片,数据在路由过程中的路由器也可能对数据进行分片。因为不同网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU小,那么路由器就可能对IP数据报再次进行分片。
  • 分片数据的组装只会发生在目的端的IP层。
  • 在分片的数据中,每一个分片在IP层都会被添加上对应的IP报头,而传输层添加的报头只会出现在第一个分片中,因此网络中传输的数据包可能没有传输层的报头。

以太网

在这里插入图片描述

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

通信过程简述(主机A与主机B通信)

主机A发送mac帧到局域网中,局域网所有设备包括自己都能收到。主机A收到该MAC帧后,可以对收到的MAC帧进行CRC校验,如果校验失败则说明数据发送过程中产生了碰撞,此时主机A就会执行碰撞避免算法,后续进行MAC帧重发。
主机B收到mac帧后,提取mac帧的目的地址发现与自己相同,则进行解包去掉报头交付给上次ip协议。局域网中的其他主机收到该MAC帧后,也会提取出MAC帧当中的目的地址,但发现该目的地址与自己的MAC地址不匹配,于是就会直接将这个MAC帧丢弃掉。

ARP协议(局域网协议)

在这里插入图片描述

硬件类型指链路层的网络类型,1为以太网。 协议类型指要转换的地址类型,0x0800为IP地址。
硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的。 协议地址长度对于IP地址为4字节,因为IP地址是32位的。
op字段为1表示ARP请求,op字段为2表示ARP应答。

  1. 协议属于mac帧上层,但是归属到数据链路层。作用是根据IP地址来获取目标主机的MAC地址,即建立ip和mac的映射关系。
  2. 在arp过程中,收到任何的arp报文,都是先看op。如果是请求在arp层丢弃不符合目标ip的报文,如果是应答在数据链路层直接丢弃不符合mac地址的报文。
  3. 路由器先构建arp请求,然后向下交付给mac帧协议,封装mac帧报头。
  4. 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
  5. 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
  6. 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
    参考该篇博客

工作流程

  1. 当发送方需要目标设备的 MAC 地址时,会在局域网中广播一个 ARP 请求数据包。该数据包包含了发送方的 IP 地址和 MAC 地址,以及目标设备的 IP 地址。ARP 请求的目标 MAC 地址设置为广播地址(全 FF:FF:FF:FF:FF:FF),使得所有设备都能收到该请求。
  2. 接收到 ARP 请求的设备会检查请求中的目标IP地址,如果与自己的 IP 地址匹配,就会发送一个 ARP 响应数据包。该响应包含了自己的 IP 地址和 MAC 地址,作为响应发送方的回应。ARP 响应是点对点的,只会发送给请求方。
  3. 地址缓存:发送方收到 ARP 响应后,会将目标 IP 地址和对应的 MAC 地址建立映射关系,并将其存储在本地的地址缓存中。这样,发送方以后就可以直接使用目标设备的 MAC 地址进行通信,而无需再进行 ARP 请求。

ICMP协议

是一个网络层协议。
一个新搭建好的网络需要一个简单测试来验证网络是否通畅,但是ip协议并不提供可靠传输。如果丢包了,ip协议并不能通知传输层是否丢包以及丢包的原因。

功能

确认IP包是否成功到达目标地址. 通知在发送过程中IP包被丢弃的原因. ICMP也是基于IP协议工作的. 但是它并不是传输层的功能,
因此人们仍然把它归结为网络层协议; ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;

  • 28
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值