https://dev-dx2d2y-log.tistory.com/181
[네트워크] 혼공네트 독서 #4 - 네트워크 장비, 허브와 스위치
https://dev-dx2d2y-log.tistory.com/180 [네트워크] 혼공네트 독서 #3 - 이더넷 프레임https://dev-dx2d2y-log.tistory.com/178 [네트워크] 혼공네트 독서 #2 - 이더넷과 통신매체, 케이블 NIChttps://dev-dx2d2y-log.tistory.com/176
dev-dx2d2y-log.tistory.com
저번에는 데이터 링크 게층과 물리계층에 대해서 전반적으로 다뤄보았다. 데이터 링크 계층은 LAN 내에서 통신하기 위한 계층이다. 하지만 LAN과 LAN 사이, 그러니까 LAN을 넘어서 통신하고 싶다면 데이터 링크 계층이 아니라 한 계층 위로 올라와, 네트워크 계층을 사용해야한다.
왜냐하면
1. 라우팅
라우팅이란 LAN과 LAN끼리 소통할 때 패킷이 이동할 최적의 경로를 찾는 과정이다. LAN 내에서만 통신하도록 설계된 데이터 링크 계층은 이 라우팅을 수행할 수 없다. 하지만 라우터를 위시한 네트워크 계층의 장비로는 라우팅이 가능하다. 즉, 패킷이 이동할 최적의 경로를 찾을 수 있다.
2. MAC주소의 한계
데이터링크 계층에서는 정보를 받은 상배당의 주소로 MAC주소를 사용한다. 하지만 현실적으로 모든 호스트의 MAC주소를 알기란 어려운 일이다. 그래서 어느 LAN에 위치하는지 주소를 또 명시해야한다. 이를 IP주소라고 칭하며, MAC주소보다 우선적으로 사용한다.
"그러면 데이터링크 계층의 장비에 라우팅과 IP주소를 넣으면 되지 않나요?"할 수 있는데, 그 기능을 넣는 순간 네트워크 계층의 장비가 되는 것이다. L2스위치에 라우팅과 IP주소 기능을 넣으면 L3스위치가 되겠지 계층은 정확히 칼로 자르듯이 나눠지는게 아니라 어떤 역할을 수행하는가에 따라서 나뉘어진다.
인터넷 프로토콜 (IP)
네트워크 계층에서 가장 많이 사용하는 프로토콜이 IP, 인터넷 프로토콜이다. 주로 IPv4 (인터넷프로토콜 버전 4)나 IPv6 (인터넷 프로토콜 버전 6)을 많이 사용하며, IPv4를 가장많이 사용한다.
IP는 크게 두 가지 역할을 담당하는데,
1. IP 주소 지정
IP주소를 바탕으로 송수신 대상을 지정한다. 그래서 어느 IP로 데이터를 보내야할 지 지정하고, 해당 IP 내에 들어오면 MAC주소를 사용해 수신대상을 식별하는 등으로 사용된다.
2. IP 단편화
전송하고자하는 패킷의 크기가 최대전송단위인 MTU보다 클 경우 MTU 크기 이하의 패킷 여러 개로 나누는 과정이다. 일반적인 MTU 크기는 1500 바이트고, IP 패킷의 헤더까지 포함한 크기이다. 앞서 이더넷 프레임의 페이로드의 최소크기가 46바이트이고 최대크기가 1500바이트라고 했는데, 이는 네트워크 계층에서 내려오는 데이터의 MTU가 1500바이트이기 때문이다.
MTU 크기보다 커서 패킷이 여러 개로 나뉘어진 경우 수신지에서 재조합한다.
IP주소
IP주소는 1바이트 4개, 총 4바이트로 주소를 표현할 수 있고, 각 숫자당 1바이트이기 때문에 0~255 범위의 네 개의 10진수로 표현한다. 그래서 0.0.0.0 부터 255.255.255.255까지 IP주소를 할당받을 수 있다.
IPv4 패킷 구조

패킷은 이더넷 프레임의 페이로드 영역에 속한다.


대략적인 패킷의 구조는 위와같이 생겼다. 여기서 중요한 정보에 해당하는 것은 식별자 / 플래그 / 단편화 오프셋 / TTL / 프로토콜 / 송신지 IP 주소 / 수신지 IP 주소다.
1. Version
IP의 버전으로, IPv4와 같이 버전을 4비트로 나타낸다. IPv4의 경우 4를, IPv6일 경우 6을 16진수로 기재한다.
2. IHL (Internet Header Length)
헤더길이로, 헤더의 길이를 4바이트 단위로 환산한 값이 들어간다. 따라서 헤더가 20바이트 크기라면 헤더길이에는 5가 16진수로 기재된다. 기본값이자 최소값은 5 (20바이트), 옵션영역을 사용하면 60바이트까지 늘릴 수 있다.
헤더가 20바이트여야하는 이유는 위에서 볼 수 있듯이, 옵션과 패딩을 제외한 부분은 필수영역이고, 이 필수영역들의 크기가 최소로 채웠을 때 20바이트가 되기 때문이다. 최대크기가 15 (60바이트)인 이유는 IHL에 4비트만 할당되어서 0 ~ 2^4 - 1 개만 수를 표현할 수 있기 때문이다.
3. Type Of Service
서비스 유형을 표기한다. 8비트의 크기를 받는다. 모든 패킷을 동등하게 처리하지 말고, 상황과 데이터 성격에 따라서 다르게 패킷을 처리하려는 것에 따라 패킷이 얼마나 급한지, 어떤 성격을 나타내는지 등을 나타낸다.
대표적인 세 가지 선택안이 있는데,
- low-delay (저지연):
- high-reliablility (높은 신뢰성)
- high-Throughput (높은 처리량)
에서 선택할 수 있다.

그래서 Type Of Service에는 이러한 정보를 저장하게 된다
1. PRECEDENCE
첫 세 비트에 할당되며
111 (Network Control / 네트워크 관리)
110 (Internetwork Control / 네트워크 간 제어신호)
--> 111은 특정 LAN 내에서만, 110번은 라우터 (문서에는 게이트웨이라고 표현됨)끼리 정보교환용으로 사용해야한다.
따라서 아무 사용자가 PRECEDENCE를 111이나 110으로 설정하면 문제가 생길 수 있으므로, 이를 설정하지 못하게 조치를 취해야한다. 보통은 신뢰할 수 없는 장치에서 111이나 110으로 요청이 들어오면 그 요청을 폐기하거나 Precedence를 000으로 바꿔버린다.
101 (CRITIC/ECP / 매우 중요한 데이터)
100 (Flash Override / 긴급우선순위)
011 (Flash / 긴급)
010 (Immediate / 즉시 처리되어야하는 정보)
001 (Priority / 높은 우선순위)
000 (Routine / 일반적인 메시지)
에 해당한다. 즉, 데이터가 어떤 특성을 지니고 있는지를 나타낸다. 트래픽이 몰릴 때, Precedence가 000인 패킷보다 011이나 100인 패킷을 우선적으로 처리하게 된다. Precedence는 000에서 111로 갈수록 우선순위가 올라간다. 111이 제일 우선순위가 높다.
2. D (delay)
네 번째 비트에 해당하며, Delay를 의미한다. 1일 경우 low-delay, 즉 지연이 최소로되게 패킷을 전송해야한다. 실시간통화나 실시간게임이 이에 해당한다.
3. T (Throughput)
다섯 번째 비트에 해당하며, 처리량을 의미한다. 1일 경우 High-Throughput, 즉 처리량이 올라간다. 대용량 데이터 전송 등에 사용된다.
4. R (Reliability)
여섯 번째 비트에 해당하며, 신뢰성을 의미한다. 1일 경우 Hgith-Reliability, 즉 신뢰성이 높아햐나는 패킷이라는 것을 의미하며, 패킷 전송시간이 늘어나더라도 유실을 최소화해야한다는 것을 의미한다.
마지막 6~7번째 비트는 미래의 사용을 위해 남겨두었다.
그래서 이 네 가지 필드를 사용해서 패킷의 특징, 우선순위 등을 나타낸다. 가령 000100 이라면 일반적인 데이터라서 패킷 우선순위는 낮지만 그래도 지연이 최소로되게 패킷을 처리해야하는 것, 100001이라면 아주 긴급한 데이터지만 데이터를 유실시키는 것을 지양하는 방식으로 전송하게된다. 101111이면 아주 급하면서도 지연도 최소화하고, 처리량도 높아야하면서 데이터 유실도 피해야한다.
물론 101111이면 네트워크 계층에서 패킷에 오류가 있는 것으로 감지하고 폐기시킨다. D,T,R 각각은 서로 대척점에 있는 효과들이 있다. 대표적인게 D-R. 지연이 낮으면 어쩔 수 없이 데이터유실이 생기기 마련이기 때문이다.
따라서 D,T,R 옵션은 최대 2개까지만 설정할 수 있다.
4. Total Length
패킷의 전체길이. 헤더와 데이터를 포함한 전체길이를 뜻한다. 16비트 값이며, 그래서 총 65535 (2^16 - 1) 개의 값을 나타낼 수 있다. 또한 데이터의 크기는 최소 576 바이트가 되는데, 왜냐하면 헤더의 최대치가 60바이트고, 인터넷 프로토콜이 만들어질 당시 메모리 처리 단위가 512바이트여서 512 + 60에 여유공간 4바이트를 더해서 576바이트를 네트워크 계층에서 받을 데이터의 최소크기로 명시해두었다.
576바이트가 네트워크 계층의 장비에서 최소로 처리할 수 있는 크기이다. 만약 이 크기를 벗어난 패킷이 전송되었는데 중간에 네트워크 장비가 576바이트 이상의 데이터를 처리하지 못하면 그 패킷은 버려지므로 패킷전송에서 모든 네트워크 장비가 576바이트 이상 처리할 수 있다고 판단될 때에만 데이터의 길이를 576바이트 이상으로 해야한다.
5. Identification
식별자는 패킷에 할당된 번호다. 패킷이 여러 개로 쪼개져서 보내졌다면 이를 재조합해야하는데, 패킷에 할당된 정보를 통해 재조합한다. 즉, 한 패킷이 단편화되었다면, 단편화된 패킷에 모두 같은 식별자를 붙여서 어느 패킷으로 재조합해야하는지 명시한다.
6. Flags

플래그는 세 개의 비트로 이루어진 필드이다. 다양한 제어에 대한 플래그비트를 담당하는데, 우선 첫 번째 비트는 항상 0으로 고정되어있다. 두 번째 비트는 DF(Don't Fragment)를 나타내어, IP단편화를 수행하지 말라는 뜻이다. 세 번째 비트는 MF (More Fragment)의 약어로, 단편화된 패킷이 더 존재하는지를 나타낸다. 0이면 마지막 패킷이라는 것이고, 1이면 패킷이 더 남았다는 뜻
7. Fragment Offset
단편화 오프셋은 패킷이 단편화되기 전 몇 번째로 떨어진 패킷인지 의미한다. 8바이트만큼 계산해서 첫 번째 데이터로부터 얼만큼 떨어져있느냐를 나타낸다. 몇 번째 패킷인지를 나타내는 것이 아니다. 첫 번째 패킷은 Fragment Offset이 0이다. 그 다음 도착한 패킷이 Fragment Offset이 1100이라면, 패킷의 첫 번째 데이터에서 8800바이트만큼 떨어진 데이터라는 것이다.
8. Time To Live
TTL이라고도한다. 네트워크 상에서 데이터가 살아있는 최대의 시간을 표기한다. 0이라면 폐기된다. 패킷이 하나의 라우터를 거칠 때마다 TTL이 1씩 감소한다. 즉, TTL은 앞으로 거칠 수 있는 라우터의 수와도 같다.
패킷이 호스트나 라우터에 한 번 전달되는 것을 홉이라고 한다. 이렇게되면 쓸데없이 남아도는 패킷을 효과적으로 제거할 수 있다.
추가적으로 IP 초기인 1980년대에는 TTL을 초단위로 설정하려고 했는데, 시간 측정의 어려움 때문에 1홉 당 1감소로 바뀌었다. 그래서 예전문서를 보면 "모든 네트워크 장비는 패킷 처리에 1초 미만으로 소요되어도 최소한 TTL을 1만큼 감소시킨다"는 설명이 있다.
9. Protocol
프로토콜은 상위계층에서 사용한 프로토콜이 무엇인지 나타낸다. 대표적으로 TCP는 6번, UDP는 17번이다.
10. 헤더 체크섬
패킷의 문제가 있는지 확인하기 위한 것이다. TTL과 같이 헤더의 정보가 계속해서 바뀌므로, 이 패킷이 정상적인지 검증해야할 필요가 생겨서 등장했다. 헤더 체크섬은 헤더를 2바이트씩 쪼개서 전부 더한다. 더하다가 올림 때문에 왼쪽 끝으로 비트가 넘어가면 오른쪽에 더해준다.(One's complement addition, 1의 보수 계산) 그리고 덧셈이 끝나면 모든 비트를 반전시킨다.
그래서 수신자는 받은 데이터의 헤더를 2바이트씩 쪼개서(체크섬까지 포함) 다 더하면 값이 모든 비트가 1인 값이 나온다. (1111 1111 1111 1111) 이 경우 데이터에 이상이 없다고 판단한다. 만약 그렇지 않을 경우 데이터가 변질되었으므로 즉시 폐기한다.
11/12. 송신지 IP주소와 수신지 IP 주소
송수신지의 IP주소를 나타낸다.
이정도로 나타낼 수 있다.
IPv6 패킷 구조
IPv4는 0~255 사이의 숫자 네 개로 ip주소를 표현한다고했다. 그래서 이론상 할당 가능한 IP주소는 2^32개인 약 43억 개이다. 하지만 스마트폰, TV, 데스크톱 등 IP주소를 가질 수 있는 장치가 많아지면서, IP주소의 고갈우려가 빚어지기 시작했다.
그래서 128비트를 사용해 IP주소를 표기한 방식이 IPv6에서 등장했다.
콜론으로 구분된 8개 그룹이 16진수로 표기된다.
예를들면
2001:0230:abcd:ffff:0000:0000:ffff:1111 이렇게 나타낼 수 있으모, 이론상 할당가능한 IP주소는 2^128개다.

IPv6의 기본패킷구조인데, IPv4에 비해 단순화되어 있다.
주요 필드들은
1. 다음헤더
상위계층의 프로토콜을 가리키거나 확장헤더를 가리킨다. IPv4에 비해 헤더가 단순화되어있기 때문에 헤더를 확장하는 기능을 제공한 것이다. 대표적인 확장헤더의 종류로는 송신지와 수신지 간 모든 네트워크 장비가 패킷을 검사토록하는 홉 간 옵션, 수신지에서만 패킷을 검사토록하는 수신지 옵션, 암호화 인증을 위한 ESP, AH 등의 확장헤더가 있다.
앞서 IPv4는 Flag 필드를 통해서 단편화를 관리했다면, IPv6은 단편화 관련된 필드가 없다. 따라서 단편화 확장헤더를 사용해야한다.

단편화 확장헤더는 이렇게 생겼다. 확장헤더들은 기본헤더의 뒤에 붙는다. 예약됨과 예약은 0으로 고정되고, 다음에허는 또다른 확장헤더나 상위프로토콜을, 단편화오프셋, M, 식별자는 각각 IPv4의 단편화오프셋, MF 플래그, 식별자 필드의 역할을 담당한다.
2. 홉 제한
TTL 필드와 비슷한 역할을 한다.
3,4. 송신지 IP 주소 및 수신지 IP 주소
IPv6의 주소를 지정한다.
이렇게 IPv6의 주요필드들을 알 수 있다.
기본헤더의 경우 IPv4는 선택적으로 적용되는 옵션과 패딩 때문에 헤더길이가 가변적이라 헤더의 길이를 명시해야했지만, IPv6는 기본헤더가 40바이트로 고정되어 사용한다. 헤더가 추가되어도 다음헤더 필드를 통해서 헤더를 알 수 있다.
IPv4가 주로 사용되지만, IPv6도 다수의 장비에서 지원 중이다.
ARP
네트워크 계층이 등장한 이유가 "상대의 MAC 주소를 알지 못해서"이다.
그래서 네트워크 계층과 IP주소를 통해 상대 호스트의 LAN에 도달해도, MAC주소를 알지 못하는 경우가 있는데, 그럴 때 ARP를 사용한다.
ARP(Address Resolution Protocol)는 IP 주소를 통해서 MAC주소를 알아내는 방법이고, 동일네트워크 내의 송수신 대상의 IP주소를 통해서도 알아낼 수 있다. (IP주소는 호스트에 따라서 뒷부분이 달라진다.)
동일 네트워크 상에서의 ARP 처리과정
동일 네트워크라하면 동일 LAN에 속한 것이다. MAC주소를 안다면 데이터링크 계층에서 MAC주소를 이용해서 정보를 수신할 호스트를 지정할 수 있으나, MAC주소를 모르고 IP주소만 알 경우에는 네트워크 계층에서 ARP를 사용해야한다.
IP주소도 모르면 네트워크 계층에서는 해결할 수 없다.
1. ARP 요청
정보를 보내려는 측에서는 네트워크 내 모든 호스트에게 브로드캐스트 메시지를 보낸다. 이를 ARP 요청이라 칭하며, "IP주소가 x.x.x.x인 호스트에게 정보를 보낼 터이니 MAC주소를 알려달라"라는 뜻이다.
2. ARP 응답
ARP 요청을 받았으나 자신의 IP주소가 아닌 호스트들은 이를 무시한다. 그리고 IP주소가 맞다면 응답 패킷을 보내는데, 이를 ARP 응답이라고 칭한다. 이 때는 수신자 측에게 유니캐스트 메시지를 보낸다. 그래서 MAC 주소를 알게되는 것이다.

이 ARP요청과 응답 과정에서는 ARP 패킷을 사용한다. 이 패킷이 이더넷 프레임의 데이터에 들어간다.
오퍼레이션 코드는 ARP 패킷의 유형을 나타낸다. 요청이 1, 응답이 2
하드웨어 주소란 MAC주소가 명시된다. ARP 요청 시 이더넷 프레임의 '수신지 MAC 주소'에는 ff:ff:ff:ff:ff:ff (브로드캐스트임을 명시), ARP 패킷의 '수신지 하드웨어 주소'에는 00:00:00:00:00:00 이 명시된다.
프로토콜 주소는 IP주소를 나타낸다.
3. ARP 테이블 갱신
ARP를 활용할 수 있는 모든 호스트는 ARP 테이블이라는 정보를 가지는데, IP주소와 MAC 주소를 각각 대응시키는 것이다. 역시 MAC주소테이블과 마찬가지로 일정시간이 지나면 삭제되고, 임의로 삭제할 수도 있다. ARP 테이블은 터미널에서 arp -a 명령어를 입력하면 나온다.
서로 다른 네트워크 상에서 ARP 처리과정
두 호스트가 동일 네트워크가 있지 않은 상황에서는 호스트-라우터-라우터-...-라우터-호스트 순으로 정보를 전달해야한다. 라우팅이라는 것을 아직 배우지 않았으므로 라우팅을 거쳐서 정보를 보낼 라우터를 찾아냈다고 칠 때, ARP를 사용한다.
호스트가 다른 LAN에 정보를 보내야하므로 라우터를 찾아야한다. 이 때 MAC 주소를 모른다면 MAC주소 찾기가 ARP를 통해 이루어진다. 또한 라우터가 다음 라우터에게 정보를 넘길 때도, 라우터에서 수신지 호스트로 정보를 넘길 때에도 ARP를 통해 MAC주소를 알아낸다.
이처럼 서로 다른 LAN 상에서도 ARP를 통해 MAC 주소를 알아내 수신인을 식별할 수 있다.
다만 위 상황은 IP주소는 안다라는 것을 전제한 것으로, IP주소를 모른다면 네트워크 계층보다 윗계층에서 이를 처리해야한다.
물론 라우터 간 통신에는 ARP만 사용하는 것이 아니라 다양한 프로토콜을 사용한다. 이는 뒤에서 계속 다룰 예정이다.
번외: IP 단편화를 피하자
IP 단편화는 되도록 피하는 것이 좋다. 데이터가 많아지면 보낼 데이터의 양은 줄어들지만, 헤더는 여전히 그 크기를 유지 중이기 때문에 보낼 데이터와 트래픽이 증가한다. 따라서 IP 단편화는 최소로 진행하는 것이 좋다.
두 호스트가 정보를 주고받을 때, 패킷이 거치는 네트워크 장비들이 있다. 호스트의 MTU 크기가 매우 커도 라우터의 MTU가 작으면 IP단편화를 해야하는 것처럼, IP단편화는 "더이상 IP단편화를 진행하지 않아도 원활히 데이터를 전송할 수 있는 최대크기"만큼 IP단편화를 해야한다. 이를 경로MTU라고 한다.
요즘 인터넷의 패킷을 보면 주로 DF플래그가 켜진 채로 패킷이 전송된다. 즉, IP단편화를 금지한 패킷이 많이있다. 이런 상황에서 경로MTU를 찾는 방법은 경로 MTU 발견이라는 기술을 사용하는데, 우선 데이터를 크게 보내고, MTU보다 큰 데이터가 들어오면 네트워크 장비는 DF플래그가 켜져있으면 오류메시지를 반환한다. 그러면 호스트 측에서는 단편화를 통해 데이터 크기를 줄여나가며 경로MTU를 찾는다.
컬러잇에서는 IP프로토콜과 IP주소를 먼저 소개한 다음에 IPv4의 패킷구조를 설명하면 좋을듯
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
| [네트워크] 혼공네트 독서 #6 - IP주소 (1) | 2026.01.17 |
|---|---|
| [네트워크]IPv4 패킷필드에서 옵션은 무엇을 담당하는가? (0) | 2026.01.16 |
| [네트워크] 혼공네트 독서 #4 - 네트워크 장비, 허브와 스위치 (0) | 2026.01.14 |
| [네트워크] 혼공네트 독서 #3 - 이더넷 프레임 (0) | 2026.01.14 |
| [네트워크] 혼공네트 독서 #2 - 이더넷과 통신매체, 케이블 NIC (0) | 2026.01.14 |
