网络层和数据链路层的理解

news2024/11/13 20:29:05

文章目录

    • 网络层
      • IP协议
      • 网段划分
        • IP地址数量问题
        • NAT技术
        • DNS
        • ICMP协议
    • 数据链路层
        • 以太网
        • MTU的影响
        • ARP协议

网络层

作用: 在网络环境中确定消息传输的路径。
主要协议: IP协议。

IP协议

IP协议的基本概念:凡是入网的机器都会有一个IP地址,用来表示该台机器在网络中的标识。

  • 路由器:配有IP地址
  • 主机:配有IP地址,但是不进行路由控制的叫主机。(我们用的电脑手机等都是主机,现在的电脑也可以当路由器。)

协议格式: 在之前的TCP/IP四层协议力说过,其实每一层传输信息都需要对应的 报头来区分数据。IP协议也有。
请添加图片描述
4位版本号:标识IP协议的版本,对IPV4而言就是4,IPV6就是6.
4位首部长度:用来标识标识IP头部的长度,其单位是4个字节,而4个比特位最大是15,因此对应的最大长度就是60字节
8位服务类型(type of service ): 3位优先权字段(已经不再使用),4位TOS字段,和一个保留字段(必须置为0)。4个位分别是 最小延时,最大吞吐量,最高可靠性,最小成本。四者只可选其一,因为是互斥的,根据不同的应用类型来选择。
**16位总长度:**表示整个报文的长度
16位标识: 如果IP报文在数据链路层被分片,同一份IP报文的这个分片的标识ID应该相同。
**3位标记字段:**第一位是保留字段,第二位为1,表示禁止分片,如果这个时候长度超过MTU(数据链路层的最大传输单元),报文直接丢弃。第三位表示更多分片,就是说如果有分片就会做一个标记。
**13位分片偏移:**就是说这份IP报文分片时是相对于最初的那个分片的偏移量,便于后面组装报文。
16位校验和:用于CRC进行校验,鉴别头部是否损坏。

为什么IP报文要有上述校验和等字段,在后面的数据链路层会提及。

网段划分

先来认识IP地址的。
IP地址分为两个部分,网络号和主机号

  • 网络号:保证互相连接的两个网段的不同标识
  • 主机号:同一网段内,不同的主机具有相同的网段号,但是主机号必须不同。
    通过上面的描述,你可能也猜出来。
    网段划分:其实就是将一个大的IP网络分为多个小的网络,这些子网络之间用于标识的就是网段号。

子网:子网的构成就是将网络号的主机放在到一起,但是主机号不同就构建成了子网。子网中若新增主机,那么不允许主机号和其他主机重复。
这时候你可能有疑问?你说你平时看见IP地址有何别人一样的是为什么,但是明显那些主机不在同一个网络。这个设计一个NAT技术,后面再提。

曾有A-E类网络地址的划分方法,但是其对于如今网络世界弊端过于严重,几乎少有那种说法。这里给出其地址范围。

  • A类 0.0.0.0到127.255.255.255
  • B类 128.0.0.0到191.255.255.255
  • C类 192.0.0.0到223.255.255.255
  • D类 224.0.0.0到239.255.255.255
  • E类 240.0.0.0到247.255.255.255

现在普遍使用的是CIDR,方案也就是上面提出子网的来源。

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

如果你曾查看过Linux的IP或者windows下的IP都会发现有一个子网掩码,将你的IP地址按位与上你的子网掩码就能得到你的主机号。
比如下面
在这里插入图片描述
** 特殊的IP地址:**

  • 如果在一个网段之中,其中的IP地址之中的主机号全是0,那么这个IP地址就是该网段的网络号,代表了这个局域网
  • 如果在一个网段之中,IP地址的主机号全是1,那么该IP地址往往用于作为广播地址,用来给相互连接的主机发送数据包。(这里不理解没关系,后面的数据链路层有解释)
  • 127.*的IP地址往往用于本机环流测试,一般用127.0.0.1
    在这里插入图片描述
IP地址数量问题

IPV4是一个32位整数,那么只有43亿左右的地址数量,而根据TCP/IP协议每一台主机都要有自己的IP地址。(早期互联网是够的,但目前看来完全不够,手机,联网等手表都需要IP地址)

CIDR在一定程度上缓解了上面问题,但是没有实际上起到好的效果(毕竟可用IP数没变)
一般有如下解决方案

  • 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;
  • NAT技术
  • IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及;

目前而言,IPV6技术并没有大面积普及,大多数多是靠前两个方案来解决问题。

NAT技术

私有IP地址和公网IP地址如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址

10.*,前8位是网络号,共16,777,216个地址
172.16.到172.31.,前12位是网络号,共1,048,576个地址
192.168.*,前16位是网络号,共65,536个地址
包含在这个范围中的, 都成为私有IP, 其余的则称为全局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乐,也就是云服务器之类的服务。

路由:在复杂的网络结构中,找到从源主机到目的主机找到一条路线,的过程就是路由。
当IP数据包, 到达路由器时, 路由器会先查看目的IP;
路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
依次反复, 一直到达目标IP地址。至于具体算法,那就涉及图等计算,这里不多做解释。

我们知道,IPV4地址是严重不足的,既然如此IPV4没有被淘汰呢?原因就是NAT技术。

NAT:能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法
比如你的windows 电脑的地址就是,192.168.184.128的地址,那么其通过你路由器转换之后,在往上一层传输时,IPV4的地址可能就变成了182.168.1.123了。在每次做这个的时候,你的路由器都给你做一张表,说192.168.184.128这个地址,是甲主机的,当对方有数据发过来。他家把数据转发给你即可。如此不断操作直到公网之间的主机互相交换数据即可。

如果你理解了上面的问题,不妨来看看这个。我们知道一个子网里面往往不止一个主机吧,那当不止一个主机需要访问公网的同一台主机又该如何呢?
NAPT:NAPT技术就是解决这个问题的,不同的客户端访问公网机器时,用我这个路由器不同的端口去访问即可。当公网的那台主机返回数据到不同的端口,我再将其发回不同的主机就行。

NAT技术真就完美了?
答案并不是,NAT依赖上述的转换关系,也就是你的路由器都得有对应的功能来实现这个NAT转换技术。
同时实现NAT转换不需要消耗路由器的性能吗?
再来就是一旦NAT设备,比如路由器出故障,那我所有连接于此的设备全部TCP连接都会断开,(相当于与是路由器和外面的机器连接起来的,而你是与路由器连接的)

同时还有一个伴随问题就是NAT穿越问题,我们知道TCP连接理论上建立的链接时对等的,但是这往往导致我们很难从公网中访问我们的私网里的设备。因为IP地址和PORT都被更改过,同时由于动态IP分配的技术,可能每次都在变化,这样就导致访问私网设备很困难。

NAT技术虽然使得公网访问私网难,但是也让一些问题变得容易,比如公司的服务器群,就让一个单独的服务器来做公网收发数据,由此能形成很好的隔离性。

DNS

DNS(Domain Name System):是一整套从域名映射到IP的系统。
在我们显示生活中,我们访问网站的时候,几乎很少说我要访问哪个IP地址,这样不好记住,也很麻烦,因此就有了域名.
域名: 主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.
com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等.
baidu: 二级域名, 公司名.
www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议

一开始呢,主机名是用 hosts(如果有小伙伴改过windows上的hosts文件) 文件记录域名和IP地址的对应关系。
这就类似一个电话簿,我每次想要和哪个主机联系查IP地址就好了。但是网络中主机太多了,我每次都要更新电话簿未免给用户的成本过高了。
因此就有了DNS。就是专门的机构来做这个域名解析工作,而你每次上网访问网站的时候呢,你就直接访问那个机构的域名解析,他呢就给你返回IP地址了。比如我们国家的114.114.114.114就是常用的域名解析站点。

ICMP协议

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

ICMP正是提供这种功能的协议; ICMP主要功能包括:
确认IP包是否成功到达目标地址.
通知在发送过程中IP包被丢弃的原因.
ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;
既然是一个协议,定然也有其对应报文,这里不做过多介绍。
我们常常使用的ping 命令就是基于这个ICMP协议的。

数据链路层

以太网

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

以太网的帧格式
在这里插入图片描述
源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
帧协议类型字段有三种值,分别对应IP、ARP、RARP;
帧末尾是CRC校验码

从以太网的帧格式我们可以看出,最长只能有1500字节的数据,然而前面IP报文最长可是远超这个数据量。这也是为什么IP报文会有16位标识符和13位偏移量等。
而这个以太网数据帧所限制的大小,称之为MTU(以太网最大传输单元),这个实际上时物理层产生的限制,而并非数据链路层的问题。

MTU的影响

MTU对IP层的限制:
前面IP报头有16位标识符和13位偏移量等,就是因为一个IP报文可能依次没办法直接发送完全,这就导致需要将一个IP报文拆成多个发给对方主机。而这些16位标识符,和13位偏移量就是便于对方主机收到被拆开的IP报文来重新组装的。

注意:IP报文太长被拆开后,每一个拆开的IP报文都是有完成的IP报头的。这也就导致下面的计算情况。
一个IP报文3000字节长,MTU是1500字节,那么要分成多少个IP报文呢?
答案:3个。因为每一个新的被拆开的IP报文都要有报头,报头至少20字节。因此拆开之后,需要 额外的报头。

MTU对UDP协议的影响
我们知道UDP是管发不管到的,也就是说如果UDP协议的数据,大于 MTU-20(ip首部)-8(UDP首部) 的字节数,那么UDP协议的丢包概率就会成倍增加。

MTU对于TCP协议的影响
那么TCP的数据报也不能无节制的的大,肯定也要受限与MTU来使得数据丢失概率降低。而TCP数据报的单个长度称之为MSS(MAX Segment Size)
TCP链接时,通信双方协商过程,实际就进行了MSS协商,来达成这个正好使得IP报文不分割的值。

ARP协议

ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议
作用:ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.

ARP协议帧格式。

字段目的MAC地址源MAC地址类型硬件类型协议类型硬件地址长度协议地址长度操作码发送者硬件地址发送者协议地址目标硬件地址目标协议地址
长度6字节6字节2字节2字节2字节1字节1字节2字节6字节4字节6字节4字节
描述通常为广播地址(FF:FF:FF:FF:FF:FF)发送ARP请求的设备的MAC地址0x0806,表示这是一个ARP帧0x0001,表示网络接口类型为以太网0x0800,表示要映射的协议地址类型为IPv46,表示硬件地址(如MAC地址)的长度4,表示协议地址(如IP地址)的长度1表示ARP请求,2表示ARP应答发送ARP请求的设备的MAC地址发送ARP请求的设备的IP地址在ARP请求中通常为0,因为不知道目标的MAC地址要解析的IP地址

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

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址;
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1977114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机上音乐如何转换成MP3格式?分享5款音频格式转换APP

手机上音乐如何转换成MP3格式?相信很多外出办公或者不经常使用电脑的工作人士,学生党,媒体从业者都有这样的疑惑和需求。不同设备和应用可能支持不同的音频格式,导致某些情况下需要将音乐文件转换为MP3格式以确保兼容性。下面&…

24暑假算法刷题 | Day27 | 贪心算法 I | LeetCode 455. 分发饼干,376. 摆动序列,53. 最大子数组和

目录 455. 分发饼干题目描述题解 376. 摆动序列题目描述题解 53. 最大子数组和题目描述题解 455. 分发饼干 点此跳转题目链接 题目描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i&#x…

【Mind+】掌控板入门教程03 节日的祝福

在节日的时候,我们通常会送朋友或者家人一张贺卡表达美好的祝福。随着科技的发展,我们已经可以通过手机聊天工具发送一封电子贺卡。电子贺卡相当于把祝福做成了一个小动画,它环保方便,生动有趣。今天就让我们用掌控板来制作一份电…

Java | Leetcode Java题解之第318题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; class Solution {public int maxProduct(String[] words) {Map<Integer, Integer> map new HashMap<Integer, Integer>();int length words.length;for (int i 0; i < length; i) {int mask 0;String word words[i];in…

Java | Leetcode Java题解之第319题灯泡开关

题目&#xff1a; 题解&#xff1a; class Solution {public int bulbSwitch(int n) {return (int) Math.sqrt(n 0.5);} }

C++客户端Qt开发——多线程编程(二)

多线程编程&#xff08;二&#xff09; ③线程池 Qt中线程池的使用 | 爱编程的大丙 1>线程池 我们使用线程的时候就去创建一个线程&#xff0c;这样实现起来非常简便&#xff0c;但是就会有一个问题&#xff1a;如果并发的线程数量很多&#xff0c;并且每个线程都是执行…

Java:Thread类以及线程状态

文章目录 Thread类等待一个线程 - join()获取当前线程的引用sleep 线程状态 Thread类 等待一个线程 - join() 操作系统,针对多个线程的执行,是一个"随机调度,抢占式执行“的过程. 线程等待就是在确定两个线程的"结束顺序”. 我们无法确定两个线程调度执行的顺序,但…

找工作,如何写一份好的简历? 附简洁大方的简历模板

一份精心制作的简历对给潜在雇主留下积极的第一印象至关重要。这是你展示技能、经验和成就的第一机会&#xff0c;因此制作一份出色的简历至关重要。下面是一个指南&#xff0c;帮助你创建一份出色的简历&#xff0c;参考一个专业的模板。 1. 联系信息 在简历顶部提供你的联系…

设计模式 - Singleton pattern 单例模式

文章目录 定义单例模式的实现构成构成UML图 单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现 总结其他设计模式文章&#xff1a;最后 定义 单例模式是一种创建型设计模式&#xff0c;它用来保证一个类只有一个实…

MATLAB优化模型(4)

一、前言 在MATLAB中&#xff0c;你可以使用内置的遗传算法(Genetic Algorithm)、模拟退火(Simulated Annealing)等优化工具箱函数&#xff0c;或者编写自定义代码来实现(Ant Colony Optimization, ACO) 蚁群算法和粒子群算法(Particle Swarm Optimization, PSO)。以下是一些基…

日撸Java三百行(day12:顺序表二)

目录 一、关于昨天的补充 1.final关键字 2.toString()方法 二、今日代码实现 1.顺序表的查找操作 2.顺序表的插入操作 3.顺序表的删除操作 4.数据测试 总结 一、关于昨天的补充 1.final关键字 public static final int MAX_LENGTH 10; 在昨天的这行代码中&#xf…

OpenCV||超详细的灰度变换和直方图修正

一、点运算 概念&#xff1a;点运算&#xff08;也称为像素级运算或单像素操作&#xff09;是指对图像中每一个像素点进行独立、相同的操作&#xff0c;而这些操作不会考虑像素点之间的空间关系。点处理优势也称对比度拉伸、对比度增强或灰度变换等。 目的&#xff1a;点运算…

操作系统|day3.锁、I/O多路复用、中断

协程 概念 协程是微线程&#xff0c;在子程序内部执行&#xff0c;可在子程序内部中断&#xff0c;转而执行别的子程序&#xff0c;在适当的时候再返回来接着执行。 优势 协程调用跟切换比线程效率高&#xff1a;协程执行效率极高。协程不需要多线程的锁机制&#xff0c;可…

项目经验分享:用4G路由器CPE接海康NVR采用国标GB28181协议TCP被动取流一段时间后设备就掉线了

最近我们在做一个生态化养殖的项目时&#xff0c;发现一个奇怪的现象&#xff1a; 项目现场由于没有有线网络&#xff0c;所以&#xff0c;我们在现场IPC接入到海康NVR之后&#xff0c;再通过一款4G的CPE接入到天翼云的国标GB28181视频平台&#xff1b;我们采用UDP协议播放NVR…

BERT模型

BERT模型是由谷歌团队于2019年提出的 Encoder-only 的 语言模型&#xff0c;发表于NLP顶会ACL上。原文题目为&#xff1a;《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》链接 在前大模型时代&#xff0c;BERT模型可以算是一个参数量比…

杂记123

(前提已安装了Beyond Compare4)在Everything的文件-右键菜单项里没有Beyond Compare的"选择左边文件进行比较"的现象 进过调查,LZ本机是X64位的,但是安装了x86(32位)的Everything, 切换成X64位的Everything版本就好了

数据结构之《二叉树》(中)

在数据结构之《二叉树》(上)中学习了树的相关概念&#xff0c;还了解的树中的二叉树的顺序结构和链式结构&#xff0c;在本篇中我们将重点学习二叉树中的堆的相关概念与性质&#xff0c;同时试着实现堆中的相关方法&#xff0c;一起加油吧&#xff01; 1.实现顺序结构二叉树 在…

详细测评下搬瓦工香港CN2 GIA VPS

搬瓦工香港VPS分移动CMI和电信CN2 GIA两个大类&#xff0c;一个属于骨干网&#xff0c;一个属于轻负载。搬瓦工的香港CN2 GIA根据测试来看实际上是CN2 GIABGP&#xff0c;并非三网纯CN2 GIA。详细测评数据如下&#xff1a; 用FIO再给测试一下硬盘I/O&#xff0c;可以仔细看看数…

全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

全网最适合入门的面向对象编程教程&#xff1a;31 Python 的内置数据类型-对象 Object 和类型 Type 摘要&#xff1a; Python 中的对象和类型是一个非常重要的概念。在 Python 中,一切都是对象,包括数字、字符串、列表等,每个对象都有自己的类型。 原文链接&#xff1a; Fre…

WebSocket 协议介绍

前言 一.通用协议设计 参考链接 /* --------------------------------------------------------------- | 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte | --------------------------------------------------------------- | 状态 1byte | …