- 浏览: 761645 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
http://bbs.csdn.net/topics/360240000
TCP是面向流的, 流, 要说明就像河水一样, 只要有水, 就会一直流向低处, 不会间断. TCP为了提高传输效率, 发送数据的时候, 并不是直接发送数据到网路, 而是先暂存到系统缓冲, 超过时间或者缓冲满了, 才把缓冲区的内容发送出去, 这样, 就可以有效提高发送效率. 所以会造成所谓的粘包, 即前一份Send的数据跟后一份Send的数据可能会暂存到缓冲当中, 然后一起发送.
UDP就不同了, 面向报文形式, 系统是不会缓冲的, 也不会做优化的, Send的时候, 就会直接Send到网络上, 对方收不收到也不管, 所以这块数据总是能够能一包一包的形式接收到, 而不会出现前一个包跟后一个包都写到缓冲然后一起Send.
但其实别想得太复杂的, TCP所谓的粘包处理, UDP所谓的丢包处理, 其实都是很简单的.
TCP只要保证自己写入的流是按 长度 + 内容 + 长度 + 内容 这样就可以非常简单的解决粘包问题, 切忌不要采用所谓的 开始标识 + 数据 + 结束标识 来分包, 适用性极低, 错误率极高, 除非数据都是固定有格式, 否则是不能采用这种方式的.
UDP传送当中, 只存在丢包的可能, 收到包的时候, 肯定这个包的内容就是正确的, 很少会有错误的, 因为UDP本身也会用CRC32进行验证, 还有长度验证, 验证不通过, 系统自动就会丢弃, 所以, 只需要去想象一种情况, 把一个苹果切了很多块, 然后要捡起这些块到另外一个容器, 由另外一个人进行重组, 而这捡的过程当中, 有可能切的人捡漏了某些块, 然后重组苹果的人就要求切的人重新把缺失的块捡回来.
TCP是面向流的, 流, 要说明就像河水一样, 只要有水, 就会一直流向低处, 不会间断. TCP为了提高传输效率, 发送数据的时候, 并不是直接发送数据到网路, 而是先暂存到系统缓冲, 超过时间或者缓冲满了, 才把缓冲区的内容发送出去, 这样, 就可以有效提高发送效率. 所以会造成所谓的粘包, 即前一份Send的数据跟后一份Send的数据可能会暂存到缓冲当中, 然后一起发送.
UDP就不同了, 面向报文形式, 系统是不会缓冲的, 也不会做优化的, Send的时候, 就会直接Send到网络上, 对方收不收到也不管, 所以这块数据总是能够能一包一包的形式接收到, 而不会出现前一个包跟后一个包都写到缓冲然后一起Send.
但其实别想得太复杂的, TCP所谓的粘包处理, UDP所谓的丢包处理, 其实都是很简单的.
TCP只要保证自己写入的流是按 长度 + 内容 + 长度 + 内容 这样就可以非常简单的解决粘包问题, 切忌不要采用所谓的 开始标识 + 数据 + 结束标识 来分包, 适用性极低, 错误率极高, 除非数据都是固定有格式, 否则是不能采用这种方式的.
UDP传送当中, 只存在丢包的可能, 收到包的时候, 肯定这个包的内容就是正确的, 很少会有错误的, 因为UDP本身也会用CRC32进行验证, 还有长度验证, 验证不通过, 系统自动就会丢弃, 所以, 只需要去想象一种情况, 把一个苹果切了很多块, 然后要捡起这些块到另外一个容器, 由另外一个人进行重组, 而这捡的过程当中, 有可能切的人捡漏了某些块, 然后重组苹果的人就要求切的人重新把缺失的块捡回来.
发表评论
-
滑动窗口与拥塞控制
2017-09-29 14:47 759滑动窗口:用作流量控制: 1.发送端和接收端各维护一个独立的发 ... -
rawsocket发送tcp包
2017-09-25 11:52 982testTcp.h #ifndef TESTTCP_H ... -
柔性数组
2017-09-20 09:53 505#include <iostream> #i ... -
rawsocket发送dns包
2017-09-14 15:18 613#include <stdio.h> #in ... -
rawsocket发送icmp包
2017-09-06 09:54 658#include <stdio.h> #in ... -
netfilter
2016-10-04 20:31 474http://blog.chinaunix.net/uid-2 ... -
gdb的简单使用
2016-09-19 15:18 416注意编译的时间加上-g参数 1.调试运行 gdb a.out ... -
TCP各状态的意义
2016-03-01 14:06 420各个状态的意义如下: LISTEN - 侦听来自远方TCP端 ... -
log
2015-03-30 17:42 451log.h #ifndef __LOG_H__ #def ... -
TIMEWAIT与CLOSEWAIT
2015-03-17 11:32 659http://blog.csdn.net/kobejayand ... -
TcpClient
2015-01-16 17:46 470TcpClient.h #ifndef TCPCLIENT ... -
信号量
2014-09-26 10:20 681#include <semaphore.h> ... -
共享内存
2014-09-17 10:39 596SharedMemory.h #ifndef SHARED ... -
记录锁
2014-09-11 16:32 435#include <errno.h> #in ... -
popen
2014-09-06 14:50 639#include <stdio.h> #in ... -
大小端存储
2014-09-05 09:29 603#include <stdio.h> i ... -
条件变量(cond)
2014-09-01 11:02 873#include <pthread.h> # ... -
读写锁
2014-09-01 10:33 728#include <pthread.h> # ... -
trylock
2014-09-01 10:07 667#include <pthread.h> # ... -
线程分离
2014-09-01 10:00 693http://www.cnblogs.com/mydomain ...
相关推荐
理解TCP与UDP的区别及其用途,对于网络编程和系统设计至关重要。 首先,TCP是一种面向连接的协议,它在数据传输前会建立一个可靠的连接。这个过程包括三次握手,确保通信双方都准备好进行数据交换。TCP提供顺序传输...
在NS2中进行TCP与UDP模拟实验,可以帮助我们深入理解这两种协议的工作原理及其在不同场景下的性能表现。 首先,设置TCP和UDP连接涉及创建网络拓扑,定义节点之间的路径,以及配置每个节点上的发送者和接收者。在NS2...
"TCP与UDP的区别" TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)是两种常用的网络传输协议。在网络通信中,选择合适的协议是非常重要的,因为不同的协议...
本篇将深入讲解C#中实现TCP与UDP助手类的相关知识点,帮助你更好地理解和运用这两种协议。 首先,TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它通过建立三次握手来确保连接的可靠性,并且在数据...
TCP 与 UDP 区别(socket 编程) TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是 TCP/IP 协议中的两个传输层协议,它们使用 IP 路由功能把数据包发送到...
标题:TCP与UDP的区别、用途、例子 描述:本文旨在深入解析传输控制协议(TCP)与用户数据报协议(UDP)的关键差异、应用场景以及实际案例,帮助读者更好地理解这两种网络通信协议。 一、TCP与UDP的基本概念 1. *...
本资源“VC++实现TCP与UDP通讯源码”是基于微软的Visual Studio 6.0开发环境,提供了这两种协议的实现示例,对于学习和理解TCP与UDP通信机制具有实际价值。 TCP是一种面向连接的、可靠的协议,它确保数据包按照正确...
《TCP与UDP性能测试工具详解》 在计算机网络通信领域,TCP(传输控制协议)与UDP(用户数据报协议)是两种广泛使用的传输层协议。TCP以其可靠性和顺序传输著称,而UDP则以高效和低延迟为特点。TCP_UDP_...
通过阅读TCP UDP笔记.doc,深入理解TCP连接与断开过程.pdf中的细节,以及TCP与UDP编程步骤.pdf的实践指导,初学者可以逐步构建起完整的TCP/UDP编程能力。在实际项目中,灵活运用这些知识,可以有效地处理各种网络...
"tcpudp 2.1.1 TCP/UDP 调试软件"是一款专门用于分析和调试TCP与UDP协议的工具,对于初学者来说,它可以帮助理解这两种协议的工作原理,以及如何在实际应用中使用它们。该软件可能包含了如下的功能特性: 1. 数据包...
TCP与UDP的选择主要取决于应用需求。对于需要高可靠性、顺序无误的数据传输,如文件传输、网页浏览等,TCP是更好的选择。而对于实时性要求高、允许小部分数据丢失的场景,如音频视频传输、在线游戏等,UDP更为合适。...
TCP 与UDP 端口扫描
本篇将详细讲解如何在STM32开发板上,利用LWIP库与ENC28J60网卡进行TCP和UDP通信。 首先,LWIP是为资源有限的嵌入式设备设计的,它提供了TCP、UDP、ICMP、ARP等网络协议,以及DNS和HTTP等应用层协议。在裸机环境下...
2. UDP数据发送与接收:测试工具可以模拟UDP数据包的发送和接收,分析数据包的到达情况,检测丢包、乱序问题,同时也可以计算传输速率。 3. 压力测试:通过发送大量数据包来评估TCP或UDP在高负载下的表现,检测网络...
本压缩包"TCP与UDP通信手机端.zip"包含了一些关于这两种协议在手机端应用的资源,如UDP与TCP.apk的应用程序,以及可能的文档ReadMe.txt和另一个未知类型的app1。 TCP(传输控制协议)是一种面向连接的、可靠的、...
在“tcp与udp.rar”这个压缩包中,很可能包含了一些使用C语言编写的TCP和UDP通信示例代码,这些代码可以帮助开发者理解如何在实际项目中应用这两种协议。通过阅读和学习这些代码,可以深入理解TCP和UDP的工作原理,...
TCP 与 UDP 编程实现及详解 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种常用的网络传输协议,它们都是基于 IP 协议的。在网络编程中,TCP 和 UDP ...
《TCP与UDP性能测试工具详解》 在计算机网络通信领域,TCP(传输控制协议)与UDP(用户数据报协议)是两种重要的传输层协议。TCP以其可靠性和有序性著称,而UDP则以其高效和实时性受到青睐。针对这两种协议的性能...
TCP与UDP多连接实例,供大一起共同参考学习。
在信息技术领域,网络通信是核心部分之一,TCP(传输控制协议)与UDP(用户数据报协议)作为两种主要的传输层协议,为数据的可靠传输提供了基础。TCP-UDP数据包自动发送工具V3.01版本,作为一个实用工具,为程序员和...