HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📖
공부한 책
/
1%의 네트워크 원리
1%의 네트워크 원리
/2장 TCP/IP의 데이터를 전기 신호로 만들어 보낸다/IP와 이더넷의 패킷 송수신 동작/
[패킷 송.수신 동작] IP 담당 부분

[패킷 송.수신 동작] IP 담당 부분

전체 개요역할요점IP 헤더, 이더넷 헤더IP 헤더(20바이트)이더넷용 MAC 헤더ARP로 수신처 라우터의 MAC 주소를 조사함

전체 개요

패킷 송.수신 동작의 전체 모습
패킷 송.수신 동작의 전체 모습

역할

  • 패킷 송.수신 동작의 출발점은 TCP 담당 부분이 IP 담당 부분에 패킷 송신을 의뢰하는 곳부터 시작
  • 의뢰동작을 할 때 TCP 담당 부분은 데이터의 조각에 TCP 헤더를 부가한 것(IP 패킷의 내용물) 을 IP 담당 부분에게 건네줌
  • 해당 내용물을 한 덩어리의 디지털 데이터로 간주하고, 그 앞에 제어 정보를 기록한 헤더를 부가함
    • IP 헤더 : IP 프로토콜에 규정된 규칙에 따라 IP 주소로 표시된 목적지까지 패킷을 전달할 때 사용하는 제어 정보를 기록한 것
    • MAC 헤더 : 이더넷 등의 LAN을 사용하여 가장 가까운 라우터까지 패킷을 운반할 때 사용하는 제어 정보를 기록한 것

요점

  • TCP 담당 부분의 데이터 송.수신 동작에는 몇 개의 단계가 있으며, 각 단계에서 다양한 역할을 가진 패킷이 등장했는데, IP 패킷 송.수신 동작은 패킷의 역할에 관계없이 모두 같음
  • 즉, 무슨 말이냐 ⇒ TCP 담당 부분이 의뢰하는 송.수신 동작 어떠한 것에 상관없이 IP의 동작은 공통이다. independent하다

IP 헤더, 이더넷 헤더

IP 헤더(20바이트)

필드의 명칭
길이(비트)
설명
버전
4
IP 프로토콜의 버전. 현재 사용하는 것은 버전 4입니다.
헤더 길이(IHL)
4
IP 헤더의 길이. 프로토콜 옵션의 유무에 따라 헤더 길이가 달라지므로 헤더 길이를 알도록 하기 위한 것입니다.
서비스 유형(ToS)
8
패킷을 운반할 때의 우선 순위 등을 나타냄. 처음의 사양이 모호했기 때문에 최근에 DiffServ라는 사양으로 이 필드의 사용법을 재정의했음
전체 길이
16
IP 메시지 전체의 길이를 나타냄
ID 정보
16
각 패킷을 식별하는 번호. 보통 패킷의 참조 번호가 여기에 기록됨. 단 IP 클라이언트에 따라 분할된 패킷은 모두 값이 같습니다.
플래그
3
이 필드는 3비트인데, 유효한 것은 2비트입니다. 이 중에서 하나로 조각 나누기(fragmentation, 프래그먼테이션)가 가능한지 나타내고, 또 하나로 이 패킷이 조각으로 나눈 것인지 나타냄
프래그먼트 오프셋
13
이 패킷에 저장되어 있는 부분이 IP 메시지의 맨 앞부분부터 몇 번째 바이트에 위치하는지를 기록합니다.
생존 기간(TTL)
8
네트워크에 루프를 만들 수 있을 때 패킷이 영구적으로 순환되지 않도록 생존 기간을 지정한 것으로, 라우터를 경유할 때마다 이 값이 1씩 감소하여 0이 되면 패킷이 폐기됩니다.
프로토콜 번호
8
프로토콜의 번호가 기록됨 - TCP : 06(16진수 표기) - UDP : 11(16진수 표기) - ICMP : 01(16진수 표기)
헤더 체크섬
16
오류 검사용 데이터로, 현재는 사용하지 않음
송신처 IP 주소
32
이 패킷을 발신한 쪽의 IP 주소
수신처 IP 주소
32
이 패킷을 전달할 상대의 IP 주소
옵션
가변 길이
위의 헤더 필드 이외의 제어 정보를 기록할 때는 헤더에 옵션 필드를 추가하지만 옵션 필드를 사용하는 일은 거의 없음
이 중에서 가장 중요한 것 : 수신처 IP 주소
  • TCP 담당 부분에서 통지된 통신 상대의 IP 주소를 설정함. 이 IP 주소는 TCP의 접속 동작을 실행할 때 어플리케이션에서 통지된 것을 TDP 담당 부분이 IP 담당 부분에게 통지하는 것임 ( 어플리케이션에서 통지된 값)
송신처 IP 주소
  • 이 컴퓨터에 할당된 IP 주소를 설정한다고 생각하면 되지만, 여러 개의 LAN 아답터가 장착되어 있으면 이 개념이 곤란함. 여러 개의 서로 다른 IP 주소가 할당되기 때문
  • ↔ 패킷을 건네주는 상대의 라우터를 결정하는 것과 같음
    • 상대의 라우터가 결정되면 어느 LAN 어댑터에서 패킷을 송신해야 하는지 결정되기 때문!
  • 다음 라우터를 결정하기 위해서는 Routing Table(경로표)를 확인해야 함!
라우팅 테이블 프린트
notion image
  • Destination이 패킷의 최종 목적지를 나타냄
  • Gateway: 중계 대상 라우터의 주소. 이것이 오른쪽 Netif와 같은 경우 라우터에 중계하지 않고 수신처 IP 주소의 기계에 직접 송신할 수 있음
  • Netif: 패킷을 출력하는 네트워크 인터페이스. 이 인터페이스의 IP 주소로 송신처 IP가 정해짐
  • 윈도우에서는 0.0.0.0으로 등록되어 있는 부분이 mac에서는 default로 등록되어 있고, 이게 기본 게이트웨이 임. 다른 곳에 일치하는 것이 없으면 이 행이 해당하는 것으로 간주
프로토콜 번호
  • 패킷에 들어간 내용물이 어디에서 의뢰받은 것인지를 나타내는 값임
  • 예를 들어 TCP에서 의뢰받은 내용물이라면 06(16진수 표기), UDP에서 의뢰받은 것이면 17(16진수 표기)라는 식임
 

이더넷용 MAC 헤더

  • IP 헤더를 만들고 난 후 그 앞에 MAC 헤더를 붙임
  • 이더넷에는 TCP/IP의 개념이 통용되지 않고 TCP/IP와 다른 구조( MAC 헤더 )로 패킷의 수신처를 판단
Mac헤더(14바이트)
필드의 명칭
길이(비트)
설명
수신처 MAC 주소
48
이 패킷을 전달하는 상대의 MAC 주소. LAN에서의 패킷 배송은 이 주소를 바탕으로 수행됨
송신처 MAC 주소
48
이 패킷을 송신한 측의 MAC 주소. 패킷을 받았을 때 이 값에 따라 누가 보냈는지를 판단함
이더 타입(EtherType)
16
사용하는 프로토콜의 종류를 나타냄. 가장 대표적인 것은 아래와 같은데, 보통의 TCP/IP 통신에 사용하는 것은 0800과 0806 두개 뿐임 0000-05DC. IEEE 802.3 0800 IP 프로토콜 0806 ARP 프로토콜 86DD IPv6
이더 타입
  • 이더넷의 경우 이더 타입까지가 MAC 헤더이고, 그 뒤에 이어지는 것이 패킷의 내용물인데 그 내용물이 무엇인지를 이더 타입으로 나타냄
  • IP 프로토콜이라면 0800(16진 표기)라는 값이 설정됨
송신처 MAC 주소
  • 자체 LAN 어댑터의 MAC 주소를 설정함
  • MAC 주소는 LAN 어댑터를 제조할 때 그 안에 있는 ROM에 기록되므로 여기에 기록되어 있는 값을 읽어와서 MAC 헤더로 설정함
수신처 MAC 주소
  • 패킷을 건네주는 상대의 MAC 주소
  • 그러나 이 시점에서는 아직 누구에게 패킷을 건네주어야 할지 모르기 때문에(서브넷의 라우터의 MAC 주소를 모름) 우선 패킷을 건네줄 상대가 누구인지를 조사하는데, 이것은 경로표에 기록되어 있음
    • 경로표의 Gateway 항목에 기록되어 있는 IP 주소의 기기가 패킷을 건네줄 상대임
    • 상대의 IP 주소는 알지만 MAC 주소는 모르기에 ARP 를 통해 MAC 주소를 조사하는 동작 실행함

ARP로 수신처 라우터의 MAC 주소를 조사함

  • 이더넷에는 연결되어 있는 전원에게 패킷을 전달하는 브로드캐스트라는 구조가 존재
  • 이 구조를 이용하여 “oo 라는 IP 주소를 가지고 있는 분 있습니까? “ 라고 질문하고 해당자가 내 MAC 주소는 뭐다 라고 응답을 해주는 것임
  • 패킷을 보낼 때마다 이 동작을 하면 ARP의 패킷이 불어나기 때문에 한 번 조사한 결과는 ARP 캐시 라는 메모리 영역에 보존하여 다시 이용함
조사한 MAC 주소를 MAC 헤더의 수신처 MAC주소에 기록하게 됨
ARP 캐시 프린트
notion image
  • ARP 캐시에 저장된 MAC 주소를 언제까지나 계속 사용하면 문제가 발생하기에 이 값은 시간이 지나면 삭제하게 되어 있음
  • OS 종류에 따라 다르지만 보통 몇 분 정도임