天天看点

网路基础Ⅲ(网络层 | 数据链路层)网络层数据链路层其他重要协议或技术操作系统与网络关系

文章目录

  • 网络层
    • IP报头
    • IP分片
    • 网段划分
    • 私有IP地址和公网IP地址
    • 路由
  • 数据链路层
    • 认识以太网
    • 以太网帧格式
    • MAC地址和IP地址
    • ARP 数据包格式
  • 其他重要协议或技术
    • DNS
    • ICMP协议
    • ping命令
    • NAT技术
    • 代理服务器
  • 操作系统与网络关系![在这里插入图片描述](https://img-blog.csdnimg.cn/25f10f29c3274b159e667d8e8375a487.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATHVtb3NK,size_20,color_FFFFFF,t_70,g_se,x_16)

HTTP解决:构建与解析request && response ->recieve && send

TCP解决:可靠性,效率,什么时候发送,发多少,怎么发。

IP:端到端(主机A到B之间)、点到点(主机A到下一跳路由器),将数据经过路径选择,送达到对方主机的过程。

网络层

在复杂的网络环境中确定一个合适的路径。

路由查找的基本过程:是先找到目的网络,再找到目的主机。

找到目标主机所在的局域网,然后在局域网内部进行报文转发,找到目标主机。

主机:配有IP地址,能够判断报文是发给别人的还是发给自己的

路由器:即配有IP地址, 又能进行路由控制

节点:主机和路由器的统称

网路基础Ⅲ(网络层 | 数据链路层)网络层数据链路层其他重要协议或技术操作系统与网络关系

真正进行网络传输的是IP,TCP只是为IP提供策略服务。

IP给通信双方提供了一种能力——将数据从A主机跨网络送到B主机的能力。

TCP信息是会裹挟到IP里的,TCP本身提供的是一些策略性的东西,真正在网络上跑的是IP报文。

IP为我们提供了这种能力,但有能力不一定能做到,有可能出现IP报文丢包等情况,这时TCP帮助重传。曾经的超时重传可以理解为,重传的是一个一个的IP报文,在TCP里面重传的是一部分数据,数据在重传时要向下层交付,向下层交付就要裹上IP的报头,所以认为重传的是IP报文。

IP报文不怕丢失,因为一旦丢失上层TCP必会知道。

路由器是工作在网络层的,当一个硬件工作在哪一层时,指的是它工作在当前的层及其以下的层。

IP地址在公网(在整个对外开放的互联网中)当中标识互联网中唯一一台主机。

IP报头

网路基础Ⅲ(网络层 | 数据链路层)网络层数据链路层其他重要协议或技术操作系统与网络关系
  • 4位版本号:指定IP协议的版本,对于IPv4来说,就是4。
  • 4位头部长度:IP头部的长度是多少个32bit, 也就是 length*4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节。
  • 8位服务类型:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个。
  • 16位总长度:IP数据报整体占的字节数。
  • 16位标识:唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了, 那么每一个片里面的这个ID都是相同的。
  • 3位标志字段:第一位保留,第二位置为1,表示禁止分片, 这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",0的时候表示最后一个分片。
  • 13位分片偏移:是分片相对于原始IP报文开始处的偏移。
  • 8位生存时间:数据报到达目的地的最大报文跳数。 一般是64,每次经过一个路由就-1,一直减到0还没到达,就被丢弃了。主要是用来防止出现路由循环。如果没有该字段,会导致网络中充满大量的,短期之内不会消散的游离报文。
  • 8位协议:表示上层协议的类型。
  • 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏。
  • 32位源地址和32位目标地址:表示发送端和接收端。

IP分片

因为MAC地址在底层的数据包转发过程中有一个最大长度的要求,当上层的IP报文向下层MAC帧交付的时候,如果超过了MTU,最终就要让IP进行分片。

MTU= IP报头+有效载荷

  • 比如 (按标准报头)

    MTU = 1500字节

    IP要向MAC传3000字节

    3000 = 20(报头)+ 2980(有效载荷)

    如果分成两片:20+1480 20+1480

    1480+1480 = 2960 != 2980 ,因此是少传了20字节

    因此应该分成三片——20+1480 20+1480 20+20

只要一分片,就要考虑组装的问题

TCP并不知道IP分片了,只有IP自己知道,TCP给了IP一个报文,不管IP分了几片,都要在对端接收时接收一个IP报文,因为序号和确认序号只有一个,发送端向下交付时是一个,那么传到接收端,向上交付时也必须是完整的一个。

TCP也不需要知道IP分片了,IP要做到分片和组装对TCP是透明的。

  • 要怎么组装?

    在接收端把那些经过分片的报文挑出来

    把属于同一组的归类起来

    把同一组的所有分片再按顺序组装起来。

3位标志字段:是否分了片(1位)

16位标识:区分是哪个主机给我发的分片

13位片偏移:根据片偏移进行排序,可以把那些分片按顺序组装起来

倘若有丢失的报文,可以直接确定丢失的是哪一个。

但只要丢了一个,TCP会认为整个都丢了,因此会把整个报文全都重传。

  • 怎么判断接收的是分了片的报文?

    分片到达结尾:3位标志字段的最后一位表示着是否到达了结尾(结束标记)

    只要分了片,除了第一个分片,剩下所有分片的片偏移都不为0,且第一个分片的分片标志位一定是1。只要满足这两个条件的任何一个,就是分片。

网段划分

IP 地址可以分为五类

网路基础Ⅲ(网络层 | 数据链路层)网络层数据链路层其他重要协议或技术操作系统与网络关系

这种划分方案具有局限性,大多数组织都会申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址。因此提出了新的划分方案,叫做CIDR。

引入一个额外的子网掩码来区分网络号和主机号,子网掩码也是一个32位的正整数,将IP地址和子网掩码进行 “按位与” 操作,得到的结果就是网络号。网络号和主机号的划分与这个IP地址是A类、B类还是C类无关。

IP地址和子网掩码有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255。

特殊的IP地址

将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。

将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。

127.*的IP地址用于本机环回测试,通常是127.0.0.1

CIDR在一定程度上缓解了IP地址不够用的问题,提高了利用率,减少了浪费,但是IP地址的绝对上限并没有增加。

私有IP地址和公网IP地址

IP被分为,私有IP地址和公网IP地址。

私有IP地址:这个IP地址是绝对不会出现在公网当中的,只会在私网当中被单独使用。

  • 私网IP是不允许出现在公网当中的,那局域网的主机怎么和公网的服务器进行通信?

子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP。这种技术称为NAT,网络地址转换。

一个路由器可以配置两个IP地址,一个是WAN口IP(对内),一个是LAN口IP(对外)

NAT可以解决IP地址不足的问题。

路由

分为两个阶段:通过查找路由表找到目的网络;根据目标网络找到目标主机的过程。

路由的过程,就是这样一跳一跳"问路" 的过程.

所谓 “一跳” 就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。

数据链路层

认识以太网

数据包在路径当中究竟是怎么转的?

IP解决的是从主机A跨网络经过路径选择到主机B的问题,跨网络前提还是得路由选择一跳一跳的走,这个过程是一个宏观的抽象的过程,具体真正办事的还得从底层的协议去做,这种底层保证两个主机通信的协议叫做以太网协议。

在同一网段进行通信的协议叫做以太网,以太网所在的层为数据链路层。

以太网通信当中,任何一个时刻,只允许有一个主机向另一台主机进行数据通信。

局域网的资源是大家共享的,想占有这份资源的计算机很多,因此局域网可以被称为多个主机之间的临界资源,这就出现了局域网的争用问题。一旦发送碰撞,就要触发碰撞避免算法。整个局域网可以称之为一个碰撞域,为避免发生碰撞,每一台主机都要在发消息前进行冲突检测,检测冲突,冲突避免。

  • 交换机:工作在数据链路层
  • 作用:划分碰撞域,减少碰撞的概率;转发数据帧。

以太网帧格式

网路基础Ⅲ(网络层 | 数据链路层)网络层数据链路层其他重要协议或技术操作系统与网络关系
  • 那么,当一个主机和其他主机进行通信时,如何知道局域网内其他主机的MAC地址呢?

ARP协议:在局域网内有效,通过某种地址找另一种地址,在数据链路层。

广播的过程叫做ARP请求,而对应主机发出响应叫做ARP应答。

MAC地址是一直在变的,IP地址是一直不变的,所以要先把IP地址转成MAC地址。先广播,广播的时候目的MAC地址填全1,源MAC地址填本机,MAC帧内部带有ARP协议,里面一定包含目的IP地址,所有主机都拿到这个数据帧,都处理,因此都向上交付,因为是广播发送,所以其他主机都认为是发给自己的,于是会回复给发消息主机一个响应,该响应会填上自己的MAC地址。

MAC地址和IP地址

IP地址描述的是路途总体的起点和终点。

MAC地址描述的是路途上的每一个区间的起点和终点。

MAC地址只能在局域网内使用的根本原因:IP报文跨网络经过路由器,重新进行解包和封包,因此采用的接口是会变化的,所以MAC地址就有可能发生变化。一个路由器至少有两个接口,从A口进B口出,MAC地址一定会发生变化。

ARP 数据包格式

网路基础Ⅲ(网络层 | 数据链路层)网络层数据链路层其他重要协议或技术操作系统与网络关系

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。

硬件类型指链路层网络类型,1为以太网;

协议类型指要转换的地址类型,0x0800为IP地址;

硬件地址长度对于以太网地址为6字节;

协议地址长度对于和IP地址为4字节;

op字段为1表示ARP请求,op字段为2表示ARP应答

  • 当主机A想要给主机B发消息时,如何通过ARP让主机A知道主机B的mac地址?
网路基础Ⅲ(网络层 | 数据链路层)网络层数据链路层其他重要协议或技术操作系统与网络关系

其中,op字段为1表请求,为2表响应。

所有主机在接收到A发来的ARP请求后,首先分离MAC帧,都向上交付到ARP协议层(属于MAC协议的一部分),先提取op,判断ARP是请求还是响应,发现是ARP请求,再看目的IP地址。B发现目的IP与自己的相符,其余主机发现不符,丢弃,B对A做出应答。

A收到后,首先看op,发现是ARP响应,随后拿到B的mac地址。

因为MAC地址短期内不会发生变化,因此可以用ARP找到其他主机的MAC地址,将这些信息缓存起来。

在Linux中,指令

arp -a

,可以查看局域网内主机间IP地址和MAC地址之间对应的映射关系

其他重要协议或技术

DNS

DNS是一整套从域名映射到IP的系统,应用层协议。

ICMP协议

ICMP协议是一个网络层协议。

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

ICMP正是提供这种功能的协议,主要功能包括:

确认IP包是否成功到达目标地址;

通知在发送过程中IP包被丢弃的原因;

ICMP也是基于IP协议工作的,但是它并不是传输层的功能,因此人们仍然把它归结为网络层

ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要是用ICMPv6。

ICMP大概分为两类报文:一类是通知出错原因;一类是用于诊断查询

ping命令

ping命令基于ICMP,是在网络层。 端口号是传输层的内容,在ICMP中根本就不关注端口号这样的信息。因此ping命令没有端口号。

NAT技术

NAT技术是当前解决IP地址不够用的主要手段,是路由器的一个重要功能。

代理服务器

正向代理用于请求的转发

反向代理往往作为一个缓存

操作系统与网络关系
网路基础Ⅲ(网络层 | 数据链路层)网络层数据链路层其他重要协议或技术操作系统与网络关系

继续阅读