【网络协议栈】TCP/IP协议栈中重要协议和技术(DNS、ICMP、NAT、代理服务器、以及内网穿透)


每日激励:"请给自己一个鼓励说:Jack我很棒!---Jack"
**绪论​:
本章是TCP/IP网络协议层的完结篇,本章将主要去补充一些重要的协议和了解一些网络中常见的名词,具体如:DNS、ICMP、NAT、代理服务器、以及内网穿透。下面我将还会出一篇总结篇,所以本章其实也并不能完全算的完结篇 hh~,敬请期待吧!

早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。**


1. DNS

  • 现在浏览器中我们使用的是域名(www.baidu.com
  • 但浏览器并不是直接通过域名就能找到对应的网站的,而是通过这个域名去域名服务器转化成 ip 后才去访问的
  • DNS是应用层协议

域名使用: 通过 . 连接

以百度的域名www.baidu.com为例:

  1. com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
  2. baidu: 二级域名, 公司名.
  3. www: 只是一种习惯用法。之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议(www万维网)

域名代替使用ip在url中使用
这样更加的见名之意且容易记住

具体转换如下图:

浏览器中输入url后,发生的事情分俩阶段来聊

  1. 粗力度的回答http请求和应答,必要的时候谈谈https
  2. 和面试官沟通是否需要谈更多的细节

2. ICMP

ICMP协议是一个网络层的协议
它的功能主要下面几点:

  1. 确认IP包是否成功到达目标地址
  2. 通知在发送过程中IP包被丢弃的原因
  3. 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通(也就是通过ICMP协议类似于ping)。
  4. ICMP也是基于IP协议工作的。但是它并不是传输层的功能,因此人们仍然把它归结为网络层协议;
  5. ICMP只能搭配IPv4使用。如果是IPv6的情况下, 需要是用ICMPv6;

大概工作流程如下:

ICMP的报文格式

其中就是通过类型来返回错误信息

类型:

ping命令底层就是通过原始套接字调用ICMP实现的

注意:

  1. 此处 ping 的是域名,而不是url。 一个域名可以通过DNS解析成IP地址。
  2. ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期)。
  3. ping命令会先发送一个 ICMP Echo Request给对端,对端接收到之后, 会返回一个ICMP Echo Reply

一个值得注意的坑:

有些面试官可能会问: telnet是23端口, ssh是22端口, 那么ping是什么端口
ping是没有端口号的,它是基于ICMP的在网络层。而端口号,是用于传输层的。在ICMP中根本就不关注端口号这样的信息,也不会交给一般的上层应用,仅在双方网络层相互交互。

3. NAT技术

之前已经进行过一定的阐述:

  1. 子网中的ip是不会出现在外网(公网)中的,因为为了解决ipv4不够用的情况所以在不同的子网中是允许出现相同的ip的。
  2. 所以源ip在出自己的子网后,会被替换成当前子网的路由器的WAN口IP
    出去在公网中使用:

    通过路由器把源地址替换再继续经过网络达到目的地址
    回来:

    在出去的时候会记录一张转换表,最终回来的时候通过出去是记录的映射关系,就能找到对应的源地址转换回来。

注意:

  1. NAT路由器右侧不一定是公网,可能是运营商的子网(不影响继续转发即可,因为每次转发都有记录转换表就能找到回来的路径)
  2. NAT替换的过程,不仅仅是替换WLAN IP,必要时会替换端口(port冲突时生成一个随机端口然后建立映射)
  3. NAT路由器中可能会映射条目太多这样就会分为:家用路由器、企业级路由器

NAT技术的缺陷

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

  1. 无法从NAT外部向内部服务器建立连接(外网服务器在没有提前被内网服务器访问时无法直接访问内网服务器,因为转换表由内网构建,当没有提前访问时就没有映射外网就无法通过转换表找到主机/服务器)
  2. 转换表的生成和销毁是需要额外开销的
  3. 通信过程中一旦NAT设备异常,所有TCP连接也都会断开。

4. 代理服务器

代理服务器基本操作是:进行网络的转发,客户端将请求发送给代理服务器,代理服务器再将请求转发给目标服务器,并将目标服务器的响应返回给客户端。

4.1 正向代理服务器:

在代理服务器的基础上,正向代理服务器他会将报文进行缓存,并可以进行安全检查。

类似于:学校的校园网是学校通过安装自己的正向代理服务器来进行的,他内置了操作系统对学生的操作以及外部的操作进行一定的管理。

作用:

  1. 对用户的行为进行监控(禁止不正常的行为,有些学校会禁止ssh操作这样你就无法登录你的云服务器)
  2. 对外部网络无法访问学校内部资源,保护内网安全
  3. 对访问过的资源缓存,当再次访问相同资源时就能直接使用不用再去加载

4.2 反向代理服务器

功能:

同样在代理服务器响应功能的基础上,客户端将请求发送给反向代理服务器,反向代理服务器根据请求将其转发给适当的目标服务器(后端服务器),并将目标服务器的响应返回给客户端(对于客户端来说,反向代理服务器就是目标服务器)

其中反向代理服务器能应用于负载均衡模式:

功能:

  1. 合理的使用内网资源(实现负载均衡(也就是所有机器都忙闲一致))
  2. 保护内网
  3. 能添加各种安全防护

5. NAT vs 代理服务器

  1. 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题

  2. 代理服务器则是更贴近具体应用(用于转发), 比如通过代理服务器进行翻墙,另外像迅游这样的加速器, 也是使用代理服务器。

  3. 从底层实现上讲,NAT是工作在网络层,直接对IP地址进行替换。代理服务器往往工作在应用层。

  4. 从使用范围上讲,NAT一般在局域网的出口部署, 代理服务器可以在局域网 做, 也可以在广域网 做, 也可以跨网

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

翻墙原理:

通过访问其他能访问外部资源的主机去访问外部资源,然后在通过这主机将资源返回给自己(中间先访问该主机是合理的,我们将数据进行加密,该主机收到后解密就知道自己要访问的是那了,然后访问后缓存起来加密的再发送回去,最终解密即可)

6. 内网穿透(打洞)

原理:

  1. 云服务器能从运营商中得到想要访问的对方主机的出口路由器的公网ip和端口
  2. 可以把运营商的出口路由器的公网IP和端口作为响应报文的正文,发回给请求方,这样主机就能知道对方公网的出口路由器的信息、同时就为出口路由器建立NAT转化表(为了能进行通信提前做,从而提高效率)。
  3. 所以假设两台主机执行上面操作
  4. 这样主机就能通过运营商得知另外一台主机的出口路由器的公网IP和port
  5. 直接让两台主机直接通信(就能一定的提高效率不再每次都经过广域网)

附:

  • 当多台主机时同样也是行的,当多台主机访问同一台主机的数据(如直播行业)
  • 可以通过frp工具实现(就不扩展了)

本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量计算机网络细致内容,早关注不迷路。

相关推荐
天堂的恶魔9461 小时前
软件测试—— 接口测试(HTTP和HTTPS)
网络协议·http·https
Kasen's experience1 小时前
Ubuntu 24.04 LTS 开启 SMB 服务,并通过 windows 访问
linux·ubuntu
zhj186791306131 小时前
Linux下进程间通信方式 进程间传递文件描述符——sockpair()函数
linux·运维·服务器
里音日黑3 小时前
Elasticsearch 和arkime 安装
linux·运维·服务器·elasticsearch·arkime
IT 青年3 小时前
计算机网络 (49)网络安全问题概述
计算机网络
我是苹果,不是香蕉4 小时前
vim将一行行尾倒数第三个字符替换成1
linux·编辑器·vim
爱吃水果蝙蝠汤4 小时前
DATACOM-华为数通解决方案SDN、iMaster
网络·网络协议·学习·tcp/ip·华为
Kasen's experience4 小时前
Ubuntu 24.04 LTS 安装 tailscale 并访问 SMB共享文件夹
linux·ubuntu·tailscale
_.Switch5 小时前
FastAPI 应用的容器化与 Docker 部署:提升性能与可扩展性
数据库·python·网络协议·docker·容器·eureka·fastapi
珀佑勒5 小时前
ubuntu24部署openwrt编译环境
linux·运维·服务器