如何区分HTTP协议的无状态和长连接?

如何区分HTTP协议的无状态和长连接?,第1张

属于无状态类应用有哪些解释如下
无状态应用:StatelessApplication是指并不会在会话中保存下次会话中去要的客户端数据。每一个会话都像首次执行一样,不会依赖之前的数据进行响应。有状态的应用:StatefulApplication是指会在会话中保存客户端的数据,并在客户端下一次的请求中来使用那些数据。有状态:Web请求端的请求必须被提交到保存有其相关状态信息(比如session)的服务器上,否则这些请求可能无法被理解,这也就意味着在此模式下服务器端无法对用户请求进行自由调度。

IPv6根据 MAC地址 自动生成接口地址是属于 IEEE EUI-64标准
具体介绍:

EUI-64
IEEE EUI-64地址表示有一个用于 网络接口 寻址的新标准。

在IPV6中,无状态自动配置机制使用EUI-64格式来自动配置 IPV6地址
无状态自动配置是指在网络中没有 DHCP服务器 的情况下,允许节点自动配置 IPV6地址 的机制。

EUI-64的构造规则--根据接口的 MAC地址 再加上固定的前缀来生成一个IPV6的地址

工作原理:自动将48bit的以太网 MAC地址 扩展成64bit,再组合一个64位的 ipv6地址 前缀,组成一个IPV6地址。(link-local 地址也是依据此原理)

注:对于以太网链路的接口即用自己的MAC地址,对于串口链路和loopback接口会借用设备的以太网口(接口号最小的比如有F0/0,F0/1,那么默认都借用F0/0接的MAC地址)的mac地址进行组合。
转换过程原理:
1、对于一个MAC地址,由两部分组成,24位的公司的ID(由 IEEE 唯一分配),24位公司的扩展ID(公司自己编制),联合产生全球唯一的48位MAC地址(也称IEEE 802 地址),如下:

ccccccUG cccccccc cccccccc xxxxxxxx xxxxxxxx xxxxxxxx
| 24位IEEE分配 || 24位厂商自己编制 |

注:第一字节的第7位称为U/L位,表示此地址是全球管理还是本地管理。如果为0就为全球管理,为1就为本地管理。
第一字节第8位称为I/G为,表示此地址是单播地址还是 组播地址 。如果为0就为单播地址,为1就为 组播地址 。

2、先将此48位MAC地址公司ID和公司扩展ID之间插入特定16位值0xFFFE,形成64位的EUI-64地址,如下:
ccccccUG cccccccc cccccccc 11111111 11111110 xxxxxxxx xxxxxxxx xxxxxxxx
| 24位IEEE分配 | FFFE | 24位厂商自己编制 |

3、再将EUI-64地址的第一字节第7为反转,形成IPV6地址的接口ID,加之IPV6前缀形成完整的IPV6地址。

4、实例:
a,MAC地址为 00-AA-00-3F-2A-1C
b,转换EUI-64为 00-AA-00-FF-FE-3F-2A-1C
c,第一个字节为0000 0000,第7为反转为0000 0010转换16进制为0x02。
d,得到结果为02-AA-00-FF-FE-3F-2A-1C,转换为ip6表示格式为2AA:FF:FE3F:2A1C

服务器端需要安装 nfs-kernel-server 软件包:
$ sudo apt-get update
$ sudo apt-get install nfs-kernel-server

默认情况下,NFS 服务器上定义了某个共享目录,则该目录及其子目录下的所有文件都可被访问。
出于对安全的考虑,客户端任何需要 超级用户 (即 root 用户,UID=0 & GID=0)权限的文件 *** 作都默认映射到 UID=65534 和 GID=65534 的用户,即 Ubuntu 系统中的 nobody:nogroup。
例如客户端使用 root 权限在挂载的共享目录中创建文件时,该文件的 属主 属组 自动变为 nobody:nogroup ,而非 root:root

sudo mkdir -p /var/nfs/gernel
sudo mkdir -p /var/nfs/public
sudo chown nobody:nogroup /var/nfs/gernel

为了使 NFS 服务器定义的共享文件可被指定的客户端主机访问,需要在服务器端的 /etc/exports 文件中添加对应的记录。
该文件的格式如下:
Directory Host(Options ) Host(Options) #comment
关于 /etc/exports 文件的详细语法格式可参考 man exports 。

文件示例:

列出 nfs 服务器上的共享目录

创建挂载点
sudo mkdir -p /mnt/nfs/gernel
sudo mkdir -p /mnt/nfs/public
sudo mkdir -p /mnt/nfs/starky

挂载远程目录
sudo mount 19216856102:/var/nfs/gernel /mnt/nfs/gernel
sudo mount 19216856102:/var/nfs/public /mnt/nfs/public
sudo mount 19216856102:/home/starky /mnt/nfs/starky

权限测试

NFS 的权限设定基于 Linux 文件系统的权限管理,即客户端挂载远程共享目录后,会把它们当成本地磁盘目录一样对待,也是根据文件的属主(组)及其对应的权限设定来限制访问。
gernel 目录的属主(组)为 nobody:nogroup(65534:65534),所以虽然该目录为读写权限,非 root 用户无法执行新建 *** 作。而 root 用户由于 NFS 默认的安全机制,会自动映射到 nobody:nogroup。
由于我在客户端和服务端都有一个名为 starky 的用户,且它们的 UID:GID 都为1000:1000,所以服务端的 /home/starky 目录可以直接被客户端的 starky 用户访问。且由于 no_root_squash 选项,通过 sudo 命令创建的文件其属主仍为 root(而不会再映射为 nobody)。
当然这会导致一些安全问题,比如多个客户端同时都有 UID(GID)为1000的用户(不管用户名是什么),则这些用户会共享服务端 /home/starky 目录里的文件权限。

可编辑 /etc/fstab 文件令挂载共享目录的 mount *** 作成为系统的固定配置(手动输入的 mount 命令属于临时挂载,重启会自动卸载),使得系统重启后可以自动挂载远程文件系统。 /etc/fstab 文件的示例内容如下:

/etc/exports 文件的格式为: Directory Host(Options ) Host(Options) #comment
其中的 Host 项用来指定可访问对应共享目录的主机,其格式可分为以下几种:

传输协议
最初的 NFSv2 由于性能原因使用 UDP 协议,虽然 NFS 添加了自己的 包序列重组 错误检查 功能,但 UDP 和 NFS 都不具备 阻塞控制 算法,所以在大型的互联网络环境中缺乏足够的性能。
NFSv3 提供了 UDP 和 TCP 协议之间的选择。NFSv4 只能使用 TCP 协议。
随着 CPU,内存等硬件设备和网络传输速度的提高,最初由于性能需求而倾向 UDP 协议的选择也变得不再必要。

State
NFSv2 和 NFSv3 是 无状态 的连接,服务端不会跟踪客户端对共享目录的挂载情况,而是使用 "cookie" 来记录一次成功的挂载。"cookie" 不会因为服务器重启而删除,可以用来在服务器挂掉之后保留客户端的连接信息。
NFSv4 是 有状态 的连接,客户端和服务端都会维护文件 *** 作纪录及文件锁的状态。所以不再需要 "cookie" 的使用。

文件锁
早期版本的 NFS 协议(v2 & v3)由于是 无状态 的连接,它们并不清楚哪些主机正在使用哪些文件。但是文件锁的实现又需要获取状态信息。所以早期协议中的文件锁是独立于 NFS 实现的。
而 NFSv4 将文件锁的实现整合到了核心协议中,虽然此举增加了复杂度,但同时也解决了早期版本中的很多问题。
但是为了兼容使用 V2 和 V3 协议的客户端,独立的 locked statd 守护进程仍旧需要。

安全相关
NFS 协议最初在设计时并不关注安全性,NFSv4 通过引入对更强大的安全服务和身份验证的支持,加强了该协议的安全性。

传统的 NFS 协议大多使用 AUTH_SYS 验证方式,基于 UNIX 的用户和组标识。在这种方式下,客户端只需要发送自己的 UID 和 GID 并与服务器上的 /etc/passwd 文件内容作对比,以决定其拥有怎样的权限。
所以当多个客户端存在 UID 相同的用户时,这些用户会拥有相同的文件权限。更进一步,拥有 root 权限的用户可以通过 su 命令切换到任意 UID 登录,服务器会因此给予其对应 UID 的权限。
为了防止上面的问题出现,服务器可选择使用更健壮的验证机制比如 Kerberos 结合 NFS PRCSEC_GSS。

NFS 共享目录的访问控制基于 /etc/exports 文件中定义的主机名或 IP 地址。但是客户端很容易针对其身份和 IP 地址造假,这也会导致一些安全问题。
NFSv4 只使用 TCP 作为自己的传输协议,而且通常只开放 2049 端口进行数据传输。在配置防火墙时,除了放开 2049 端口的限制外,还要时刻注意数据传输的源地址和目标地址。

win10 系统默认不能挂载 NFS 共享目录,需要进入 控制面板 - 程序 - 程序和功能 - 启用或关闭 Windows 功能 ,勾选上 NFS 服务

UNIX and Linux System Administration Handbook, 4th Edition
How to Mount an NFS Share Using a Windows 10 Machine


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10367380.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-08
下一篇 2023-05-08

发表评论

登录后才能评论

评论列表(0条)

保存