네트워크 계층
네트워크 계층은 크게는 하드웨어단과 소프트웨어단으로 나누고 소프트웨어단은 다시 Kernel mode와 User mode로 나뉜다.
하드웨어를 설명하는 단어는 Physical 이라고 할 수 있다. 즉, 물리적으로 구현된 것을 의미한다. 반대로 소프트웨어를 설명하는 단어는 Logical 즉, 논리적으로 구현된 것이다. 논리적이라는 의미로 사용 되는 Logical 대신 사용되기도 하는 단어로 Virtual 이 있다.
물리적으로 구현된 하드웨어를 논리적으로 구현하는 것이 가능할까? 답은 가능하다. 흔히 CPU(하드웨어에 속함)은 Machine 이라고 표현한다. 이러한 CPU를 논리적으로 구현한 것을 Virtual Machine , VM 이라고 표현한다. 이렇게 하드웨어를 논리적으로 구현하는 것을 두고 ‘가상화’라고 표현한다.
OSI 계층과 식별자
- L1, L2 → MAC : NIC(Network Interface Card)에 대한 식별자로, MAC 주소는 변경될 수 있다.
- L3 → IP : Host에 대한 식별자이다. 버전에 따라 IPv4, IPv6가 존재한다.
- L4 → Port : 프로세스에 대한 식별자. IP주소를 통해 호스트로 전달된 데이터가 정확히 어떤 서버(프로세스)에 전달될지를 명시
Cf. NIC : 호스트에 NIC가 하나 존재하면 IP도 하나 존재할 것이라고 여기기 쉽지만, 하나의 NIC에 다수의 IP가 바인딩 될 수 있다.
호스트(Host)
호스트는 크게 단말기(End-point)과 스위치(switch)로 나뉜다.
쉽게 말해, 네트워크 그 자체를 이루는 호스트라면 이를 스위치라고 부른다. (Cf. 모든 스위치가 호스트인건 아님. L2 스위치는 호스트X) 반대로, 네트워크를 이용하는 주체라면 이를 단말이라고 부른다.
- 단말기 : Client, Server, Peer(그 자체로 서비스의 소비자가 되기도 하고 공급자도 됨)
- 스위치 : 라우터(L3 스위치), IPS(시큐리티 스위치), Tab/Agregation Switch 등 종류 다양
Switch & Router
고속도로를 예로 들었을 때 갈림길이 생길 때마다 마주하는 것이 스위치이다. 네트워크에서는 IP(L3) 주소를 통해 패킷(단위) 경로를 파악하고 경로를 안내해주는 L3 스위치가 곧 라우터이다. 라우터 내부에는 라우팅 테이블이 있어 경로를 알려줄 수 있다. 스위치 이름(레이어 단계)는 경로를 구분하는 정보에 기반하여 이름 붙여진다.
Ex) 만약 MAC 주소를 이용해 스위칭할 경우 L2 스위치, IP주소를 이용해 스위칭할 경우 L3 스위치(라우터), Port 번호를 이용해 스위칭할 경우 L4 스위치, HTTP 정보에 의해 스위칭할 경우 L7 스위치라고 부른다.
Matric
네트워크 상에서 목적지에 다다르기 위해 경로를 결정할 때는 ‘비용’이 고려된다. 이 비용을 매트릭(Matric)이라고 한다. 메트릭은 적을 수록 좋다.
NIC & (L2) Frame
NIC(Network Interface Card)
쉽게 말해 LAN 카드라고 할 수 있다. NIC는 호스트에 연결된 하드웨어이며, 하나의 호스트에 여러 개일 수 있다. 유무선 상관없이 NIC라고 통칭한다. 식별자로 MAC(Media Access Control) 주소를 가진다.
Cf. 네트워크의 크기로 분류하면 WAN(Wide) - MAN(Metropolis - 도시 규모) - LAN(Local)
단위
흔히 알려진 '패킷'은 인터넷(WAN - L3) 상에서의 데이터 전송단위이다. L2에서의 데이터 유통단위는 '프레임(Frame)'이다. 프레임은 매우 작은데, 그 크기가 큰 ‘점보 프레임’도 1514bit 밖에 되지 않는다. (약 10KB에 달한다.)
Cf. 프레임에는 앞(Header)에 데이터의 출발지와 목적지 주소가 존재한다.
속도
1Gbps(Gigabits per sec)와 같이 표기한다. 대소문자에 유의해야 한다. 예를 들어 1Gbps를 1GBps와 같이 대문자로 쓸 경우 소문자로 쓸 때보다 8배 빨라지기 때문이다. (Cf. 1Byte = 8bit)
L2 Access Switch
엔드포인트와 직접 연결되는 스위치로, MAC 주소를 이용해 스위칭한다. 아래 그림(스위치)의 단자를 ‘인터페이스’ 또는 ‘포트’라고 한다.그림과 같이 24개의 단자가 있는 스위치를 24포트 스위치 또는 24포트 허브 등으로 말한다.
위의 오른쪽 그림은 두 PC의 NIC가 L2 스위치에 연결된 상태를 의미한다. (일반적으로 이와 같은 식으로 표현된다.)
액세스 스위치의 연결부(개별 포트)가 주황불이 들어오면 충돌(Collison) 등으로 인해 정상적으로 연결되지 않은 상태(Link-down)를 의미하고, 초록불이 들어오면 정상적으로 연결된 상태(Link-up)를 의미한다.
Cf. Link-down된 상태라는 것은 물리적으로 케이블 연결을 끊어버린 상태를 의미한다.
Cf. L2 스위치에서 다시 상위 스위치(라우터)로 연결되는 경우 해당 연결 케이블을 두고 UpLink 라고 한다. (‘link-up’과 혼동 하지 않도록 유의하자)
L2 Distribution Switch
L2 Access 스위치를 위한 스위치(보다 고성능 스위치)로, VLAN(Virtual LAN)기능을 제공하는 것이 일반적이다. 규모를 쉽게 말하자면 보통 한 층의 한 사무실에 L2 스위치 하나가 들어가고, 한 층에 L2 Distribution 스위치 하나가 들어간다. 또한 건물 하나에 하나의 라우터가 들어간다고 생각할 수 있다. 만약 10층짜리 건물이 하나의 회사로 사용되는 경우 10개의 L2 Distribution 스위치가 사용된다고 가정할 수 있다.
LAN과 WAN의 경계 그리고 Broadcast
Broadcast 주소
MAC, IP 주소 모두 브로드캐스트 주소가 존재한다.
- MAC의 경우 48bit 주소 체계를 가지고 있는데, 목적지 주소가 2진수로 봤을 때 전부 ‘1111’(= F)로 구성되어 있으면 브로드캐스트 주소이다. → 목적지 주소가 `FF-FF-FF-FF-FF-FF` 인 경우를 의미
- 만약 여러 대의 PC가 연결된 하나의 네트워크에서 하나의 PC가 브로드캐스팅을 할 경우 그 순간 다른 모든 PC들은 더이상 통신을 할 수가 없다. (브로드 캐스팅이 끝날 때까지) → 때문에 브로드캐스팅은 최소화하는 것이 좋다.
IPv4주소의 구조
IPv4의 경우 32bit 주소 체계를 가지는데, 8bit씩 네 부분으로 나누어 점으로 구분해 표현한다. 8bit는 곧 \(2^{8}\)이다. 2진수로 표현할 수 있는 수를 살펴보면 `0000 0000` ~ `1111 1111` 이 되는데, 이는 십진수로 0 ~ 255이다. 즉, 각 자리의 수는 해당 범위에 속한 값일 수 있다.
Cf. 앞서 Broadcast 관련 내용에서 `1111 1111` 은 브로드캐스트 주소일 수 있음(항상 그렇단 것은 아님)을 배웠다. 이를 주의해야 한다.
Ex. 192.168.0.10 (사설 IP 구조에 해당)
→ `1100 0000 1010 1000 0000 0000 0000 1010`
IPv4 기준으로, 앞의 세 자리는 Network ID를 의미하고, 마지막 한 자리는 Host ID를 의미한다.
IP 주소는 Host에 대한 식별자인 것은 맞으나, 주소 내부에는 네트워크 ID와 호스트 ID 가 함께 포함됨을 알 수 있다.
L3 Packet
인터넷상(L3)의 데이터 전송 단위 데이터이다.
네트워크에서 모든 단위 데이터가 그렇듯이 Header와 Payload로 나뉘며(L2 Frame도 마찬가지), 이는 상대적인 분류이다.
- Header: 출발지, 목적지 정보 포함
- Payload: 헤더가 실어나르는 대상
최대 크기는 MTU(Maximum Transmission Unit) 이다. 일반적으로 1,500byte이다. (약 1.4xKB)
Encapsulation & Decapsulation
En/Decapsulation(캡슐화/역캡슐화)
포장하여 단위화 한다. + (보안 측면에서) 밖에서 보이지 않는다.
계층별 데이터 단위
(TCP/IP 기준)
- L1 : Bit Stream
- L2 : Frame
- L3 : Packet
- 최대 크기 : MTU(Maximum Transmission Unit) - 일반적으로 1,500bytes
- L4 : Segment
- 최대 크기 : MSS(Maximum Segment Size) - MTU가 1,500bytes라는 전제하에 일반적으로 1,460bytes
- Socket : Stream(데이터 덩어리 그 자체를 의미. 단위는 아님)
- 시작시점은 있으나 종료 시점은 애플리케이션 단에서 설정해버리기 때문에, 데이터를 송수신하는 OS에게 Stream이란 연속적으로 이어진, 크기를 정확히 알 수 없는 큰 데이터를 의미한다.
- 소켓이라는 인터페이스가 있으면, 여기다대고 스트림을 write하는 것이다.
- 소켓에서 전달된 길게 나열된 데이터(Stream)를 MSS에 맞춰 분할하는 작업을 Segmentation이라고 한다. → MSS는 보통 MTU보다 작다. (MTU에 맞춰서 설정된다고 보면 될듯) 따라서 사실상 인터넷에 전송가능한 크기(Packet의 MTU)에 맞추기 위해 세그멘테이션한다고 보면 될 듯
Cf. UDP에서는 등장하는 데이터 단위가 Datagram이 있다. (Packet이랑 비슷하다.)
TCP/IP 송수신 구조
송신
- 파일을 전송하면 소켓에서 입출력(I/O)가 발생하는 것인데, 소켓에는 attatch된 메모리, 즉 Buffer가 존재할 수 있다. (버퍼가 없으면 Non-Buffered IO를 하게 된다.) 여기에 데이터를 Write한다.(채워넣는다) Cf. 네트워크상에서 입출력은 곧 Send/Receive를 의미하기 때문에, 이 때는 Send를 하는 것이라고 할 수 있다.
- 프로세스(애플리케이션)에도 개발자가 데이터를 읽어오기 위해 만들어둔 메모리(Buffer)가 있을 수 있다.
- 보조기억장치에서 가져온 데이터(파일)을 가져와 Process의 버퍼(Buffer)를 채움과 동시에 이를 다시 Socket에 attatch된 버퍼로 Copy해 넣으며 프로세스의 버퍼는 비우는 작업이 수행된다.
- User mode에서 Kernel mode로 넘어온 데이터(Stream)이 TCP stack으로 넘어오면서 세그멘테이션(Segmentation)이 일어난다. 이 때 세그먼트(Segment)들에 순서에 따른 번호(Sequence Number)가 매겨진다.
- 이후 분해된 세그먼트들이 개별적으로 패킷에 담겨진다. (이 때 패킷의 페이로드(Payload)에 세그먼트가 들어가고, 패킷의 헤더에 출발지와 도착지의 주소가 담긴다.)
- 패킷은 L2에 이르러서는 Frame에 담긴 후(여기까지 Encapsulation) 목적지로 전송된다. Cf. 프레임은 하나의 프레임으로 끝까지 전송되는 것이 아니고 변경될 수 있다.)
수신
- 송신때는 L4 → L2 까지 연속적으로 캡슐화(Encapsulation)이 일어났다면, 수신 때는 반대로 역캡슐화(Decapsulation)이 일어난다.
- 수신측에서는 데이터를 정상적으로 받으면 받았다는 신호로 ACK(Acknowledge Number)를 송신측에 전송하는데, 만약 1, 2번 세그먼트를 받고 3번을 받을 차례라면 `ACK #3`과 같은 형태로 보내게 된다.
- ACK(Acknowledge Number) : TCP 세그먼트 데이터 번호
발생 가능한 네트워크 장애
- Loss(유실) ← 네트워크 문제
- Re-transmission + ACK-Duplication : 송신측에서는 이미 정상적으로 보내진 데이터를 다시 보내고, 수신측에서는 중복된 ACK를 여러 번 보내는 경우
- 송신측에서 Seq Num 1, 2 세그먼트를 보낸 후 `ACK #3` 을 기다리는데 오지 않아 다시금 1, 2 세그먼트를 보내게 되고, 수신 측에서는 `ACK #3`을 보냄과 동시에 다시 1, 2 세그먼트가 오게 되어 다시금 `ACK #3`을 보내는 경우
- Out of order : 1 → 2 → (3 미도착) → 4 와 같이 중간에 와야할 세그먼트가 오지 않았거나, 세그먼트의 순서가 바뀐 경우
- Zero Window : 소켓 등의 버퍼에 데이터를 담는 것과 동시에 비우면서 여유 공간을 확보해야 하는데, 수신 속도가 버퍼를 비우는 시간보다 빨라서 여유 공간이 없는 경우
'개념' 카테고리의 다른 글
Network) TTL, 단편화, DHCP, ARP, RTT (0) | 2024.03.19 |
---|---|
Network) 특수한 IP 주소(Broadcast IP 주소, Loopback IP 주소) (0) | 2024.03.17 |
Network) IP 클래스와 서브넷팅, 서브넷 마스크 (0) | 2024.03.17 |
운영체제) 인터럽트(Interrupt)와 관련 주요 개념, DMA (0) | 2022.09.01 |
쿠키, 토큰, 세션 (0) | 2021.10.10 |