Linux:NAPT等其他补充内容

Linux:NAPT等其他补充内容

NAPT:

在IP协议章节,我们谈论过NAT,NAT是将源私有地址不断替换成公有地址以实现多台设备共享一个公网IP访问互联网的技术。而我们一直没谈论过当报文返回时,如何准确识别并转发给原始请求设备的问题。我们好像不知道它到底是怎么返回给正确主机的。

根据TCP协议我们在封装报文时候会携带上自己的源端口与目的端口。因此在路由器中会维护一张表,该表会记录私有IP、源端口与目的IP及映射端口的对应关系,该表就是NAPT。

私有IP+端口=内网中唯一一个进程,而公有IP+端口=全网中唯一一个进程 ,所以该表的两个数据都是互为键值

在报文的发送与应答中,报文每经过一个路由器,路由器就会为该报文构建NAT映射关系并将源端口与映射端口进行绑定,同时记录对应的私有IP地址。当外部响应报文返回时,路由器依据目的端口号查找NAT表,找到对应的内部私有IP与原始端口,进而将数据准确转发至发起请求的设备。

NATP本质上仍是基于地址与端口的双重映射实现数据流的精确导向。

正反向代理

正向代理:

假设我们现在在用校园网上网,并且我们所发送的数据都会先经过学校的服务器,再往外网发送数据。假设我们同学想看一些电源资源,从外网请求到学校服务器,那么学校服务器会将该电影资源缓存到服务器中,如果下次还有同学想看该电影,那么学校服务器就会直接将缓存的电影数据发送给你,就不需要经过外网,可以大大提高效率。同时,学校服务器还能对访问内容进行过滤和管理,所以使用校园网上网时,学校是能够知道你想访问什么数据。

反向代理:

当我们在访问某个大型网站时,会先将请求发送给该网站的反向代理服务器,由它将请求分发到后端多个实际服务器中的某一台。这么做能有效减轻后台服务器的负载压力,反向代理服务器能够保持负载均衡。

假设没有反向代理服务器,当多个服务器请求同时发起访问,假设服务器出现问题,让所有请求都只请求其中一个服务器,那么就构成了旱的旱死,涝的涝死的场面,最终可能会导致服务器崩溃挂掉。

科学上网:

我们知道在国内是不允许访问谷歌等一些国外的网站的,那么此时就会用到一些特殊的软件,那么这种软件的原理是什么呢?

当我们想要科学上网的时候,我们就必须安装一些软件,该软件的代理服务器一般会安装在合法的地方如中国香港,而中国香港地区又是不受国内运营商的管束因此在当地可以自由访问境外网站。

所以当我们下载完软件后,想要访问目标网站时,该请求会先被该软件截取,截取后通过算法加密,形成一个目标合理合法的请求,其目标IP就是该软件所在的中国香港的代理服务器。当服务器拿到该请求后,就会通过密钥进行解密,解密后还原出原始请求的目标地址,再由代理服务器代为访问境外网站,并将获取的响应数据重新加密后传回本地。整个过程中,本地网络仅看到与合法地区的加密通信,无法识别真实访问内容,从而绕过网络监管。该机制依赖于代理服务器的地理位置与加密通道的隐蔽性,实现对受限资源的安全访问。

内网穿透:

我们知道一个大型一些的公司都会有自己内网,方便管理。假设我作为公司员工正在休假,但此时leader打电话过来说,你这里有一个需求需要改一下,今天下班前发给我。如果我正在外地,我总不可能马上飞回公司。所以此时就能使用我们的内网穿透技术。

内网穿透本质是从一个内网访问到另一个内网的过程。想要进行内网穿透就必须要用到一个服务器,云服务也可以。在公式的主机电脑里部署fpc客户端,同时在云服务器上部署fpc服务端。Fpc绑定自己主机的ssh端口与fpc端口并与fps服务器建立连接。

此时我从家里使用主机访问云服务器的fpc服务端,请求会通过已建立的隧道转发至公司内网主机,进而通过ssh远程登录完成代码修改。整个过程无需暴露内网真实IP,也无需开启公网访问权限。

交换机:

交换机是工作在数据链路层的设备,负责在局域网中转发数据帧,通过MAC地址识别设备并建立转发表,但这些都不是重点。当在给局域网内的主机连接上交换机的网线后,当局域网内的主机在给别的主机发送数据时,交换机就会记录下来该主机是在局域网的左侧还是右侧。

当局域网内的主机增多后,就会出现广播风暴等其他问题,所以交****换机的出现更好的隔离广播域。****假设主机A跟主机B发送数据,那交换机一看,A跟B都在交换机的左侧,因此就不会把报文广播到右侧,从而有效控制广播范围,减少网络拥堵。

一个问题:当web客户端请求服务器时,网络到底做了什么事情(越详细越好)?

首先当web客户端请求服务器时,如果是TCP协议则必须先进行三次握手的链接建立,客户端发送带有SYN的TCP请求报文,该报文里除了会将SYN标志位置为1,还会携带上源端口,目的端口,以及32位确认序列号,并携带上自己的16位窗口大小,为后续滑动窗口进行流量控制做铺垫,但因为SYN请求是不需要携带数据的,所以只有报头大小的20字节。 接着将封装好的TCP报文交付给网络层,由网络层对TCP报文进行IP协议封装,携带上源IP地址与目的IP地址,并填上些固定字段,如4位版本,4字首部长度等。由于是建立连接的请求,所以携带的数据必然不会超过MTU,所以是不需要填写IP报头字段的16位标识,3位标识以及13位片偏移。

当IP协议封装好后就继续交给下层数据链路层,数据链路层会为该报文封装MAC帧,MAC将填写目的MAC地址,这个目的MAC一般为该客户端连接的路由器的MAC地址,以及源MAC地址,因为是IP报文,所以MAC帧里的类型填写0800。

当所有协议封装完成后,报文就会通过网卡发送给路由器,路由器进行拆分报文,通过比对路由表里的IP地址后,得知需要发往哪个路由器就继续封装MAC帧。使用NAT技术,将源主机的MAC地址换成路由器的WAN口地址,将目标MAC地址换成下一个路由器的MAC地址。接着构建NAPT映射关系后进行路由转发。

当转发到目标主机的内网路由器时,因为内网路由器只知道目标主机的IP地址,但不知道MAC地址,所以此时采用ARP协议。广播一个ARP报文给该内网内的所有主机。而每个主机接收到该报文时,第一步是先将该报文进行分离,检查发现目的地址是广播地址,并且帧类型属于0806,即ARP协议类型,于是进一步解析ARP报文内容,解析发现目的IP地址不是自己则丢弃该ARP报文。而如果是目标主机后就会检查OP,发现OP标志位为1表示ARP请求,所以此时会给目的MAC的路由器发送ARP应答,携带上自身的MAC地址。最终路由器获取到该目的主机的MAC地址就能继续封装MAC帧,完成报文发送。

最终目的主机收到该报文后,会一步步进行拆分,从数据连路程开始拆分,解析到是IP协议,于是会继续分用该报文给上一层网络层。IP协议报头里还有8位协议的属性,表示上层协议类型,这里上层协议类型为TCP协议,所以会继续分用给传输层。当传输层收到TCP请求后发现SYN标志位为1,表示有客户端需要与我建立连接请求。此时服务器就会发送SYN+ACK的捎带应答,携带上自身端口号与木雕端口号给下一层以此类推,当发送回给客户端时,因为在路由过程中建立了许多NAT映射,所以该应答一定能准确发送给目标客户端。

如果客户端在请求的后的一定时间内没有收到应答,则会判断丢包,并进行超时重传或快重传。

如果成功建立三次握手则开始正式发送数据通过应用层的HTTP协议,客户端发起HTTP Request,封装请求方法,URL等各种属性。当服务器从报文中读取整个HTTP协议后就需要对该协议进行反序列化,得知客户端想要请求什么类型的数据,并进行处理。处理完成后需要形成HTTP Respones,填写HTTP版本,状态码以及描述,还有各种属性,如返回的的是HTML格式还是jpg等格式,接着携带上正文内容后对HTTP Respones进行序列化,并通过socket交付给操作系统,由操作系统自主向下封装交付。

相关推荐
知识分享小能手1 小时前
CentOS Stream 9入门学习教程,从入门到精通, CentOS Stream 9中的文件和目录管理(3)
linux·学习·centos
Sally_xy1 小时前
使用 Jenkins
运维·jenkins
提笔忘字的帝国1 小时前
解决“该jenkins 实例似乎已离线“的问题
运维·jenkins
摸鱼仙人~1 小时前
VMware配置从开始踩坑总结-2025最新
linux·ubuntu
m0_555762901 小时前
USB的理解
网络
做咩啊~1 小时前
CentOS 7部署OpenLDAP+phpLDAPadmin实现统一认证
linux·运维·centos
^乘风破浪^1 小时前
Centos升级openssh及openssl
linux·运维·centos
满天星83035771 小时前
【Linux】【进程间通信】管道
linux·运维·服务器
赖small强1 小时前
【Linux驱动开发】Linux EXT4文件系统技术深度解析与实践指南
linux·驱动开发·ext4·superblock·super block·block bitmap·inode bitmap