精华内容
下载资源
问答
  • 浅析GRE协议(通用路由封装协议

    万次阅读 2017-05-16 16:36:17
    •GRE(Generic Routing Encapsulation):通用路由封装协议。定义了在一种网络层协议上封装另一种协议(或同一种协议)。例如:对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个...


    1、GRE的概念


    1)全称:GRE(Generic Routing Encapsulation):通用路由封装协议。

    2)功能:定义了在一种网络层协议上封装另一种协议(或同一种协议)。

    3)举例:对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IP)中传输。

    4)所在层次:GRE是VPN(Virtual Private Network)的第三层隧道协议,即在协议层之间采用了一种被称之为Tunnel(隧道)的技术。


    2、Tunnel技术


    1)定义:Tunnel是一个虚拟的点对点的连接,在实际中可以看成仅支持点对点连接的虚拟接口,这个接口提供了一条通路使封装的数据报能够在这个通路上传输,并且在一个Tunnel的两端分别对数据报进行封装及解封 。

    2)封装过程:
     

    •经GRE模块处理后,原IP头部已经被封装在新IP头部和GRE头部之后

    •新IP数据包的IP头部的协议号为47。

    •新IP头部的长度为20字节

    •GRE头部的长度为4~20字节(根据实际配置而定)。


     

    3、GRE格式:


     

    GRE头部结构参照RFC1701定义

    • 前4 字节是必须出现的
    • 第5~20字节将根据第1字节的相关bit位信息,可选出现。
    • GRE头部的长度将影响Tunnel口的mtu值

     

    •0bit  C:校验和标志位。
       如配置了checksun则该位置为1,同时校验和(可选)、偏离(可选)部分的共4 bytes出现在GRE头部。
       如不配置checksun则该位置为0,同时校验和(可选)、偏离(可选)部分不出现在GRE头部。
     
    •1bit  R:路由标志位。 
      如R为1,校验和(可选)、偏离(可选)、路由(可选)部分的共8 bytes出现在GRE头部。
     如R为0, 校验和(可选)、偏离(可选)、路由(可选)部分不出现在GRE头部。
     
    •2bit  K:密钥标志位。 
         如配置了KEY则该位置为1,同时密钥(可选)部分的共4 bytes出现在GRE头部。
         如不配置KEY则该位置为0,同时密钥(可选)部分不出现在GRE头部。
     
    •3bit  S:序列好同步标志位。 
        如配置了sequence-datagrams则该位置为1,同时序列号(可选)部分的共4 bytes出    现在GRE头部。
      如不配置sequence-datagrams则该位置为0,同时序列号(可选)部分不出现在GRE头部。
     
    •4bit  s:严格源路由标志位。 
         除非所有的路由都符合严格源路由,该bit位为1。通常该bit为0。
     
    •5~7bit:递归控制:该位置需为0
     
    •8~12bit: 未定义,需为0
     
    •13~15 版本:需为0
     

    16~31 协议类型:常用的协议,例如IP协议为0800

    展开全文
  • XMPP常用协议(一)

    千次阅读 2017-07-22 18:06:56
    最近,在用XMPP协议封装iOS和Android的IMSDK,整理了一下常用协议内容。 其中包括上线、离线;添加好友、删除好友、同意好友申请、拒绝好友申请、为好友设置备注;发送消息(文本、图片、定位、语音);获取群...

    最近,在用XMPP协议封装iOS和Android的IMSDK,整理了一下常用的协议内容。
    其中包括上线、离线;添加好友、删除好友、同意好友申请、拒绝好友申请、为好友设置备注;发送消息(文本、图片、定位、语音);获取群列表、创建群、配置群信息、设置管理员、撤销管理员、邀请人加群、踢人、退群、解散群等等。
    使用各种库版本是Openfire 4.1 、(iOS)XMPPFramework、(Android)Smack 4.1.4

    1.上线

    我们在登录成功后,要发送一个上线的presence 消息:

    <presence>
      <status>我上线咯</status>
      <show>xa</show>
    </presence>

    iOS 中的示例代码是:

    - (void)goOnline
    {
        // 发送一个<presence/> 默认值avaliable 在线 服务器收到空的presence 也会认为是avaliable
        // status ---自定义的内容,可以是任何的。
        // show 是固定的,有几种类型 dnd、xa、away、chat,在方法XMPPPresence 的intShow中可以看到
        XMPPPresence *presence = [XMPPPresence presence];
        [presence addChild:[DDXMLNode elementWithName:@"status" stringValue:@"我上线咯"]];
        [presence addChild:[DDXMLNode elementWithName:@"show" stringValue:@"xa"]];
    
        [self.stream sendElement:presence];
    }

    而Android 里(用Smack4.1) 是这样发的:

    Presence presence = new Presence(Presence.Type.available);
    presence.setMode(Presence.Mode.available);
    dmConnection.sendStanza(presence);

    当然,Android 这里少了<status><show> 这两个节点,因为Android 里添加节点比较麻烦,我们没有状态显示需求,也就没添加。

    其中show的内容是固定的,只能是dndxaawaychat,类似于QQ的状态:我在线上、离开、隐身、离线等。(可以在Demo里设置后,另一端用Spark查看效果)
    而status 可以是任意的内容。

    2. 离线

    同样的,当我们推出登录时,最好也发出一个离线的presence消息:

    <presence type="unavailable"/>

    iOS 里的是这样的:

    - (void)offline
    {
        XMPPPresence *off = [XMPPPresence presenceWithType:@"unavailable"];
        [_stream sendElement:off];
    }

    Android 里是这样的:

    Presence presence = new Presence(Presence.Type.unavailable);
    dmConnection.sendStanza(presence);
    

    3.添加好友

    XMPP协议添加好友,其实就是A订阅B,同时B也订阅A的模式。
    添加好友可以扩展几个节点,放备注信息。例如下面的extra 里的 message 节点

    <presence type="subscribe" to="1007@duimy" id="3C1090D3-BF41-4CF3-8034-A6DFEACC118B">
      <extra xmlns="http://www.duimy.com/presence-extra">
        <message>请求加个好友呗</message>
        <timestamp>2017-06-20 17:56:26</timestamp>
      </extra>
    </presence>

    iOS里的代码是这样的:

        XMPPPresence* presence = [XMPPPresence presenceWithType:@"subscribe" to:[jid bareJID]];
        [presence addAttributeWithName:@"id" stringValue:[HLCoreManager manager].stream.generateUUID];
        //extra
        NSXMLElement *extra = [NSXMLElement elementWithName:@"extra" xmlns:ADDFRIEND_XMLNS];
        [presence addChild:extra];
        //verifyContent
        if (message.length > 0) {
            NSXMLElement *verifyContent = [NSXMLElement elementWithName:@"message"];
            [verifyContent setStringValue:message];
            [extra addChild:verifyContent];
        }
        //timestamp
        NSXMLElement *timestamp = [NSXMLElement elementWithName:@"timestamp"];
        NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
        dateFormat.dateFormat = @"YYYY-MM-dd HH:mm:ss";
        NSString *dateStr = [dateFormat stringFromDate:[NSDate date]];
        [timestamp setStringValue:dateStr];
        [extra addChild:timestamp];
        [self.stream sendElement:presence];

    而Android 里因为使用Smack 就很简单了:

    Presence presence = new Presence(Presence.Type.subscribe);
    presence.setTo(user);
    dmConnection.sendStanza(presence);

    4.删除好友

    删除好友其实就是取消订阅,A取消订阅B,B取消订阅A。

    <presence type="unsubscribe" to="1002@duimy" id="F7129693-910C-4C0D-93C2-33845794FEF0"/>

    iOS 里的代码片段:

    XMPPPresence *presence = [XMPPPresence presenceWithType:@"unsubscribe" to:[jid bareJID]];
    [presence addAttributeWithName:@"id" stringValue:[HLCoreManager manager].stream.generateUUID];
    [self.stream sendElement:presence];

    Android 中的代码段:

    Presence presence = new Presence(Presence.Type.unsubscribe);
    presence.setTo(user);
    dmConnection.sendStanza(presence);

    4.1 收到对方取消订阅

    收到对方取消订阅自己,自己这边默认也要取消对方的订阅
    为了避免收到对方取消订阅的死循环,取消订阅使用iq来发消息

    <iq type="set">
      <query xmlns="jabber:iq:roster">
        <item jid="1001@duimy" subscription="remove"/>
      </query>
    </iq>

    iOS 中的代码段:

    //自动也取消订阅对方,这里的xmppRoster 就是XMPPRoster 的实例
    [[HLCoreManager manager].xmppRoster removeUser:presence.from];

    Android 中的代码段:

    RosterEntry rosterEntry = roster.getEntry(presence.getFrom());
    roster.removeEntry(rosterEntry);

    5.同意对方的好友申请

    同意对方的好友申请分为两步:第一步,告诉对方,你订阅成功了,发送如下消息:

    <presence type="subscribed" to="1002@duimy" id="F7129693-910C-4C0D-93C2-33845794FEF0"/>

    第二步,发送订阅对方的消息(即上面小节3)。

    iOS 里的代码段:

    // 同意加好友的申请
    - (void)agreeFriendRequestFrom:(NSString *)username completion:(CompletionBlock)completion
    {
        XMPPJID *jid = [[HLCoreManager manager] jidWithUsername:username];
    
        XMPPPresence *presence = [XMPPPresence presenceWithType:@"subscribed" to:[jid bareJID]];
        [presence addAttributeWithName:@"id" stringValue:[HLCoreManager manager].stream.generateUUID];
    
        // 发送已订阅的信息给对方
        [self sendElement:presence completion:nil];
    
        //并添加对方为好友
        [self addContact:username message:nil completion:^(NSString *username, NSError *error) {
            if (completion) {
                completion(username, error);
            }
        }];
    }

    Android 里的代码段:

    Presence presence = new Presence(Presence.Type.subscribed);
    presence.setTo(user);
    // 告诉对方,已订阅成功
    dmConnection.sendStanza(presence);
    // 发送一条订阅对方的消息
    Presence presence2 = new Presence(Presence.Type.subscribe);
    presence2.setTo(user);
    dmConnection.sendStanza(presence);

    5.1 收到对方订阅自己的消息

    收到别人订阅自己的消息时,分两种情况:
    如果是别人发出的申请,那么需要将这个申请的消息传递出去,让用户觉得是同意还是拒绝。
    如果是自己发起的,别人订阅自己其实是同意操作,则我们只需要给对方发一条订阅成功的消息即可。(防止无限订阅的死循环)

    iOS里的代码段:

        if ([presence.type isEqualToString:@"subscribe"]) {
            XMPPUserMemoryStorageObject *userObject = [[HLCoreManager manager].xmppRosterMemoryStorage userForJID:presence.from];
            NSDictionary *userDict = [userObject valueForKey:@"itemAttributes"];
            if (userDict && [@"to" isEqualToString:userDict[@"subscription"]]) { //如果订阅状态是to,说明是我发送给对方的好友申请,对方同意并添加我为好友
                XMPPPresence *replyPresence = [XMPPPresence presenceWithType:@"subscribed" to:presence.from];
                [replyPresence addAttributeWithName:@"id" stringValue:[HLCoreManager manager].stream.generateUUID];
                [self sendElement:replyPresence completion:nil];
                return;
            }
    
            NSXMLElement *extra = [presence elementForName:@"extra"];
    
            NSString *content = [[extra elementForName:@"message"] stringValue];
            NSString *time = [[extra elementForName:@"timestamp"] stringValue];
    
            NSMutableDictionary *dict = [NSMutableDictionary dictionary];
            if (content.length > 0) {
                [dict setObject:content forKey:@"message"];
            }
    
            if (time.length > 0) {
                [dict setObject:time forKey:@"time"];
            }
    
            if (presence.from.user > 0) {
                [dict setObject:presence.from.user forKey:@"jid"];
            }
            // 通过多播代理,把消息传出去
            [self.multicastDelegate friendRequestDidReceiveFromUser:presence.from.user message:content];
        }
    

    Android 里的代码段:

    if (presence.getType() == Presence.Type.subscribe) { // 对方请求添加好友
        RosterEntry entry = roster.getEntry(presence.getFrom());
        if (entry != null && entry.getType() == RosterPacket.ItemType.to) {
            // 如果是自己添加对方为好友,收到对方的订阅信息
            Presence replyPresence = new Presence(Presence.Type.subscribed);
            replyPresence.setTo(presence.getFrom());
            dmCore.getConnection().sendStanza(replyPresence);
            return;
        }
        InputStream inputStream = new ByteArrayInputStream(presence.toString().getBytes());
        String message = XMLParse(inputStream, "message");
        for (DMContactListener contactListener : contactListeners) {                                  contactListener.onFriendRequestReceived(presence.getFrom(), message);
        }
    }

    6.拒绝好友申请

    <presence type="unsubscribed" to="1002@duimy" id="F7129693-910C-4C0D-93C2-33845794FEF0"/>

    iOS 里的代码段:

    // 拒绝加好友的申请
    - (void)rejectFriendRequestFrom:(NSString *)username completion:(CompletionBlock)completion
    {
        XMPPJID *jid = [[HLCoreManager manager] jidWithUsername:username];
        // 先告诉对方,我不然让你订阅
        XMPPPresence *presence = [XMPPPresence presenceWithType:@"unsubscribed" to:[jid bareJID]];
        [presence addAttributeWithName:@"id" stringValue:[HLCoreManager manager].stream.generateUUID];
    
        [self sendElement:presence completion:^(XMPPElement *element, NSError *error) {
            if (completion) {
                completion(username, error);
            }
        }];
        // 从好友关系里删除
        [[HLCoreManager manager].xmppRoster removeUser:presence.from];
    }

    Android 里的代码段:

    Presence presence = new Presence(Presence.Type.unsubscribed);
    presence.setTo(user);
    dmCore.getConnection().sendStanza(presence);
    RosterEntry rosterEntry = roster.getEntry(presence.getFrom());
    if (rosterEntry != null) {
          roster.removeEntry(rosterEntry);
    }
    

    7.为好友设置备注

    <iq type="set">
           <query xmlns="jabber:iq:roster">
             <item jid="bareJID" name="nickname"/>
           </query>
         </iq>

    iOS里的代码段:

    // 为好友设置备注
    - (void)setNickName:(NSString *)nickName forUser:(NSString *)username completion:(CompletionBlock)completion
    {
        XMPPJID *jid = [[HLCoreManager manager] jidWithUsername:username];
        NSXMLElement *item = [NSXMLElement elementWithName:@"item"];
        [item addAttributeWithName:@"jid" stringValue:[jid bare]];
        [item addAttributeWithName:@"name" stringValue:nickName];
    
        NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];
        [query addChild:item];
    
        XMPPIQ *iq = [XMPPIQ iqWithType:@"set"];
        [iq addAttributeWithName:@"id" stringValue:[HLCoreManager manager].stream.generateUUID];
        [iq addChild:query];
    
        [self sendElement:iq completion:^(XMPPElement *element, NSError *error) {
            if (completion) {
                completion(username, error);
            }
        }];
    }
    展开全文
  • RTP协议封装

    千次阅读 2017-05-11 23:53:14
    一个协议封装是为了满足协议的功能需求的。从前面提出的功能需求,可以推测出RTP封装中应该有同步源和时戳等字段,但更为完整的封装是什么样子呢? 版本号(V):2比特,用来标志使用的RTP版本。 填充...

    最近一段时间学习了RTP协议相关的内容,一方面为了将自己学到的部分记录下来,便于后续查找,另一方面用于记录笔记


    一个协议的封装是为了满足协议的功能需求的。从前面提出的功能需求,可以推测出RTP封装中应该有同步源和时戳等字段,但更为完整的封装是什么样子呢?

    UDP、TCP、RTP三种协议的总结 - super-and-star - super-and-star的博客

    版本号(V):2比特,用来标志使用的RTP版本。

    填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。

    扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。

    CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。

    标记位(M):1比特,该位的解释由配置文档(Profile)来承担.

    载荷类型(PT):7比特,标识了RTP载荷的类型。

    序列号(SN):16比特,发送方在每发送完一个RTP包后就将该域的值增加1,接收方可以由该域检测包的丢失及恢复包序列。序列号的初始值是随机的。

    时间戳:32比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时间戳是去除抖动和实现同步不可缺少的。

    同步源标识符(SSRC)32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。

    贡献源列表(CSRC List):015项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。


    展开全文
  • 常用协议端口号整理

    万次阅读 多人点赞 2018-06-14 15:28:32
    沿着这个思路,按着如下顺序展开说明:第一部分:数据包在传输过程中的封装和解封装的过程第二部分:常用协议端口号整理一、数据包封装和解封装的过程封装过程:①数据来源:数据来源一般来源于应用程序...

           写过tcp、udp通信框架或者做过网络设计、维护的人都对常用的协议端口号有很深的印象,今天在这里把各种协议常用的端口号整理一下。 说到协议端口号,首先要了解数据包的结构及OSI各层之间的呼应关系。沿着这个思路,按着如下顺序展开说明:

    第一部分:数据包在传输过程中的封装和解封装的过程

    第二部分:常用的协议端口号整理

    一、数据包封装和解封装的过程

    封装过程:

    ①数据来源:数据来源一般来源于应用程序,对应着OSI的应用层。

    ②传输层封装:从应用层拿到源数据,在传输层添加TCP/UDP数据包头,形成传输层报文,这里有比较专业的说法,TCP报文段和UDP数据报。至于TCP为什么叫报文段而UDP为什么叫数据报,粗糙的解释是TCP是面向连接的,而UDP可直接封装成完整的报文,TCP会根据传输的时候存在拆包和粘包的现象,传输一次并不能保证其是一个完整的报文。

    ③对于网络层来说,传输层的数据被视作载荷,在这一层要添加完整的IP包头,形成IP数据报。包头结构如下图所示。注意下图中Protocol字段,这个字段很重要。


    ④网络层的数据在经过MAC层,即数据链路层的时候会被封装成帧,根据传输介质的不通,帧的类型也不同,包括以太网帧、PPP、HDLC等,以以太网为例进行说明,MAC层数据报格式如下所示。


    数据帧是最终在物理介质上传输的字节序,同样这里也存在协议类型字段,对识别数据报的类型有只管重要的作用。这里涉及到很多知识点,包括ARP,MTU值等。

    二、数据报解封装的过程

     数据报解封装的过程是数据封装过程的逆过程。这里不细说了。

    三、MAC层协议类型总结

            以太网数据帧---802.3

            点到点协议---Point to Point Protocol

            高级数据链路控制协议---High-Level Data Link Control

            帧中继---Frame Relay

            异步传输---Asynchronous Transfer Mode,简写ATM

    以上是应用比较多的mac层协议。

    根据MAC帧中的协议类型字段,在解封装的时候,可知道IP数据报的数据类型。

    四、IP层协议类型总结

            ICMP(Internet Control Message Protocol)——网际控制报文协议——– 1 

            IGMP(Internet Group Management Protocol)——网际组管理协议——-2

            TCP(Transmission Control Protocol )————–传输控制协议———- 6 

            UDP(User Datagram Protocol)———————用户数据报协议——- 17 

            ESP (Encap Security Payload)————-封装安全负载——50

            OSPF(Open Shortest Path First)————-开放式最短路径优先——— 89

    其他协议对应请参考该链接: 
    http://blog.chinaunix.net/uid-21556133-id-118207.html


    五、常用的TCP、UDP端口号

    DHCP:服务器端的端口号是67  
    DHCP:客户机端的端口号是68 
    POP3:POP3仅仅是接收协议,POP3客户端使用SMTP向服务器发送邮件。POP3所用的端口号是110
    SMTP:端口号是25。SMTP真正关心的不是邮件如何被传送,而只关心邮件是否能顺利到达目的地。
    Telent:端口号是23
    FTP:FTP使用的端口有20和21。20端口用于数据传输,21端口用于控制信令的传输,控制信息和数据能够同时传输,这是FTP的特殊这处。FTP采用的是TCP连接。
    TFTP:端口号69,使用的是UDP的连接。 
    TCP 21端口:FTP 文件传输服务 
    TCP 23端口:TELNET 终端仿真服务 TCP 25端口:SMTP 简单邮件传输服务 UDP 53端口:DNS 域名解析服务 TCP 80端口:HTTP 超文本传输服务 
    TCP 110端口:POP3 “邮局协议版本3”使用的端口 TCP 443端口:HTTPS 加密的超文本传输服务 TCP 1521端口:Oracle数据库服务 

    其它常用端口号请参考:

    https://blog.csdn.net/yu1336199790/article/details/53816093




    展开全文
  • 工业控制网络常用通信协议

    千次阅读 2020-06-17 09:47:32
    工业控制网络常用通信协议 工业控制网络常用通信协议............................................................................................. 1 1. 传统控制网络.........................................
  • 数据链路层协议封装

    2020-12-17 22:25:45
    常用的两种数据链路层帧: 以太网帧和PPP帧的区别: 最大的区别,以太网是一个广播链路,一个广播域可能有多个设备,所以以太网帧有MAC地址,为了在整个以太网中确定一个唯一确定到底哪个设备进行接收,减少链路的...
  • TCP/IP协议常用协议及功能

    千次阅读 2020-02-11 16:24:47
    TCP/IP协议常用协议及功能
  • 应用层常用协议

    万次阅读 2016-09-21 12:50:36
    一、应用层常用协议 1 DNS:域名系统DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。 现在顶级域名TLD分为三大类:国家顶级域名nTLD;通用顶级域名gTLD;基础结构域名 域名...
  • 常用物联网应用协议汇总

    千次阅读 2017-04-14 23:06:59
    常用物联网应用协议汇总
  • 常用多媒体传输协议简介

    千次阅读 2019-03-08 16:39:20
    实时消息传递协议(RTMP)最初是由Macromedia开发的专有协议,用于通过因特网在Flash播放器和服务器之间传输音频,视频和数据。Macromedia现在归Adobe所有,该公司已发布该协议规范的不完整版本供公众使用。 RTMP...
  • Socket常用几种类型

    万次阅读 2014-12-03 14:27:50
    Socket是一组编程接口(API), 是对TCP/IP协议封装和应用。介于传输层和应用层,大致驻留在 OSI 模型的会话层,向应用层提供统一的编程接口。应用层不必了解TCP/IP协议细节。直接通过对Socket接口函数的调用完成...
  • TCP/IP 协议簇的逐层封装

    千次阅读 2015-02-02 21:01:31
    在使用 TCP 协议的网络程序中,用户数据从产生到从网卡发出去一般要经过如下的逐层封装过程:  从下往上看:  1)链路层通过加固定长度的首部、尾部来封装 IP 数据报(Datagram) 产生以太网帧(Frame),其中首部...
  • 关于网络协议封装的一些新想法

    千次阅读 2017-05-28 18:17:10
    在为客户端封装socket层时头脑一热,有了一些新的想法, 在这里记录一下。客户端使用的是Unity3d引擎。而在Unity3d中,基础的socket库只提供两种模式,一种是阻塞模式,一种是异步callback模式。一般都需要基于这两种...
  • 网络协议类型、优缺点、作用

    万次阅读 2018-04-01 09:36:05
    一、网络协议的定义  ● 网络协议是一种特殊的软件,是计算机网络实现其功能的基本机制  ● 网络协议的本质是规则,即各种硬件和软件必须遵循的共同...二、常用的网络协议  TCP UDP HTTP HTTPS FTP DNS ...
  • [RTMP协议]常用直播流地址

    万次阅读 2019-07-30 18:33:25
    RTMP、RTSP、HTTP这三个协议都属于互联网 TCP/IP 五层体系结构中应用层的协议。理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用 RTMP、RTSP。而点播用 HTTP。 播放软件推荐:VLC 要播放视频直播...
  • 几种常见的网络路由交换协议 1.IGRP(Interior Gateway Routing Protocol)内部网关协议。 IGRP即内部网关协议,是一种动态距离向量路由协议,它由Cisco公司80年代中期设计。使用组合用户配置尺度,包括延迟、...
  • 通过LoRa的中继设备将数据发往位于隧道外部的、有互联网接入的LoRa网关,LoRa网关再将数据封装成可以在IP网络中通过TCP协议或者UDP协议传输的数据协议包(比如MQTT协议),然后发往云端的数据中心。 7、NB-IoT协议 ...
  • 常用的计算机网络协议

    千次阅读 2011-10-05 11:53:21
    一、网络协议是什么?   通俗地说,网络协议就是网络之间沟通、交流的桥梁,只有相同网络协议的计算机才能进行信息的沟通与交流。这就好比人与人之间交流所使用的各种语言一样,只有使用相同语言才能正常、顺利地...
  • 报文头格式以及常用协议端口

    千次阅读 2018-07-05 10:27:56
    IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。 优点:简单,高效。 无状态指:IP通信双方不同步传输数据的状态信息,所有的IP数据报的传输都是独立的。所以容易发生重复和乱序的...
  • 几种常用的网络传输协议

    千次阅读 2019-10-07 10:36:08
    封装的数据信息中,地址段含有发送节点和接收节点的地址,控制段用来表示数据连接帧的类型,数据段包含实际要传输的数据,差错控制段用来检测传输中帧出现的错误。  数据链路层可使用的协议有SLIP、PPP、X.25和帧...
  • 目录 网络协议 网络协议的概念 网络协议的组成 协议分层 OSI七层模型 TCP/IP五层模型(四层模型) 数据封装与分用 封装 分用 地址管理 IP地址与端口 MAC地址 网络字节序与主机字节序 网络协议 网络协议的概念 协议,...
  • 几种常用的网络协议

    千次阅读 2018-08-03 15:43:08
    封装的数据信息中,地址段含有发送节点和接收节点的地址,控制段用来表示数据连接帧的类型,数据段包含实际要传输的数据,差错控制段用来检测传输中帧出现的错误。  数据链路层可使用的协议有SLIP、PPP、X.25和帧...
  • 几种常用网络传输协议

    千次阅读 2018-12-07 16:19:00
    封装的数据信息中,地址段含有发送节点和接收节点的地址,控制段用来表示数据连接帧的类型,数据段包含实际要传输的数据,差错控制段用来检测传输中帧出现的错误。  数据链路层可使用的协议有SLIP、PPP、X.25和帧...
  • 在说TCP/IP协议体系结构之前我们首先来看看最早用的OSI七层参考模型,自底向上依次是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。下图则为由OSI七层参考模型到TCP/IP体系结构产生过程。    ...
  • 计算机网络协议——通信协议综述

    万次阅读 多人点赞 2019-09-03 23:20:58
    2.2 浏览点击请求过程2.3 揭秘层与层之间的关系三、ifconfig 命令行的由来3.1 ip地址3.2 无类型域间选路(CIDR)3.3 公有IP地址和私有IP地址3.4 MAC地址四、DHCP和PXE:ip的由来4.1 动态主机配置协议(DHCP)4.2 解析DHCP...
  • 应当封装一个适用于项目的网络框架,便于使用。此系列文章旨于:基于okhttp3原始框架来设计封装一个满足业务需求、扩展性强、耦合度低的网络框架。具体框架功能为: 扩展其对数据库的支持 对多文件上传、多线程文件...
  • OSI模型,即开放式通信系统互联参考模型(Open System Interconnection,OSI/RM,Open Systems InterconnectionReference Model),是国际...0SI/RM协议是由IS0(国际标准化组织)制定的,它有三个基本的功能:提供给开发者
  • 盘点物联网常用的八种通信协议

    千次阅读 2019-11-13 06:38:30
    1、蓝牙 兼容的蓝牙IoT传感器非常适合需要短距离连接和低功率通信的应用。蓝牙协议的有效范围为50到100米,支持高达1 M...
  • 几种常用的接口协议的积累,欢迎补充

    万次阅读 多人点赞 2018-02-18 22:02:46
    总的来说,UART用在与主机(比如计算机)接口外设相连。I2C是由飞利浦公司提出的,用于与芯片与芯片之间的通信。...这些协议分别用在不同的通信,分别完成不通的功能。就像人体内有很多肌肉。但由于...
  • 以太网交换机常用的功能及协议

    千次阅读 2010-08-10 22:15:00
    摘要:介绍了适合应用于宽带接入网的以太网交换机所常用的功能及协议。关键词:以太网 VLAN 组播 QoS一、简介  以太网由美国Xerox公司和Stanford大学联合开发,1975年推出。由Xerox公司和Stanford大学合作于...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,605
精华内容 41,442
关键字:

常用的封装协议类型