随笔分类 -  网络

摘要:什么是滑动窗口协议?     一图胜千言,看下面的图。简单解释下,发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口。发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。下面图中的4,5,6号数据帧已经被发送出去,但是未收到关联的ACK,7,8,9帧则是等待发送。可以看出发送端的窗口大小为6,这是由接受端告知的(事实上必须考... 阅读全文
posted @ 2011-01-06 13:27 hjtc 阅读(22266) 评论(4) 推荐(4)
摘要:为什么要用WSAAsynSelect? 服务端的IO模型,常见的是select、poll、epoll这种select模型,或是IOCP,AIO这种异步IO模型,这在服务器端无疑是合理的选择,那么客户端呢?用select或是AIO是否合理,或者是否有必要呢?考虑到客户端总是需要一个UI线程,如果需要用上面的解决方案,必然需要引入另外的线程来做这部分工作,线程之间的通信,同步资源,都是麻烦的东西。多线程的设计无疑使得程序变得复杂和难于调试,难道不能用单线程来实现整个客户端么?实际上是可以的,windows中提供的WSAAsynSelect就可以很方便的在一个线程中实现UI和异步IO的处理。WSAA 阅读全文
posted @ 2011-01-03 14:24 hjtc 阅读(1779) 评论(0) 推荐(1)
摘要:什么是keep-alive?   顾名思义即可,注意它只适用于TCP连接。系统会替你维护一个timer,时间到了,就会向remote peer发送一个probe package,当然里面是没有数据的,对方就会返回一个应答,这时你就知道这个通道保持正常。 有什么用呢?   考虑下面这个场景,端点A和端B开始连接,三次握手,建立好了一个稳定的双向通道。然后双方发送完初始的数据后,进入等待状态。这时候,... 阅读全文
posted @ 2010-12-24 17:35 hjtc 阅读(2508) 评论(0) 推荐(0)
摘要:其实就是翻译下msdn,没别的用,督促一下自己看的仔细些。 recv 从一个已经连接的或是已经绑定的socket中获取数据。 int recv( SOCKET s, char FAR *buf, int len, int flags); 参数 s     [in] socket id buf     [out] 缓存 len     [in]  缓存大小 flags     [in]  标识,用处... 阅读全文
posted @ 2010-12-24 15:09 hjtc 阅读(2194) 评论(0) 推荐(0)