您好、欢迎来到现金彩票网!
当前位置:ds视讯 > 服务原语 >

TCP和UDP的保护消息边界 (经典)

发布时间:2019-08-10 21:20 来源:未知 编辑:admin

  在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。

  对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了

  这种方法的好处是他非常容易,而且只要指定好消息的长度,没有遗漏未未发的数据,我们重写了一个SendMessage方法。代码如下:

  简要分析一下这个函数:形参s是进行通信的套接字,msg即待发送的字节数组。该方法使用while循环检查是否还有数据未发送,尤其当发送一个很庞大的数据包,在不能一次性发完的情况下作用比较明显。特别的,用sent来记录实际发送的数据量,和recv是异曲同工的作用,最后返回发送的实际数据总数。

  有sentMessage函数后,还要根据指定的消息长度来设计一个新的Recive方法。代码如下:

  我们可以这样做:通过使用消息的整形数值来表示消息的实际大小,所以要把整形数转换为字节类型。下面是发送变长消息的SendMessage方法。具体代码如下:

  关于TCP网络传输粘包,网上很多人写了原理。总结起来就一句话(这里拿Server和Client长连接,Server和Client之间通过信令传输做说明)Server发送的时候按照一条条信令发送,到达操...博文来自:郭晓东的专栏

  保护消息边界,就是指传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息.也就是说存在保护消息边界,接收端一次只能接收发送端发出的一个数据包.而面向流则是指无保护消息保护边界的,如果发...博文来自:wuxinyanzi的专栏

  1FDDI基本概念光纤分布数据接口FDDI(FiberDistributedDataInterface)是一种将计算网络和广电技术结合而发展起来的网络接口技术主要部件光纤光缆FDDI适配器FDDI适配...博文来自:一万HOURS的知识库

  这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下: 一.两个简单概念长连接与短连接:1.长连接   Client方与Server方先...博文来自:zhangxinrun的专栏

  1、什么是粘包/拆包    一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处...博文来自:Learning

  在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有...博文来自:小_鱼的专栏

  转自:在前面的几篇中,讲了关于套接字Socket以及利用套接字助手类...博文来自:kingshown_WZ的专栏

  在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有...博文来自:hnpzhili的专栏

  我们都知道,TCP协议是面向流的。面向流是指无保护消息边界的,如果发送端连续发送数据,接收端有可能在一次接收动作中会接收两个或者更多的数据包。    那什么是保护消息边界呢?就是指传输协议把数据当做一...博文来自:The New Old Things

  UDP是有边界的,应用层要整包地收,一次只能收一包,每次接收的要么是一个独立的完整的数据包,要么什么也接收不到。TCP是无边界的,是字节流,需要应用层自己判断包边界,一次不一定能收几包,也不一定是完整...博文来自:iw1210的专栏

  Ethernet是LAN的一种 局域网(LocalAreaNetwork;LAN) 通常我们常见的“LAN”就是指局域网,这是我们最常见、应用最广的一种网络。现在局域网随着整个计算机网络技术的发展和提...博文来自:jx347638458的博客

  TCP新手误区–粘包的处理背景最近面试了很多的学生,发现很多TCP的新手对于TCP的使用有一些误区,而这些坑也是当初我曾经疑惑过得地方。网上很少有文章对这些问题有过详细的解析,即是有也只是直接给出结论...博文来自:bjrxyz的专栏

  IP数据包长度问题总结首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。其中以太网(Ethernet)的数据帧在链路层IP包在网络层TCP或UDP包在传输层TCP或...博文来自:鳥巢

  粘包问题:一、TCP协议简介   TCP是一个面向连接的传输层协议,虽然TCP不属于ISO制定的协议集,但由于其在商业界和工业界的成功应用,它已成为事实上的网络标准,广泛应用于各种网络主机间的通信。 ...博文来自:梦的归宿

  转自:在进行JavaNIO学习时,发现,如果客户端连续不断的向服务端发送数据...博文来自:This is bill的专属博客

  先明确一个问题,如果定义了一个数据结构,大小是,比方说32个字节,然后UDP客户端连续向服务端发了两个包。现在假设这两个包都已经到达了服务器,那么服务端调用recvfrom来接收数据,并且缓冲区开...博文来自:weixin_33696822的博客

  在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此...博文来自:weixin_30945319的博客

  在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收...博文来自:Ubuntu 14.04配置nfs服务

  TCP是面向连接,面向流的(有可能会出项粘包情况),提供高可靠服务性。因此TCP,使用了优化方法,将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端收到的二进制流可能会被...博文来自:u012740992的专栏

  无记录边界:上层传下来的是以bit流的形式传下来的,比如限定在一个固定数值的bits,到这个固定长度断一下,这就是无边界的。如果上层传下来的是一个完整的包的形式,比如有像固定的包头,CRC检验码,长度...博文来自:timerzip的博客

  我们都知道,TCP协议是面向流的。面向流是指无保护消息边界的,如果发送端连续发送数据,接收端有可能在一次接收动作中会接收两个或者更多的数据包。那什么是保护消息边界呢?就是指传输协议把数据当做一条独立的...博文来自:宁静的心

  1、使用固定长度的消息,每次读取特定数量的字节数2、使用固定长度的消息头来之ing消息主题的长度。比如每个消息开始2个字节的值表示后面数据内容的长度。只需要首先读取该长度,再读取指定数量的字节即可。3...博文来自:张少飞的CSDN

  HTTP是基于TCP的协议,我们知道TCP是流协议,即不保证消息边界的,在TCP的应用程序中,往往是自定义一个应用层协议,比如“长度+消息内容”,我们根据“长度”即可判断该条数据是否已经接收完成,是否论坛

  问大家一个问题,我写了一个关于Java Socket检查消息字符边界的工具类,但是这个工具类只能检测 “单个字节的定界符” 不支持 “多字节的定界符”,有没有什么办法 改成支持检测多字节的定界符,代码论坛

  问题产生一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这个就是TCP的拆包和封包问题。下面可以看一张图,是客户端向服务端发送包:1.第一种情况,Dat...博文来自:自娱自乐的代码人

  TCP为什么会有粘包问题TCP和UDP是存在于传输层的两个网络传输协议,由于UDP的消息传输发送是基于数据包的是有边界的数据,而TCP是基于字节流的数据传输方式,而流的方式就注定了它的无边界性,比如在...博文来自:丑逼的博客

  服务”在形式上是用一组原语来描述的,这些原语供用户实体访问该服务或向用户实体报某事件的发生。服务原语可以划分为如表1-3所示的4类。服务原语原语意义请求(Request)用户实体要求服务做某项工作指示...博文来自:ventry的专栏

  开发这个简单例程的初衷是想把在github上能在linux系统跑的通过udp接收mavlink消息的程序移植到windows系统下。...博文来自:千人斩的博客

  socket:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做...博文来自:The_flying_pig的博客

  上节我们讲到了socket缓冲区和数据的传递过程,可以看到数据的接收和发送是无关的,read()/recv()函数不管数据发送了多少次,都会尽可能多的接收数据。也就是说,read()/recv()和w...博文来自:芝麻软件工作室的专栏

  【JavaTCP/IPSoket】—关于消息边界问题,在TCP套接字处理接收消息中尤为重要,所以大家一定要学会解决它!...博文来自:开挂的程序猿

  对于send函数:   send函数只负责将数据提交给协议层。  当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOC...博文来自:herostarone的专栏

  这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下: 一.两个简单概念长连接与短连接:1.长连接   Client方与Server方先...博文来自:L未若的博客

  最近面试的时候被问到了Socket编程时怎么处理“粘包”问题,当时愣了一下,什么是粘包。。。。。后来面试官耐心的给我解释了下,才明白。当时只想起来在做分拣系统项目的确实出现过,接收到的数据长度不对的问...博文来自:zhang2531的专栏

  一、简介        面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是...博文来自:bobozai86的博客

  TCP与UDP的对比及其报头信息的解析我们先来看看TCP与UDP对于数据交互时的区别:TCP:面向连接的可靠的字节流服务字节流服务:发送方send数据的次数与接收方recv的次数没有必然联系 发送缓冲...博文来自:IT_Quanwudi的博客

  http或者udp具体怎么处理soket消息边界,简单的分析下代码就好,把道理讲清楚就行论坛

  面向无连接的UDP协议是面向报文的有边界的报文的协议。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文...博文来自:铁匠Smith先生的专栏

  weixin_42583201:[reply]liumazi[/reply] 这个例子是一个浅拷贝类,所以析构函数调动多次都不会出错。如果是深拷贝,在第一调用的时候都已经释放了空间,再次调用也没有空间可以释放了,编译器就会报错

http://wendevick.net/fuwuyuanyu/860.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有