이 글은 제 공부의 목적으로 작성하는 글로써, 틀린 부분이 있을 수 있습니다.
틀린 부분이 있을시, 댓글로 친절히 설명해 주시면 감사하겠습니다.
와이어샤크를 사용하여, tcp와 udp의 패킷을 살펴보도록 하겠다.
TCP 분석
먼저 와이파이 패킷을 캡쳐하고, tcp를 살펴보도록 하겠다.

tcp를 표시 필터로 둔 이후의 모습이다.
캡처된 tcp 프로토콜에는 tcp 통신과 tls통신이 있는데, tls는 이후 http 분석에서 https로 통신하는 모습을 살펴볼 때, 살펴보도록 하고, tcp 통신을 확인하도록 하겠다.
캡처된 것을 보면, 색이 다양한데, 연보라 색은 정상적인 패킷, 검은색은 duplicated ack, 즉 중복 패킷, 회색은 fin 패킷, 빨간색은 비정상적인 패킷이라고 한다.
아무 정상 패킷을 보면

다음과 같다.
위에서 순차적으로, 메타 데이터 요약, 데이터 링크 계층 정보, 네트워크 계층 정보, 전송 계층 정보라고 생각하였다.
먼저 메타 데이터를 살펴보면

다음과 같다.
section number: 패킷을 보낼 때, 보내야 할 값이 mtu보다 클 때는 해당 값을 쪼개서 보내게 되는데, 그중 첫 번째 섹션이라는 의미이다.
interface name: 와이어샤크가 캡쳐한 네트워크 인터페이스에 대한 정보로써, 윈도우 운영체제가 내부적으로 사용하는 인터페이스의 고유 이름이다.
interface description: 사용자가 쉽게 알아볼 수 있는 네트워크 인터페이스의 이름이다.
Encapsulation type: 캡슐화 유형으로, 데이터 링크 레이어에서 사용된 프로토콜 유형을 의미한다. 데이터링크 레이어의 헤더가 이더넷 헤더임을 알 수 있다.
Arrival Time: 패킷 캡처된 컴퓨터의 로컬 시간대를 기준으로 표시된 도착 시간이다.
UTC Arrival Time:UTC를 기준으로 변환한 시간이다.
Epoch Arrival Time: 1970.1.1 00:00:00 UTC로 부터 현재까지 경과된 시간을 초단위로 나타낸 것으로, 컴퓨터가 시간을 계산할 때 사용하는 방법이다.
Time shift for this packet: 시간대 보정값
Time delta from preivious captured frame: 이전 캡처된 프레임 이후 시간 경과
Tiem delta from previous displayed frame: 이전 표시된 프레임과의 시간 경과. 필터링을 사용중이라면 사용자의 화면을 기준으로 함.
Time since reference or first frame: 캡처가 시작된 시점으로부터 패킷이 도착하는데 걸린 시간.
Frame Number: 캡처된 순서에 따라 부여된 번호
Frame Length: 캡쳐된 패킷의 전체 길이
Capture Length: 실제 저장된 패킷의 크기
Frame is marked: 마크 여부. 분석가가 중요한 패킷을 따로 표시할 수 있다.
Frame is ignored: 무시 여부. 분석가가 무시 처리했는지에 대한 여부
Protocols in frame: 프로토콜 구조를 보여주는 정보
- eth: 이더넷
- ethertype: 이더타입필드를 통해 상위 프로토콜 식별
- ip: layer3 - ip 프로토콜
- tcp: layer 4 - tcp 프로토콜
데이터 링크 레이어 정보를 보면

다음과 같다.
Destination: 목적지의 MAC 주소이다. 앞에 뜨는 것은, 와이어샤크가 처음 3개의 바이트를 보고 제조사를 알려주는 기능이다.
LG bit:
- Globally Unique: 전 세계 중 유일 주소
- Locally Administerd: 사용자가 임의로 설정한 주소
IG bit
- Individual: 1:1통신
- Group / Multicast / Broadcast: 1:N 통신
Source: 출발지의 Mac 주소이다. 앞에 뜨는 것은, 와이어샤크가 처음 3개의 바이트를 보고 제조사를 알려주는 기능이다.
Type: 이더넷 프레임 바로 뒤에 어떤 종류의 데이터가 들어있는지 알려주는 필드로, 이더넷 헤더를 벗겨낸 이후 어떻게 처리해야 할지에 대한 정보를 나타낸다. 즉, 데이터링크 레이어 다음 레이어인 네트워크 레이어의 헤더 정보이다.
Stream index: 와이어샤크가 분석 편의를 위해 제공하는 추가 정보이다.
네트워크 레이어 정보를 보면

다음과 같다.
0100: ip 프로토콜의 버전을 이진수로 나타낸 것이다.
0101: 헤더의 길이를 나타내는 것으로, ipv4의 헤더 크기는 20바이트이다.
differentiated service filed: 패킷의 우선순위나 서비스 품질을 지정하는 필드이다.
differentiated service codepoint: 0으로, 특별한 우선순위가 없는 일반 패킷이다.
explicit congestion notification: 네트워크 혼잡시 이를 처리하는 방식에 대한 정보이다.
total length: ip 헤더와 데이터를 모두 포함하는 패킷 크기이다. ip 헤더 20, tcp 헤더 20, 데이터 110바이트임을 알 수 있다.
identification: 조각난 패킷들이 원래 어떠한 패킷에 속하는지 식별을 위한 고유 id이다.
flags: 첫 번째 비트는 항상 0, 두 번째 비트는 분할 여부(1은 분할 X, 0은 분할 O), 세 번째 비트는 분할된 패킷이 더 있는지 여부(1: 더 있다. 0: 더 없다)이다.
flagment offest: 패킷이 쪼개졌을 때, 순서를 나타내는 값이다.
time to live: 패킷이 인터넷에서 무한정 떠도는 것을 막기 위한 값으로, 이 경우 64번의 라우터를 지나면 소멸하게 된다.
protocol: 상위 레이어, 즉 전송 계층의 프로토콜을 나타낸다.
header checksum: 체크썸을 나타내는 값이다.
Source Address: 출발 컴퓨터의 ip 주소이다.
Destination Address: 도착 컴퓨터의 ip 주소이다.
전송계층 정보는 다음과 같다.

Source Port: 출발지의 포트이다.
Destination Port: 목적지의 포트이다.
[Stream index: 0] [Stream Packet Number: 2]: 0번 tcp 대화이며, 해당 대화의 2번째 패킷이다.
[Conversation completeness]: 대화가 끝났는지 여부이다. fin을 아직 보지 못했다는 의미이다.
[Tcp Sement Len]: 순수 데이터의 크기이다.
Sequence Niumber: tcp 데이터의 순서를 식별하는 번호이다.
Acknowledgement number: 상대방으로부터 몇 번째 바이트까지 전달받았고, 몇번째 바이트를 보내달라고 요청하는 번호이다.
header length: tcp 헤더의 크기이다.
flags: tcp 헤더의 flag이다.
- urgent: 긴급 데이터 플래그, 우선순위 관련 플래그이다.
- acknowledgement: 응답 확인 플래그. 잘 받았는지 확인용 플래그이다.
- push: 데이터 즉시 전달 플래그. 버퍼 없이 바로 전달을 위한 플래그이다.
- reset: 연결 강제 종료 플래그. 비정상적인 상황 발생 시 즉시 강제 종료를 위한 플래그
- syn: 연결 요청 플래그. tcp 연결 시 syn 요청을 위한 플래그이다.
- fin: 연결 종료 플래그. 정상적인 종료 요청을 위한 플래그이다.
window: rwnd이다.
checksum: 체크섬값이다.
[Timestamps]: rtt 측정 등을 위한 값이다.
[Seq/Ack analysis]: 와이어샤크 분석 도구이다.
이렇게 데이터를 뜯어보았고, 결과적으로, src ip/mac의 8009 포트에서, dst ip/mac의 7778 포트로 26번 프레임에 대한 ack를 보내는 패킷임을 확인할 수 있다.
UDP 분석
먼저, wifi 등으로 패킷을 캡처할 시, 순수한 udp를 얻을 수 없고, dns, quic 등으로 나온다. 하지만, dns와 quic은 추후에 살펴볼 것이기 때문에 순수한 udp를 보내어 캡처하도록 하여야 한다.
나 스스로에게 udp를 보내도록 하여 이것을 캡처하도록 하겠다. netcat이 있으면 매우 편하겠지만, 현재 컴퓨터는 windows컴퓨터이고, powershell에 이미 기본적으로 udp를 보낼 수 있는 방법이 존재하기 때문에 굳이 설치하지 않고 udp 패킷을 보내도록 하겠다.
$udpClient = New-Object System.Net.Sockets.UdpClient
$remoteEndPoint = New-Object System.Net.IPEndPoint ([System.Net.IPAddress]::Parse("127.0.0.1"), 12345)
$data = [System.Text.Encoding]::ASCII.GetBytes("Wireshark UDP Testing")
$udpClient.Send($data, $data.Length, $remoteEndPoint)
$udpClient.Close()
이렇게 요청을 보내고 나면,

다음과 같은 udp 패킷 데이터를 얻을 수 있다. 가장 위부터, 메타데이터, 데이터링크레이어 헤더(루프백이라 없음), 네트워크 레이어 헤더, 전송계층 헤더, 데이터 순이다.
먼저 메타 데이터를 살펴보면,

다음과 같다.
각 정보는 앞서 tcp의 메타데이터와 같으니 넘어가도록 하겠다.
네트워크 계층의 헤더를 보면

다음과 같다.
이 또한, tcp의 정보와 대부분 같고, 전송계층의 프로토콜이 UDP로 바뀌어 있는 것을 확인할 수 있다.
이제, 전송 계층을 보면

다음과 같다.
각각을 살펴보면 tcp 헤더와 꽤 많은 부분 차이가 있다.
포트정보는 tcp 헤더와 같고. length는 udp 헤더와 순수 데이터를 포함한 데이터의 크기이다. 이때, udp 헤더의 크기는 8바이트이므로 데이터의 크기는 21바이트임을 알 수 있다.
데이터를 살펴보면

다음과 같다.
이렇게 확인하기엔 어려움이 있으니, 캡처된 전체 패킷을 보면

wireshark UDP Testing이라는 값이 udp로 전송되었음을 확인할 수 있고,
앞서 data의 16진수를 문자열로 바꾸면
result = ""
value = 0x57697265736861726b205544502054657374696e67
while value != 0:
result += chr(value & 0xff)
value >>= 8
print(result[::-1])
를 실행하면 Wireshark UDP Testing임을 확인할 수 있다.
이로써, tcp와 udp의 패킷을 분석해 보았다.
이렇게 이 글을 마치도록 하겠다.
'네트워크 > 와이어샤크' 카테고리의 다른 글
| [와이어샤크][번외] vpn 설정 (1) | 2025.07.30 |
|---|---|
| [와이어샤크][Day 5] HTTP 분석 (0) | 2025.07.19 |
| [와이어샤크][Day 4] DNS 트래픽 분석 (0) | 2025.07.17 |
| [와이어샤크][Day 2] 기본 필터 사용법 익히기 (0) | 2025.07.16 |
| [와이어샤크][Day 1] 와이어샤크 개요 및 인터페이스 이해 (0) | 2025.07.14 |