IP层:我们知道在TCP/IP协议中,在网络中是以IP数据包传输的,也既是将
原来应用层的一个BUF,分成几块小BUF,经过各曾协议,最后封状进IP
协议的数据包中。
TCP层:那么当一放接受数据时,在IP层收到的就可能是无序的数据包,到TCP层时再将
其有序化,然后交给应用层。
问题1:那么如果TCP层中缺少了一个数据包,使其不能有序化,那他不就是要阻塞在缓冲区,直到
那个数据包到来?????如果这样效率不是太低?
应用层:
问题2.是不是每个SOCKET连接 WINDOWS都默认给起8K缓存,还是共享8K??,如果是共享不会发生数据混乱?
问题3.RECV操作是当每个缓存有数据时就立刻触发吗??
即有1K数据就立刻接收,还是等8K满了在收??
说法不对的地方还望指点!
谢谢!
1) 一定是要等到数据完整才会送入接收缓冲内,否则 TCP 流将不连续,这不符合TCP 协议
2) 应该是每个套接字独享自己的缓冲区,接收缓冲和发送缓冲都是独立的
3) 当有数据时会立刻触发, 即使只收到 一个字节
我觉得如果TCP封包不完整,例如前面的封包丢失,那么窗口就会一直等待,并要求重发。不会提交后面的封包。立即返回只是返回前面连续的数据