네트워크 계층은 애플리케이션 계층과 트랜스포트 계층의 다음 계층입니다.
해당 계층에서는 라우터가 작용을 하며, 라우팅과 포워딩이 이루어집니다.
라우팅이란, 송신측에서 목적지까지 패킷이 전송될 경로를 정하는것이고, 포워딩은 라우터에서 입력 링크로부터의 패킷을 출력링크로 전달하는 것을 의미합니다. 이때, 포워딩 테이블을 통해 목적지 주소와 출력 링크 인터페이스를 대응시켜두어 빠른 속도로 전달할 수 있게끔 합니다.
라우팅을 할 때에는 라우팅 프로토콜을 통해 경로를 결정하는데 크게 다음 3가지로 나누어 집니다.
- RIP
- OSPF
- BGP
그리고 데이터 전송은 IP 프로토콜을 통해 이루어지게 됩니다.
IPv4의 데이터그램은 최소 20바이트에서 최대 60바이트의 헤더를 가집니다.
IP 데이터그램은 출력 링크의 MTU에 따라 단편화가 발생합니다.
EX) 입력 데이터그램이 4000바이트이고 이 데이터 그램은 헤더가 20바이트라고 가정, 출력 링크의 MTU는 1500바이트일 때, IP 데이터그램은 3조각으로 나뉘어지고, 각각 헤더 20바이트에 페이로드는 1480, 1480, 1020 바이트를 가진 채로 단편화가 이루어집니다. 1480 + 1480 + 1020 = 3980으로 헤더 20을 제외한 데이터그램 전부 전송완료
IPv4는 32비트의 길이로, 십진 표기법으로 표기합니다. IP주소는 크게 서브넷과 호스트로 구분하게됩니다.
서브넷이란, 전체 IP 네트워크를 구성하는 부분 네트워크로 같은 서브넷 내에있으면, 스위치 등으로 통신하여 같은 네트워크로 간주합니다. 다른 서브넷 끼리는 라우터로 연결하여 구성하게됩니다.
서브넷을 활용한 Classful 네트워크 주소는 A, B, C, D, E 클래스로 나뉘어지는데, 이중 A, B, C 클래스는 유니캐스트 주소로 사용하고, D는 멀티캐스트, E는 실험용 혹은 예약영역으로 사용됩니다.
클래스 A는 제일 앞 비트가 0으로, 그 부분을 제외한, 7비트는 네트워크 영역으로 사용합니다. 따라서 네트워크 수는 2^7개가 존재합니다. ( 0.0.0.0 ~ 127.255.255.255 )
클래스 B는 제일 앞 2 비트가 1, 0으로, 네트워크 prefix는 2바이트로, 2^14개의 네트워크 수를 가집니다. (비트 2개 제외하므로 2^14) ( 128.0.0.0 ~ 191.255.255.255 )
클래스 C는 제일 앞 3비트가 1, 1, 0으로, 네트워크 prefix는 3바이트입니다. 따라서 2^21개의 네트워크 수를 가지고, 호스트 수는 2^8 - 2가 됩니다. (0.0.0.0, 255.255.255.255 는 각각 네트워크 주소, 브로드캐스트 주소이므로 제외해야하니까 2^8 - 2) ( 192.0.0.0 ~ 223.255.255.255 )
클래스 D와 E는 같은 방식으로 각각 (1, 1, 1, 0), (1, 1, 1, 1)이 되고, 남은 비트는 전부 멀티캐스트 주소, 예약 주소로 사용합니다.
클래스 C를 사용하는것을 예시로, 네트워크 주소를 찾을 때, 192.168.136.33 이라고 가정하고 서브넷 마스크는 네트워크 prefix 3비트에 맞추어 255.255.255.0을 사용합니다. 이 두 주소를 AND 연산하여 네트워크주소인 192.168.136.0을 추출할 수 있고, 호스트 비트를 전부 1로 세트하면 브로드캐스트 주소인 192.168.136.255를 얻을 수 있습니다. 따라서 해당 주소의 범위는 192.168.136.0 ~ 192.168.136.255 입니다.
IPv4에는 특수한 주소가 있는데, Loopback 주소인 127.0.0.1 이나 아직 IP주소가 정해지지 않았을 때, 출발지 주소를 브로드캐스트로 보내기위해 0.0.0.0 을 사용하기도 합니다.
최근에는 클래스 방식으로 호스트와 네트워크 부분을 가르지 않고, CIDR 방식으로 비트 단위로 표현합니다.
EX) 192.168.130.69/26 ======= 앞 26bit 까지 네트워크
다음으로 DHCP입니다. DHCP는 아직 IP가 할당되지 않은 호스트에 가용 IP 주소를 할당합니다. 클라이언트 - 서버 프로토콜이며, UDP를 통해서 동작합니다. 앞서 서술한 0.0.0.0 의 출발지 주소로 브로드캐스트를 보내서 해당 메세지를 받은 DHCP 서버는 가용 IP 주소를 제안하고, 클라이언트가 사용한다는 응답을 받게되면 사용하게되는 형식으로 이를 DORA Process 라고 부릅니다. (Discover - Offer - Request - Ack)
다음으로는 NAT 입니다. NAT는 네트워크 주소 변환으로 사설망에서 사용하는 IP는 사설망 바깥에서 유효하지 않기 때문에, 라우터를 통해 다른 네트워크로 나갈 때, IP를 공인 주소로 변환합니다. 이 과정에서 NAT 변환 테이블을 사용하며, 외부로 나가는 혹은 들어오는 데이터그램의 출발지 IP, 포트 혹은 목적지 IP 포트를 변환합니다.
NAT는 주소 변환 및 내부 포워딩 방식에 따라 4가지로 나뉘게 됩니다. 위 예시처럼 내부의 사설 IP가 바인딩 테이블을 이용해서 호스트와 통신하는 Full-cone NAT, 연결할 당시의 IP주소 만 허용하고 다른 포트는 열려있는 Address-restricted-cone NAT, 연결 당시의 IP주소와 포트만을 허용하는 Port-restricted-cone NAT, IP주소와 포트에 하나의 라우터를 매핑하여 독립적인 테이블을 가지는 Symmetric NAT가 있습니다.
NAT에는 들어오거나 나가는 패킷의 전달여부를 정하는 규칙이 있습니다. 내부 네트워크의 호스트가 외부 네트워크와의 연결을 초기화할때만 패킷을 전송하는 엔드포인트 필터링이나 사전에 정의한 IP:PORT 만을 전송하는 주소 및 포트기반 필터링 등이 존재합니다.
NAT에서 사설 IP를 사용하는 두 호스트가 정보를 주고 받을 때, 매번 필터링이나 방화벽을 지나지 않고 자유롭게 통신하게 해주는 NAT 투과기술로 릴레이 방식, Connection Reversal, 홀펀칭 등이 있습니다.
다음으로 ICMP 입니다. ICMP는 네트워크 장치들의 통신 문제 진단에 사용되는 프로토콜로 대표적으로 ping명령이나 traceroute 등에서 사용됩니다. traceroute에서 ICMP는 메세지를 보내고 TTL 만료를 이용하여 작동합니다. ICMP 메세지는 IP 데이터그램에 실려보내집니다.
라우팅 알고리즘은 크게 거리벡터 라우팅과 링크상태 라우팅으로 구분됩니다. 거리벡터 라우팅에서 사용되는 거리벡터 알고리즘은 벨만 포드 알고리즘은 활용한 방법으로, 각 노드 x에서 각 노드 y로 가는 비용을 매번 계산합니다. 링크상태 알고리즘은 다익스트라 알고리즘을 활용한 방법으로, 노드 A에서 노드 B로의 최소비용을 계산하고 다시 다음 노드C로 가는 비용을 갱신하는 방식으로 작동합니다.
OSPF가 링크상태 알고리즘에 기반하고있고, RIP가 거리벡터 알고리즘에 기반하고 있습니다.
동일 관리 제어하에 있는 라우터 그룹을 AS라고 부르는데, 이 그룹안에서 작동하는 라우팅 방식을 Intra-AS 라우팅이라 하며, 이 그룹 바깥에서 작동하는 라우팅 방식을 Inter-AS 라우팅이라합니다. Intra-AS 라우팅에는 RIP와 OSPF가 속하고, Inter-AS 라우팅에는 BGP가 속합니다.
OSPF의 경우는 IP에서 바로 실려보내지지만, RIP는 UDP 세그먼트에 실리고, BGP는 TCP에 실려간다는 차이점이 존재합니다.
BGP는 AS 바깥에서 작동하므로 어떤 AS에서 다른 AS로 보내는 경우에 사용되는데 이때 경로를 선택할 때, 속성 값에 따른 선택, AS-PATH값에 따른 선택, Hot-potato routing 등이 있습니다.
Hot-potato routing은 이름대로 뜨거운 감자 라우팅으로 뜨거운 감자는 오래 들 수 없으니 가장 가까운곳으로 던지는 방식과 같습니다. 따라서 자신이 속한 AS로부터 가능한 빨리 내보낼 수 있는 경로를 찾습니다.
IPv4에서 Anycast를 사용하는 경우, 이때에는 BGP를 사용합니다.
IPv6는 헤더가 40바이트로 고정됩니다. 출발지 주소와 목적지 주소는 16바이트로 설정됩니다. IPv6는 16진수 콜론 표기법을 사용하는데, 왼쪽부터 붙어있는 0은 생략이 가능합니다. 또한, 0000 으로만 구성된 두개 이상의 필드는 ::으로 축약이 가능합니다. 하지만 0000으로 구성된 영역이 2개 이상인 경우 그중 하나만 축약이 가능합니다. IPv6에도 IPv4처럼 Loopback address 등에 속하는 특수 주소가 존재합니다. (::1/128 == 127.0.0.1/8)
'Computer Science > 네트워크' 카테고리의 다른 글
데이터링크 계층 (DataLink Layer) (0) | 2024.07.09 |
---|---|
트랜스포트 계층 (Transport Layer) (0) | 2024.06.28 |
애플리케이션 계층 (Application Layer) (0) | 2024.06.27 |
네트워크 개요 (0) | 2024.06.26 |