博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP的发送缓冲区和接收缓冲区
阅读量:6997 次
发布时间:2019-06-27

本文共 896 字,大约阅读时间需要 2 分钟。

TCP协议是作用是用来进行端对端数据传送的,那么就会有发送端和接收端,在操作系统有两个空间即user space和kernal space。

每个Tcp socket连接在内核中都有一个发送缓冲区和接收缓冲区,TCP的全双工的工作模式以及TCP的流量(拥塞)控制便是依赖于这两个独立的buffer以及buffer的填充状态。

单工:只允许甲方向乙方传送信息,而乙方不能向甲方传送 ,如汽车单行道。

半双工:半双工就是指一个时间段内只有一个动作发生,甲方可以向乙方传送数据,乙方也可以向甲方传送数据,但不能同时进行,如一条窄马路同一时间只能允许一个车通行。

全双工:同时允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。

一个socket的两端,都会有send和recv两个方法,如client发送数据到server,那么就是客户端进程调用send发送数据,而send的作用是将数据拷贝进入socket的内核发送缓冲区之中,然后send便会在上层返回。

也就是说send()方法返回之时,数据不一定会

发送到对端即服务器上去(和write写文件有点类似),send()仅仅是把应用层buffer的数据拷贝进socket的内核发送buffer中,发送是TCP的事情,和send其实没有太大关系。

接收缓冲区把数据缓存入内核,等待recv()读取,recv()所做的工作,就是把内核缓冲区中的数据拷贝到应用层用户的buffer里面,并返回。若应用进程一直没有调用recv()进行读取的话,此数据会一直缓存在相应socket的接收缓冲区内。对于TCP,如果应用进程一直没有读取,接收缓冲区满了之后,发生的动作是:收端通知发端,接收窗口关闭(win=0)。这个便是滑动窗口的实现。保证TCP套接口接收缓冲区不会溢出,从而保证了TCP是可靠传输。因为对方不允许发出超过所通告窗口大小的数据。 这就是TCP的流量控制,如果对方无视窗口大小而发出了超过窗口大小的数据,则接收方TCP将丢弃它。

查看socket发送缓冲区大小,cat /proc/sys/net/ipv4/tcp_wmem

 

转载地址:http://wkovl.baihongyu.com/

你可能感兴趣的文章
DG_Oracle DataGuard Primary/Standby物理主备节点安装实践(案例)
查看>>
mysql中count的用法
查看>>
javaScript 对象 escape 和 toGMTString
查看>>
转帖-SQL Server 2005 镜像构建手册
查看>>
配置windows 2008 R2远程桌面授权,激活授权许可服务器。
查看>>
WindowsTime服务设置
查看>>
linux passwd shadow usermod groupmod id bash变量类型、定义、引用、撤销
查看>>
API开创基底细胞癌手术切缘采集,改善过度医疗现状
查看>>
Cisco中PPP协议的简明配置
查看>>
Linux中iscsi
查看>>
在XenCenter中使用命令删除XenServer虚拟机快照
查看>>
***使用Fiddler进行IOS APP的HTTP抓包
查看>>
文件压缩
查看>>
AGG第五十课 任意多边形的裁剪
查看>>
python之(改写成了类)用smtplib模块实现第三方smtp发送邮件
查看>>
Linux实时查看Tomcat调试信息
查看>>
python问题解决汇总
查看>>
Kubernetes集群安装部署
查看>>
ipvsadm 命令参考
查看>>
Kubernetes集群安装部署
查看>>