본 글은 학교 네트워크 수업을 들으며, "Computer Networking: A Top-Down Approach 8ed(컴퓨터 네트워킹: 하향식 접근 제8판)"을 기반으로 공부한 내용을 정리한 글입니다.
Ch2.x 와이어샤크를 이용한 패킷 분석 실습
(전체 캡처 결과)
No. 2105의, http 프로토콜에서 http request하는 패킷을 예시로 가지고 각 레이어별 헤더 내용을 분석함.
(1) HTTP
GET 방식에, http version은 1.1이다. URL은 /cart.php를 사용중이다.
Host : 요청한 서버의 도메인 명은 testphp.vulnweb.com이다.
User-Agent : 요청 클라이언트의 OS는 Mozilla/5.0이다.
요청이기에 body는 비어져 있는 모습이다.
(2) TCP
출발지와 목적지 포트가 각각 14332, 80 포트이다.
sequence number : 1 -> 클라이언트가 서버에 전송한 첫 번째 패킷이라는 의미다. (상대적으로 그렇고, raw 값은 실제론 다르다.)
Acknowledgment Number : 1 -> 다음 시퀀스 번호가 상대적으로 1 큰 위치라는 것을 알려준다.
header length가 20 바이트임을 보여주고 있다.
flag가 0x018인데, 즉 PSH와 ACK만 1인 것이다. GET method를 사용했기에 PSH가 1이고, 이전에 요구를 잘 수신했기에 ACK가 1이다.
window : 1026 -> 한 번에 전송할 수 있는 데이터 양을 1026 바이트로 하겠다는 것이다.
checksum 결과로 오류가 검출되지 않았음을 보여준다.
Urgent Pointer은 그 값이 0으로 즉 사용되지 않았다.
(3) IP
버전은 4인 것을 확인할 수 있다.
헤더 길이는 20 바이트가 나왔으며,
헤더 + 데이터 총 길이는 520 바이트가 나왔다. 즉 데이터가 500바이트 나왔다고 추측 가능하다.
이 패킷을 식별하기 위한 고유 identifier는 0xddda이고,
flag는 0x2로 단변화를 하면 안 된다고 알려주고 있다.
또한 offset이 0으로 이는 해당 패킷이 단편화중에서 첫 번째라는 것을 의미한다.
Time to live : 128 -> 이 값이 128이면 일반적으로 windows OS의 기본 값으로, 이를 통해 목적지 장치의 OS가 windows라는 것을 유추 가능하다.
해당 프로토콜의 상위 프로토콜은 TCP이며
오류 검출 체크섬은 0으로 그 기능이 꺼져 있다.
마지막으로 출발지 ip와 목적지 ip가 각각 220.74.103.206 (내 pc), 44.228.249.3 (접속한 사이트) 임이 나와 있다.
(4) Ethernet
destination : destination MAC address가 70:30:5d:8a:e2:73 임을 볼 수 있다. 이 패킷은 GET method를 사용했으므로, 즉 사이트를 전송해준 장치의 MAC 주소이다.
source : source mac address가 70:85:c2:32:60:1d 임을 볼 수 있다. 이 패킷은 GET method를 사용했으므로, 즉 사이트 요청을 한 장치 다시말해 내 pc의 MAC 주소라고 할 수 있다.
type : type가 IPv4 (0x0800)가 나왔으므로, 상위 계층 프로토콜에 IPv4가 사용되고 있음을 나타낸다.
TCP threeway handshake 과정 분석
(1) TCP에서의 threeway handshake 과정 분석
http 연결에서는 시작 단계에서 상태 확인과 순서 보장 등을 위해 tcp 연결이 필요한데, 이 과정이 3번 주고받고 해서 TCP threeway handshake라 부른다. 이 과정은 3단계로 나뉜다.
SYN : 클라이언트가 서버에 연결 요청을 위해 SYN 플래그를 설정한 패킷을 보낸다. 이 단계에서 클라이언트는 서버와의 연결을 시작하려고 그 신호를 보낸다고 할 수 있다.
SYN-ACK : 서버가 클라이언트의 SYN 패킷을 수신하고, 요청을 잘 받았다는 의미와 수락하는 의미로 SYN과 ACK 플래그를 모두 설정한 패킷을 클라이언트에 보낸다.
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 flag가 1로, 클라이언트가 서버에 연결을 요청하며 연결을 시작하겠다는 의사를 나타내고 있다. 두 번째 패킷에서는, 서버가 클라이언트의 SYN 패킷을 받아서 연결을 수락한다는 응답으로 SYN과 ACK flag를 모두 1로 하여, 0x012로 flag를 설정한 패킷을 클라이언트에게 보내고 있다. 마지막 패킷에서는, 클라이언트가 서버의 SYN-ACK 패킷을 수신하고 그에 대해 확인의 응답으로 ACK flag를 1로 설정한 패킷, 즉 flag 0x010 패킷으로 응답하여 TCP 연결을 완료한 모습이다.
'CS > Computer Network' 카테고리의 다른 글
[네트워크] Ch3.1 P2P 구조(P2P Architecture) (0) | 2025.01.14 |
---|---|
[네트워크] Ch3 Application Layer - Peer-to-Peer Model (0) | 2025.01.14 |
[네트워크] Ch2.6 HTTP의 발전 과정(HTTP Evolution) (0) | 2025.01.13 |
[네트워크] Ch2.5 FTP(File Transfer Protocol) (0) | 2025.01.13 |
[네트워크] Ch2.4 DNS(Domain Name System) (0) | 2025.01.13 |