书上三次握手的步骤是:
1、客户通过connect发送一个“同步”,请求连接
2、服务器通过listen接受到请求,并确认(accept)客户的“同步”请求,同时自己也发送一个“同步”包。
3、客户确认服务器的“同步”
现在服务器的连接部分程序是:
listen(...);
accept(...);
客户端只有一个:connect(...);那么我想问:这里只有accept和connect两个函数发送过数据包,何来三次握手呢?难道connect函数会发送两次数据包?

解决方案 »

  1.   

    那么我想问:这里只有accept和connect两个函数发送过数据包,何来三次握手呢?难道connect函数会发送两次数据包?/////////////////////////////////////////////////////////////////////////connect只发一次包,3次握手只是一个比喻,并不是互相发了3次包
      

  2.   

    connect就完成了三次握手的过程。
    connect等api函数封装了很多细节的东西
      

  3.   

    winsock API 已经完成协议该做的内容了
      

  4.   

    connect
    client  : syn
    server  : syn + ack
    client  : ackaccept  :返回正常使用流的服务器端socket
      

  5.   

    三次握手完成后,在服务器的缓冲池里就已经有一个已建立的连接了,通常这个池有5个
    然后在服务器资源允许的情况下,去accept来清空一个缓冲池里的已连接,并提供服务
    三次握手必须立即完成,有超时的,在xp下,半连接是有限制的,是10个,而且通过试验,其三次握手竟然到10分钟时才超时,非常限制使用.
      

  6.   

    三次握手是协议栈实现的,和accept和connect无关的,上面两个函数只是封装的api
      

  7.   

    大家上面已经说的很清楚了,不要混淆API和底层协议的概念,3次握手不是由我们自己来作的,在你调用API的同时API已经帮我们做好这些了(除非你要开发一些底层的特殊功能,比如作DDOS攻击程序什么的)。
      

  8.   

    你可以用pcap发送原始套接字,模拟一下3次握手的过程,这样了解会更深入一点