`

TCP缓冲区大小及限制

 
阅读更多

本文介绍一些影响IP数据报大小的限制,我们先介绍这些限制,然后就他们如何影响应用进程传递的数据综合分析

  • IPv4 数据报最大大小是65535(16位),包括IPv4头部。
  • IPv6 数据报最大大小是65575,包括40个字节的IPv4头部
  • MTU, 这是由硬件规定的,如以太网的MTU是1500字节,IPv4要求最小MTU是68字节,IPv6要求最小MTU是576字节
  • path MTU: 指两台主机间的路径上最小MTU
  • 分片(fragmentation): 指ip数据报大小超过相应链路的MTU,IPv4和IPv6都将对ip数据进行分片,到达目的主机后进行重组。
  • IPv4头部的DF位用于设置分片还是不分片
  • MSS:最大分节大小,向对方TCP通告被通告方在每个分节中能发送的最大TCP数据量。MSS的目的是告诉对方其重组缓冲区大小的实际值,从而避免分片。

TCP与UDP的输出

每个TCP套接口有一个发送缓冲区,可以用SO_SNDBUF套接口选项来改变这一缓冲区的大小。当应用进 程调用write往套接口写数据时,内核从应用进程缓冲区中拷贝所有数据到套接口的发送缓冲区,如果套接口发送缓冲区容不下应用程序的所有数据,或者是应 用进程的缓冲区大于套接口的发送缓冲区,或者是套接口的发送缓冲区中有别的数据,应用进程将被挂起。内核将不从write返回。直到应用进程缓冲区中的所 有数据都拷贝到套接口发送缓冲区。所以,从写一个TCP套接口的write调用成功返回仅仅表示我们可以重新使用应用进程缓冲区,它并不是告诉我们对方收 到数据。
TCP发给对方的数据,对方在收到数据时必须给矛确认,只有在收到对方的确认时,本方TCP才会把TCP发送缓冲区中的数据删除。

UDP因为是不可靠连接,不必保存应用进程的数据拷贝,应用进程中的数据在沿协议栈向下传递时,以某种形式拷贝到内核缓冲区,当数据链路层把数据传出后就把内核缓冲区中数据拷贝删除。因此它不需要一个发送缓冲区。

写UDP套接口的write返回表示应用程序的数据或数据分片已经进入链路层的输出队列,如果输出队列没有足够的空间存放数据,将返回错误ENOBUFS.
分享到:
评论

相关推荐

    mysql数据库my.cnf配置文件

    # 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能 read_rnd_buffer_size = 4194304 # MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,...

    awesome-limits:操作系统系统限制的示例

    很棒的极限前言一切都有局限性,包括软件系统。当您达到这些限制时,可能会发生坏事。您可能已经达到了内存和磁盘限制,但并不是唯一的限制。此页面列出了一些限制,如果违反这些...Java环形缓冲区的大小。 .NET Framew

    windows下iperf 2.0.4

    对于UDP方式,此设置为接受UDP数据包的缓冲区大小,限制可以接受数据包的最大值。 -B, --bind host $IPERF_BIND 绑定到主机的多个地址中的一个。对于客户端来说,这个参数设置了出栈接口。对于服务器端来说,这个...

    MySQL服务器性能优化.docx

    key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存...

    Acronis MassTransit Web Extension-crx插件

    语言:English ...它还增加了修改传输数据包和缓冲区大小以提高传输速度的能力。 此外,MassTransit Web扩展允许传输大量文件。 没有此扩展名,单个文件传输的大小限制为2 GB。 还包括对文件名的Unicode支持。

    McAfee 8.0 简体中文

    序及微软 Windows 服务提供缓冲区溢出保护。这些受保护的应用程序在一 个单独的缓冲区溢出保护特征码文件中定义。此 DAT 文件在常规更新期间 随病毒特征码文件一起下载。到本产品发布之日为止,缓冲区溢出保护...

    Java CP/IP Socket编程

    1. 使用定长的写缓冲区改写TCPEchoClientNonblocking.java。..........149 2.使用Buffer和DatagramChannel编写一个回显客户端。..........149 第6章深入剖析..........149 6.1 缓冲和TCP..........152 6.2 死锁...

    FreeBSD操作系统设计与实现

    6.6.3 缓冲区管理的实现 6.7 可叠加的文件系统 6.7.1 简单的文件系统层 6.7.2 联合安装的文件系统 6.7.3 其他文件系统 6.8 复习题 6.9 参考文献 第7章 设备 7.1 设备概述 7.1.1 PC的I/O体系结构 7.1.2 FreeBSD海量...

    计算机网络复习题

    TCP包中有一个Window size 字段,接收方可以通过该字段告诉发送方,自己还有多少个接收缓冲区,极端情况下,当接收方不能再接收数据时,把该字段设置为0,从而发送方可以根据该字段的值来调整发送数据的大小或速率。...

    ORACLE9i_优化设计与系统调整

    §3.4.17 日志缓冲区大小(LOG_BUFFER) 76 §3.4.18 检查点块数(LOG_CHECKPOINT_INTERVAL) 76 §3.4.19 检查点间隔(LOG_CHECKPOINT_TIMEOUT) 76 §3.4.20 对大卸出文件大小(MAX_DUMP_FILE_SIZE) 76 §3.4.21 对大回滚...

    Oracle9i的init.ora参数中文说明

    (ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(PORT=5000)(HOST=zeus)) (ADDRESS=(PROTOCOL=decnet)(OBJECT=outa)(NODE=zeus)) 此参数在 8.1.3 版中已废弃。 值范围: TRUE | FALSE 默认值: FALSE mts_servers: 说明 : ...

    深入解析Windows操作系统中文.part2.rar

    深入解析WINDOWS操作...缓冲区溢出和特殊内存池 861 代码改写和系统代码写保护 863 14.8 高级的崩溃转储分析 864 栈破坏 865 挂起的系统或无响应的系统 866 当没有崩溃转储时 869 术语表 871 术语对照表 895 索引 901

    VC学习大纲 VC学习讲义

    在应用中讲解const char *与char * const的区别,字符串的使用原理,如何使用CString的内存缓冲区。注册表与win.ini文件的读写方式及相关知识点。 第十五课: 如何利用CDocument类的串行化存储功能及MFC框架程序提供...

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

    它允许你在保证XML可用性的同时能够以最快的方式(流方式)传递近乎无大小限制的二进制数据  。  ×gSOAP 支持 SOAP-over-UDP。  ×gSOAP 支持 IPv4 and IPv6.  ×gSOAP 支持 Zlib deflate and gzip compression...

    windows实用dos命令大全

    /W的使用:加上/W只显示文件名,至于文件大小及建立的日期和时间则都省略。加上参数后,每行可以显示五个文件名。  PATH——路径设置命令  1.功能:设备可执行文件的搜索路径,只对文件有效。  2.类型:内部...

    windowsnt 技术内幕

    理解NTFS分区和文件大小限制 NTFS POSIX.1符合性 为NTFS分区整理碎片 可移动介质和Windows NT 理解运行第三方磁盘工具造成的问题 支持基于Win32的应用程序 理解Windows NT对附加技术的支持 知道在什么时候不能使用...

    多媒体教室

    多媒体网络教室既无硬件版教学网投资大、安装维护困难、图像传输有重影和水波纹以及线路传输距离限制之弊病;同时又克服了其他同类软件版教学网广播效率低、语音延迟大、操作复杂、稳定性兼容性差等方面的不足。 ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    在使用mount这个指令时,至少要先知道下列三种信息:要加载对象的文件系统类型、要加载对象的设备名称及要将设备加载到哪个目录下。 (1)Linux可以识别的文件系统 ◆ Windows 95/98常用的FAT 32文件系统:vfat ;...

Global site tag (gtag.js) - Google Analytics