패킷(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
    G
    A
    C
    K
    P
    S
    H
    P
    S
    T
    S
    Y
    N
    F
    I
    N
    Window 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 를 사용 중인 것을 확인할 수 있음

 

+ Recent posts