SteffenLee

[NetWork]4Way-Handshake 본문

NetWork

[NetWork]4Way-Handshake

SteffenLee 2018. 7. 26. 16:55

오늘은 어제에 이어서 3 Way-Handshake의 예제를 보도록 하겠습니다.


그전에 오늘은 nc의 통신을 캡쳐해서 예제를 볼 거기에 TCP의 연결 종료 방식인 4 Way-Handshake에 대해 알아보겠습니다.



4 Way-Handshake

4 Way-Handshake 방식 설명

1. 클라이언트가 서버에게 FIN 신호의 패킷을 보내고 자기 자신은 FIN_WAIT_1 상태가 됩니다.

2. 서버는 FIN 패킷을 받고, ACK 패킷을 해당 클라이언트에게 보냅니다. 서버는 CLOSE_WAIT상태가 됩니다.

3. ACK 패킷을 받은 클라이언트는 서버가 FIN을 잘 받았다고 판단, 자신의 소캣상태를 FIN_WAIT_2로 변경합니다.

   그리고 서버의 FIN 패킷을 기다립니다.

4. 서버는 FIN 패킷을 보내고 소캣의 상태를 LAST_ACK로 전환합니다.

5. FIN 패킷을 받은 클라이언트는 소캣 상태를 TIME_WAIT로 전환하고, ACK를 전송한다.

(TIME_WAIT 상태가 지속되면 CLOSED된다.)

6. 서버는 ACK 패킷을 받은 소캣의 상태를 CLOSED로 전환한다.



간단한 TCP 통신 예제


예제 환경 

VMware


사용 OS

클라이언트 : 칼리 리눅스(192.168.0.128)

서버 : 윈도우 7(192.168.0.200)


통신 방법

Netcat


Netcat 서버 설정

Netcat 서버를 열어줍니다.



Netcat 접속


접속하기 전에 와이어 샤크를 켜고 접속합니다.(3 Way-Handshake 방식 확인을 위해)

접속해줍니다.


패킷 캡쳐가 됐는지 확인해줍니다.


메세지 보내기

메세지 보내기


도착확인


패킷 확인



접속 종료 후 패킷 확인

종료

패킷 확인



간단한 패킷 분석 


간단하게 시퀀스 넘버가 오가는 것만 해서 분석해보겠습니다.



번호

출발지 IP

도착지 IP  

FLAG 

Sequence number

Acknowledgment number 

 1

 192.168.0.128

192.168.0.200 

SYN 

3923049301

 2

192.168.0.200 

192.168.0.128 

SYN, ACK 

1355773071

3923049302

 3

192.168.0.128

192.168.0.200 

ACK 

3923049302

1355773072

 4

 192.168.0.128

192.168.0.200 

PSH, ACK 

3923049302

1355773072

 5

 192.168.0.128

192.168.0.200 

PSH, ACK 

3923049302

 1355773072

 6

192.168.0.200

192.168.0.128 

ACK

 1355773072

3923049308

 7

 192.168.0.128 

 192.168.0.200 

FIN,ACK

 3923049308

1355773072 

 8

 192.168.0.200 

192.168.0.128  

 ACK

 1355773072

3923049309

 9

 192.168.0.200 

192.168.0.128  

 FIN,ACK

 1355773072

 3923049309

 10

 192.168.0.128 

192.168.0.200  

 ACK

3923049309 

1355773073


표를 보시면 1~3번은 지난 포스팅에서 보신대로 3 Way-Handshake 방식입니다.

4~6번을 보시면 PSH라는 게 보이는데 이것은 버퍼링된 데이터를 푸쉬 해주는 flag입니다.

여기서 주목하셔야할게 5~6번 시퀀스 넘버와 ACK 넘버를 보시면 클라이언트가 서버에게 PSH해주고 서버가 ACK를 할 때 6번에 ACK넘버에는 3923049308라는 값이 있습니다. 원래대로라면  +1 한 값이어야 하지만, 우리는 

서버에게 Hello라는 문자열을 전송했습니다. Hello 자체로 보면 5바이트지만 뒤에 NULL값이 있어 총 6바이트입니다. 그래서 ACK넘버가 3923049303이 아닌 3923049308이 된 것입니다.


그리고 7~8번을 보시면 위에서 설명한 4 Way-Handshake 방식이 있습니다.

설명은 위를 참조하시기를 바랍니다.


'NetWork' 카테고리의 다른 글

[NetWork]3 Way-Handshake  (0) 2018.07.25
Comments