데이터를 보낼 때 네트워크 레이어는 세그먼트(전송계층)를 데이터그램(네트워크 계층)으로 캡슐화(encapsulate)한다. 데이터를 받을 때 네트워크 레이어는 데이터그램을 전송계층으로 보낸다.
네트워크 계층의 핵심 기능에는 '포워딩(forwarding)'과 '라우팅(routing)'이 있다.
네트워크에는 출발지에서 목적지까지 이동할 수 있는 여러가지 경로가 있다. 네트워크 계층에는 최상의 경로를 찾는 몇 가지 전략이 있다. 이 출발지에서 목적지로 패킷으로 이동하는 경로를 결정하는 프로세스를 라우팅이라고 한다. RIP, OSPF, BGP와 같은 다양한 라우팅 프로토콜이 있다.
포워딩은 다양한 네트워크들을 연결하는 스위칭이나 라우팅 장비에서 수행되는 동작으로, 들어온 패킷의 헤더 정보를 이용하여 최종 목적지 네트워크를 향해 패킷을 내보내 주는 일련의 단계다. 즉, 네트워크 레이어에서는 라우터가 연결된 다른 라우터로 패킷을 보내는 동작이 포워딩이다. 포워딩 테이블은 라우터에서의 로컬 포워딩을 결정한다(어느 링크로 빠져나가는지).
각 용어에 대해 정리하기 전에 네트워크 계층이 전반적으로 어떻게 동작하는지 알아보도록 하자. 네트워크 계층에서는 MAC주소 대신 IP주소를 사용한다. IP주소에는 사설(private) IP주소와 공용(private) IP주소가 있는데, 우리가 사용하는 건 대부분 사설 IP주소다.
그래서 NAT를 통해 사설 IP주소를 공용 IP주소로 변환해야 한다.
그런데 우리가 이 사설 IP주소라는걸 어떻게 갖고 있는 걸까? DHCP 를 통해서 할당 받은거다. DHCP 는 Dynamic Host Configuration Protocol로, 컴퓨터가 네트워크에 접속하면 DHCP 서버가 자신의 목록(IP Address pool)에서 IP주소를 선택해서 할당해준다.
그림으로 그려서 이해해보자.
위의 그림에서 로컬 네트워크는 10.0.0/24를 가지고 있다. 그래서 각 컴퓨터들은 주소가 10.0.0.1~10.0.0.3이고 라우터는 10.0.0.4다. 이 로컬 라우터를 나가는 모든 데이터그램들은 10.0.0.4주소의 NAT 라우터를 거쳐 138.77.55.7 주소에 서로 다른 포트를 가지고 나가게 된다.
* local의 17.7.7.10이 잘못됐다 .사설 아이피가 아니고 공용 아이피주소를 써버렸다. 사설 아이피 대역으로 수정 필요
DHCP 까지 포함해서 그림으로 그리면 대략적으로 이런 느낌이다.
<MTU; Maximum transmission unit>
MTU(2 데이터 링크 계층, 3 네트워크 계층)
- 어떤 데이터 링크에서 하나의 프레임 또는 패킷에 담아 운반 가능한 최대 크기
- 패킷 또는 프레임 기반의 네트워크에서 전송될 수 있는 최대 크기의 패킷 또는 프레임
- 패킷은 네트워크 계층의 PDU
- 프레임은 데이터 링크 계층의 PDU
- 이더넷 환경에서는 MTU의 기본 값이 1500으로 고정된다.
- 이더넷에서 최대 프레임 크기는 1518 bytes다. 18 bytes는 일종의 오버헤드(헤더, 프레임 체크 시퀀스)로 이를 제거하면 MTU가 1500(1518-18)이 된다.
<IP v4 헤더 정보>
- Identification: 이 필드는 식별 필드이며 주로 단일 IP 데이터그램의 조각 그룹을 식별하기 위해 사용된다. 즉 조각난 파편들이 같은 프레임인지 구분하는 용도로 쓰인다.
- Flags: 3개의 비트로 구성되어 있고, 파편을 제어하거나 식별하기위해 사용된다.
- 0: 기본적으로 0으로 설정되어있고 사용되지 않는다.
- 1: DF(Don't Fragment)
- DF가 1일 경우 파편화되지 않는다.
- 즉, 패킷이 조각나지 않는다.
- 2: MF(More Fragments)
- MF가 0일 경우 마지막 파편이다.
- Fragment Offset: 프레임 조각의 순서를 식별하는 데 사용된다. 일반적으로 조각의 앞에 있는 데이터 바이트 수 또는 현재 조각의 바이트 수를 사용한다.
- Time to live: 이 필드는 데이터그램의 수명을 제한한다. 이 값은 초 단위로 지정되지만 1초 미만의 시간 간격은 1까지 반올림된다. 실제로 이 필드는 홉 카운트로 사용된다. 데이터그램이 라우터에 도착하면, 라우터는 TTL 필드를 하나씩 줄인다. TTL 필드가 0에 도달하면 라우터는 패킷을 삭제하고 일반적으로 ICMP Time Exceeded 메시지를 송신자에게 전송한다.
- Protocol: IP 데이터그램의 데이터 부분에 사용되는 프로토콜을 정의한다.(v4인지 아닌지)
- Header Checksum: Pv4 헤더 체크섬은 IPv4 패킷 헤더의 손상을 감지하기 위해 IPv4의 버전 4에서 사용되는 체크섬이다.
- Option은 써도 되고 안써도 되지만 잘 안쓴다.
<DHCP; Dynamic Host Configuration Protocol>
DHCP가 어떤 역할을 하는지는 위에서 간략하게 언급했다. DHCP의 목적은 호스트가 네트워크에 연결되었을 때, 네트워크 서버(DHCP 서버)에서 호스트의 IP주소를 동적으로 할당하는 것이다.
동적으로 IP주소를 할당하면 HOST가 네트워크에 연결되어있을 때만 주소를 할당해 주소 공간을 절약할 수 있고, 주소를 재사용할 수 있는 등 다양한 장점이 있다.
DHCP의 동작 과정은 크게 4개로 나눌 수 있다.
- 호스트가 'IP 주소가 필요하다'는 메시지를 브로드캐스트로 보낸다. - DHCP discover
- DHCP 서버가 이를 포착하고 'IP 주소 x.x.x.x가 있는데 원하냐'는 메시지를 브로드캐스트로 보낸다. - DHCP offer
- 호스트가 메시지를 수신하고 '원한다'는 메시지를 브로드캐스트로 보낸다. - DHCP request
- DHCP 서버가 '그래, 이제 x.x.x.x는 네거다'라는 메시지를 보낸다. - DHCP ack
보면 1~3의 과정은 전부 브로드캐스트로 보내지고 있다. 왜그런지 하나하나씩 알아보자.
우선 DHCP discovoer에서는, 새롭게 네트워크에 연결될 호스트는 DHCP의 주소를 모른다. 그러므로 모든 곳에 '새로 왔는데 IP 주소가 필요하다. 어디있냐'라는 메시지를 보내는거다.
그러면 DHCP서버는 브로드캐스트로 답장을 한다. 왜냐면 아직 호스트는 DHCP가 제공하는 IP주소를 받지 못했기 때문이다.
호스트는 DHCP서버가 제공해주는 IP주소를 할당받기로 할 때 브로드캐스트로 보낸다. 이건 DHCP 서버가 여러개가 있을 수 있기 때문이다. IP할당을 요청한 호스트는 하나 이상의 DHCP 서버에게 IP주소 제안을 받을 수 있고, 그중에서 최적의 DHCP주소를 선택한다. 그러니 최적의 서버에게는 그 주소를 사용하겠다고, 다른 DHCP서버에는 사용하지 않겠다고 알려줘야하기 때문에 브로드캐스트로 메시지를 보낸다.
최적으로 선택된 DHCP서버는 이제 제안했던 IP주소가 호스트의 것이라는 답을 보낸다.
<Wireshark 로 DHCP 동작 과정 보기>
DHCP는 네트워크 계층의 네트워크 관리 프로토콜로, 랜에 접속하는 컴퓨터에 IP 주소를 할당한다.
sudo apt-get install wireshark
# username이 user인 경우 접근 권한 주기
sudo usermod -aG wireshark user reboot
# reboot안하고 wireshark를 사용하려면 sudo 권한이 필요함
sudo wireshark
'DevOps > Network' 카테고리의 다른 글
[네트워크]Transport Layer(전송계층) (0) | 2021.04.28 |
---|---|
[네트워크]패킷 교환 네트워크에서 지연과 손실 (0) | 2021.04.22 |
[네트워크]네트워크 기초와 OSI 7계층 (0) | 2021.04.22 |