관련 책: https://product.kyobobook.co.kr/detail/S000001792473
이 책을 참고, 공부하여 서술하고 있습니다.!
네트워크 계층
네트워크 계층이 필요한 이유
- MAC주소가 하드웨어에 각인되어 유연성이 떨어진다.
웹 서버를 열었는데 매일 수천 명의 사용자가 이더넷으로 방문한다고 하면, 링크 계층만 써서 서비스를 하게됬을때 서버에 접속하기 위해 이더넷 NIC장비의 MAC 주소를 사용자들이 알아야 한다.
과부하를 견디지 못하고 NIC카드가 고장났을 경우 새로운 NIC카드를 장착해야하는데 이럴 때의 MAC 주소는 이전과 다를테니 사용자는 더 이상 이전 주소로 접속할 수 없다.
- 링크 계층으론 인터넷을 보다 작은 네트워크망으로 나눌 수 없다.
전체 인터넷이 링크 계층으로만 되어있다 하면 모든 컴퓨터는 단일망에 연결되어 있어야한다.
이더넷에선 각 프레임을 네트워크상 모든 호스트에 전달해야 하고, 전송자는 애초 의도한 수신자가 바로 자신인지 여부는 호스트 스스로 판단해야하기에 프레임 하나하나 보낼 때마다 지구상 연결된 모든 호스트로 전달해야할 것이다.
네트워크 망을 지역마다 서로 다른 보안 영역으로 구분해 둘 수단이 없다.
- 링크 계층에는 한 종류의 링크 프로토콜을 그와 다른 링크 프로토콜로 번역하는 방법이 정의되어있지 않다.
여러 종류의 물리 계층과 링크 계층 프로토콜을 두는 까닭은 바로 서로 상이한 네트워크 사이에 용도에 가장 알맞은 최적의 구현을 각자 선택하게끔 하자는 근본 철학에서 비롯, 링크 계층 위에 별도의 주소 체계를 두어, 하나의 링크 프로토콜과 다른 링크 프로토콜이 서로 통신할 방법을 규정할 필요가 있다.
네트워크 계층의 역할
링크 계층 위에 논리 주소 체계 인프라를 구축하는 것이다. 이렇게 하면 주소 걱정 없이 쉽게 호스트 하드웨어를 교체할 수 있고, 여러 호스트를 그룹으로 묶어 서브네트워크(Subnetwork)로 격리하거나, 멀리 떨어진 서브네트워크 사이에 링크 계층 프로토콜이나 물리적 매체가 각기 다르더라도 서로 통신할 수 있다.
IPv4
네트워크 계층에 필요한 기능을 구현하는 데 가장 널이 이용되는 프로토콜은 바로 인터넷 프로토콜 버전 4, 줄여서 IPv4
네트워크 계층의 역할 수행을 위해 IPv4에선 논리 주소 체계로 각 호스트마다 개별적인 주소를 부여하며, 서브넷(subnet)체계로 주소 공간의 논리적 부분 집합을 나누어 물리적 서브네트워크를 정의하는데 사용한다. 아울러 라우팅 체계로 서브넷 사이에서 데이터를 서로 전달한다.
IP주소와 패킷 구조
IP주소는 32비트 숫자로, 주로 사람이 알아볼 수 있게 네 개의 8비트 숫자를 마침표로 구분하여 표시한다.
(ex. 23.193.142.184)
인터넷상 호스트마다 고유한 IP주소를 부여해 두면 발신 호스트가 패킷을 보낼 때 패킷 헤더에 목적 호스트의 IP주소를 기록하기만 하면된다.
IPv4에선 IP주소를 정의함과 동시에 IPv4 패킷 구조도 정의하고 있다.
버전(4비트): 이 패킷이 지원하는 IP 종류를 표시한다. IPv4라면 이 숫자는 4가 된다.
헤더 길이(4비트): 헤더의 길이를 32비트 워드로 표시. IP헤더 뒷부분에 옵션 필드가 여럿 붙을 수 있으므로 헤더의 길이는 가변 적이다. 헤더 길이 필드는 4비트에 불과하므로 최대 15까지 값을 가질 수 있는데, 이때 15라는 숫자는 헤더가 열다섯 개의 32비트 워드, 즉 60바이트로 되어 있음을 뜻한다(15 * 4). 헤더에는 반드시 20바이트의 필수 정보가 포함되어야 하므로, 이 값이 5보다 작은 경우는 없다.
서비스 종류(8비트): 혼잡 제어나 서비스 식별자 등 다양한 용도로 사용된다.
패킷 길이(16비트): 전체 패킷의 길이를 바이트 단위로 표시한다. 길이는 헤더와 페이로드를 더한 것이다. 16비트로 나타낼 수 있는 최대 숫자가 65535이므로, 최대 패킷의 길이 역시 65,535바이트로 제한된다. IP헤더의 최소 길이는 20바이트이므로, IPv4패킷에서 페이로드가 담을 수 있는 최대 길이는 65,515바이트로 환산된다.
분열 식별자(16비트), 분열 플래크(3비트), 분열 오프셋(13비트): 분열된, 즉 조각난 패킷을 다시 조립하는 데 사용된다.
TTL(Time To Live)(8비트): 패킷을 전달할 수 있는 횟수 제한을 나타낸다.
프로토콜(8비트): 페이로드 내용을 해석하는데 어떤 프로토콜을 써야하는지 나타낸다. 윗단 계층의 데이터를 어떻게 다루는지 나타낸다는 점에서 이더넷 프레임의 이더필드와 비슷하다.
헤더 체크섬(16비트): IPv4헤더의 무결성을 검증하는데 사용하는 체크섬을 기록한다. 헤더부분만 계산해 둔 것이며, 페이로드의 무결성을 검증하는것은 윗단 계층의 몫이다. 그다지 쓸모 없는 편이기도 한다, 링크 계층 프로토콜에서 이미 체크섬으로 프레임 전체의 무결성 검사를 하는 경우가 많기 때문이다.
발신지 주소(32비트), 목적지 주소(32비트): 패킷 발신지와 목적지의 IP주소를 나타낸다. 목적지의 경우 특수 주솟값을 쓰면 여러 호스트에 동시에 패킷을 보낼 수 있다.
페이로드: 프레임에 담겨 전송되는 데이터 그자체를 뜻한다.
직접 라우팅과 주소 결정 프로토콜(ARP)
서로 다른 링크 계층 프로토콜로 연결된 네트워크 사이에서 IPv4로 어떻게 패킷을 전달하는지 이해하려면, 단일 링크 계층 프로토콜의 단일 네트워크에서 패킷이 전달되는 방식부터 이해해야한다. 먼저 IP 주소로 패킷의 목적지를 지정한다. 링크 계층이 패킷을 전달케 하려면 먼저 IP주소를 링크 계층이 이해할 수 있는 주소 형태로 바꿔 프레임에 포함해 주어야 한다.
이론상으로 네트워크 계층에서 패킷을 링크 계층으로 전달하면 실제 전달이 일어나야하겠지만, 이더넷 모듈은 IP주소만으로 패킷을 전달할 수 없다. IP주소는 링크 계층이 아닌 네트워크 계층에 속한 개념이기 때문이다.
링크 계층은 IP주소에 대응하는 MAC주소로 변환하는 방법을 알고있어야한다. 그러한 행위를 해주는 것이 링크계층에 있으며 주소 결정 프로토콜(Address Resolution Protocol, ARP)라고 한다. ARP는 두 부분으로 구성되어있다. 하나는 NIC가 어느 MAC주소에 대응되는지 질의하는 패킷 구조, 또 하나는 짝을 이루는 여러 NIC와 MAC 주소 쌍을 정리해둔 표이다.
다음으로 ARP의 작동에 관한 예를 알아보자.
1. 패킷을 보내고자 할 때, 먼저 수신자의 IP주소에 대응하는 MAC주소를 ARP테이블에서 찾는다.
2. 테이블에서 MAC주소를 찾았다면 IP주모듈은 해당 MAC주소를 포함한 링크 계층 프레임을 만들어 이를 링크 계층 모듈에 전달하여 발신한다.
3. 테이블에서 찾지 못한 경우, ARP모듈이 링크 계층 네트워크에서 도달 가능한 모든 호스트에 ARP패킷을 발신하여 올바른 MAC주소를 찾고자 시도한다.
ARP 패킷 구조
하드웨어 종류(16비트): 링크 계층이 호스트된 하드웨어 종류를 정의
프로토콜 종류(16비트): 네트워크 계층 프로토콜의 이더타입 값과 일치
하드웨어 주소 길이(8비트): 링크 계층 하드웨어 주소의 길이를 바이트로 나타냄. 대부분 MAC주소는 6바이트
프로토콜 주소 길이(8비트): 네트워크 계층 논리 주소의 바이트 길이
오퍼레이션(16비트): 1 또는 2의 값으로 이 패킷이 정보 요청인지(1) 아니면 응답인지(2)를 지정
발신지 하드웨어 주소(가변 길이), 발신지 프로토콜 주소(가변 길이): 각각 패킷 발신지의 하드웨어 주소 및 네트워크 계층 주소를 나타냄. 주소의 길이는 패킷 앞부분에 명시된 길이 필드와 일치해야 함
목적지 하드웨어 주소(가변 길이), 목적지 프로토콜 주소(가변 길이): 각각 패킷 목적지의 하드웨어 주소 및 네트워크 계층 주소를 나타냄. 주소 질의를 요청하는 경우, 목적지 하드웨어 주소는 알 수 없는 상태이므로 패킷을 받는 측에선 이 내용을 무시함
'네트워크 공부' 카테고리의 다른 글
동기와 비동기 방식[블로킹과 논블로킹] (0) | 2023.12.25 |
---|---|
TCP / IP 계층 구조 2(물리, 링크 계층) (0) | 2023.10.27 |
TCP / IP 계층 구조 1(특징) (0) | 2023.10.24 |