Установление TCP-соединения - PullRequest
3 голосов
/ 01 ноября 2011

Я пытаюсь подключиться к удаленному хосту через программу java:

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

Я получаю следующее исключение:

java.net.ConnectException: Connection refused: connect

Трассировка IP-пакетов между моим компьютером иудаленный хост, я вижу, что мой компьютер отправил три пакета SYN и три раза получил пакеты [RST, ACK].

Почему мой компьютер отправляет три пакета SYN, несмотря на то, что установлено только одно соединение?

Это из-за стека TCP / IP операционной системы?

Или из-за реализации Java класса java.net.Socket ?

1 Ответ

2 голосов
/ 02 ноября 2011

Повторная передача SYN, вероятно, выполняется в соответствии с RFC793 :

TCP должен восстановить данные, которые повреждены, потеряны, продублированы, или же доставлено из строя системой интернет-связи. это достигается путем присвоения порядкового номера каждому октету и требует положительного подтверждения (ACK) от получение TCP. Если ACK не получен в течение тайм-аута интервал, данные передаются повторно.

Имеет смысл, что SYN будет повторен, так как возможно, что по какой-то причине ACK просто потерялся. Количество повторных передач и время ожидания зависят от реализации TCP, а не от Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...