TCP连接建立

时间:2011-11-01 18:02:41

标签: java tcp connection tcp-ip

我正在尝试通过java程序连接到远程主机:

socket = new java.net.Socket(host,port);     

我收到以下异常:

java.net.ConnectException: Connection refused: connect

在我的计算机和远程主机之间跟踪IP数据包,我看到我的计算机发送了三次SYN数据包,并且三次收到[RST,ACK]数据包。

为什么我的计算机发送三个SYN数据包,尽管只建立了一个连接?

是由于OS的TCP / IP堆栈吗?

或者是由于Java实现java.net.Socket类?

1 个答案:

答案 0 :(得分:2)

可能需要重新传输SYN以符合RFC793

  

TCP必须从损坏,丢失,重复的数据中恢复,   要么       由互联网通信系统发出故障。这个       通过为每个八位字节分配序列号来实现       发送,并要求来自的肯定确认(ACK)       接收TCP。如果在超时内未收到ACK       interval,重传数据。

有意义的是,SYN会被重试,因为无论出于什么原因,ACK都可能丢失。重传的次数和超时时间取决于TCP实现而不是Java。