2016-12-14 1 views
0

기본 파이썬 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를 보내는 경우 확인과 유사한 방법으로 응답하는 서버. 그렇지 않다면 그것을 구현하는 올바른 방법은 무엇입니까? 위의 코드를 실행하지 않은 상태에서 문법에 대해 신경 쓰지 않아도됩니다.

+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

감사합니다, @Barmar! –

관련 문제