2016-12-14 3 views
0

Если вы пишете базовый TCP-сервер и клиент python, вам нужно будет самостоятельно добавить ответы SYN, SYN ACK и ACK или позаботиться о нем сокет-модулем?Сеть TCP - Вручную программа SYN, SYN ACK, ACK?

Если вам нужно написать это самостоятельно, было бы так просто, как что-то в этом роде?

Клиент:

#set up clientSocket 

data = "SYN" 
clientSocket.send(data.encode('utf-8')) 
if((clientSocket.recv(1024)).decode('utf-8') == "SYN ACK") { 
    data = "ACK" 
    clientSocket.send(data.encode('utf-8')) 
} 

и сервер реагирует аналогичным образом с проверкой, если RECV является SYN, а затем отправить SYN ACK. Если это не правильный способ его реализации? Не пропустил приведенный выше код, не беспокоился о том, что синтаксис на 100% правильный, просто интересует логику за ним

+0

Прочтите https://docs.python.org/2/library/socket.html. У него есть примеры. –

ответ

3

SYN и ACK обрабатываются операционной системой без прямого вмешательства пользователя. Пользовательская программа не требуется и не может отправлять исходные пакеты подтверждения SYN, SYN-ACK, ACK.

Первоначальный SYN отправляется от имени клиента в результате socket.socket.connect().

Первоначальный SYN-ACK отправляется от имени сервера в результате socket.socket.listen().

+0

Незначительный nitpick: 'SYN-ACK' отправляется как следствие' socket.listen() ', а не' socket.accept() '. После того, как вы сделаете прослушивающий сокет, ОС завершит рукопожатие автоматически, а 'socket.accept()' просто используется для получения входящего соединения. – Barmar

+0

Спасибо, @Бармар! –