计算机网络--数据链路层

news2024/12/21 17:15:15

                     

        今天来讲网络协议栈的最后一层,数据链路层(物理层我们不考虑了),我们之前学到,TCP协议提供了数据传输的可靠性,IP层决定数据报从哪到哪,那么数据报是如何从一个结点到下一个结点呢?得到相应如何返回呢?接下来博主讲解它们。下一篇博客博主将更新多路转接的知识博客了,再接下来就是关于数据库的操作,期待大家的关注~

目录

认识以太网

以太网帧格式

认识MAC地址

对比理解MAC地址和IP地址

认识MTU

MTU对UDP协议的影响

MTU对于TCP协议的影响

MSS和MTU的关系

ARP协议

为什么要有ARP协议?

ARP数据报的格式

ARP协议的工作流程

NAT技术

NAT技术背景

NAT IP转换过程

NAPT

NAT技术的缺陷

NAT和代理服务器

那么NAT和代理服务器的区别有哪些呢?

正向代理服务器

正向代理服务器

翻墙原理

检测一个子网中上网的私有IP

总结

数据链路层--数据帧

网络层--数据报

传输层--数据段

应用层--request/response


认识以太网

"以太网" 不是一种具体的网络, 而是一种技术标准;

既包含了数据链路层的内容, 也包含了一些物理层的内容.

例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

以太网帧格式

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

认识MAC地址

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

对比理解MAC地址和IP地址

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

在数据报不断转发的过程中,目的IP是不会改变的,源IP地址可能会发生改变(NAT技术)。

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

在数据帧报头中,每经过一个区间,源地址和目的地址是一直改变的。

注意:

        虽然MAC地址在全球范围内表示唯一,但是我们并不用MAC地址代替IP去查找主机,事实上,MAC用于子网内主机匹配搜索,不用于跨网络搜索。

认识MTU

MTU相当于发快递时对包裹尺寸的限制。 这个限制是不同的数据链路对应的物理层, 产生的限制

1、以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;

2、最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
3、如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);

4、不同的数据链路层标准的MTU是不同的。

MTU对UDP协议的影响

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

MTU对于TCP协议的影响

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

MSS和MTU的关系

查看硬件地址和MTU:

ARP协议

虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;

为什么要有ARP协议?

会不会存在这样的一个场景:

       数据从一个跳到下一个路由器时,路由器是配有下一个路由器的MAC地址,但是当跳到目标主机所在的局域网中,主机B的MAC地址是没法直接获取的,那么数据就没办法再次转发了,这时候就需要用一种手段来获取主机B的MAC地址,来打破僵局。 

所以ARP技术可以解决这个问题。

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

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

ARP数据报的格式

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

帧类型:是上面的数据帧报头里面的字段
硬件地址长度:对于以太网地址为6字节;
协议地址长度:对于和IP地址为4字节;
op字段:为1表示ARP请求,op字段为2表示ARP应答。

ARP协议的工作流程

请求:

        以太网目的地址首先是不知道的,所以先填充全F,代表在这个局域网内广播式传播。每台主机都会收到这个报文,然后解包向上交付,进行匹配。

       当主机B收到ARP请求报头时,首先分析OP字段,这时候收到的是1,说明是请求报头。然后对比其中的目的IP地址,如果和自己的IP地址是匹配的,那么该主机就会发送ARP报文交给主机A,告诉主机A自己的MAC地址。

响应:

       主机B响应主机A的时候,这次不再是以广播的形式发送报文,因为这时候是知道目标主机的MAC地址,这时候主机B直接把ARP报文交给主机A。 

      主机A首先检测报文中OP字段是几,这时候是2,说明它是应答报文,接着再匹配目的IP地址是否和自己匹配(这一步也可以没有),接着就可以拿到MACB地址了。

为什么不直接匹配IP地址,而是要先匹配OP字段?

因为一个主机在同一时间内可能收到多个报文,首先要区分哪些是应答报文,哪些是请求报文,如果是请求报文,这时候主机还要发送OP为2的ARP应答报文;如果是应答报文,就接着发送IP数据报文了。

NAT技术

NAT技术背景

之前我们讨论了, IPv4协议中, IP地址数量不充足的问题
NAT技术当前解决IP地址不够用的主要手段, 是路由器的一个重要功能

NAT能够将私有IP对外通信时转为全局IP。 

也就是就是一种将私有IP和全局IP相互转化的技术方法:
很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的

NAT IP转换过程

NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10;
在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;
当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系 

NAPT

         那么问题来了, 如果局域网内, 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中, 目的IP都是相同的。 那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了. 使用IP+port来建立这个关联关系

        事实上,数据报每次经过一次路由转发时,都会自动维护上面的那张表,每对映射关系互为键值,通过一侧,可以唯一的查找到另一个映射关系,这个特性和map有些像,可以类比来理解。 

        这样的话,当数据报返回时,只需要不断地查找表中映射关系,就可以不断确定返回路径。放心,每个键值对在自己的局域网中是具有唯一性的,不会出现重复的情况。

注意,这个表在路由器中并不会一直保存,一般是有时间限制的。

不难理解,每个设备连入局域网时,私有IP是会发生改变的,这样路由器维护的映射表就没有意义了。

NAT技术的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:

无法从NAT外部向内部服务器建立连接;
装换表的生成和销毁都需要额外开销;
通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开

NAT和代理服务器

        路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程。代理服务器看起来和NAT设备有一点像。 客户端向代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端

那么NAT和代理服务器的区别有哪些呢?

1、从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器。

2、从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
3、从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网.

4、从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上.

代理服务器是一种应用比较广的技术

翻墙: 广域网中的代理.
负载均衡: 局域网中的代理

代理服务器又分为正向代理和反向代理

正向代理服务器

我们在校园内使用校园网上网,入网前,我们都会先进性身份认证。

          我们在上网时,我们上网请求并不是直接请求服务器,而是首先把请求交给代理服务器,代理服务器进行检测,看请求是否正常后,再把请求交给服务端,服务端把响应交给代理服务器,然后再返回给客户端。

这样有什么好处呢?

1、身份认证

也就是说只有本校人可以访问学校校园网,这样就避免过多外界人访问,造成网络拥塞。

2、加速内网服务

如果在一个时间段内一个电影访问量特别多,这时候代理服务器就会在内部缓存一份,当再次有请求访问这个资源时,代理服务器就直接将缓存的资源给客户端,这样大大提高了内网服务效率。

3、可以对访问内网的请求进行筛选

校园内有很多小白用户,可能不小心点击恶意网站,这时候代理服务器就会对client的请求进行检测,如果是非法请求,那么就可以终止掉,进而保护了client。

正向代理服务器

多用于企业端。

        客户端发起大量请求,并不是直接发送给公司内网的服务器,而是先交给代理服务器,然后代理服务器根据公司各服务器的负载情况进行甄别,将服务均匀的交给服务器进行业务处理。 

这样有什么好处呢?

1、负载均衡的将请求交给后台主机

代理服务器根据后端每台机器的负载情况,进行业务转发,较为均匀的将请求打散到每台主机上。

2、安全

避免了公司内网主机直接暴露的风险,同时代理服务器也可以拦截很多恶意请求。

翻墙原理

        事实上,我们上面的做法就是骗过运营商来访问外网。如果我们访问qq,我们的请求先被运营商拿到,经过域名解析,发现IP地址是国内合法网站,于是请求建立成功,响应当然也是同样的过程。 

        当我们访问外网时,肯定不能直接去访问,因为经过运营商域名解析后,发现目标IP不是国内网站,于是就直接终止请求了。所以我们要把请求交给一种客户端软件,将我们的请求发送给能够访问外网的服务器(比如港澳台服务器),在中间,运用商拿到了我们的报文,经过解析,发现我们访问的是(假如: )111.11.1.1的IP,是合法的,当然,运营商会对我们的访问内容进行检测,这时候我们在自己的客户端把数据进行加密,不能让运营商检测出来。这时候部署的能访问外网的代理服务器解密数据(秘钥协商阶段就拿到了双方对称秘钥),根据我们的请求访问外网,把数据返回给客户端时,也是这样的过程。

客户端的大致经历过程:

检测一个子网中上网的私有IP

我们在这里纯属是为了玩,不为别的~

#!/bin/bash

sb_net='192.168.0.';
cnt=1

while [ $cnt -le 255 ]
do
  echo "ping $sb_net$cnt"
  ping -c1 $sb_net$cnt &

  let cnt++
done
[cyq@VM-0-7-centos test]$ chmod u+x find_arp.sh 

 部分截图:

总结

数据链路层--数据帧

1、数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
2、以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;

3、以太网帧格式
4、理解mac地址

5、理解arp协议
6、理解MTU

网络层--数据报

1、网络层的作用: 在复杂的网络环境中确定一个合适的路径.

2、理解IP地址, 理解IP地址和MAC地址的区别.
3、理解IP协议格式.

4、了解网段划分方法
5、理解如何解决IP数目不足的问题, 掌握网段划分的两种方案. 理解私有IP和公网IP

6、理解网络层的IP地址路由过程. 理解一个数据包如何跨越网段到达最终目的地.
7、理解IP数据包分包的原因.(受限于数据链路层MTU的大小)

8、了解ICMP协议.
9、了解NAT设备的工作原理

传输层--数据段

1、传输层的作用: 负责数据能够从发送端传输接收端.

2、理解端口号的概念.
3、认识UDP协议, 了解UDP协议的特点.
4、认识TCP协议, 理解TCP协议的可靠性. 理解TCP协议的状态转化.

5、掌握TCP的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性.
6、理解TCP面向字节流, 理解粘包问题和解决方案.
7、能够基于UDP实现可靠传输.
8、理解MTU对UDP/TCP的影响

应用层--request/response

1、应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
2、能够根据自己的需求, 设计应用层协议.

3、了解HTTP协议.
4、理解DNS的原理和工作流程

看到这里,给博主点个赞吧~

                    

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

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

相关文章

(02)Cartographer源码无死角解析-(09) gflags与glog简介、及其main函数讲解

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

软件工程结构化设计

目录 结构化分析与结构化设计的关系: 体系结构设计概念: 图形工具: 层次图:调用关系​编辑 HIPO图:层次图IPO图 软件结构图: 软件设计原则: 模块化: 模块划分注意事项&#xf…

巴什博弈——范围拿物品问题

巴什博弈 巴什博弈(Bash game) 是一个双人博弈:有一堆总数为n的物品,2名玩家轮流从中拿取物品。每次至少拿1件,至多拿m件,不能不拿,最终将物品拿完者获胜。 巴什博弈除了两人轮流按一定数量拿物…

【黄啊码】MySQL入门—14、细说数据库的MVCC机制

大家好,我是黄啊码。上一篇文章中,我们讲到了锁的划分,以及乐观锁和悲观锁的思想。今天我们就来看下 MVCC,它就是采用乐观锁思想的一种方式。那么它到底有什么用呢? 我们知道事务有 4 个隔离级别,以及可能…

共谋韬略、共巢未来,电巢与韬略“战略合作签约仪式”圆满举办!

前言 2022年10月27日下午,电巢科技与韬略科技齐聚深圳南山,共同举办了隆重的战略合作签约仪式,双方就整合核心资源、共同打造高质量数字化内容等战略方针达成了一致,携手开启合作新篇章。 电巢科技和韬略科技基于相契合的发展战略…

Numpy基础教程

1 Numpy 对象2 Numpy创建numpy.array 构造器来创建numpy.emptynumpy.zerosnumpy.onesnumpy.arangeNumpy索引3 Numpy常用操作numpy.reshapenumpy.reshape(arr,newshape,order C)numpy.transposenumpy.expand_dimsnumpy.squeezeNumpy功能十分强大的python扩展库,数学…

基于Java+Springboot+Vue+elememt美食论坛平台设计实现

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取联系🍅精彩专栏推荐订阅👇&#x1f…

07-树(Tree)结构分析

文章目录树(Tree)结构分析什么是树?树中的相关名词如何理解?什么是二叉树?什么是二叉搜索树?什么是AVL树?什么是2-3树?什么是红黑树?总结(Summary)树(Tree)结构分析 什么…

【飞桨PaddleSpeech语音技术课程】— 语音识别-流式服务

FastAPI websocket 流式语音识别服务 0. 背景 流式语音识别(Streaming ASR)或者在线语音识别(Online ASR) 是随着输入语音的数据不断增加,实时给出语音识别的文本结果。与之相对的是非实时或者离线语音识别,是传入完整的音频数据,一次给出整…

ppocrlabel简单教学

前言 给我们小白成员的快速上手ppocrlabel的指南 1. ppocr环境配置 建议是先创建一个虚拟环境 【直接参考】:https://blog.csdn.net/weixin_42708301/article/details/119864744 2. ppocrlabel环境安装 【参考文档】PaddleOCR-release-2.6\PPOCRLabel\README_c…

将STM32 内部Flash虚拟成优盘,进行IAP升级

书接上回,上篇文章已经成功的将 STM32 内部FLASH虚拟成优盘进行文件存储了。 【将 STM32 内部Flash虚拟成优盘】https://blog.csdn.net/qq_44810226/article/details/127508789 然后我们开始固件升级流程: 从上图可以看出,固件存储的位置是不…

Python-代码封装思想

继上文所将讲的pythonrequestsUnittest框架,本文将继续分享python代码的进一步封装思想,来提高代码的整体运行效率及整洁性,本文以接口测试框架为例进行讲解。 关于Unittest单元测试框架的具体使用方法链接链接(点击跳转&#xf…

MMEngine理解

MMEngine理解1 简介1.1 架构1.2 模块介绍1.2.1 核心模块与相关组件1.2.1 公共基础模块2 上手示例2.1 构建模型2.2 构建数据集和数据加载器2.3 构建评测指标2.4 构建执行器并执行任务3. 基础模块3.1 注册器(Registry)3.1.1 什么是注册器3.1.2 使用流程3.1…

OSPF路由协议(二)

作者介绍: ⭐️作者:小刘在C站 ❄️每天分享课堂笔记,一起努力,共赴美好人生! ☁️夕阳下,是最美的绽放。 目录 一.Router id 二.DR,BDR 三.DR BDR 选举过程 四.ospf 度量值 cost 代价 五.ospf 的数据…

部署vue项目到阿里云服务器

一般前端工程师只会使用npm run serve 在开发环境下验证,那么如何把npm run build 打出的包部署到服务器上进行上线呢?这篇文章就详细阐述这一流程。 1. 购买或试用阿里云服务器 作为新用户可以试用一个月阿里云服务器,阿里云官方网址如下&a…

【数据结构与算法分析】0基础带你学数据结构与算法分析07--二叉树

在学习上一章后,我们对树加以限制,如果树的度为 2,那么就称这颗树为 二叉树 (binary tree)。 二叉树的性质 在一棵二叉树上,有一些重要的性质: 第 i 层 (i∈N) 上最多有 2^(i−1) 个结点层次为 k(k∈N) 的树最多有 …

进程地址空间

目录 程序地址空间 感知虚拟地址空间的存在 进程地址空间 分页 & 虚拟地址空间 Linux2.6内核进程调度队列 程序地址空间 我们在学习C语言的时候了解过程序地址空间的分布: 需要注意的是:程序地址空间不是内存。我们在linux操作系统中通过代码来…

刷题笔记之二(字符串中找出连续最长的数字串+数组中出现次数超过一半的数字+另类加法+计算糖果+进制转换)

目录 1. 多层继承问题 2. 继承中子类的构造要引用super 3. 比较地址 4. 字符串中找出连续最长的数字串(编程题) 5. 数组中出现次数超过一半的数字(编程题) 6. 另类加法(编程题) 7. Interface 接口中定义方法 8. 实现或继…

C语言学习(二)之字符串和格式化输入/输出

文章目录一、字符串二、 输入2.1 scanf()作用2.2 两种用法三、输出3.1 printf()3.1.1 printf 四种用法3.1.2 常用输出控制符3.1.3 为什么需要输出控制符一、字符串 字符串是一个或多个字符的序列。如:“Hello World” 双引号不是字符串的一部分。仅告知编译器它括…

【学习笔记】《深入浅出Pandas》第16章:可视化

文章目录16.1 plot方法16.1.1 plot概述16.1.2 plot基础方法16.1.3 图形类型16.1.4 x轴和y轴16.1.5 图形标题16.1.6 字体大小16.1.7 线条样式16.1.8 背景辅助线16.1.9 图例16.1.10 图形大小16.1.11 色系16.1.12 绘图引擎16.1.14 图形叠加16.1.15 颜色的表示16.1.16 解决图形中的…