TCP的发送缓冲区和接收缓冲区

 

一个Socket两端,都会有Send和Recv两个方法,

如果client发送数据到server,那么就是客户端进程调用send发送数据,而Send的作用是将数据拷贝进入socket的内核发送缓冲区之中,然后send便会在上层返回。send方法返回之时,数据不一定会发送对端server上去。Send()仅仅是把应用层buffer的数据拷贝进socket的内核中,发送是TCP的是,和Send没有太大关系。

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

参考:

Socket一次最多接收KB的数据

https://www.cnblogs.com/csiwei-229958907/p/13530531.html

https://wenku.baidu.com/view/e5e91463b007e87101f69e3143323968011cf4be?aggId=e5e91463b007e87101f69e3143323968011cf4be

posted @ 2022-07-31 21:31  HelloWorld庄先生  阅读(2253)  评论(0编辑  收藏  举报