精华内容
下载资源
问答
  • 常用网络通信协议结构图分别详细画出了OSI七层网络结构图和TCP/IP五层结构图. 对每一层具体协议明确说明,对网络编程具有很大参考意义。 每一层包含哪些网络协议,每个协议是什么意思都明确说明,值得...
  • 常见的网络协议有哪些? 1.什么是网络协议 计算机网络中为方便进行数据交换而建立的规则或约定的集合 2.网络协议的组成 网络协议有三大部分组成:...4.常用的网络协议有哪些 TCP(Transport Control Protocol):传输控制

    常见的网络协议有哪些?

    1.什么是网络协议

    计算机网络中为方便进行数据交换而建立的规则或约定的集合
    

    2.网络协议的组成

    网络协议有三大部分组成:语法、语义和时序
    语义:规定发出什么控制信息,做出什么样的反应
    语法:用户数据和发出的控制信息具备的结构和样式、数据出现的顺序
    时序:对事件发生顺序的详细说明
    

    3.计算机网络通信协议的七层结构分别是什么

    应用层
    表示层
    会话层
    传输层
    网络层
    数据链路层
    物理层
    

    4.常用的网络协议有哪些

    TCP(Transport Control Protocol):传输控制协议
    IP(Internet Protocol):Internet协议
    FTP(File Transfer Protocol):远程文件传输协议,允许用户将远程主机上的文件拷贝到自己的计算机上。 
    SMTP(Simple Mail transfer Protocol):简单邮政传输协议,用于传输电子邮件。 
    NFS(Network File Server):网络文件服务器,可使多台计算机透明地访问彼此的目录。 
    UDP(User Datagram Protocol):用户数据包协议,它和TCP一样位于传输层,和IP协议配合使用,在传输数据时省去包头,但它不能提供数据包的重传,所以适合传输较短的文件。
    
    展开全文
  •  Internet就是通常所说互联网,是由一些使用公用语言互相通信的计算机连接而成的网络。简单地说,互联网就是将世界范围内不同国家、不同地区众多计算机连接起来形成的网络平台。  互联网实现了全球信息资源...

    我们日常浏览网页,想必对Internet、www、http等等的网页名词都不陌生,那这些网页名词到底是什么意思呢?而且对于从事网页设计的工作人员来说,有必要知道一些相关的网页名词,下面就对几种常见的网页名词做一个简单的解释。

    1. Internet
        Internet就是通常所说的互联网,是由一些使用公用语言互相通信的计算机连接而成的网络。简单地说,互联网就是将世界范围内不同国家、不同地区的众多计算机连接起来形成的网络平台。
        互联网实现了全球信息资源的共享,形成了一个能够共同参与、相互交流的互动平台。通过互联网,远在千里之外的朋友可以相互发送邮件、共同完成一项工作、共同娱乐。因此,互联网最大的成功之处并不在于技术层面,而在于对人类生活的影响,可以说互联网的出现是人类通信技术史上的一次革命。
        2. WWW
        WWW(英文World Wide Web的缩写)中文译为“万维网”。但WWW不是网络,也不代表Internet,它只是Internet提供的一种服务——即网页浏览服务,我们上网时通过浏览器阅读网页信息就是在使用WWW服务。WWW是Internet上最主要的服务,许多网络功能,如网上聊天、网上购物等,都基于WWW服务。
        3. URL
        URL(英文Uniform Resource Locator的缩写)中文译为“统一资源定位符”。URL其实就是Web地址,俗称“网址”。在万维网上的所有文件(HTML、CSS、图片、音乐、视频等)都有唯一的URL,只要知道文件的URL,就能够对该文件进行访问。URL可以是“本地磁盘”,也可以是局域网上的某一台计算机,还可以是Internet上的站点,如https://www.baidu.com/就是百度的URL,如图1所示。
        在这里插入图片描述
      DNS(英文Domain Name System的缩写)是域名解析系统。在Internet上域名与IP地址之间是一一对应的,域名(例如淘宝网域名taobao.com)虽然便于用户记忆,但计算机只认识IP地址(如:100.4.5.6),将好记的域名转换成IP的过程被称为域名解析。DNS就是进行域名解析的系统。
        5. HTTP和HTTPS
        HTTP (英文Hypertext transfer protocol的缩写) 中文译为超文本传输协议。HTTP是一种详细规定了浏览器和万维网服务器之间互相通信的规则。HTTP是非常可靠的协议,具有强大的自检能力,所有用户请求的文件到达客户端时,一定是准确无误的。
        由于HTTP协议传输的数据都是未加密的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,网景公司设计了SSL(Secure Sockets Layer)协议,改协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
        简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。
        6. Web
        Web本意是蜘蛛网和网的意思。对于普通用户来说,Web仅仅只是一种环境——即互联网的使用环境、内容等。而对于网站制作者来说,Web是一系列技术的复合总称,包括网站的前台布局、后台程序、美工、数据库开发等。
        7. W3C组织
        W3C(英文World Wide Web Consortium的缩写)中文译为“万维网联盟”。万维网联盟是国际最著名的标准化组织。W3C最重要的工作是发展Web规范,自1994年成立以来,已经发布了200多项影响深远的Web技术标准及实施指南,如超文本标记语言(HTML)、可扩展标记语言(XML)等。这些规范有效地促进了Web技术的兼容,对互联网的发展和应用起到了基础性和根本性的支撑作用。
    展开全文
  • 之前我们介绍了 TCP 拆包/粘包的问题,以及如何使用 ...本文章我们将对 Netty 常用的解码器进行讲解,一起探索下它们有哪些用法和技巧。 我们首先回顾一下 TCP 拆包/粘包的主流解决方案。并梳理出 Netty 对应的编码器

    之前我们介绍了 TCP 拆包/粘包的问题,以及如何使用 Netty 实现自定义协议的编解码。可以看到,网络通信的底层实现,Netty 都已经帮我们封装好了,我们只需要扩展 ChannelHandler 实现自定义的编解码逻辑即可。更加人性化的是,Netty 提供了很多开箱即用的解码器,这些解码器基本覆盖了 TCP 拆包/粘包的通用解决方案。本文章我们将对 Netty 常用的解码器进行讲解,一起探索下它们有哪些用法和技巧。

    我们首先回顾一下 TCP 拆包/粘包的主流解决方案。并梳理出 Netty 对应的编码器类。

    固定长度解码器 FixedLengthFrameDecoder

    固定长度解码器 FixedLengthFrameDecoder 非常简单,直接通过构造函数设置固定长度的大小 frameLength,无论接收方一次获取多大的数据,都会严格按照 frameLength 进行解码。如果累积读取到长度大小为 frameLength 的消息,那么解码器认为已经获取到了一个完整的消息。如果消息长度小于 frameLength,FixedLengthFrameDecoder 解码器会一直等后续数据包的到达,直至获得完整的消息。下面我们通过一个例子感受一下使用 Netty 实现固定长度解码是多么简单。

    public class EchoServer {
    
        public void startEchoServer(int port) throws Exception {
    
            EventLoopGroup bossGroup = new NioEventLoopGroup();
    
            EventLoopGroup workerGroup = new NioEventLoopGroup();
    
            try {
    
                ServerBootstrap b = new ServerBootstrap();
    
                b.group(bossGroup, workerGroup)
    
                        .channel(NioServerSocketChannel.class)
    
                        .childHandler(new ChannelInitializer<SocketChannel>() {
    
                            @Override
    
                            public void initChannel(SocketChannel ch) {
    
                                ch.pipeline().addLast(new FixedLengthFrameDecoder(10));
    
                                ch.pipeline().addLast(new EchoServerHandler());
    
                            }
    
                        });
    
                ChannelFuture f = b.bind(port).sync();
    
                f.channel().closeFuture().sync();
    
            } finally {
    
                bossGroup.shutdownGracefully();
    
                workerGroup.shutdownGracefully();
    
            }
    
        }
    
        public static void main(String[] args) throws Exception {
    
            new EchoServer().startEchoServer(8088);
    
        }
    
    }
    
    @Sharable
    
    public class EchoServerHandler extends ChannelInboundHandlerAdapter {
    
        @Override
    
        public void channelRead(ChannelHandlerContext ctx, Object msg) {
    
            System.out.println("Receive client : [" + ((ByteBuf) msg).toString(CharsetUtil.UTF_8) + "]");
    
        }
    
    }
    
    

    在上述服务端的代码中使用了固定 10 字节的解码器,并在解码之后通过 EchoServerHandler 打印结果。我们可以启动服务端,通过 telnet 命令像服务端发送数据,观察代码输出的结果。
    客户端输入:

    telnet localhost 8088
    
    进入后,随便输入字符
    

    服务端输出:

    在这里插入图片描述
    发现了吗,在我回车的地方,相当于两个单位的长度。

    特殊分隔符解码器 DelimiterBasedFrameDecoder

    使用特殊分隔符解码器 DelimiterBasedFrameDecoder 之前我们需要了解以下几个属性的作用。

    delimiters

    delimiters 指定特殊分隔符,通过写入 ByteBuf 作为参数传入。delimiters 的类型是 ByteBuf 数组,所以我们可以同时指定多个分隔符,但是最终会选择长度最短的分隔符进行消息拆分。

    例如接收方收到的数据为:

    +--------------+
    
    | ABC\nDEF\r\n |
    
    +--------------+
    
    

    如果特定分隔符为 \n,那么会解码出两个消息。

    +-----+-----+
    
    | ABC | DEF |
    
    +-----+-----+
    
    

    如果特定分隔符为 \r\n,那么只会解码出一个消息:

    +----------+
    
    | ABC\nDEF |
    
    +----------+
    
    

    maxLength

    masLength 是报文最大长度的限制。如果超过 maxLength 还没有检测到指定分隔符,将会抛出 TooLongFrameException。可以说 maxLength 是对程序在极端情况下的一种保护措施。

    failFast

    failFast 与 maxLength 需要搭配使用,通过设置 failFast 可以控制抛出 TooLongFrameException 的时机,可以说 Netty 在细节上考虑得面面俱到。如果 failFast=true,那么在超出 maxLength 会立即抛出 TooLongFrameException,不再继续进行解码。如果 failFast=false,那么会等到解码出一个完整的消息后才会抛出 TooLongFrameException。

    stripDelimiter

    stripDelimiter 的作用是判断解码后得到的消息是否去除分隔符。如果 stripDelimiter=false,特定分隔符为 \n,那么上述数据包解码出的结果为:

    +-------+---------+
    
    | ABC\n | DEF\r\n |
    
    +-------+---------+
    
    

    下面我们还是结合代码示例学习 DelimiterBasedFrameDecoder 的用法,依然以固定编码器小节中使用的代码为基础稍做改动,引入特殊分隔符解码器 DelimiterBasedFrameDecoder:

    b.group(bossGroup, workerGroup)
    
        .channel(NioServerSocketChannel.class)
    
        .childHandler(new ChannelInitializer<SocketChannel>() {
    
            @Override
    
            public void initChannel(SocketChannel ch) {
    
                ByteBuf delimiter = Unpooled.copiedBuffer("&".getBytes());
    
                ch.pipeline().addLast(new DelimiterBasedFrameDecoder(10, true, true, delimiter));
    
                ch.pipeline().addLast(new EchoServerHandler());
    
            }
    
        });
    
    

    我们依然通过 telnet 模拟客户端发送数据,观察代码输出的结果,可以发现由于 maxLength 设置的只有 10,所以在解析到第三个消息时抛出异常。

    客户端输入:

    telnet localhost 8088
    
    Connected to localhost.
    
    Escape character is '^]'.
    
    3hello&world&1234567890a
    
    

    服务端输出:

    Receive client : [3hello]
    
    Receive client : [world]
    
    15:31:14.306 [nioEventLoopGroup-3-2] WARN io.netty.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
    io.netty.handler.codec.TooLongFrameException: frame length exceeds 10: 11 - discarded
    	at io.netty.handler.codec.DelimiterBasedFrameDecoder.fail(DelimiterBasedFrameDecoder.java:302)
    	at io.netty.handler.codec.DelimiterBasedFrameDecoder.decode(DelimiterBasedFrameDecoder.java:288)
    	at io.netty.handler.codec.DelimiterBasedFrameDecoder.decode(DelimiterBasedFrameDecoder.java:218)
    	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:505)
    	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:444)
    	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:283)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
    	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
    	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:163)
    	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700)
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
    	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
    	at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
    	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    	at java.lang.Thread.run(Thread.java:745)
    
    
    

    长度域解码器 LengthFieldBasedFrameDecoder

    长度域解码器 LengthFieldBasedFrameDecoder 是解决 TCP 拆包/粘包问题最常用的**解码器。**它基本上可以覆盖大部分基于长度拆包场景,开源消息中间件 RocketMQ 就是使用 LengthFieldBasedFrameDecoder 进行解码的。LengthFieldBasedFrameDecoder 相比 FixedLengthFrameDecoder 和 DelimiterBasedFrameDecoder 要复杂一些,接下来我们就一起学习下这个强大的解码器。

    首先我们同样先了解 LengthFieldBasedFrameDecoder 中的几个重要属性,这里我主要把它们分为两个部分:长度域解码器特有属性以及与其他解码器(如特定分隔符解码器)的相似的属性。

    长度域解码器特有属性

    // 长度字段的偏移量,也就是存放长度数据的起始位置
    
    private final int lengthFieldOffset; 
    
    // 长度字段所占用的字节数
    
    private final int lengthFieldLength; 
    
    /*
    
     * 消息长度的修正值
    
     *
    
     * 在很多较为复杂一些的协议设计中,长度域不仅仅包含消息的长度,而且包含其他的数据,如版本号、数据类型、数据状态等,那么这时候我们需要使用 lengthAdjustment 进行修正
    
     * 
    
     * lengthAdjustment = 包体的长度值 - 长度域的值
    
     *
    
     */
    
    private final int lengthAdjustment; 
    
    // 解码后需要跳过的初始字节数,也就是消息内容字段的起始位置
    
    private final int initialBytesToStrip;
    
    // 长度字段结束的偏移量,lengthFieldEndOffset = lengthFieldOffset + lengthFieldLength
    
    private final int lengthFieldEndOffset;
    
    

    与固定长度解码器和特定分隔符解码器相似的属性

    private final int maxFrameLength; // 报文最大限制长度
    
    private final boolean failFast; // 是否立即抛出 TooLongFrameException,与 maxFrameLength 搭配使用
    
    private boolean discardingTooLongFrame; // 是否处于丢弃模式
    
    private long tooLongFrameLength; // 需要丢弃的字节数
    
    private long bytesToDiscard; // 累计丢弃的字节数
    
    

    下面我们结合具体的示例来解释下每种参数的组合,其实在 Netty LengthFieldBasedFrameDecoder 源码的注释中已经描述得非常详细,一共给出了 7 个场景示例,理解了这些示例基本上可以真正掌握 LengthFieldBasedFrameDecoder 的参数用法。

    示例 1:典型的基于消息长度 + 消息内容的解码

    BEFORE DECODE (14 bytes)         AFTER DECODE (14 bytes)
    
    +--------+----------------+      +--------+----------------+
    
    | Length | Actual Content |----->| Length | Actual Content |
    
    | 0x000C | "HELLO, WORLD" |      | 0x000C | "HELLO, WORLD" |
    
    +--------+----------------+      +--------+----------------+
    
    

    上述协议是最基本的格式,报文只包含消息长度 Length 和消息内容 Content 字段,其中 Length 为 16 进制表示,共占用 2 字节,Length 的值 0x000C 代表 Content 占用 12 字节。该协议对应的解码器参数组合如下:

    • lengthFieldOffset = 0,因为 Length 字段就在报文的开始位置。

    • lengthFieldLength = 2,协议设计的固定长度。

    • lengthAdjustment = 0,Length 字段只包含消息长度,不需要做任何修正。

    • initialBytesToStrip = 0,解码后内容依然是 Length + Content,不需要跳过任何初始字节。

    示例 2:解码结果需要截断

    BEFORE DECODE (14 bytes)         AFTER DECODE (12 bytes)
    
    +--------+----------------+      +----------------+
    
    | Length | Actual Content |----->| Actual Content |
    
    | 0x000C | "HELLO, WORLD" |      | "HELLO, WORLD" |
    
    +--------+----------------+      +----------------+
    
    

    示例 2 和示例 1 的区别在于解码后的结果只包含消息内容,其他的部分是不变的。该协议对应的解码器参数组合如下:

    • lengthFieldOffset = 0,因为 Length 字段就在报文的开始位置。

    • lengthFieldLength = 2,协议设计的固定长度。

    • lengthAdjustment = 0,Length 字段只包含消息长度,不需要做任何修正。

    • initialBytesToStrip = 2,跳过 Length 字段的字节长度,解码后 ByteBuf 中只包含 Content字段。

    示例 3:长度字段包含消息长度和消息内容所占的字节

    BEFORE DECODE (14 bytes)         AFTER DECODE (14 bytes)
    
    +--------+----------------+      +--------+----------------+
    
    | Length | Actual Content |----->| Length | Actual Content |
    
    | 0x000E | "HELLO, WORLD" |      | 0x000E | "HELLO, WORLD" |
    
    +--------+----------------+      +--------+----------------+
    
    

    与前两个示例不同的是,示例 3 的 Length 字段包含 Length 字段自身的固定长度以及 Content 字段所占用的字节数,Length 的值为 0x000E(2 + 12 = 14 字节),在 Length 字段值(14 字节)的基础上做 lengthAdjustment(-2)的修正,才能得到真实的 Content 字段长度,所以对应的解码器参数组合如下:

    • lengthFieldOffset = 0,因为 Length 字段就在报文的开始位置。

    • lengthFieldLength = 2,协议设计的固定长度。

    • lengthAdjustment = -2,长度字段为 14 字节,需要减 2 才是拆包所需要的长度。

    • initialBytesToStrip = 0,解码后内容依然是 Length + Content,不需要跳过任何初始字节。

    示例 4:基于长度字段偏移的解码

    BEFORE DECODE (17 bytes)                      AFTER DECODE (17 bytes)
    
    +----------+----------+----------------+      +----------+----------+----------------+
    
    | Header 1 |  Length  | Actual Content |----->| Header 1 |  Length  | Actual Content |
    
    |  0xCAFE  | 0x00000C | "HELLO, WORLD" |      |  0xCAFE  | 0x00000C | "HELLO, WORLD" |
    
    +----------+----------+----------------+      +----------+----------+----------------+
    
    

    示例 4 中 Length 字段不再是报文的起始位置,Length 字段的值为 0x00000C,表示 Content 字段占用 12 字节,该协议对应的解码器参数组合如下:

    • lengthFieldOffset = 2,需要跳过 Header 1 所占用的 2 字节,才是 Length 的起始位置。

    • lengthFieldLength = 2,协议设计的固定长度。

    • lengthAdjustment = 0,Length 字段只包含消息长度,不需要做任何修正。

    • initialBytesToStrip = 0,解码后内容依然是完整的报文,不需要跳过任何初始字节。

    示例 5:长度字段与内容字段不再相邻

    BEFORE DECODE (17 bytes)                      AFTER DECODE (17 bytes)
    
    +----------+----------+----------------+      +----------+----------+----------------+
    
    |  Length  | Header 1 | Actual Content |----->|  Length  | Header 1 | Actual Content |
    
    | 0x00000C |  0xCAFE  | "HELLO, WORLD" |      | 0x00000C |  0xCAFE  | "HELLO, WORLD" |
    
    +----------+----------+----------------+      +----------+----------+----------------+
    
    

    示例 5 中的 Length 字段之后是 Header 1,Length 与 Content 字段不再相邻。Length 字段所表示的内容略过了 Header 1 字段,所以也需要通过 lengthAdjustment 修正才能得到 Header + Content 的内容。示例 5 所对应的解码器参数组合如下:

    • lengthFieldOffset = 0,因为 Length 字段就在报文的开始位置。

    • lengthFieldLength = 2,协议设计的固定长度。

    • lengthAdjustment = 2,由于 Header + Content 一共占用 2 + 12 = 14 字节,所以 Length 字段值(12 字节)加上 lengthAdjustment(2 字节)才能得到 Header + Content 的内容(14 字节)。

    initialBytesToStrip = 0,解码后内容依然是完整的报文,不需要跳过任何初始字节。

    示例 6:基于长度偏移和长度修正的解码

    BEFORE DECODE (16 bytes)                       AFTER DECODE (13 bytes)
    
    +------+--------+------+----------------+      +------+----------------+
    
    | HDR1 | Length | HDR2 | Actual Content |----->| HDR2 | Actual Content |
    
    | 0xCA | 0x0010 | 0xFE | "HELLO, WORLD" |      | 0xFE | "HELLO, WORLD" |
    
    +------+--------+------+----------------+      +------+----------------+
    
    

    示例 7 与 示例 6 的区别在于 Length 字段记录了整个报文的长度,包含 Length 自身所占字节、HDR1 、HDR2 以及 Content 字段的长度,解码器需要知道如何进行 lengthAdjustment 调整,才能得到 HDR2 和 Content 的内容。所以我们可以采用如下的解码器参数组合:

    • lengthFieldOffset = 1,需要跳过 HDR1 所占用的 1 字节,才是 Length 的起始位置。

    • lengthFieldLength = 2,协议设计的固定长度。

    • lengthAdjustment = -3,Length 字段值(16 字节)需要减去 HDR1(1 字节) 和 Length 自身所占字节长度(2 字节)才能得到 HDR2 和 Content 的内容(1 + 12 = 13 字节)。

    • initialBytesToStrip = 3,解码后跳过 HDR1 和 Length 字段,共占用 3 字节。

    以上 7 种示例涵盖了 LengthFieldBasedFrameDecoder 大部分的使用场景。

    总结

    三种常用的解码器,从中我们可以体会到 Netty 在设计上的优雅,只需要调整参数就可以轻松实现各种功能。在健壮性上,Netty 也考虑得非常全面,很多边界情况 Netty 都贴心地增加了保护性措施。实现一个健壮的解码器并不容易,很可能因为一次解析错误就会导致解码器一直处理错乱的状态。如果你使用了基于长度编码的二进制协议,那么推荐你使用 LengthFieldBasedFrameDecoder,它已经可以满足实际项目中的大部分场景,基本不需要再自定义实现了。

    展开全文
  • IPV4 IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基石的协议。...局域网中最常用的是以太网。 传统的TCP/IP协议基于IPV4属于第二代互联网技术,核心技...

    IPV4
    IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基石的协议。1981年Jon Postel 在RFC791中定义了IP,Ipv4可以运行在各种各样的底层网络上,比如端对端的串行数据链路(PPP协议和SLIP协议) ,卫星链路等等。局域网中最常用的是以太网。
    传统的TCP/IP协议基于IPV4属于第二代互联网技术,核心技术属于美国。它的最大问题是网络地址资源有限,从理论上讲,编址1600万个网络、40亿台主机。但采用A、B、C三类编址方式后,可用的网络地址和主机地址的数目大打折扣,以至IP地址已经枯竭。其中北美占有3/4,约30亿个,而人口最多的亚洲只有不到4亿个,中国截止2010年6月IPv4地址数量达到2.5亿,落后于4.2亿网民的需求。虽然用动态IP及Nat地址转换等技术实现了一些缓冲,但IPV4地址枯竭已经成为不争的事实。在此,专家提出IPV6的互联网技术,也正在推行,但IPV4的使用过过渡到IPV6需要很长的一段过渡期。中国主要用的就是ip4,在win7中已经有了ipv6的协议不过对于中国的用户们来说可能很久以后才会用到吧。
    传统的TCP/IP协议基于电话宽带以及以太网的电器特性而制定的,其分包原则与检验占用了数据包很大的一部分比例造成了传输效率低,网络正向着全光纤网络高速以太网方向发展,TCP/IP协议不能满足其发展需要。
    1983年TCP/IP协议被ARPAnet采用,直至发展到后来的互联网。那时只有几百台计算机互相联网。到1989年联网计算机数量突破10万台,并且同年出现了1.5Mbit/s的骨干网。因为IANA把大片的地址空间分配给了一些公司和研究机构,90年代初就有人担心10年内IP地址空间就会不够用,并由此导致了IPv6 的开发。
    IPv6
    IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为“互联网协议”。IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。
    与IPV4相比,IPV6具有以下几个优势:
    一、IPv6具有更大的地址空间。IPv4中规定IP地址长度为32,即有2^32-1(符号^表示升幂,下同)个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址。
    二、IPv6使用更小的路由表。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
    三、IPv6增加了增强的组播(Multicast)支持以及对流的控制(Flow Control),这使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS,Quality of Service)控制提供了良好的网络平台。
    四、IPv6加入了对自动配置(Auto Configuration)的支持。这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。
    五、IPv6具有更高的安全性。在使用IPv6网络中用户可以对网络层的数据进行加密并对IP报文进行校验,极大的增强了网络的安全性。
    ---------------------
    作者:满天心
    来源:CSDN
    原文:https://blog.csdn.net/qq_33857502/article/details/57413995
    版权声明:本文为博主原创文章,转载请附上博文链接!

    【本文版权归“鲜枣课堂”和小枣君所有,未经授权,请勿转载】

    这一切,要从一个“神奇的公式”说起。。。

    一个神奇的公式

    就是这个公式。。。

    就是这个超简单的公式,蕴含了我们无线通信技术的博大精深。。。

    无论是往事随风的1G、2G、3G,还是意气风发的4G、5G,说来说去,都是在这个数学公式上做文章。。。

    且听我慢慢道来。。。

    有线?无线?……

    通信技术,无论什么黑科技白科技,只分两种——有线通信和无线通信

    我和你打电话,信息数据要么在空中传播(看不见、摸不着),要么在实物上传播(看得见、摸得着)。。。

    在有线介质上传播数据,想要高速很容易。。。

    实验室中,单条光纤最大速度已达到了26Tbps。。。是传统网线的两万六千倍。。。

    空中传播这部分,才是移动通信的瓶颈所在。。。

     

    所以,5G重点是研究无线这部分的瓶颈突破。

    好大一个波。。。

    大家都知道,电波和光波都属于电磁波。。。

    电磁波的频率资源有限,根据不同的频率特性,有不同的用途。。。

     

    我们目前主要使用电波进行通信。。。

    当然,光波通信也在崛起,例如可见光通信LiFi(LightFidelity)

    ▼图片来自网络

     

     

    不偏题,回到电波先。。。

    电波属于电磁波的一种,它的频率资源也是有限的。。。

    为了避免干扰和冲突,我们在电波这条公路上进一步划分车道,分配给不同的对象和用途。。。

     

    ▼不同频率电波的用途

     

     

     

    大家注意上面图中的红色字体。一直以来,我们主要是用中频~超高频进行手机通信的。。。

    例如经常说的“GSM900”、“CDMA800”,其实就是工作频段900MHz和800MHz的意思。。。

    目前主流的4G LTE,属于超高频和特高频。。。

    我们国家主要使用超高频:

     

     

    随着1G、2G、3G、4G的发展,使用的频率是越来越高的。。。

    为什么呢?

    因为频率越高,速度越快。。。

     

    这又是为什么呢? 

    因为频率越高,车道(频段)越宽。。。

     

     

    看懂了吧。。。车道按指数级扩大。。。

     

     

    更高的频率→更大的带宽→更快的速度

     

     

    5G的频段具体是多少呢?

    上个月,我们国家工信部下发通知,明确了我国的5G初始中频频段

    3.3-3.6GHz、4.8-5GHz两个频段

    同时,24.75-27.5GHz、37-42.5GHz高频频段正在征集意见。

    目前,国际上主要使用28GHz进行试验(这个频段也有可能成为5G最先商用的频段)。

    如果按28GHz来算,根据前文我们提到的公式:

     

     

    好啦,这个就是5G的第一个技术特点——

    毫米波

     

    继续,继续。。。

    既然,频率高这么好,你一定会问:“为什么以前我们不用高频率呢?”

    原因很简单——不是不想用。。。是用不起。。。

    电磁波的一个显著特点:频率越高(波长越短),就越趋近于直线传播(绕射能力越差)。。。

    而且,频率越高,传播过程中的衰减也越大。。。

    你看激光笔(波长635nm左右),射出的光是直的吧,挡住了就过不去了。。。

    再看卫星通信和GPS导航(波长1cm左右),如果有遮挡物,就没信号了吧。。。

    而且,卫星那口大锅,必须校准瞄着卫星的方向。。。稍微歪一点,都会有影响。。。

     

     

    如果5G用高频段,那么它最大的问题,就是覆盖能力会大幅减弱。

    覆盖同一个区域,需要的基站数量将大大超过4G。

     

     

    这就是为什么这些年,电信、移动、联通为了低频段而争得头破血流。。。

    基站就是要花钱买的啊。。。能不玩命争取么。。。

    有的频段甚至被称为——黄金频段。。。

     

     

    这也是为什么5G时代,运营商拼命怼设备商。。。

    甚至威胁要自己研发通信设备。。。

     

     

     

    所以,基于以上原因。。。

    在高频率的前提下,为了减轻覆盖方面的成本压力,5G必须寻找新的出路。。。

    首先,是微基站。

     

    微基站

     

    基站有两种,微基站和宏基站。看名字就知道,微基站很小,宏基站很大!

    以前都是大的基站,建一个覆盖一大片 ▼

     

     

    以后更多的将是微基站,到处都装,随处可见。

     

    ▼微基站 看上去是不是很酷炫?

     

     

     

    微基站的造型有很多种,灵活地与周围的环境相融合(伪装),不会让用户在心理上产生不适。。。

     

    提醒

    基站对人体健康不会造成影响。

             ——小枣君宣 

     

    而且,恰好相反,其实基站数量越多,辐射反而越小!

    你想一下,冬天,一群人的房子里,一个大功率取暖器好,还是几个小功率取暖器好?

    大功率方案▼

     

     

    小功率方案▼

     

     

    基站越小巧,数量越多,覆盖就越好,速度就越快。。。

     

     天线去哪了? 

     

    大家有没有发现,以前大哥大都有很长的天线,早期的手机也有突出来的小天线,为什么后来我们就看不到带天线的手机了?

     

     

    有人说,是因为信号好了,不需要天线了。。。

    其实不对。。。信号再好,也不能没有天线。。。

    更主要的原因是——天线变小了。。。

    根据天线特性,天线长度应与波长成正比,大约在1/10~1/4之间。

     

     

    频率越高,波长越短,天线也就跟着变短啦!

    毫米波,天线也变成毫米级。。。

    这就意味着,天线完全可以塞进手机的里面,甚至可以塞很多根。。。

    这就是5G的第三大杀手锏——

     

    Massive MIMO

    MIMO就是“多进多出”(Multiple-Input Multiple-Output),多根天线发送,多根天线接收。

     

    在LTE时代就已经有MIMO了,5G继续发扬光大,变成了加强版的Massive MIMO(Massive:大规模的,大量的)。

     

     

    手机都能塞好多根,基站就更不用说了。。。

    ▼以前的基站,天线就那么几根。。。

     

     

    5G时代,就不是按根来算了,是按“阵”。。。“天线阵列”。。。

    ▼天线多得排成阵了。。。一眼看去一大片的节奏。。。

     

     

    不过,天线之间的距离也不能太近。

    因为天线特性要求,多天线阵列要求天线之间的距离保持在半个波长以上。

    不要问我为什么,去问科学家。。。

     

    你是直的?还是弯的?

     

    大家都见过灯泡发光吧? 

    其实,基站发射信号的时候,就有点像灯泡发光。

    信号是向四周发射的,对于光,当然是照亮整个房间,如果只是想照亮某个区域或物体,那么,大部分的光都浪费了。。。

     

     

    基站也是一样,大量的能量和资源都浪费了。

    我们能不能找到一只无形的手,把散开的光束缚起来呢?

    这样既节约了能量,也保证了要照亮的区域有足够的光。

    答案是:可以。

    这就是——

     

    波束赋形

    波束赋形:

    在基站上布设天线阵列,通过对射频信号相位的控制,使得相互作用后的电磁波的波瓣变得非常狭窄,并指向它所提供服务的手机,而且能跟据手机的移动而转变方向。

    这种空间复用技术,由全向的信号覆盖变为了精准指向性服务,波束之间不会干扰,在相同的空间中提供更多的通信链路,极大地提高基站的服务容量。

     

    直的都能掰成弯的。。。还有什么是通信砖家干不出来的?

    别收我钱,行不行?

     

    在目前的通信网络中,即使是两个人面对面拨打对方的手机(或手机对传照片),信号都是通过基站进行中转的,包括控制信令和数据包。。。 

    而在5G时代,这种情况就不一定了。。。

    5G的第五大特点——D2D,也就是Device to Device。

    D2D

    5G时代,同一基站下的两个用户,如果互相进行通信,他们的数据将不再通过基站转发,而是直接手机到手机。。。

     

    这样,就节约了大量的空中资源,也减轻了基站的压力。

    不过,如果你觉得这样就不用付钱,那你就图样图森破了。。。

    控制消息还是要从基站走的,而且用着频谱资源,运营商爸爸怎么可能放过你。。。

    后记。。。

    相信大家通过本文对5G和她背后的通信知识已经有了深刻理解,而这一切,都只是源于一个如今小学生都能看懂的数学公式。。。

    通信技术并不神秘,5G作为通信技术皇冠上最耀眼的宝石,也不是什么遥不可及的创新革命技术,它更多是对现有通信技术的演进。

    正如一位高人所说——

    “通信技术的极限,并不是技术工艺方面的限制,而是建立在严谨数学基础上的推论,在可以遇见的未来是基本不可能突破的。”

    如何在科学原理的范畴内,进一步发掘通信的潜力,是通信行业众多奋斗者们孜孜不倦的追求。。。

    https://www.zhihu.com/question/53878059?sort=created

    展开全文
  • 那与网络相关的常用协议有哪些呢? TCP/IP协议 应用软件(如浏览器)与网络软件(如网页)之间使用TCP协议。 网页和网络应用程序: 网页:是一个网站一个页面,网页上所有资源都是服务器动态生成,里面有很多...
  • RPC(Remote Procedure Call),代表远程过程调用,通过网络通信调用不同服务,共同支撑一个软件系统,微服务实现基石技术。使用RPC可以解耦系统,方便维护,同时增加系统处理请求能力。 诞生环境:在应用...
  • 网络通信网络其他问题

    千次阅读 2016-05-30 09:23:24
    计算机网络技术是互联网发展的基础。它是计算机技术与通信技术结合的产物,是现在信息技术的一个重要组成部分,而且正朝着数字化、高速化、智能化的方向迅速发展。...常用的网络安全防护措施有哪些 常用的
  • (Android的网络编程分为2种,一个是基于http协议的,一个是基于socket的,关于网络编程和http、socket网络...这里要考虑我们手机端有哪些通信渠道可以使用,手机端的通信渠道,一个是通过wifi,另一个是通过手机APN
  • 在前两节课我们介绍了 TCP 拆包/粘包的问题,以及如何...本节课我们将对 Netty 常用的解码器进行讲解,一起探索下它们有哪些用法和技巧。 在本节课开始之前,我们首先回顾一下 TCP 拆包/粘包的主流解决方案。并梳..
  • 2、主要网络有哪些? (1)局域网(2)城域网(3)广域网 3、计算机网络体系结构 各层关系:每一个抽象层建立在低一层提供服务上,并且为高一层提供服务。 OSI模型:应 表 会 传 网 链 物 (因为 绿茶婊 会 传情...
  • 因为发现好多人想抓包,但是不知道有哪些工具,今天我给大家推荐几款抓包工具,希望对大家有所帮助。 网络抓包工具用途 网络抓包工具主要功能是将网络执行过程,详细记录下来。如果你是一个程序员,肯定对...
  • 是专门用于将串口数据转换为IP数据或将IP数据转换为串口数据通过无线通信网络进行传送无线终端设备。根据工业DTU数据传输方式不同,工业DTU又可以分为全网通DTU,GPRS DTU,WIFI DTU,CAN DTU,4G DTU,5G DTU...
  • 常用的办公软件有哪些?相信大家都知道word、excel是办公人员必备的办公软件,但是除了这些还有什么是办公软件呢,办公人员的必备武器有哪些呢? 微软的office系列 金山WPS系列 红旗2000RedOffice系列 永中office...
  • 国内http代理ip协议被设计用于包交换计算机通信网络的互连系统中。...为了使每一个数据报通过不同的路径准确到达目的地,并在目的地重新组合恢复到最初发送的数据,数据报必须具有明确的目标...目前最常用的代理IP协议S.
  • 中间件是什么,常用的中间件有哪些

    千次阅读 多人点赞 2020-11-16 20:42:09
    中间件在客户服务器操作系统、网络和数据库之上,管理计算资源和网络通信。总作用是为处于自己上层应用软件提供运行与开发环境,帮助用户灵活、高效地开发和集成复杂应用软件。 也就是说,关于中间件,...
  • 而光纤收发器的生产正好就是解决了网络传输中的不足,跟光口交换机相比,它的优势非常明显,所以现在的网络大多数的光口交换机被光纤收发器所替代,成为最为常用的数据交换器。接下来我们就来详细了解下光纤收发器...
  • 问题描述:对于常用的手机制式不是很了解,买手机的时候还要问卖家是否支持哪些卡,在京东看到以下的内容,于是转载下了解。 手机名称GSM:表示只支持中国联通或者中国移动2G号段(130、131、132、134、135、136...
  •  RFID(Radio Frequency Identification,射频识别)是一种无线通信技术,可通过射频信号自动识别目标对象并获取相关数据,是物联网中常用的短距离无线通信技术之一。  RFID电子标签有着一整套完整的调制器、编码器...
  • 两种最常用的 HTTP 方法是:GET 和 POST。 什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。 HTTP 的工作方式是客户机与服务器之间的请求-应答协议。 web 浏览器可能...
  •  组成一般计算机网络的硬件有哪些?一是网络服务器;二是网络工作站;三是网络适配器,又称为网络接口卡或网卡;四是连接线,学名“传输介质”或“传输媒体”,主要是电缆或双绞线,还有不常用的光纤。如果要扩展...
  • 一、 假定某信道受奈氏准则限制的...二、 常用的信号编码方式有哪些? 答:曼彻斯特编码、差分曼彻斯特编码 三、 描述计算机网络交换技术 (1)电路交换:电路交换是一种实时交换,适用于实时要求高的话音通信( 全程...
  • 网络操作系统作业

    2018-10-10 15:25:59
    1.什么是网络操作系统?网络操作系统具有哪些基本功能? 网络系网统可以理解为网络用户与计算机网络之间的接口 ,它是专门为网络用户提供操作接口的系统软件,除了管理计算机的...3.常用的网络操作系统有哪些?它...
  • 网络的传输介质有哪些 网络传输介质是指在网络中传输信息的载体,常用的传输介质分为有线传输介质和无线传输介质两大类。 ⑴有线传输介质是指在两个通讯设备之间完成的物理衔接局部,它能将信号从一方传输到另一方...
  • 网络操作系统第一章

    2018-10-11 17:57:00
    1、什么是网络操作系统?网络操作系统具有哪些基本功能? 答:(1)网络操作系统是网络用户与计算机之间的接口,是专门为网络用户提供操作接口的系统软件。 (2)基本功能:A、网络...3、常用的网络操作系统有哪些...
  • UDP服务器 传输层主要应用协议模型有两种,一种是TCP协议,另外一种则是UDP协议。TCP协议在网络通信中占主导地位,绝大多数的网络通信借助TCP协议完成数据传输。...那么与我们熟知TCP相比,UDP有哪些优点和
  • 网络操作系统 第一章

    2019-01-06 21:22:00
    第一章 1、什么是网络操作系统?网络操作系统具有哪些基本功能? 操作系统管理者计算机系统的全部软硬件资源,对程序的执行进行控制,能够使用户方便的使用硬件提供的功能,使...3、常用的网络操作系统有哪些? ...
  • 内存管理、程序调度、程序间的通信、处理机间的通信(在多处理軏交换系 统中)、时间服务、出铅处理等 36.为什么程序划分若干级别?一散分为几种类型的级别,各采取什么方式激活? 答:程序分级的原因: 为了满足各软件组成...
  • 文章目录一、简述分组交换的特点二、从多个方面比较电路交换、报文交换和分组交换的主要优缺点三、计算机...六、计算机网络有哪些常用的性能指标?七、收发两端之间的传输距离为1000km,信号在媒体上的传播速率为...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 139
精华内容 55
关键字:

常用的通信网络有哪些