TCP选项之SO_RCVBUF和SO_SNDBUF

2023-10-26

SO_RCVBUF SO_SNDBUF

      先明确一个概念:每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内。再啰嗦一点,不管进程是否读取socket,对端发来的数据都会经由内核接收并且缓存到socket的内核接收缓冲区之中。read所做的工作,就是把内核缓冲区中的数据拷贝到应用层用户的buffer里面,仅此而已。进程调用send发送的数据的时候,最简单情况(也是一般情况),将数据拷贝进入socket的内核发送缓冲区之中,然后send便会在上层返回。换句话说,send返回之时,数据不一定会发送到对端去(和write写文件有点类似),send仅仅是把应用层buffer的数据拷贝进socket的内核发送buffer中。后续我会专门用一篇文章介绍read和send所关联的内核动作。每个UDP socket都有一个接收缓冲区,没有发送缓冲区,从概念上来说就是只要有数据就发,不管对方是否可以正确接收,所以不缓冲,不需要发送缓冲区。
      接收缓冲区被TCP和UDP用来缓存网络上来的数据,一直保存到应用进程读走为止。对于TCP,如果应用进程一直没有读取,buffer满了之后,发生的动作是:通知对端TCP协议中的窗口关闭。这个便是滑动窗口的实现。保证TCP套接口接收缓冲区不会溢出,从而保证了TCP是可靠传输。因为对方不允许发出超过所通告窗口大小的数据。 这就是TCP的流量控制,如果对方无视窗口大小而发出了超过窗口大小的数据,则接收方TCP将丢弃它。 UDP:当套接口接收缓冲区满时,新来的数据报无法进入接收缓冲区,此数据报就被丢弃。UDP是没有流量控制的;快的发送者可以很容易地就淹没慢的接收者,导致接收方的UDP丢弃数据报。
      以上便是TCP可靠,UDP不可靠的实现。
      这两个选项就是来设置TCP连接的两个buffer尺寸的。


转载自:http://blog.chinaunix.net/uid-29075379-id-3905006.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP选项之SO_RCVBUF和SO_SNDBUF 的相关文章

  • 网络编程3——网络层复习(三次握手、四次握手、滑动窗口)

    bkg 一 分层模型结构 OSI七层模型 物 数 网 传 会 表 应 TCP IP 4层末次那个 网 链路层 网络接口层 网 传 应 应用层 http ftp nfs ssh telnet 传输层 TCP UDP 网络层 IP ICMP I
  • Linux网络编程基础

    Linux网络编程基础 1 协议的概念 什么是协议 典型协议 网络程序设计模式 分层模型 TCP IP四层模型 实际开发中常用模型 通信过程 协议的概念 从应用的角度出发 协议可理解为 规则 是数据传输和数据的解释的规则 假设 A B双方欲
  • window下apache安装和配置

    下载 32位 http httpd apache org 64位 http www apachelounge com download 安装 解压Apache2 4到F Apache2 4 修改文件F Apache2 4 conf http
  • unix网络编程源代码编译

    最近开始研究unix网络编程 正所谓 学习网络编程的最好方法就是下载这些程序 对其进行修改和改进 只有这样才能深入理解与有关概念和方法 1 首先下载源代码 不多说了 2 照着readme中的步骤往下做 第一步就出现问题了 输入命令 conf
  • libevent(7)libevent中的事件event

    一 事件状态 libevent有4种事件状态 分别是 initialized pending active persistent 这4种状态的转换关系如下 1 已初始化 initialized 对应图中的non pending状态 表示事件
  • 网络编程5之poll、epoll、超时检测

    1 poll机制 poll的实现和select非常相似 只是文件描述符fd集合的方式不同 poll使用struct pollfd结构而不是select的fd set结构 其他的都差不多 include
  • 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

    http blog csdn net xujiezhige article details 41115453
  • 案例——UDP聊天

    UDP聊天案例 做一个网络编程相关的案例 想着用利用UDP的快速且不用连接的优点做一个聊天室 我们一个聊天程序需要可以接收消息 也要可以发送消息 所以我们的DatagramSocket对象不但需要调用send函数 还需要调用recieve函
  • 【Python爬虫与数据分析】爬虫Json数据解析

    目录 一 Json文件数据解析 二 Json数据包解析获取图片资源 三 Json数据包解析获取视频资源 一 Json文件数据解析 json字符串 通常类似python数据类型中的列表和字典的结合 也可能是单独的列表或者字典格式 通常可以通过
  • TCP和UDP的最完整的区别

    欢迎访问个人网站 这里排版舒服点 TCP和UDP的最完整的区别 码到城攻TCP和UDP的最完整的区别https www codecomeon com posts 7 TCP UDP TCP与UDP基本区别 1 基于连接与无连接 2 TCP要
  • LibEvent中文帮助文档

    http blog csdn net zhouyongku article details 53431597 libevent源码分析 http blog csdn net yusiguyuan article details 182675
  • Unity使用C#实现简单Scoket连接及服务端与客户端通讯

    简介 网络编程是个很有意思的事情 偶然翻出来很久之前刚开始看Socket的时候写的一个实例 贴出来吧 Unity中实现简单的Socket连接 c 中提供了丰富的API 直接上代码 服务端代码 Thread connectThread 当前服
  • TCP/IP编程之SO_REUSEADDR和SO_REUSEPORT套接字选项

    基本概念 SO REUSEADDR套接字选项能起到以下4个不同的功用 1 SO REUSEADDR允许启动一个监听服务器并捆绑众所周知端口 即使以前建立的该端口用作它们的本地端口的连接仍存在 这个条件通常是这样碰到的 a 启动一个监听服务器
  • 基于TCP的服务器端/客户端

    TCP服务器端默认函数调用顺序 socket 创建socket bind 分配socket地址 listen 等待连接请求状态 accept 允许连接 read write 数据交换 close 断开连接 等待连接请求状态 int list
  • Linux I/O多路复用——poll模型实现服务端Socket通信

    目录 poll函数 参数说明 events相关 与select的不同 程序流程 程序实例 poll函数 poll模型在实现服务端时思路是和select类似的 可以说poll是select的加强版 poll函数原型如下 int poll st
  • 【网络编程】网络编程知识点总结

    文章目录 UDP也需要端口号 基于TCP的socket通信中 简易服务端的六步依次为 基于TCP的socket通信中 简易客户端的四步依次为 介绍一下在linux环境下 服务器这六步的使用到的一些函数 参数 返回值类型等 介绍一下在linu
  • 进程间通信之共享内存分析

    零拷贝技术 https strikefreedom top linux io and zero copy 一 内存映射和共享内存的区别 1 1 内存映射之mmap函数 将一个文件或者其它对象映射到进程的地址空间 实现文件磁盘地址和进程虚拟地
  • HTTP与HTTPS的区别,HTTPS的工作原理及优缺点

    为什么要有HTTPS 超文本传输协议HTTP协议被用于在web服务器和网站服务器之间传递消息 HTTP协议以明文方式发送内容 不提供任何方式的数据加密 如果攻击者截取了web浏览器和网站服务器之间的传输报文 就可以直接读懂其中的信息 因此
  • C++针对ZeroMQ库的选择

    介绍 ZeroMQ 也称为0MQ或 MQ 是一个高性能 低延迟的消息队列库 它为分布式和并发应用程序提供了简洁 高效的通信机制 它是一个开源的库 支持多种编程语言 包括C 和操作系统 ZeroMQ通过使用套接字抽象来实现消息传递 使得它易于
  • 并发编程概览

    由于内容较多 将会分成多篇文章详述 可移步查看 操作系统发展史 多道技术 进程理论 进程的并行与并发 进程的三状态 同步与异步 阻塞与非阻塞 同步异步与阻塞非阻塞 创建进程的多种方式 join方法 进程间数据默认隔离 进程间通信IPC机制

随机推荐

  • PromQL的简单使用

    PromQL的简单使用 一 背景 二 PromQL的数据类型 三 字面量 1 字符串字面量 2 浮点数字面量 四 时间序列选择器 1 即时向量选择器 1 组成部分 2 指标名称和匹配器的组合 3 匹配器 2 区间向量选择器 1 时间格式 3
  • 流媒体压力测试工具—推拉流

    目录 前言 介绍 St load 安装篇 推流篇 拉流篇 前言 流媒体压力测试是评估流媒体系统性能和稳定性的重要环节 它可以模拟大量用户同时推送和拉取流媒体数据 以验证系统在高负载情况下的表现 为了进行流媒体压力测试 我们可以使用推拉流工具
  • DN值、辐射率、反射率等

    数字量化值 Digital Number DN 像素值的通用术语是数字量化值或DN值 它通常被用来描述还没有校准到具有意义单位的像素值 如果你只是想看一个图像 和不打算解释像素值的物理意义 那么就可以以DN值的方式来保存 辐射率 Radia
  • 极智AI

    欢迎关注我的公众号 极智视界 获取我的更多笔记分享 大家好 我是极智视界 本文讲解一下 C 手写 softmax 激活函数 在多分类任务中 最后通常使用 softmax 函数作为网络输出层的激活函数 softmax 函数可以对输出值作归一化
  • 互联网络安全、信息安全、计算机网络安全、信息保障有什么区别?

    据CNBC报道 由于黑客 安全漏洞和恶意软件攻击继续成为行业媒体报道的头条新闻 网络犯罪已成为一种全球 流行病 去年对全球组织和人员造成的损失约6000亿美元 因此 打击此类活动已成为一项有利可图且有益的事业 这并不奇怪 所以 如果你正在考
  • 【力扣】1337.矩阵中战斗力最弱的k行

    给你一个大小为 m n 的矩阵 mat 矩阵由若干军人和平民组成 分别用 1 和 0 表示 请你返回矩阵中战斗力最弱的 k 行的索引 按从最弱到最强排序 如果第 i 行的军人数量少于第 j 行 或者两行军人数量相同但 i 小于 j 那么我们
  • Spring中ApplicationContext加载机制

    加载器目前有两种选择 ContextLoaderListener和ContextLoaderServlet 只是一个是基于Servlet2 3版本中新引入的Listener接口实现 而另一个基于Servlet接口实现 开发中可根据目标Web
  • 【网站汇总】一些OJ平台

    目录 前言 一 HDU孵化器 二 HDU OJ 三 PTA 四 洛谷 五 力扣 LeetCode 前言 以下是一些OJ平台 一 HDU孵化器 链接 http hdufhq cn 8888 二 HDU OJ 链接 http code hdu
  • Linux下删除正在写入的文件会发生什么?

    一 成功 删除 了一个正在写入的文件 某日 我启动了一个进程 向一个文件a txt中写入内容 但不小心在另一个窗口用命令rm f a txt把它删除了 我以为这应该会触发一个警告 比如 不能删除一个打开的正在写入的文件 之类的 结果命令干脆
  • WinServer 2012 AD 组策略 用户发布软件部署

    本例演示安装 Notepad 这款软件 因为域中发布软件只支持 msi 格式 所以要把 exe 转成 msi 格式 可以用这个软件 https www advancedinstaller com 1 转换格式 1 选择 MSI from E
  • 数学建模 - 数学规划

    来自清风的数学建模课程 主要是用于自己复习看 所以截图较多 数学规划 概述 分类 线性规划 非线性规划 整数规划 0 1规划 线性规划 对于求解最大值要让目标函数的系数 max z min z 线性规划公式 x fval linprog c
  • 第十四届蓝桥杯模拟赛(第一期)——C语言版

    1 二进制位数 问题描述 十进制整数 2 在十进制中是 1 位数 在二进制中对应 10 是 2 位数 十进制整数 22 在十进制中是 2 位数 在二进制中对应 10110 是 5 位数 请问十进制整数 2022 在二进制中是几位数 incl
  • PHP导出excel文件的几种方式

    先说说动态生成的内容当作文件来下载的方法 1 通过把Content Type设置为application octet stream 可以把动态生成的内容当作文件来下载 content type内容设置可以参看 http www ostool
  • 父类对象的属性直接赋值给子类对象(使用copyProperties中的方法copyProperties)

    BeanUtils copyProperties 是 Apache Commons BeanUtils 包中提供的一个方法 用于将一个 JavaBean 对象的属性值赋值到另一个 JavaBean 对象中 该方法可以简化 JavaBean
  • springmvc @ResponseBody参数解析核心代码分析 -8

    org springframework web servlet mvc method annotation RequestResponseBodyMethodProcessor supportsParameter 只要参数上有 Reques
  • BAPI_ACC_DOCUMENT_POST用法

    文章目录 1 Overall 2 Code 1 Overall The blog will demostrate how to use BAPI ACC DOCUMENT POST We use enhancement for it 2 C
  • 所有子集 剑指 Offer II 079

    我只是喜欢敲代码 目录 题目描述 AC代码 思路分析 题目描述 给定一个整数数组 nums 数组中的元素 互不相同 返回该数组所有可能的子集 幂集 解集 不能 包含重复的子集 你可以按 任意顺序 返回解集 示例 1 输入 nums 1 2
  • springboot多数据源配置

    之前在介绍使用JdbcTemplate和Spring data jpa时 都使用了单数据源 在单数据源的情况下 Spring Boot的配置非常简单 只需要在application properties文件中配置连接参数即可 但是往往随着业
  • Angular_构建&部署&多环境

    构建 构建 编译和合并 部署 与服务器整合 ng build 使用命令ng build进行构建 构建完成以后 会在项目中多出一个dist文件夹 部署 在服务器端新建一个文件夹client 将dist文件夹中的文件复制粘贴到cleint文件夹
  • TCP选项之SO_RCVBUF和SO_SNDBUF

    SO RCVBUF SO SNDBUF 先明确一个概念 每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区 TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态 接收缓冲