패킷(Packet)
- 패킷은 네트워크를 통해 데이터를 주고받을 때 사용하는 작은 데이터 단위입니다.
- 우리가 인터넷에서 보내는 데이터(예: 메시지, 파일, 웹 페이지)는 한 번에 보내지 않고, 일정 크기로 잘라서 패킷이라는 작은 조각들로 나눠 전송하며, 패킷들은 목적지에 도착하면 다시 원래의 데이터로 조립됩니다.
패킷의 필요성 및 용도
- 패킷의 필요성
1. 효율성: 데이터를 작게 나눔으로써 여러 사용자가 네트워크를 동시에 사용할 수 있게 합니다.
2. 속도 향상: 작은 단위로 보내기 때문에 데이터 일부가 문제가 생겨도 전체를 다시 보낼 필요 없이 해당 패킷만 재전송하면 됩니다.
3. 유연성: 패킷마다 다른 경로를 사용할 수 있어서 네트워크 혼잡 시 우회가 가능합니다.
4. 신뢰성 향상: TCP 같은 프로토콜에서는 패킷 순서를 관리하고 오류를 검출하여 신뢰성 있게 데이터를 전달합니다. - 패킷의 용도
1. 인터넷 통신의 기본 단위 (웹 페이지 로딩, 이메일 송수신, 동영상 스트리밍 등)
2. 네트워크 장비 간 데이터 교환 (라우터, 스위치 등)
3. 네트워크 분석 및 보안 (침입 탐지, 트래픽 분석 등)
패킷의 구조
- 패킷을 간략하게 설명하면 헤더, 데이터(페이로드), 트레일러로 구성됩니다.
구성 요소 설명 헤더 (Header) 송신지/수신지 주소, 패킷 번호, 프로토콜 정보 등 전송에 필요한 정보 데이터 (Payload) 실제 전송하려는 내용 (파일, 메시지, 웹페이지 데이터 등) 트레일러(Trailer) (옵션) 오류 검출 코드(데이터가 손상되지 않았는지 검사)
- Ethernet 패킷의 구조
Preamble
(7byte)SFD
(1 byte)Destimation Address
(6 byte)Source Address
(2 byte)Type
(2 byte)DATA
(46 t0 1500 byte)FCS
(4 byte)
1. Preamble : 수신자가 동기화할 수 있도록 신호 패턴을 보내는 부분
2. SFD (Start Frame Delimiter) : 프레임 시작을 알리는 표시
3. Destination Address : 데이터의 목적지 MAC 주소
4. Source Address : 데이터를 보내는 출발지 MAC 주소
5. Type : 프레임 안에 있는 데이터의 프로토콜 종류를 나타냄
6. Data : 실제 전송할 데이터(상위 계층 정보 포함)
- ex) IP 패킷, TCP 패킷, UDP 패킷, ICMP 패킷 등
7. FCS (Frame Check Sequence) : 데이터 오류를 검출하기 위한 검사 코드 - IP 패킷의 구조
VER (4 bits) HLEN (4 bits) Service type (8 bits) Total length (16 bits) Identification (16 bits) Flags (3 bit) Fragmentation offset (13 bits) Time-to-live (8 bits) Protocol (8 bits) Header Checksum (16 bits) Source IP Address (32 bits) Destination IP Address (32 bits) Options + Padding (0 to 40 bytes)
1. VER: IP의 버전 정보, 0x4일 경우 IPv4를 의미
2. HLEN: IP헤더의 길이로 이 필드 값에 4를 곱한 값이 실제 헤더의 바이트 길이
3. Service type: 데이터그램을 어떻게 처리할지를 정의하는 서비스의 유형(최소 지연(Delay), 최대 처리율(MTU), 최대 신뢰성(Reliability), 최소 비용 설정(Cost)), 기본 값은 0
4. Total length: 헤더를 포함한 데이터그램의 전체 길이를 의미
5. Identification: 데이터그램이 단편화(Fragmentation)될 때 모든 단편에 이 값이 복사되고, 단편화 된 데이터그램이 생성될 때마다 1씩 증가
6. Flag: 단편화 여부와 단편화된 조각이 첫 번째 조각인지, 중간 혹은 마지막 조각인지를 알려준다.
- RF(Reserved Fragment): 아직 사용하지 않으므로 항상 0
- DF(Don`t Fragment): 1이면 단편화되지 않았음을, 0이면 단편화되었음을 의미한다.
- MF(More Fragment): 0이면 마지막 단편이거나 유일한 단편이고, 1이면 마지막 단편이 아님을 의미한다.
7. TTL(Time-to-live): 라우팅 과정에서 라우터를 몇 개 이상 통과하면 해당 패킷을 버릴지를 결정
8. Protocol: IP계층의 서비스를 사용하는 상위 계층 프로토콜을 정의(1: ICMP, 2: IGMP, 6: TCP. 17: UDP)
9. Header checksum: 패킷 전달 중 발생할 수 있는 오류 검사를 위해 사용하는 것으로, 송신측에서 체크섬을 계산하여 전송
10. Source IP address: 송신측 IP 주소
11. Destination IP address: 수신측 IP 주소
12. Options + padding: 해당 패킷에 대한 옵션 사항, 옵션 내용이 입력될 경우 그 값이 32배수로 데이터가 마무리되도록 0으로 채운다.
- TCP 패킷의 구조
Source port address (16 bits) Destination port address (16 bits) Sequence number (32 bits) Acknowledgment number (32 bits) HLEN (4 bits) Reserved (6 bits) U
R
GA
C
KP
S
HP
S
TS
Y
NF
I
NWindow size (16 bits) Checksum (16 bits) Urgent pointer (16 bits) Options and padding (up to 40 bytes)
1. Source port address: 패킷의 출발지 포트 번호 / Destination port address: 패킷의 목적지 포트 번호
2. Sequence number: 패킷의 순서 값(순서번호)
3. Acknowledgment number: 통신 상대의 패킷 순서 값(확인응답번호)
4. HLEN: TCP헤더를 4바이트 단위의 개수로 나타낸 것
5. Reserved: 나중에 필요할 때 사용하려고 남겨둔 공간
6. Window size: 상대방이 반드시 유지해야 하는 바이트 단위의 창 크기
7. Checksum: 데이터 오류 검출을 위한 값
8. Urgent pointer: 긴급 플래그 값이 설정되었을 때만 유효하며 세그먼트가 긴급 데이터를 포함하고 있을 때 사용 됨 세그먼트의 데이터 부분에서 마지막 긴급 바이트의 번호를 구하기 위하여 순서 번호에 이 번호가 더해짐
9. Options and padding: 옵션의 종류와 길이, 데이터를 저장 / 옵션이 32bits가 안되면 나머지 비트를 0으로 채움
- UDP 패킷의 구조
Source port number (16 bits) Destination port number (16 bits) Total length (16 bits) Checksum (16 bits)
1. Source port number: 패킷의 출발지 포트 번호
2. Total length: UDP 헤더와 데이터 필드를 포함한 전체 패킷의 길이
3. Checksum: 데이터 오류 검출을 위한 값
4. Destination port number: 패킷의 목적지 포트 번호
와이어샤크(Wireshark)
- Wireshark는 네트워크 상의 패킷을 캡처하고 분석할 수 있는 유명한 오픈 소스 도구입니다.
- Wireshark 특징
1. 실시간 패킷 캡처 및 분석
2. 패킷을 상세히 분해해서 볼 수 있음 (헤더, 데이터 등)
3. 다양한 프로토콜 지원 (TCP/IP, HTTP, DNS 등)
4. 네트워크 문제 해결, 보안 분석, 교육용으로 활용 - Wireshark 사용 예시
1. 네트워크 문제 (지연, 손실 등) 원인 분석
2. 해킹 시도, 이상 트래픽 탐지
3. 프로토콜 학습 및 분석
4. 서버나 클라이언트의 통신 흐름 파악 - Wireshark 명령어 정리
분류 필터 명령어 설명 IP 주소 ip.addr == 192.168.0.1 특정 IP 주소와 관련된 모든 트래픽 ip.src == 192.168.0.1 출발지 IP가 192.168.0.1 인 패킷 ip.dst == 192.168.0.1 목적지 IP가 192.168.0.1 인 패킷 포트 번호 tcp.port == 443 TCP 포트 443 (HTTPS) 사용하는 패킷 udp.port == 53 UDP 포트 53 (DNS) 사용하는 패킷 tcp.srcport == 80 출발지 포트가 80 인 TCP 패킷 tcp.dstport == 443 목적지 포트가 443 인 TCP 패킷 프로토콜 http HTTP 프로토콜 패킷 https HTTPS 패킷 (주로 TCP 443 포트) dns DNS 쿼리 및 응답 패킷 tcp TCP 프로토콜 패킷 전체 udp UDP 프로토콜 패킷 전체 MAC 주소 eth.addr == 00:11:22:33:44:55 특정 MAC 주소 관련 패킷 eth.src == 00:11:22:33:44:55 출발지 MAC 주소가 특정 MAC 인 경우 eth.dst == 00:11:22:33:44:55 목적지 MAC 주소가 특정 MAC 인 경우 포함된 내용 frame contains "naver" 패킷 내에 "naver" 문자열이 포함된 경우 AND / OR / NOT ip.addr == 192.168.0.1 && tcp.port == 80 IP가 192.168.0.1 그리고 TCP 포트가 80 인 패킷 `ip.addr == 192.168.0.1 !tcp TCP 프로토콜이 아닌 패킷 에러 / 상태 tcp.analysis.flags TCP 재전송, 중복 ACK 등 문제 있는 TCP 패킷 icmp ICMP (핑, 에러 메시지) 패킷
와이어샤크 실습
- Wireshark를 사용하여 Naver접속 시 사용된 패킷 필터링하기
1. Wireshark 실행 후 캡처 시작
2. Wireshark에서 필터 입력
- 명령어는 ip.addr 을 사용
- 네이버 IP 확인 방법은 ping 을 보내서 확인
개발자 도구(F12)를 켜둔 상태에서 Network 맨위의 www.naver.com 클릭하여 Headers에 Remote Address 확인
3. 결과 확인
- TCP Handshake, TLS Handshake, 실제 데이터 전송까지 확인 가능

- Wireshark를 사용하여 자신의 DNS 서버 정보 확인해보기
1. Wireshark 실행 후 캡처 시작
2. Wireshark에서 필터 입력
- 명령어는 dns 를사용
3. 결과 확인
- KT의 DNS인 168.126.63.1 를 사용 중인 것을 확인할 수 있음

'ELITE HACKER Bootcamp 4th > 1주차' 카테고리의 다른 글
[1주차 TIL] KnockOn Bootcamp HTML, CSS, Javascript (0) | 2025.04.07 |
---|---|
[1주차 TIL] KnockOn Bootcamp 프록시 (0) | 2025.04.06 |
[1주차 TIL] KnockOn Bootcamp Cookie & Session (0) | 2025.04.05 |
[1주차 TIL] KnockOn Bootcamp HTTP / HTTPS (0) | 2025.04.05 |
[1주차 TIL] KnockOn Bootcamp Protocol (0) | 2025.04.05 |