2016-12-14 25 views
0

基本的なPythonのTCPサーバーとクライアントを作成していた場合は、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

マイナーニックピック: 'SYN-ACK'は' socket.accept() 'ではなく' socket.listen() 'の結果として送られます。待ち受けソケットを作成すると、OSは自動的にハンドシェイクを完了し、 'socket.accept()'は着信接続を取得するために使用されます。 – Barmar

+0

ありがとう、@バーマール! –

関連する問題