wireshark로 tcp 패킷 공부하기

jinwook han·2020년 11월 30일
0

https://en.wikiversity.org/wiki/Wireshark/TCP

위 링크에 있는 방법을 그대로 따라했습니다.

먼저 telnet 명령어를 실행한다.

telnet [www.google.com](http://www.google.com/) 80 

그 후 어떤 패킷들이 오고 갔는지, wireshark로 확인한다.

three way handshake로 연결을 맺는 과정

(1) TCP SYN 패킷 분석

내 맥 컴퓨터가 구글 서버로 syn 패킷을 전송했다.

Observe the Source address.

→ 172.30.1.10

→ 링크 문서에 따르면 위 ip는 내 맥 컴퓨터의 맥 주소.

Observe the Destination address

→ 172.217.174.100

→ 링크 문서에 따르면 위 ip는 게이트웨이의 맥 주소.

Observe the Source port.

→ 50897

→ 맥 컴퓨터가 동적으로 결정한 포트.

Observe the Destination port.

→ 80

→ 도착지 서버의 포트

Observe the Sequence number.

→ 0이다. (상대적 시퀀스 번호)

→ 실제 클릭해서 보면 1e 49 8e 88 로 나온다.

(2) TCP SYN, ACK 패킷 분석

구글 서버 → 내컴퓨터로 (syn, ack) 패킷을 보냈다.

Observe the Source address.

→ 게이트웨이의 맥 주소.

Observe the Destination address

→ 내 맥 컴퓨터의 맥 주소.

Observe the Sequence number.

→ 0 (상대적 번호)

→ 45 25 da 28 (절대 번호)

Observe the Acknowledgement number

→ 1 (상대적 번호)

→ 1e 49 8e 89 (절대 번호)

→ 첫번째 패킷 전송의 sequence 번호(1e 49 8e 88)보다 1 증가했다.

Observe the flag settings.

→ syn, ack이 1로 설정되었다.

(3) TCP ACK 패킷 분석

내 맥 컴퓨터 → 구글 서버로 ack 패킷을 보냈다

Observe the Sequence number.

→ 1 (상대적 번호)

→ 1e 49 8e 89 (절대 번호)

→ 첫 번째 패킷(1)과 비교하여, 1 증가했다.

→ 두 번째 패킷(2)의 ackowledge number와 같은 값이다.

Observe the Acknowledgement number.

→ 1 (상대적 번호)

→ 45 25 da 29 (절대 번호)

→ 두 번째 패킷(2)의 sequence number에 1을 더한 값이다.

Observe the flag settings.

→ acknowledgement가 1로 설정됐다.

4 way handshake로 연결을 끊는 과정

커넥션을 일정시간 이상 열었더니, 구글 서버가 먼저 연결을 끊었다.

(1) TCP FIN, ACK 패킷 분석

구글 서버 → 내 컴퓨터로 fin, ack 전송

Observe the Sequence number.

→ 1 (상대 번호)

→ 45 25 da 29 (절대 번호)

→ 연결을 맺는 과정((3) 내 맥 컴퓨터 → 구글 서버로 ack 패킷을 보낸다)에서의 마지막 패킷 acknowledge number와 같다.

Observe the Acknowledgement number.

→ 1 (상대 번호)

→ 1e 49 8e 89 (절대 번호)

→ 연결을 맺는 과정에서의 마지막 패킷((3) 내 맥 컴퓨터 → 구글 서버로 ack 패킷을 보낸다) sequence number와 같다.

(2) TCP ACK 패킷 분석

내 컴퓨터 → 구글 서버로 ack 패킷을 전송했다.

Observe the Sequence number.

→ 1 (상대 번호)

→ 1e 49 8e 89 (절대 번호)

→ 직전 구글 서버 → 내 컴퓨터로 fin, ack 전송에서의 acknowledge number와 같다.

Observe the Acknowledgement number.

→ 2 (상대 번호)

→ 45 25 da 2a (절대 번호)

직전 구글 서버 → 내 컴퓨터로 fin, ack 전송에서의 sequence number에 1 더한 값이다.

(3) TCP FIN, ACK 패킷 분석

내 컴퓨터에서 구글 서버로 (fin, ack) 패킷을 전송했다.

Observe the Sequence number.

→ 1 (상대 번호)

→ 1e 49 8e 89 (절대 번호)

→ 직전 내 컴퓨터 → 구글 서버로 ack 패킷 전송 의 sequence number와 같다.

Observe the Acknowledgement number.

→ 2 (상대 번호)

→ 45 25 da 2a (절대 번호)

→ 직전 내 컴퓨터 → 구글 서버로 ack 패킷 전송 의 ackowledge number와 같다.

(4) TCP ACK 패킷 분석

구글 서버 → 내 컴퓨터로 ack 패킷을 전송했다.

Observe the Sequence number.

→ 2 (상대 번호)

→ 45 25 da 2a (절대 번호)

→ 직전 (3) 내 컴퓨터에서 구글 서버로 (fin, ack) 패킷 전송 의 ackowledge 번호와 같다.

→ (2) 내 컴퓨터 → 구글 서버로 ack 패킷 전송 의 ackowledge number와 같다.

Observe the Acknowledgement number.

→ 2 (상대 번호)

→ 1e 49 8e 8a (절대 번호)

→ 직전 (3) 내 컴퓨터에서 구글 서버로 (fin, ack) 패킷 전송 의 sequence 번호에 1 더한 값이다.

tcp 패킷의 sequence number는 전에 수신한 패킷의 acknowledge number와 같다.

tcp 패킷의 acknowledge number는 전에 수신한 패킷의 sequence number에 1을 더한 값이다.

단, 연결 종료의 시작에서 acknowledge number는 전에 수신한 패킷의 sequence number와 같다.

정리

시퀀스 번호와 ack 번호는 다음 규칙을 가진다.

  • SYN, FIN을 전송하면 송신자의 다음 Seq No는 1씩 증가하고, 데이터를 전송하면 다음 Seq No는 전송한 데이터의 크기만큼 증가한다.
  • SYN, FIN을 수신하면 수신자의 Ack No는 1씩 증가하고, 데이터를 수신하면 Ack No는 수신한 데이터의 크기만큼 증가한다.
  • 수신자의 Ack No는 다음에 송신자가 전송할 Seq No(Next Seq No)와 같다.

-- 책 '보안 실무자를 위한 네트워크 공격패킷 분석', 39P

참고자료

https://mindnet.tistory.com/entry/네트워크-쉽게-이해하기-22편-TCP-3-WayHandshake-4-WayHandshake

https://en.wikiversity.org/wiki/Wireshark/TCP

https://datatracker.ietf.org/doc/html/rfc793

0개의 댓글