这里人多,大伙给我看看怎么回事。
两台机器都为win2000 advance server, 其中一台(A)运行一Socket Server程序,另一台(B)作为客户机。1、构造了一SYN包,由B发向A的socket server
2、A发回一“SYN+ACK”包 -> B这时,本来应该是B要构造一个ACK包发给A。但现在是B系统自已的TCP马上发了一个RST包给A。剩余的工作就没法进行了。不知道有那个大哥知道如何避免TCP对SYN+ACK作响应?用Raw Socket实现自个的TCP是否可行?

解决方案 »

  1.   

    tcp为保证数据正确发送采用超时重传而定义了以上协议字,在socket层的编成可以Raw Socket自已构造UDP包,利用象tcp那样的机制保证数据的正确到达,而你那样的是应用层的协议(构造了一SYN包),至于你想自己实现的tcp,应该是基于ip层的编程!haha!
      

  2.   

    你使用了TCP协议的标志字,使得系统认为这是TCP协议,所以自动回复了。你就不能不把它写成TCP?做一个你自已定议的协议标志字,系统认不出来就行了。
      

  3.   

    to : binarier(沙子):如果用自定义的协议类型,那另一端的TCP也不认了。
      

  4.   

    to  vtable9999(肝肝肝肝)
    首先你要清楚自己在那层上面定的协议!根据你的描述我的理解是:
    你想定义一些协议,利用tcp协议发送,但是你在发送的过程中,一方接受到数据后,还没以发送返回,由于tcp本身的机制立刻给发送方返回数据,导致你的流程无法做任何的事情,我的理解可能是因为分析协议字的错误,因为你的协议是syn +ack,而不是tcp 机制的ack,因为你是在应用层上面定义的协议,就应该在应用层上分析协议,所以你分析的时候如果是tcp的ack你不做处理,只要分析到Sys+ack才做处理,这样流程就可以继续下去。不过我不知道你这样做有没有意义。
    B(Syn应用层的协议)      A(Syn +ack)应用层的协议
      |                      |
     tcp(tcp syn)           tcp(tcp syn ack)
      |                      |
      ip                    ip
      |                      |
      ------ 链路-------------
      

  5.   

    to cococut(往事如屁!!!) :sorry, 看来我的表达能力实在差劲~~~~~其实我是在客户端自己实现TCP协议,不想要系统本身的TCP协议栈对数据包进行处理.
         B机                    A机 
         ↓                     ↑
         ↓                     ↑ 
    TCP SYN Packet              ↑ 
         ↓                     ↑
         ↓                     ↑                     
    -------------------------------------
         ↓ (System TCP)        ↑(System TCP)
         ↓                     ↑
         ip                     ip
          --------------------->
               链路     B机                    A机 
         ↑                     ↓
         ↑                     ↓ 
         ↑                     ↓
         ↑                     ↓
         ↑                     ↓
    -------------------------------------
         ↑ (System TCP)     SYN+ACK (System TCP)
         ↑                     ↓
         ip                     ip
          <---------------------
               链路
         B机                    A机 
         ↓                     ↑
         ↓                     ↑ 
         ACK                    ↑ 
         ↓                     ↑
         ↓                     ↑                     
    -------------------------------------
        RST (System TCP)*       ↑(System TCP)
         ↓                     ↑
         ip                     ip
          --------------------->
               链路我不想让系统发注有*号那个RST包
      

  6.   

    A(server) tcp层编程;(socket)
    B (client)  ip层;(不能socket,因为在创建socket的时候要指定是tcp,udp协议,除组播是ip层,不过可以socket,因为指定udp),
    我好像是看过csdn上以前有人有过ip层编程的代码,找找看!),客户端接受到服务器端的数据包,首先分析ip头,接着是tcp头,一直往上!没有接触过ip层的编程,不了解那些api可以提供!关注你的问题!goog luck!
      

  7.   

    to  cococut(往事如屁!!!) :大概Raw Socket干不了这事,看来我得找些NDIS方面的资料了
      

  8.   

    你的B 在listen的时候要对所有的数据报进行截获,在应用层之前,这样就不会收到RST的回复了