Wireshark 실습: TCP

1. TCP 프로토콜 분석

Wireshark를 활용해서, TCP의 연결설정, 연결해제, 재전송 과정을 분석한다.

 

 

1.1 TCP 연결 설정(3-way-handshaking)

클라이언트인 192.168.0.1⁠과 서버 ⁠10.10.10.1⁠이 TCP 연결을 하는 과정이다.

flow graph로 확인한 TCP 연결 설정 과정

 

 

1) SYN 패킷 분석

SYN 요청을 보내는 No.1 패킷에 분석을 진행하였다.

No.1 패킷

출발지 포트는 49859에서 도착지 포트는 80번 포트로 패킷 전송(클라이언트는 동적 포트 번호 중에서 임의의 포트 번호로 할당됨)

 

No.1 패킷

실제 순서 번호는 3588415412로 설정되어있는것을 확인(와이어 샤크에는 보기 편하도록 상대적인 순서 번호를 제공한다.)

 

No.1 패킷

SYN 플래그 비트도 1으로 설정되있는것을 확인

 

 

2) SYN + ACK 패킷 분석

SYN + ACK 요청을 보내는 No.2 패킷에 분석을 진행하였다.

No.2 패킷

출발지 포트는 80에서 도착지 포트는 49859번 포트로 패킷 전송

 

No.2 패킷

실제 순서 번호는 697411256로 설정되어있으며, 확인응답 번호는 다음으로 받기를 기대하는 순서인 3588415413(3588415412 + 1) 인것을 확인

 

No.2 패킷

SYN, ACK 플래그가 1로 설정되있는것을 확인

 

 

3) ACK 패킷 분석(No.3)

ACK 요청을 보내는 No.3 패킷에 분석을 진행하였다.

No.3 패킷

출발지 포트는 49859에서 도착지 포트는 80번 포트로 패킷 전송

 

No.3 패킷

실제 순서 번호는 3588415413로 설정되어있으며, SYN+ACK 패킷에서 697411256를 받았으므로, 확인응답 번호는 다음으로 받기를 기대하는 순서인 697411257( 697411256 + 1)

 

No.3 패킷

ACK 플래그가 1로 설정되있는것을 확인

 

 

1.2 TCP  연결 해제(4-way-handshaking)

Flow Graph

 

1) FIN + ACK 패킷 분석(No.1)

No.1 패킷

출발지 포트 80번에서 도착지 포트 3372번 으로 패킷 전송

 

No.1 패킷

이전 응답에 대한 확인응답과 ACK플래그를 1로 설정하고, 연결을 종료하기 위한 FIN 플래그를 1로 설정한다.(액티브 클로즈)

 

 

2) ACK  패킷 분석(No.2)

No.2 패킷

출발지 포트 3372번에서 도착지 포트 80번 포트로 패킷 전송

 

No.2 패킷

연결 종료에 대한 확인 응답을 위해 ACK 플래그를 1로 설정

 

 

3) FIN + ACK  패킷 분석(No.3)

No.3 패킷

출발지 포트 3372번에서 도착지 포트 80번 포트로 패킷 전송

 

No.3 패킷

일정시간이 지나 종료 준비가 되었을때, Ack 플래그와 Fin 플래그를 1로 설정(패시브 클로즈)후 전송한다.

이후에는 일정시간 대기한 뒤 연결을 종료한다.(FIN + ACK 패킷을 상대가 받지 못할수도 있으므로)

 

4) ACK  패킷 분석(No.4)

No.4 패킷

출발지 포트 80번에서 도착지 포트 3372번 으로 패킷 전송

 

No.4 패킷

종료응답을 잘 받았다는 의미의 ACK 응답을 보내고 바로 연결을 종료한다.

 

 

1.2 TCP  재전송(retransmission)

분석에 사용한 패킷

1) ACK 응답 부재로 인한 재전송(전송 중 패킷이 유실된 경우)

80번 포트에서 54436포트로 Ack=1을 요청하는 1번 패킷을 전송한다.

 

54436번 포트에서 80포트로 Seq=1으로 설정하여 2번 패킷을 전송한다. 하지만 해당 패킷은 80번 포트에 도달하지 못하고 유실된다.

 

ACK 응답을 받지못한 80번포트는 Ack=1 응답을 요청하는 3번 패킷을 54436포트에게 재전송한다. 그림에서 [TCP Previous segment not captured]를 통해 ACK응답을 받지 못한것으로 보인다. 

 

Ack=1 응답을 받은 54436포트는  2번패킷과 동일한 Seq=1인 4번 패킷을 재전송한다. 그림에서 [TCP Dup ACK2#1]를 통해 해당 패킷을 두번째 중복된 ACK 요청이라는것으로 확인할수 있다.

 

 

2) 올바르지않은 순서번호로 인한 재전송

4번패킷에서 Ack=1461을 요청했으나, 5번패킷에서 Seq=16061이라는 패킷을 보내고 있으므로, 순서번호가 올바르지 않다.

 

54436포트는 Ack=1461을 요청하는 패킷을 다시한번 재전송한다. 그림에서 [TCP Dup ACK2#2]를 통해 해당 패킷을 두번째 중복된 ACK 요청이라는것으로 확인할수 있다.

 

6번패킷에서 Ack=1461을 요청했으나, 7번패킷에서 Seq=17521이라는 패킷을 보내고 있으므로, 순서번호가 올바르지 않다.

 

8번패킷에서는 마찬가지로 Ack=1461 패킷을 요청하고 있다.

 

3번의 중복된 ACK 세그먼트를 수신하여, 빠른 재전송과 더불어 회복 알고리즘이 수행되었다.

이를통해, 빠른재전송 방식으로 54436포트가 요청했던 Ack=1461 패킷을 전송한것을 확인할수 있다.

 

또한 [TCP  Fast Restranmission]을 통해 빠른 재전송이 수행되었다는것도 확인할수 있다.

 

 

참고자료

[1] 혼자 공부하는 네트워크. 강민철 저. 한빛미디어, 2024.