전체 개요

역할
- 패킷 송.수신 동작의 출발점은 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(경로표)를 확인해야 함!
라우팅 테이블 프린트

- 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 캐시 프린트

- ARP 캐시에 저장된 MAC 주소를 언제까지나 계속 사용하면 문제가 발생하기에 이 값은 시간이 지나면 삭제하게 되어 있음
- OS 종류에 따라 다르지만 보통 몇 분 정도임