본문 바로가기

CS/Computer Network

[네트워크] Ch2.x 와이어샤크를 이용한 패킷 분석 실습

 

본 글은 학교 네트워크 수업을 들으며, "Computer Networking: A Top-Down Approach 8ed(컴퓨터 네트워킹: 하향식 접근 제8판)"을 기반으로 공부한 내용을 정리한 글입니다.

 

Ch2.x 와이어샤크를 이용한 패킷 분석 실습

(전체 캡처 결과)

No. 2105, http 프로토콜에서 http request하는 패킷을 예시로 가지고 각 레이어별 헤더 내용을 분석함.

 

(1) HTTP

GET 방식에, http version1.1이다. URL/cart.php를 사용중이다.

Host : 요청한 서버의 도메인 명은 testphp.vulnweb.com이다.

User-Agent : 요청 클라이언트의 OSMozilla/5.0이다.

요청이기에 body는 비어져 있는 모습이다.

 

(2) TCP

출발지와 목적지 포트가 각각 14332, 80 포트이다.

sequence number : 1 -> 클라이언트가 서버에 전송한 첫 번째 패킷이라는 의미다. (상대적으로 그렇고, raw 값은 실제론 다르다.)

Acknowledgment Number : 1 -> 다음 시퀀스 번호가 상대적으로 1 큰 위치라는 것을 알려준다.

header length20 바이트임을 보여주고 있다.

flag0x018인데, PSHACK1인 것이다. GET method를 사용했기에 PSH 1이고, 이전에 요구를 잘 수신했기에 ACK1이다.

window : 1026 -> 한 번에 전송할 수 있는 데이터 양을 1026 바이트로 하겠다는 것이다.

checksum 결과로 오류가 검출되지 않았음을 보여준다.

Urgent Pointer은 그 값이 0으로 즉 사용되지 않았다.

 

(3) IP

버전은 4인 것을 확인할 수 있다.

헤더 길이는 20 바이트가 나왔으며,

헤더 + 데이터 총 길이는 520 바이트가 나왔다. 즉 데이터가 500바이트 나왔다고 추측 가능하다.

이 패킷을 식별하기 위한 고유 identifier0xddda이고,

flag0x2로 단변화를 하면 안 된다고 알려주고 있다.

또한 offset0으로 이는 해당 패킷이 단편화중에서 첫 번째라는 것을 의미한다.

Time to live : 128 -> 이 값이 128이면 일반적으로 windows OS의 기본 값으로, 이를 통해 목적지 장치의 OSwindows라는 것을 유추 가능하다.

해당 프로토콜의 상위 프로토콜은 TCP이며

오류 검출 체크섬은 0으로 그 기능이 꺼져 있다.

마지막으로 출발지 ip와 목적지 ip가 각각 220.74.103.206 (pc), 44.228.249.3 (접속한 사이트) 임이 나와 있다.

 

(4) Ethernet

destination : destination MAC address70:30:5d:8a:e2:73 임을 볼 수 있다. 이 패킷은 GET method를 사용했으므로, 즉 사이트를 전송해준 장치의 MAC 주소이다.

source : source mac address70:85:c2:32:60:1d 임을 볼 수 있다. 이 패킷은 GET method를 사용했으므로, 즉 사이트 요청을 한 장치 다시말해 내 pcMAC 주소라고 할 수 있다.

type : typeIPv4 (0x0800)가 나왔으므로, 상위 계층 프로토콜에 IPv4가 사용되고 있음을 나타낸다.

 

TCP threeway handshake 과정 분석

(1) TCP에서의 threeway handshake 과정 분석

http 연결에서는 시작 단계에서 상태 확인과 순서 보장 등을 위해 tcp 연결이 필요한데, 이 과정이 3번 주고받고 해서 TCP threeway handshake라 부른다. 이 과정은 3단계로 나뉜다.

SYN : 클라이언트가 서버에 연결 요청을 위해 SYN 플래그를 설정한 패킷을 보낸다. 이 단계에서 클라이언트는 서버와의 연결을 시작하려고 그 신호를 보낸다고 할 수 있다.

SYN-ACK : 서버가 클라이언트의 SYN 패킷을 수신하고, 요청을 잘 받았다는 의미와 수락하는 의미로 SYNACK 플래그를 모두 설정한 패킷을 클라이언트에 보낸다.

ACK : 마지막으로 클라이언트는 서버의 SYN-ACK 패킷을 수신 후 다시 잘 받았다는 의미로 ACK 플래그를 설정한 패킷으로 응답하고, 이렇게 연결이 완료된다.

 

(2) 캡쳐한 내용에서 threeway handshake 과정이 나타난 패킷들의 TCP 헤더 필드의 변화 분석

(2) – 1. No. 2093 [SYN]

(2) – 2. No.2103 [SYN, ACK]

(2) – 3. No.2104 [ACK]

여러 변화가 있지만, 실제로 TCP threeway handshake 과정에 있어서 의미 있는 변화는 패킷 내 flags의 변화라고 할 수 있다. flags가 처음 패킷에선 0x002 SYN flag1, 클라이언트가 서버에 연결을 요청하며 연결을 시작하겠다는 의사를 나타내고 있다. 두 번째 패킷에서는, 서버가 클라이언트의 SYN 패킷을 받아서 연결을 수락한다는 응답으로 SYNACK flag를 모두 1로 하여, 0x012flag를 설정한 패킷을 클라이언트에게 보내고 있다. 마지막 패킷에서는, 클라이언트가 서버의 SYN-ACK 패킷을 수신하고 그에 대해 확인의 응답으로 ACK flag1로 설정한 패킷, flag 0x010 패킷으로 응답하여 TCP 연결을 완료한 모습이다.