- CloudWatch
- Docker
- spring boot
- nginx
- 데이터베이스
- ci/cd
- 스프링
- join
- java
- AWS
- jpa
- spring mvc
- sql
- select
- string
- 자바
- 프로그래머스
- spring security 6
- 1차원 배열
- spring
- Django
- mysql
- SSL
- PYTHON
- 스프링부트
- hibernate
- @transactional
- ORM
- 문자열
- springboot
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
개발하는 자몽
[Network] 네트워크와 OSI 7 계층 4-1: L3, IPv4, Packet 본문
🔗이전글: 2026.05.09 - [개발 지식] - [Network] 네트워크와 OSI 7 계층 3: NIC, L2, 브로드캐스트
L3
IPv4
L3인 IP, 그중에서 IPv4은 32 bits이다. IPv4는 4개의 8 bits로 이루어져 점(dot)으로 나눈다. 점으로 나뉘는 각 8 bits는 '옥텟(octet)'이라고 한다. 알다시피 `192.168.0.10`처럼 생겼다.
- 32 bits = 8 bits × 4 → 8bits로 표현할 수 있는 범위: 2^8=256 → 이진수 11111111 → 표현 범위 0~255
- 11111111(2) → '브로드캐스트' 일 수도 있음
이때 이 IP 주소는 'Network ID'와 'Host ID'로 나눌 수 있다. 예를 들어, 네트워크 ID를 `192.168.0`로 두면, 마지막 `10`은 호스트 ID라고 한다. 이 네트워크 ID와 호스트 ID는 점으로 나뉘지만, 범위가 고정적이지 않고 경우마다 다르다. (앞 두 자리가 네트워크 ID, 나머지 두 자리가 호스트 ID 일수도 있고, 맨 앞자리만 네트워크 ID 일수도 있는 것)
일단 앞서 든 예시(192.168.0.1)로 계속 내용을 진행한다.
- 네트워크 ID와 호스트 ID를 현실세계의 도로 주소로 비유하면, 아래와 같이 예를 들 수 있다.
- Network ID : 서울시 용산구 이태원
- Host ID : n번지
해당 동네(Network ID)에 진입하고 그 동네에서 정확한 지번(Host ID)을 찾는다고 생각하면 된다. 위 `192.168.0.10`을 두고 봤을 때, Host ID 부분인 `10`은 네트워크 `192.168.0`에 속한 주소 중 하나라고 볼 수 있다. 즉 `192.168.0`이라는 네트워크는 0~255를 범위로 하는 총 256개의 주소를 갖고 있다.
⭐Packet
- 패킷 = 데이터 전송 단위
- 패킷 → IP 프로토콜, 3 계층 → L3 IP Packet
- Header와 Payload로 나뉜다. (상대적인 분류)
- 헤더에는 출발지와 목적지 주소, 페이로드에는 헤더가 실어 나르는 데이터가 담겨있다.
- 최대 크기는 'MTU(Maximum Trasmission Unit)'
- MTU = 1,500 bytes 정도 = 대략 1.4 KB
Encapsulation, Decapsulation
데이터를 단위화(unitization), 포장(Packaging)
- 쉽게 말해, 상자에 무언가를 넣으면 'Encapsultation', 꺼내면 'Decapsulation'이라고 생각하면 된다.

네트워크로 돌아오면,
- 위 그림은 L2에서의 상태로, 제일 바깥의 헤더(Header)부터 페이로드(Payload #1) 끝까지를 프레임(Frame)이라고 한다.
- 그리고 그 안은 L3 IP 패킷(Packet)이 된다. → L3 IP 패킷 전체가 L2 프레임 페이로드에 속한 것
- 패킷 페이로드(Payload #2) 안에는 L4 세그먼트(segment, TCP인 경우)가 있다.
- TCP 이후에는 '스트림(Stream)'이라고 하는 다른 형식을 논하게 된다.
패킷 생성과 전달
상황: A 프로세스에서 어떤 데이터를 B 프로세스로 전달해야 한다.
- 전달하려는 데이터를 패킷으로 만든다. 이 패킷에는 출발지 주소와 목적지 주소가 담겨있다.
- 패킷을 호스트와 만나는 접점(인터페이스)인 게이트웨이(Gateway)로 전달한다.
- 호스트 = B 프로세스가 실행되는 곳
- 게이트웨이 = 집으로 치면 '현관'이다.
- 게이트웨이는 체계에 맞춰서 패킷을 라우팅(Routing)한다. 인터넷이면, IPv4 목적지 주소를 보고 호스트까지 전달된다.
- 해당 IP 주소를 갖는 호스트까지 왔다면, 이후에는 B 프로세스의 포트(Port) 번호를 찾아 전달이 완료된다.
OSI 7 계층 상으로 보면,
- L7 - 어떤 프로세스가 인터넷을 통해서 정보/데이터를 전달하려고 한다.
- 프로세스 아래에는 커널에 존재하는 TCP/IP를 추상화한 인터페이스, 즉 소켓(Socket)이 존재한다.
- 소켓은 파일의 일종이다. 사용자 모드 애플리케이션 프로세스가 접근할 수 있도록 커널 모드 프로토콜을 추상화한 인터페이스이다.
- 우리는 보통 파일을 'write' 한다. TCP 소켓은 'write'라고 하지 않고 'send'라고 한다.
- 데이터가 소켓을 타고 더 하위 계층으로 내려가 TCP를 만난다. 여기에서 데이터 앞에 TCP 헤더라는 것을 붙인다. 이렇게 데이터와 TCP 헤더까지의 한 덩어리를 세그먼트(Segment)라고 한다. (데이터 + TCP 헤더 = 세그먼트)
- L4에서 L3로 내려가면 세그먼트에 IP 헤더가 붙어 패킷이 된다.
- L3에서 L2로 내려가면 패킷에 이더넷 프레임 헤더가 붙어, 프레임이 된다.
- 이제 데이터는 프레임 상태로 L1까지 내려가 선을 타고 나가게 된다.
- 이렇게 나간 데이터는 L2 Access 스위치를 만나게 되고, 또 타고 올라가다 보면 라우터(게이트웨이)를 만나게 된다. 결국 인터넷에 도달하게 된다. (L7 → L1 → L1 → L7)
'개발 지식' 카테고리의 다른 글
| [Network] 네트워크와 OSI 7 계층 4-2: 데이터 단위 (0) | 2026.05.14 |
|---|---|
| [Network] 네트워크와 OSI 7 계층 3: NIC, L2, 브로드캐스트 (0) | 2026.05.09 |
| [Network] 네트워크와 OSI 7 계층 2: 식별자, 호스트, 스위치 (0) | 2026.05.08 |
| [Network] 네트워크와 OSI 7 계층 1: OSI 7 계층과 user mode, kernel mode (0) | 2026.05.07 |
| [Network] STOMP와 SockJS (0) | 2025.01.24 |