`
bachmozart
  • 浏览: 111353 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

TCP Socket Performance issue

阅读更多
1.In general, it is more efficient for the application to write large messages and have them fragmented and reassembled by IP, than to have the application write multiple times.

原因就在于系统调用system_call从应用态转到内核态等系列复杂过程带来的性能的损耗

2.tcp_sendspace

TCP send buffer size can limit how much data the application can send before the application is put to sleep. The TCP socket send buffer is used to buffer the application data in the kernel using mbufs/clusters before it is sent beyond the socket and TCP layer. The default size of this buffer is specified by the parameter tcp_sendspace, but you can use the setsockopt() subroutine to override it.

If the amount of data that the application wants to send is smaller than the send buffer size and also smaller than the maximum segment size and if TCP_NODELAY is not set, then TCP will delay up to 200 ms, until enough data exists to fill the send buffer or the amount of data is greater than or equal to the maximum segment size, before transmitting the packets.

If TCP_NODELAY is set, then the data is sent immediately (useful for request/response type of applications). If the send buffer size is less than or equal to the maximum segment size (ATM and SP switches can have 64 K MTUs), then the application's data will be sent immediately and the application must wait for an ACK before sending another packet (this prevents TCP streaming and could reduce throughput).

TCP发送数据时首先要看发送缓冲区是否有足够的空间存放待发送消息,如果有则复制到发送缓冲区,并且需要等待ack回来才会删除该数据,如果发送缓冲区没有足够空间则会等待或者返回EWOULDBLOCK(非阻塞) ----TCPv2

Note: To maintain a steady stream of packets, increase the socket send buffer size so that it is greater than the MTU (3-10 times the MTU size could be used as a starting point).
If an application does nonblocking I/O (specified O_NDELAY or O_NONBLOCK on the socket), then if the send buffer fills up, the application will return with an EWOULDBLOCK/EAGAIN error rather than being put to sleep. Applications must be coded to handle this error (suggested solution is to sleep for a short while and try to send again).

分享到:
评论

相关推荐

    好用的Tcp Socket调试工具

    在IT行业中,网络编程是不可或缺的一部分,而TCP Socket通信作为网络通信的基础,其调试工作尤为重要。标题提到的“好用的Tcp Socket调试工具”显然是一款能够帮助开发者解决TCP Socket通信问题的有效辅助软件。描述...

    Android TCP Socket通信实例Demo源码Apk下载

    最近有个项目模块需要用到TCP Socket通讯,遇到了一个大坑,所以做了这个Demo。 本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int...

    TCP socket服务端代码 C#

    本文将详细解析使用C#语言编写的TCP socket服务端代码,特别是针对GPRS(General Packet Radio Service)环境的服务端测试程序。 首先,TCP是一种面向连接的、可靠的传输协议,它确保了数据的顺序传输和无丢失特性...

    SocketTcp_TcpSocket服务端框架_

    SocketTcp_TcpSocket服务端框架是一个专为开发者设计的简单且通用性强的TCP服务器实现。这个框架旨在简化网络编程过程,让开发者能够快速构建自己的TCP服务应用,只需要对原有代码进行少量修改,即可轻松地将其集成...

    WIN32 TCPsocket

    标题中的"WIN32 TCPsocket"指的是在Windows 32位平台上使用TCP协议进行网络通信的编程技术。TCP(Transmission Control Protocol)是一种面向连接、可靠的传输协议,它保证了数据包在互联网上的有序和无损传输。在...

    TCP socket 请求报文发送工具

    TCP套接字(TCP Socket)是网络通信中的一个重要概念,它是基于传输控制协议TCP的应用程序接口,用于在互联网上实现两台计算机之间的可靠数据传输。TCP确保数据在传输过程中的完整性,通过提供连接导向、面向字节流...

    tcpsocket.zip_TcpSocket_vc tcpsocket

    本文将深入探讨如何在Visual C++(简称VC++)环境下,利用TCP套接字进行网络编程,同时分享一个名为“TcpSocket_vc”的经典类库,它在实际项目中表现出色,值得学习和使用。 TCP是一种面向连接的、可靠的传输协议,...

    Tcp Socket client实例

    在IT行业中,TCP Socket通信是网络编程的基础,广泛应用于各种客户端-服务器应用程序。"Tcp Socket client 实例"指的是一个使用TCP协议的客户端示例程序,它通过Socket接口与服务器进行数据交互。事件驱动是一种编程...

    TCPSOCKET 线程池通信客户端+服务器端示例代码

    在IT行业中,网络通信是至关重要的一个领域,TCP(传输控制协议)和SOCKET作为其基础,被广泛应用于各种应用程序的开发中。本示例代码着重于如何利用.NET框架实现基于TCP SOCKET的线程池通信,这对于高效处理大量...

    欧姆龙TCP UDP Socket网络通讯.zip

    本资源"欧姆龙TCP UDP Socket网络通讯.zip"提供了关于如何利用TCP和UDP协议通过Socket进行欧姆龙PLC设备通信的实例。以下是关于这个主题的详细知识点: 1. **Socket基础**: - Socket是一种网络编程接口,用于在...

    查看本机tcp socket当前连接数(并发量).zip

    查看本机tcp socket当前连接数(并发量).zip

    C# TCP Socket 通讯 实例

    在IT行业中,网络通信是至关重要的一个领域,TCP(传输控制协议)和Socket编程是其中的基础。本实例将深入探讨如何使用C#语言实现TCP Socket通信。C#是一门广泛应用于Windows平台的面向对象的编程语言,其强大的.NET...

    tcp socket

    TCP套接字(TCP Socket)是网络编程中的一个重要概念,它是基于传输控制协议TCP的应用程序接口,用于在互联网上实现两台计算机之间的可靠通信。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,而套接字...

    tcp socket 聊天程序

    tcp socket 聊天程序tcp socket 聊天程序tcp socket 聊天程序tcp socket 聊天程序tcp socket 聊天程序tcp socket 聊天程序tcp socket 聊天程序tcp socket 聊天程序tcp socket 聊天程序tcp socket 聊天程序

    TCP.Socket.rar_socket tcp_tcp socket 协议

    在IT行业中,网络通信是至关重要的一个领域,而TCP Socket编程是实现网络通信的基础。本文将深入探讨TCP Socket,以及如何使用它来实现简单的TCP协议。TCP(Transmission Control Protocol)是一种面向连接、可靠的...

    UE4 Simple UDP TCP Socket Server

    通过UDP和TCP发送和接收字节或文本(UTF-8*) 在自己的线程中异步运行(不影响游戏性能) 独立于蓝图 多台服务器同时可用 IPv4和IPv6 AES加密和解密 通过TCP发送和接收文件(无RAM消耗) RCON协议 不同的目录和文件...

    TCPSocket编程客户端和服务端

    压缩包文件"TCPSocket"可能包含了示例代码,这些代码可以帮助初学者更好地理解TCP Socket编程的实践。通过阅读和运行这些代码,你可以学习如何在Python、C++、Java等语言中实现TCP Socket客户端和服务端。 在编程...

    Qt5-TCPsocket文件传送接收

    Qt5作为一个强大的跨平台应用程序开发框架,提供了丰富的功能来处理网络编程,其中包括TCP套接字(TCPsocket)的使用。本篇将详细介绍如何利用Qt5的TCPsocket实现文件的发送与接收。 首先,TCP(Transmission ...

    Modbus-Tcp采用Socket与NModbus两种方式

    标题中的“Modbus-Tcp采用Socket与NModbus两种方式”指的是在实现基于Modbus-TCP协议的通信时,采用了两种不同的技术手段:Socket编程和使用NModbus库。这两种方法都是为了与支持Modbus-TCP协议的设备进行数据交换。...

    c# tcpsocket 原生代码编写 客户端和服务端程序

    在IT行业中,网络通信是不可或缺的一部分,而TCP(Transmission Control Protocol)和Socket是实现网络通信的基础。本教程将深入探讨如何使用C#语言编写原生的TCP Socket客户端和服务端程序。TCP是一种面向连接的、...

Global site tag (gtag.js) - Google Analytics