Linux网络 | 理解NATPT, 数据链路层Done

news2025/2/7 17:06:43

        前言:本节内容结束数据链路层, 本节的重要内容有两个:一个是见一个综合性面试题,另一个就是NAT技术NATPT。 那么废话不多说, 开始我们的学习吧!!!

        ps:最好先看一下上一篇再看本节哦:Linux网络 | 进入数据链路层,学习相关协议与概念-CSDN博客

DNS

        域名析服务,实际上我们在访问一个网站的时候,我们真正要访问服务器的是拿着IP地址访问的,但是IP地址不容易记,为了让互联网更容易使用,就有了一套域名解析服务,这套服务就叫的DNS。

域名

        这里以www.baidu.com为例:

  •         .com:一级域名,表示一个企业域名,同级的还有“net”(网络提供商),“org”(非盈利组织)等。
  •         baidu:二级域名 一般都叫做公司名。
  •         www:习惯用法。可以不写。

        这里关于域名有一道面试题:当我输完域名之后,一按回车,就拿到网页的整个过程?

        这道题可以分为三步谈:

  • http的过程 +域名解析
  • https谈一下
  • 谈论细节  

        下面是博主大概说的框架: 

  •         经过域名解析,拿到目标服务器的IP地址,然后浏览器就拿着目标主机的IP地址去进行三次握手。然后进行密钥协商。这些完成之后就可以进行通信,构建http请求,构建http请求的时候就构建它的请求报头,状态行,空行和数据。                                                然后我们的目标主机拿到请求之后,就对客户端进行应答。构建响应报文,构建响应报头,响应状态行,空行,报文。然后根据http的连接将响应报文发给客户端。浏览器得到之后就对得到的报文进行解析,解析之后提取他的正文,对他的正文进行解释,进行渲染工作,就能看到我们看到的网页了。
  •         其实在三次握手完成之后,数据通信之前,双方还要进行密钥协商。 这里就用到了我们之前学到的证书的内容。
  •         谈完应用层, 然后进入传输层。http底层其实都是字节流,我们的请求都是要拷贝到发送缓冲区,由http进行传输控制。http的传输控制策略有很多,什么连接管理,流量控制,拥控制,确认应答,32位字号,超时重传等等。
  •         然后就到了IP层,tcp其实只是来控制传输数据时的可靠和效率。但是真正进行传输数据,进行办事的还是IP层,也就是网络层。在IP层,有子网划分,查路由表,IP分片和组装等等技术确保能够正确的由原主机发送到目标主机。
  •         然后为什么有IP分片和组装就到了数据链路层的Mac帧的内容,Mac有MTU和MSS两个技术倒逼上层的一次发送的报文不能太大。 

ICMP 

        先谈ICMP的作用, 有如下四个性质:

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

        我们细谈ICMP的作用, ICMP有什么用呢?上面的第二条性质是什么意思。假如我们平时使用不适用ICMP协议,那么我们主机A向主机B发送信息,如果发送不过去,那么这个报文就被丢弃了,一段时间后主机A就会超时重传。

        但是如果有ICMP报头封装一层。 那么就会由路由器1返回给主机A一条信息,告诉我们信息不可达。

        就是说IP上面一层报头封装的不是tcp和udp、是ICMP。事实上,其实是有一种原始套接字系统调用的。这个系统调用就能够直接越过tcp、udp,直接封装ICMP报头。以后每台主机在网络层都能查看到ICMP。你给我的是ICMP、返回的也带有ICMP。 

        最后, 也有一个关于ICMP面试题:telnet是23端口ssh是22端口。那么ping是什么端口?

        其实ping命令是基于ICMP,工作在网络层的。而端口号是传输层的内容。在ICMP中根本不关注端口号这样的信息。 

重谈NAT技术 

        在我们之前在IP层讲解NAT技术的时候遗留了一个问题,就是由服务器公网向私网中响应, 如何响应呢?

        首先我们先回忆一下我们的NAT: 

        NAT能够将私有IP对外通信时转为WAN口IP也就是就是一种将私有IP和全局IP相互转化的技术方法。

        很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP。

        全局IP要求唯一,但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;

NATPT 

        
        其实由公网响应私网的根本问题就是在内网当中,如果多态主机都访问同一个外网服务器。那么返回的服务器数据中,其实目的IP都是路由器的WAN口IP。此时, 我们哪一条报文是给哪一台机器的, 就分不清楚了。

        所以,我们的路由器在输出的时候,在路由器内部会生成一张内网的源IP源端口,目的IP目的端口到外网的源IP源端口,目的IP目的端口的映射关系。这张表,我们称为NAT转化表。

         

        比如说今天客户端A,IP地址:10.0.0.10,端口号1025要同目标主机位:163.21.1209,端口号0,最后经过替换之后就将源P替换成了WANIP,然后就会在映射表里面添加一组映射关系。

        然后,其中,对于不管是映射的左边还是右边,如果把他们整体当成一个字串,映射左边的字符宰在内网当中是唯一的,映射右边的字特串在公网中是唯一的——这个的唯一性是由后面的端口号保证的。 

        这个唯一性如何保证,就比如主机B也发送报文,然后经过路由器转化后报文的源IP也变成了WAN口IP。 这时候,端口就不一样了,如果映射表中的上一个数据的端口号是1025,那么这个新转化的报文的源IP端口号中的端口号就一定不能是1025。必须是别的东西,比如1026。 这样就保证了唯一性。 

        综上,NAT在替换的时候,不仅仅会替换IP。也会替换端口号.这样就保证了映射表中的键值对是双向的!!即映射双方互为键值!!

        所以,当数据回来的时候,我们的数据就知道是给哪个目的IP,哪个目的端口号。去查键值对,就能锁定内网当中的目标主机了! 

NAT技术的缺陷 

        关于NAT技术的缺陷, 其实我们能感觉出来: 

  • 无法从NAT外部向内部服务器建立连接
  • 装换表的生成和销毁都需要领外开销;
  • 通信过程中一旦NAT设备(即路由器)异常,所有的tcp连接也都会断开。

NAT和代理服务器 

        路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程。

        代理服务器看起来和NAT设备有一点像。客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器;服务器返回结果后,代理服务器又把结果回传给客户端。

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

  •         从应用上讲、NAT设备是网络基础设备之一,解决的是IP不足的问题。代理服务器则是更贴近具体应用,比如通过代理服务器进行翻境,另外像迅游这样的加速器,也是使用代理服务器。
  •         从底层实现上讲、NAT是工作在网络层,直接对IP地址进行替换。代理服务器往往工作在应用层。
  •         从使用范围上讲、NAT一般在局域网的出口部署,代理服务器可以在局域网做,也可以在广域网做,也可以跨网。

 ——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!  

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

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

相关文章

微信小程序~django Petting pets(爱抚宠物)小程序

博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

UE (标识符, meta=())笔记

视频连接: [UFSH2024]UE5(标识符, meta(详解, 史上最全)) | 大钊 Epic Games 虚幻社区经理 参考文档: UE5标识符详解 | 史上最全 UnrealSpecifiers | UE5标识符详解 GitHub 老外整理的标识符文档 标识符 CPP_Default_ParamName(18:22&a…

并发编程 引用类型 原子类 Stamped和Markable atomicMarkableReference表单Ref和标记Markable 面试题

目录 Stamped 和 Markable 的区别 示例代码 所以这个东西是一次性的 从来没听说过 从来没见过 Stamped 和 Markable 的区别 标记号 boolean 一次性的 版本号 整型数 不建议用 Markable 解决 ABA 问题 AtomicMarkableReference 是一个位于 java.util.concurrent.atomic 包中…

绿联NAS安装cpolar内网穿透工具实现无公网IP远程访问教程

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 本文主要介绍如何在绿联NAS中使用ssh远程连接后,使用一行代码快速安装cpolar内网穿透工具,轻松实现随时随地远程访问本地内网中的绿联NAS,无需公网…

【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题

【Ubuntu】ARM交叉编译开发环境解决“没有那个文件或目录”问题 零、起因 最近在使用Ubuntu虚拟机编译ARM程序,解压ARM的GCC后想要启动,报“没有那个文件或目录”,但是文件确实存在,环境配置也检查过了没问题,本文记…

微信小程序~电器维修系统小程序

博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

android 适配 api 35(android 15) 遇到的问题

首先升级 targetSdkVersion 和 compileSdkVersion 到 35,升级后发生的报错 一、 解决方案: 升级 gradle 和 gradle 插件版本 com.android.tools.build:gradle -> 8.3.0-alpha02 gradle-wrapper.properties : distributionUrl -> gradle-8.6-bin.zip htt…

Python Pandas(3):DataFrame

1 介绍 DataFrame 是 Pandas 中的另一个核心数据结构,类似于一个二维的表格或数据库中的数据表。它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由…

Mac电脑上好用的压缩软件

在Mac电脑上,有许多优秀的压缩软件可供选择,这些软件不仅支持多种压缩格式,还提供了便捷的操作体验和强大的功能。以下是几款被广泛推荐的压缩软件: BetterZip 功能特点:BetterZip 是一款功能强大的压缩和解压缩工具&a…

BUUCTF_XSS-Lab

xss XSS(Cross - Site Scripting)即跨站脚本攻击,是一种常见的 Web 安全漏洞。攻击者通过在目标网站注入恶意脚本(通常是 JavaScript),当其他用户访问该网站时,这些恶意脚本会在用户的浏览器中执…

新能源算力战争:为什么AI大模型需要绿色数据中心?

新能源算力战争:为什么AI大模型需要绿色数据中心? 近年来,人工智能(AI)大模型的爆发式增长正在重塑全球科技产业的格局。以GPT-4、Gemini、Llama等为代表的千亿参数级模型,不仅需要海量数据训练,更依赖庞大的算力支撑。然而,这种算力的背后隐藏着一个日益严峻的挑战——…

go gin配置air

一、依赖下载 安装最新,且在你工作区下进行安装,我的是D:/GO是我的工作区,所有项目都在目录下的src, go install github.com/air-verse/airlatest 如果出现类似报错: 将图中第三行 github.com/air-verse/air 替换最…

【C语言系列】深入理解指针(5)

深入理解指针(5) 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1:2.2.2代码2:2.2.3代码3:2.2.4代码4:2.2.5代码5&#…

JVM图文入门

往期推荐 【已解决】redisCache注解失效,没写cacheConfig_com.howbuy.cachemanagement.client.redisclient#incr-CSDN博客 【已解决】OSS配置问题_keyuewenhua.oss-cn-beijing.aliyuncs-CSDN博客 【排坑】云服务器docker部署前后端分离项目域名解析OSS-CSDN博客 微服…

使用 Ollama 在腾讯云服务器环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…

C++ 学习:深入理解 Linux 系统中的冯诺依曼架构

一、引言 冯诺依曼架构是现代计算机系统的基础,它的提出为计算机的发展奠定了理论基础。在学习 C 和 Linux 系统时,理解冯诺依曼架构有助于我们更好地理解程序是如何在计算机中运行的,包括程序的存储、执行和资源管理。这对于编写高效、可靠…

网络安全 | 零信任架构:重构安全防线的未来趋势

网络安全 | 零信任架构:重构安全防线的未来趋势 一、前言二、零信任架构的核心概念与原理2.1 核心概念2.2 原理 三、零信任架构的关键技术组件3.1 身份管理与认证系统3.2 授权与访问控制系统3.3 网络与安全监测系统3.4 加密与数据保护技术 四、零信任架构与传统安全…

告别手动操作!用Ansible user模块高效管理 Linux账户

在企业运维环境中,服务器的用户管理是一项基础但非常重要的任务。比如,当有新员工加入时,我们需要在多台服务器上为他们创建账户并分配合适的权限。而当员工离职或岗位发生变化时,我们也需要迅速禁用或删除他们的账户,…

将Windows下的USB设备共享给WSL(ubuntu)

前言 本文用于学习记录,文中提到的方法也来自于网上资料,如有不对请指出,谢谢! 微软官方参考链接:https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb 如果没有特殊标注,以下命令均在Windows终…

lneaught SyntaxError :lnexpected tokenPIaYE(at chunk 5728.bdff1b31.is:1:1)

1.遇到问题: lneaught SyntaxError :lnexpected tokenPIaYE(at chunk 5728.bdff1b31.is:1:1) 当我部署到nginx上之后,第一次测试 没有啥问题当我点击登录之后,然后测试一个删除按钮之后就爆这个错误。 2.原因分析: 我遇到的是缓…