- 네트워크 계층은 IP 패킷을 목적지까지 전달하는 역할을 함.
- IP 패킷이 출발지부터 목적지까지 가는 데에 있어서 지나는 모든 호스트와 라우터에 IP 프로토콜이 실행됨.
- 출발지 호스트는, 전송계층에서 넘어온 데이터 세그먼트를 IP 패킷으로 캡슐화함 - encapsulate
- 목적지 호스트는 수신한 IP 패킷의 헤더를 제거하고, 전송 계층으로 데이터 전달함 - decapsulate
* 핵심적인, OSI 모델에서의 데이터 관점에서의 용어 및 특징 복습 (송신단 기준, 수신단은 모든 것을 반대로 생각)
계층 이름 | 데이터 단위 명칭 | 크기 | 비고 | |
응용 계층 | 데이터 | 무제한. 큼. 이메일 메시지, 웹 페이지 등. | 사용자가 애플리케이션을 통해 생성한 데이터. | |
전송 계층 | 데이터 세그먼트 / 데이터그램 | 큼지막했던 데이터를 작은 조각들로 나눔. 작아졌다가, TCP/UDP 헤더를 추가하면서 전체 크기는 증가함. | TCP의 경우 세그먼트, UDP의 경우 데이터그램으로 나눔. 헤더에는 출발 및 도착 포트 등의 정보가 있음. |
|
네트워크 계층 | 패킷 | 받은 세그먼트/ 데이터그램에 IP 헤더만큼 더 커짐. 물론 이후에 MTU를 넘어서면 또 소분하는 과정(fragmentation)을 거치기도 함. |
전송 계층에서 넘어온 녀석들에 IP 헤더를 더함. 그런데 만약 패킷의 크기가, MTU(Maximum Tranmission Unit 즉, 라우터 등이 한번에 전송할 수 있는 최대 패킷 크기)보다 크다면 이를 분할할 수 있음 - IP fragmentation. |
|
데이터 링크 계층 | 프레임 | 받은 패킷의 앞에 이더넷 헤더를, 뒤에 트레일러를 추가함. | 여기서는 이더넷 헤더를 붙이고, 그 안에는 MAC 주소 등의 정보가 들어가 있음. | |
물리 계층 | 비트 | 프레임을 전기 신호로 변환함. |
IP 데이터그램 포맷
출발지 IP 주소, 목적지 IP 주소 등의 정보, TTL, 헤더 체크섬, 프로토콜 등의 정보들이 포함되어 있음.
IP 주소
IP 주소 = 네트워크 ID + 호스트 ID
ex) 192.168.1.10 이면, 네트워크 ID가 192.168.1이고, 호스트 ID가 10 인셈.
꽤 오랜시간 공을 들였지만, 호스트 ID와 MAC 주소를 둘 다 써야 하는지 잘 모르겠다. IP 주소의 호스트 ID도 특정한 장치를 가리키고, MAC 주소도 특정한 장치를 가리키는 거라면, 둘 중 어느 하나로 다른 하나를 대체할 수 있는 게 아닌가 하는 의문인데, 왜 그렇지 않은지에 대한 답변을 못 찾았다...
* IPv4로 만들 수 있는 숫자의 개수가 한정적이라, 더 많은 수의 IP 주소를 만들어낼 수 있는 IPv6로 바뀌는 추세. 아직까지는 두 개 모두 활용 중. 그리고 보통 하나의 장치에 public IP 주소와 private IP 주소가 있다. 퍼블릭 IP는 전 세계에서 고유한 IP 주소다. 이는 ISP에 의해 관리되고 할당된다. 반면 프라이빗 IP는, 로컬 네트워크 내에서 사용되는 IP 주소로, 해당 네트워크 내부에서만 유효하다. 프라이빗 IP 주소는 NAT(Network Address Translation)에 의해 퍼블릭 IP 주소로 변환되어 인터넷에 접속할 수 있다.
프라이빗 IP를 쓰는 몇 가지 이유가 있다.
1 public IP 주소의 개수가 앞서 얘기한 것처럼 한정적이기 때문에, 하나의 public IP 주소를 여러 장치가 공유할 수 있다.
2 public IP를 여러 개의 작은 서브넷으로 나누어 효율적으로 관리할 수 있다. - 물론 이건 퍼블릭을 서브네팅해도 되긴 함.
3 private IP에는 외부 인터넷에서 직접 접근 못하기 때문에, 보안이 확보된다. <- 이게 핵심.
ex) 퍼블릭 IP: 203.0.113.1 -> 프라이빗 IP: 라우터: 192.168.1.1, 컴퓨터1: 192.168.1.2, 컴퓨터2: 192.168.1.3, ...
* X.X.X.0 이면 네트워크 주소고, X.X.X.255 면 브로드캐스트 주소다. 그래서 해당 주소의 256개 중에 2개는 이미 할당된 것이므로 그거는 건드리면 안 된다. 나머지 254개만 임의로 할당이 가능하다.
* 원래는 클래스라고 해서, A, B, C, D, E 이런 식으로 네트워크 ID의 비트 수를 기준으로 클래스를 나누곤 했는데, 이제는 더 이상 그 방법을 쓰지 않는다고 한다. Classless Inter-Domain Routing이라고 해서, CIDR 즉, IP 주소를 쓴다. 예시로는, 192.168.1.0/24 처럼, 192.168.1.0은 네트워크 주소를 나타내고, /24는 서브넷 마스크가 24비트임을 나타낸다.
IPv4 Fragmentation 관련
* Flags: 0 - 예약됨, 1 - 분할 금지, 2 - 추가 세그먼트
* Offset: 페이로드의 첫 번째 바이트부터 카운팅, 8바이트 단위로 계산됨
* 길이 및 체크섬: 패킷이 분할될 때 조정됨.
IPv4는 서로 다른 링크마다 다른 MTU를 가지고 있기 때문에, 그에 맞게 fragmentation을 하기 쉽게 하기 위한 디자인.
장점: 네트워크 MTU가 작은 경우에도 패킷을 전달할 수 있음.
단점: 여러 번 분할되면 효율성이 떨어지고, 단일 세그먼트의 손실이 전체 패킷의 손실로 이어질 수 있음.
서브넷
* 특정 IP, 예를 들어 192.168.1.XX 시리즈에다가 브로드캐스트 패킷을 전송(192.168.1.255)하면, 해당 시리즈의 모든 컴퓨터가 받는다. 그런데 하나의 IP 내에서도 소단위를 만들고 싶은 경우가 생겼고, 이때 서브넷의 개념이 발생한다.
서브넷이란, 대규모 네트워크를 분할하여 만들어진 작은 네트워크
서브네팅이란, IP를 분할하여 브로드캐스트로 전송되는 패킷의 범위를 좁히는 것.
방법: 원래 호스트 ID로 사용되던 비트를 빌려 서브넷ID로 만든다.
예를 들어, 192.168.1.XX 에서 XX가 호스트 ID, 나머지가 네트워크 ID였다면, 호스트 ID의 가장 앞쪽 비트부터 네트워크 ID가 더 가져가는 행위.
참고로 192.168.1.XX는, 이진법으로 11000000 10101000 00000001 xxxxxxxx 이렇게 표현이 된다.
현재로써는 앞의 24자리가 네트워크 ID를, 뒤의 8자리가 호스트 ID를 나타낸다.
이 상태를,
프리픽스 표기법은 "/ + (네트워크 ID의 비트 개수)"로 표현하므로 /24 가 되겠고,
서브넷 마스크는 "네트워크 ID의 비트는 모두 1로, 호스트 ID 비트는 0"으로 표현하므로 255.255.255.0이 되겠다.
만약 서브네팅을 하여 네트워크 ID 길이가 25라면, 각각 /25, 255.255.255.128이, 26이라면 각각 /26, 255.255.255.192가 되는 것이다. 물론 여기서 네트워크 ID 길이라 하면 기존의 네트워크 ID 길이 + 서브넷 ID 길이이다. 서브넷 ID가 하나씩 길어질수록 네트워크는 2의 제곱 배만큼 소분되는 것.
라우터와 스위치
라우터는 네트워크를 분할한다. 스위치는 못한다.
라우터는 네트워크 계층에서 활용된다. 스위치는 데이터 링크 계층에서 활용된다.
네트워크 계층에서 라우팅 경로를 찾아가는 방법
출발지와 목적지 사이에 거쳐가야 하는 수많은 라우터들은 이 방식으로 움직인다.
1. 패킷 수신: 라우터가 네트워크 인터페이스를 통해 패킷을 수신함
2. 목적지 주소 확인: 라우터는 패킷의 목적지 IP 주소를 확인함
3. 라우팅 테이블 조회: 라우터의 라우팅 테이블을 조회하여 가장 일치하는 서브넷 마스크를 찾음(Longest Prefix Match)
4. 출발 인터페이스 결정: 일치하는 경로를 찾으면 해당 경로의 출발 인터페이스와 게이트웨이를 사용하여 패킷을 다음 홉으로 전달함
* 라우팅 테이블에 다음 목적지 등이 안 적혀있으면 라우팅이 안 되므로, 원활한 라우팅을 위해서는 라우팅 테이블에 최신화된 정보가 많을 수록 유리하다. 이때 라우팅 테이블에 적히는 정보는, 수동으로 기입할 수도 있겠지만, 자동으로 채우는 방법이 있다. 이 방법들을 라우팅 프로토콜이라고 하고, 그 예시로는 RIP, OSPF, BGP 등이 있는데, 모두 라우터 간에 서로 정보를 교환하고 그것을 라우팅 테이블에 등록하는 방식이다.
'CS 전공수업 > 컴퓨터 네트워크' 카테고리의 다른 글
[네트워크] QUIC 프로토콜 (1) | 2024.06.04 |
---|---|
[네트워크] 네트워크 보안 (0) | 2024.06.04 |
[네트워크] TCP Congestion Control (0) | 2024.05.30 |
[네트워크] ARQ: Stop-and-wait, Go-back-N, Selective repeat (0) | 2024.05.06 |
[네트워크] 전송계층 - TCP와 UDP, 그리고 (De-)Multiplexing (0) | 2024.05.06 |