春晗环境建设有限公司网站,烟台网站建设优惠臻动传媒,宁波怎么做外贸公司网站,外贸网站建设优化互联网协议群#xff08;TCP/IP#xff09;#xff1a;多路复用是怎么回事#xff1f;
1.【问题】IPv4 和 IPv6 有什么区别#xff1f; IPv4 是用 32 位描述 IP 地址#xff0c;理论极限约在 40 亿 IP 地址#xff1b; IPv6 是用 128 位描述 IP 地址#xff0c;IPv6 可…互联网协议群TCP/IP多路复用是怎么回事
1.【问题】IPv4 和 IPv6 有什么区别 IPv4 是用 32 位描述 IP 地址理论极限约在 40 亿 IP 地址 IPv6 是用 128 位描述 IP 地址IPv6 可以大到给每个人都分配 40 亿个 IP 地址甚至更多的 IP 地址。
IPv4 地址不够用因此需要划分子网。比如公司的几千台机器计算机、手机复用一个出口 IP 地址。子网内部就用 192.168 开头的 IP 地址。
而 IPv6 地址够用可以给全世界每台设备都分配一个地址也可以给每一个组织甚至家庭都分配数以亿计的地址目前不存在地址枯竭的问题。因此不需要像 IPv4 那样通过网络地址转换协议NAT去连接子网和外部网络。
因为地址数目的不同导致这两个协议在分配 IP 地址的时候行为也不一样。
IPv4 地址空间小如果没有一个中心的服务为所有设备分配地址那么产生的冲突非常严重。所以IPv4 地址分配是一种中心化的请求/返回的模式。客户端向服务端请求分配地址。服务端将计算好可以分配的地址返回给客户端。
而 IPv6 可以采用先计算再申请的模式。由客户端自己随机抽取得出一个 IP 地址能这样做是因为闲置的 IP 地址太多随机抽取一个大概率没有设备使用然后再向这个 IP 地址发送信息。如果没有得到返回那么说明这个 IP 地址还没有设备使用。大体来说这就是 IPv6 邻居发现协议但上述内容只是其中该协议的一小部分。
以上是 IPv4 和 IPv6 最重要的几个区别。如果你对这块内容比较感兴趣比如 IPv6 具体的地址格式127.0.0.1 是什么 IP 地址封包有什么区别可以查阅更多的资料比如 IPv6 的 RFC 文档。
UDP 协议UDP 和 TCP 相比快在哪里
【问题】SSHSecure Shell工具可不可以用 UDP 实现
【解析】SSHSecure Shell是一种网络加密协议可以帮助我们在不安全的网络上构建安全的传输。和 HTTPS 类似SSH 先用非对称加密。协商密钥和参数在目标机器登录后。利用对称加密建立加密通道Channel传输数据。
通常的 SSH 协议的底层要求是 TCP 协议。但是如果你愿意用 UDP 实现 SSH 需要的可靠性就可以替代原有 TCP 协议的能力。只不过因为 SSH 协议对吞吐量要求并不高而 TCP 的延迟也足够用所以这样做的收益也不会非常的高。如果想构建安全的远程桌面可以考虑在 UDP 上实现专门的安全传输协议来提高吞吐量、降低延迟。
事实上安全传输协议也有建立在 UDP 之上的。比如说IBM 的FASPFast and Secure Protocol协议它不像 TCP 一样自动去判断封包丢失也不会给每一个封包一个响应它只重传接收方显示指定没有收到的封包。因而这个协议在传输文件的时候有更快的速度。
| Linux 的 I/O 模型select/poll/epoll 有什么区别
【问题】如果用 epoll 架构一个Web 服务器应该是一个怎样的架构
【解析】 每一个客户端连接进来之后都是一个 Socket 文件。接下来对于 Web 服务器而言要处理的是文件的 I/O以及在 I/O 结束之后进行数据、业务逻辑的处理。
I/O这部分的主要开销在于从 Socket 文件中读出数据到用户空间。比如说读取出 HTTP 请求的数据并把它们存储到一个缓冲区当中。 处理部分Processing)这部分的开销有很多个部分。比如说需要将 HTTP 请求从字节的表示转化为字符串的表示然后再解析。还需要将 HTTP 请求的字符串分成各个部分。头部Header是一个 Key-Value 的映射Map。Body 部分可能是 QueryStringJSON,XML 等。完成这些处理之后可能还会进行读写数据库、业务逻辑计算、远程调用等。 我们先说处理部分Processing 的开销目前主要有下面这样几种架构。 为每一次处理创建一个线程。 这样做线程之间的相互影响最小。只要有足够多的资源就可以并发完成足够多的工作。但是缺点在于线程的、创建和销毁成本。虽然单次成本不高但是积累起来非常也是一个不小的数字——比如每秒要处理 1 万个请求的情况。更关键的问题在于在并发高的场景下这样的设计可能会导致创建的线程太多导致线程切换太频繁最终大量线程阻塞系统资源耗尽最终引发雪崩。 通过线程池管理线程。 这样做最大的优势在于拥有反向压力。所谓反向压力Back-Presure就是当系统资源不足的时候可以阻塞生产者。对任务处理而言生产者就是接收网络请求的 I/O 环节。当压力太大的时候拒绝掉部分请求从而缓解整个系统的压力。比如说我们可以控制线程池中最大的线程数量一般会多于 CPU 的核数小于造成系统雪崩的数量具体数据需要通过压力测试得出。 利用协程。 在一个主线程中实现更轻量级的线程通常是实现协程或者类似的东西。将一个内核级线程的执行时间分片分配给 n 个协程。协程之间会互相转让执行资源比如一个协程等待 I/O就会将计算资源转让给其他的协程。转换过程不需要线程切换类似函数调用的机制。这样最大程度地利用了计算资源因此性能更好。
最后强调一下GO 语言实现的不是协程是轻量级的线程但是效果也非常好。Node.js 实现了类似协程的单位称为任务效果也很不错。Java 新标准也在考虑支持协程目前也有一些讨论——考虑用 Java 的异常处理机制实现协程。你可以根据自己的研究或者工作方向去查阅更多相关的资料。
接下来我们说说 I/O 部分的架构。I/O 部分就是将数据从 Socket 文件中读取出来存储到用户空间的内存中去。我们将所有需要监听的 Socket 文件描述符都放到 epoll 红黑树当中就进入了一种高性能的处理状态。但是读取文件的操作还有几种选择。
单线程读取所有文件描述符的数据。 读取的过程利用异步 I/O所以这个线程只需要发起 I/O 和响应中断。每次中断的时候数据拷贝到用户空间这个线程就将接收数据的缓冲区传递给处理模块。虽然这个线程要处理很多的 I/O但因为只需要处理中断所以压力并不大。 多线程同步 I/O。 用很多个线程通过同步 I/O 的模式去处理文件描述符。这个方式在通常的情况下可以完成工作。但是在高并发的场景下会浪费很多的 CPU 资源。 零拷贝技术 通常和异步 I/O 结合使用。比如 mmap 处理过程——数据从磁盘文件读取到内核的过程不需要 CPU 的参与DMA 技术因此节省了大量开销。内核也不将数据再向用户空间拷贝而是直接将缓冲区共享给用户空间这样又节省了一次拷贝。但是需要注意并不是所有的操作系统都支持这种模式。 由此可见优化 Web 服务器底层是在优化 I/O 的模型中间层是在优化处理数据、远程调用等的模型。这两个过程要分开来看都需要优化。