当前位置: 首页 > news >正文

网络原理-TCP/IP(7)

目录

网络层

路由选择

数据链路层

认识以太网

以太网帧格式

认识MAC地址

对比理解MAC地址和IP地址

认识MTU

ARP协议

ARP协议的作用

ARP协议工作流程

重要应用层协议DNS(Domain Name System)

DNS背景

NAT技术

NAT IP转换过程

NAPT

NAT技术的优缺点


网络层

路由选择

这里就需要解决一个数据包,如何从网络中的一个地址,传输到另一个地址.

路由的过程,就是一跳一跳"问路的过程".(摸着石头过河).

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

IP数据报传输的过程也和问路一样

数据报中包含目的IP的字段(问路的目标),每个路由器对于网络环境(和它相邻的设备有所了解),此时就根据它的了解,告诉我们下一步应该往哪走.

当IP数据包,到达路由器时,路由器会先查看目的IP;

路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器;

依次反复,一直达到目标IP地址;

那么如何判定当前这个数据包该发送到哪里呢?这就依靠每个结点内部维护一个路由表;

 

路由表可以使用route命令查看

如果目的IP命中了路由表,直接转发即可;

路由表中的最后一行,主要由下一跳地址(通常是上层路由器)和发送接口(从路由器哪个口出)两部分组成,当目的地址与路由表中其他行都不匹配时,就按缺省路由条目规定的接口 发送到下一跳地址.

假设某主机上的网络接口和路由表如下:

这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络;

路由表的Destination是网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是是发送接口,Flags中U标志标识此条目有效(可以禁用某些条目),G标志标识此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经由路由器转发 

数据链路层

认识以太网

"以太网"不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容.例如:规定网络拓扑结构,访问控制方式,传输速率等;

例如以太网的网线必须使用双绞线;传输速率有10M,100M,1000M等;

以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等; 

以太网帧格式

 如下所示:

源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;(MAC地址表示的范围比IPv4大很多). 

帧协议类型字段有三种值,分别丢应IP,ARP,RARP;

帧末尾有CRC校验码

认识MAC地址

MAC地址用来识别数据链路层中相连的结点;

一般开发中很少使用MAC地址,而IP地址用的很多;

长度为48位,及6个字节,一般用16进制数字加上冒号或"-"的形式来表示,eg.08-00-27-03-fb-19

在网卡出厂时就确定了,不能修改.mac地址通常是唯一的(虚拟机中mac地址不是真实的mac地址,可能会冲突; 也有些网卡支持用户配置的mac地址).

有些程序使用mac地址作为机器的身份标识,比如外挂.

对比理解MAC地址和IP地址

IP地址描述的是路径总体的起点和终点(终极目标),也就是全局转发(从起点到终点,转发过程:查询路由表,通过IP地址).

MAC地址描述的是路途上每一个区间的起点和终点(阶段目标),也就是局部转发(两个相邻设备转发,一个电脑连接一个路由器->相邻).  经过一次转发,路由器/交换机就会把上述数据包进行分用和重新封装.  帧头存放:源mac,目的mac,每次经过一个路由器/交换机就会发生改变.

认识MTU

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

以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;(因为ARP是46字节,而1500字节是硬件限制)

最大值1500称为以太网的最大传输单元(MTU),不同网络类型有不同的MTU;

如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片;

不同的数据链路层标准的MTU是不同的;

之前讲到的IP数据包分包问题正是因为数据链路层MTU的限制,而不是因为自身达到了64kb的限制.

ARP协议

ARP和RARP可以认为是两个横跨了网络层和数据链路层的协议.

ARP效果就是能够让路由器/交换机建立一个内部的结构.通过IP地址映射出MAC地址(利用转发表->描述了一个设备和哪些设备之间是连接着的).(常用)

RARP效果是让路由器和交换机也建立一个内部的结构,通过MAC地址映射出IP地址. (不常用)

ARP协议的作用

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

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;

数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;

因此在通讯前必须获得目的主机的硬件地址.

ARP协议工作流程

重要应用层协议DNS(Domain Name System)

DNS是一整套从域名映射到IP的系统(域名解析系统),(eg.www.google.com这种的就是域名).

DNS背景

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序.但是IP地址不方便记忆.

于是人们发明了一个叫做主机名(域名)的东西,是一个字符串,并且使用hosts文件描述主机名和IP地址的关系.

随着互联网的发展,域名和服务器都越来越多了, 此时要维护hosts文件就非常麻烦了.

就有大佬干脆搭建了一组服务器,来提供域名解析服务(hosts内容放到服务器里了),你某个主机想访问某个域名,就先查询一下域名解析服务器(DNS服务器),查到的结果,就是域名对应的IP,拿着IP进行访问即可.

 DNS是应用层协议

DNS底层使用UDP进行解析

浏览器会缓存DNS结果

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来建立这个关联关系

这种关联关系也是由NAT路由器自动维护的.例如在TCP的情况下,建立连接时,就会生成这个表项;在断开连接时,就会删除这个表项;

NAT技术的优缺点

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

无法从NAT外部向内部服务器建立连接;

转换表的生成和销毁都需要额外开销; 

但是NAT有个最大的优点:不需要更新硬件设备,只更新软件,就可以解决IP地址不够用的问题.

相关文章:

  • 基于MapVGL的地理信息三维度数据增长可视化
  • 网络安全产品之认识蜜罐
  • 第五章:变换矩阵
  • [职场] 会计学专业学什么 #其他#知识分享#职场发展
  • Python访问数据库
  • 【LeetCode: 103. 二叉树的锯齿形层序遍历 + BFS】
  • GPT-4带来的思想火花
  • 开发实体类
  • 28. 找出字符串中第一个匹配项的下标
  • 模型 IPO(输入、处理、输出)学习模型
  • 网络协议与攻击模拟_17HTTPS 协议
  • CTFshow web(文件上传158-161)
  • EXTI外部中断
  • 面试经典150题——螺旋矩阵
  • 下一代Windows系统曝光:基于GPT-4V,Agent跨应用调度,代号UFO
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • canvas 高仿 Apple Watch 表盘
  • centos安装java运行环境jdk+tomcat
  • Effective Java 笔记(一)
  • ESLint简单操作
  • Idea+maven+scala构建包并在spark on yarn 运行
  • in typeof instanceof ===这些运算符有什么作用
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Spring-boot 启动时碰到的错误
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 力扣(LeetCode)357
  • 前端性能优化--懒加载和预加载
  • 驱动程序原理
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 使用SAX解析XML
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信开源mars源码分析1—上层samples分析
  • Mac 上flink的安装与启动
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • (03)光刻——半导体电路的绘制
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (八十八)VFL语言初步 - 实现布局
  • (待修改)PyG安装步骤
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (理论篇)httpmoudle和httphandler一览
  • (十六)串口UART
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • .htaccess配置常用技巧
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET gRPC 和RESTful简单对比
  • /etc/fstab 只读无法修改的解决办法
  • ;号自动换行
  • @JSONField或@JsonProperty注解使用