在网络是怎样连接的 户根勤 著 周自恒 译 这本书中,有这样两处我觉得互相矛盾:
1,“因此,更新窗口大小的时机应该是接收方从缓存区中取出数据传递给应用程序的时候
这个操作是接收方应用程序发出请求时才会进行的”
2,“应用程序有可能在收到FIN为1的包之前就来读取数据,这时读取数据的操作会被挂起,等到FIN包到达再继续执行”
我想要知道的是协议栈和应用程序数据交换的细节,应用程序可以拿浏览器向web服务器请求读一个网页的数据举例
协议栈在内存是不是有一个接收缓冲区,应用程序在内存是不是也有一个接收缓冲区?
应用程序是调用Socket的read函数,然后就会把协议栈接收缓冲区内的数据转移到应用程序的接收缓冲区,那么1是对的,2为什么说收到FIN为1的包之前读取数据的操作会被挂起?那不是在结束通信之前应用程序都不能读取?
如果协议栈的接收缓冲区满了,应用程序没有read,协议栈会通知应用程序吗?应用程序在读网页数据的过程中,是不是要多次运行read还是在connect(),write()之后只需要运行一次read?