TCP 3-Way Handshake

2017. 7. 17. 21:07NetworkHacking/Network




#실습에 앞서 방화벽에서 RST패킷의 전송을 차단해야 합니다

#iptables -A OUTPUT -o eth0 -p tcp --tcp-flags RST RST -j DROP

#iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP



이전에 만들어 놓았던 TCP서버 파일을 이용해 2개의 서버에 대해 세션을 형성하도록 하겠습니다 

#python3 tcp_server.py => 서버와 포트번호 개방 ( 2개의 가상머신에서 이루어져야함 )


1> SYN패킷 전송 ( Client -> Server )

2> SYN+ACK패킷으로 응답 ( Server -> Client )

3> ACK패킷 전송 ( Client -> Server )

4> ACK + FIN ( Server -> Client ) //TCP세션연결 후 자동 접속 종료되게 프로그래밍 하였음



[ 그림1 ]


#1 SYN    클라이언트에서 서버로 SYN패킷을 전송한다

Flag = 2 ( SYN )

Sequence Number = 1


#2 SYN + ACK    서버는 클라이언트에게 SYN패킷을 받았다고 응답해준다 ( 클라이언트의 시퀀스 번호 +1증가 시킨다 )

Flag = 18 ( ACK + SYN )

Sequence Number = 2836578416 ( 서버에서 생성한 값 )

Acknowledge = 2    ( 서버에서 클라이언트에게 보내는 값 // Client의 ISN = ISN + 1 )


[ 그림2 ]


#1 ACK    클라이언트는 서버에서 보낸 SYN+ACK에 대한 응답으로 ACK패킷을 서버에게 전송한다 ( 서버의 시퀀스번호 +1증가시킨다 )

Flag = 16 ( ACK)

Sequence Number = 2

Acknowledge = 2836578417    ( 서버의 ISN + 1 값을 보낸다 )


#2 ACK + FIN    서버는 클라이언트에서 보낸 ACK에 대한 응답으로 ACK패킷을 보냄 = 세션연결 성공 !

( ※ 서버에서 세션연결 후 종료되도록 설정해놓았더니, FIN 패킷과 함께 오는 현상 발생 )

Flag = 17 ( ACK + FIN )

Sequence Number = 2836578416

Acknowledge Number = 2