본문 바로가기
Computer Science

[CS] 네트워크 프로그래밍 - WAN, 라우터(Router), 인터넷프로토콜(IP), 인터넷(Global IP Internet) , IP주소, 도메인 네임, DNS, 인터넷 연결(Internet Connections)

by Lizzie Oh 2022. 11. 5.

네트워크는 서로 다른 기술을 가진 임의의 LAN과 WAN들로 구성되는데, 어떻게 이 기술 차를 극복하고 통신을 할 수 있는 지 물음을 던지며 이전 포스팅을 마쳤다. 이제 이 문제에 대한 답으로 포스팅을 시작하려 한다. 

 

정답부터 얘기하자면, 이 문제는 각 호스트와 라우터에서 실행되는 프로토콜 소프트웨어 (protocol software) 단계(계층)가 서로 다른 네트워크의 차이를 완화해주는 역할을 함으로써 해결된다. 이 소프트웨어는 호스트와 라우터가 서로 데이터를 전송할 수 있게 해주는 규칙(IP 프로토콜)을 실행하고, 이 IP 프로토콜은 아래의 두 가지 역할을 (반드시) 수행한다. 

 

  1. Naming Schema : 각각의 호스트가 동일한 형식의 고유한 주소( =IP주소)를 가질 수 있도록 한다.
  2. Delivery Mechanisim : 데이터를 '패킷(=IP 패킷)'으로 묶을 때 동일한 형식이 적용되도록 한다. 

패킷이라는 생소한 단어를 먼저 짚고 넘어가야 할것 같다

 

💡 패킷

이전 포스팅에서 랜에서 통신할 때 데이터 앞 뒤에 이더넷 헤더와 트레일러가 붙은 형태를 (이더넷) 프레임 이라고 부른다는 것을 언급한 바 있다. 유사하게 데이터 앞에 IP 헤더가 붙은 형태를 (IP)패킷 이라고 부른다. 이더넷 프레임의 헤더에 출/도착지 MAC 주소와 프레임 길이 등의 정보가 들어있던 것처럼, IP헤더에는 출/도착지 IP주소와 패킷 전체 길이 등의 정보가 들어있다.

 

💡 캡슐화 (Encapsulation)

위와 같이 헤더를 붙이는 작업을 '캡슐화' 라고 한다. 데이터를 보내는 쪽에서 순차적으로 IP헤더, 이더넷 헤더 등을 붙이는 과정을 캡슐화, 데이터를 받는 쪽에서 순차적으로 이더넷 헤더, IP 헤더 등을 떼는 과정을 역캡슐화 라고 하며 이는 네트워크 통신에서 가장 근간이 되는 개념 중 하나이다! 

 

 

그렇다면 이 IP 프로토콜을 통해서 어떻게 통신이 이루어지는 지 랜 두개가 라우터로 연결된 예시(아래 그림)를 통해 살펴보겠다.

Computer Systems: A Programmer's Perspective Figure 11.7

 

호스트 A에서 실행되는 클라이언트는 LAN1에 속해있고, 호스트B에서 실행되고 있는 서버는 LAN2에 속해있다. 이 두 랜은 라우터를 통해서 연결되어 있고, 클라이언트는 서버로 요청(데이터)을 보내고 있다. 이 때 데이터가 전송되는 과정을 살펴보자. 

 

  1. 클라이언트는 시스템 콜을 호출하여 클라이언트의 가장 주소 공간의 데이터를 커널 버퍼로 복사한다.

  2. 호스트A의 프로토콜 소프트웨어는 IP 헤더(Packet Header; 그림의 PH1)를 먼저 붙이고, 이더넷 헤더(Frame Header; 그림의 FH1)를 붙인다. (그림에는 없지만 데이터의 맨 끝에는 이더넷 트레일러도 붙어있다) 이제 데이터는 이더넷 프레임의 형태이고, 이더넷 프레임의 payload는 IP 패킷이 되는 구조이다. 이 이더넷 프레임은 LAN 1의 네트워크 어댑터로 전송된다.
      ▪️  이때 IP 헤더의 출발지 IP주소는 호스트 A의 IP 주소, 도착지 IP주소는 호스트 B의 IP 주소로 되어 있다.
      ▪️  이때 이더넷 헤더의 출발지 MAC 주소는 호스트 A의 MAC주소, 도착지 MAC 주소는 라우터의 MAC 주소이다. (도착지 MAC주소가 호스트 B의 MAC 주소가 아니라는 것에 주의하자. 클라이언트는 호스트 B의 MAC 주소를 알 길이 없다..🥲

  3. LAN1의 네트워크 어댑터는 프레임을 네트워크로 복사한다. 

  4. 프레임의 헤더에 담긴 목적지 MAC 주소는 라우터의 MAC 주소이므로, 프레임은 라우터에 도달할 수 있다. 라우터의 LAN1 어댑터는 케이블로부터 프레임을 읽고 이를 프로토콜 소프트웨어로 보낸다. 프로토콜 소프트웨어는 이더넷 헤더와 트레일러를 뗀다. 이제 데이터는 IP 패킷의 형태이다.

  5. 라우터는 패킷의 헤더에 담긴 목적지 IP주소를 가져온다. 라우터는 이 주소를 가지고 라우팅 테이블을 검색해서 이 패킷을 어떤 네트워크로 전달할지 찾아낸다. 위 그림의 경우에는 LAN2로 전달해야 한다는 것을 알아낸다. 

    💡 라우팅 테이블
     라우터의 라우팅 테이블에는 현재의 네트워크에서 다른 네트워크로 가는 최적의 경로 정보가 등록되어있다. 라우터는 이 경로 정보를 기반으로 최적의 경로 정보를 찾아 데이터를 전송한다. 

    라우터는 이제 데이터를 LAN2로 전달하기 위해 호스트B의 MAC 주소를 가진 새 프레임 헤더(그림에서는 FH2)를 붙인 후 이를  라우터의 LAN2 어댑터로 보낸다. 

  6.  LAN2 어댑터는 이 프레임을 네트워크로 보낸다. 

  7. 프레임의 헤더에 담긴 목적지 MAC 주소는 호스트 B의 MAC 주소이므로, 프레임은 호스트 B에 도달할 수 있다. 프레임이 호스트B에 도달하면, 호스트 B의 어댑터는 케이블로부터 프레임을 읽고 이를 프로토콜 소프트웨어로 보낸다.

  8. 프로토콜 소프트웨어는 이더넷 헤더와 트레일러를 떼고, 패킷 헤더도 벗겨낸다. 이제 데이터는 데이터 자체(payload)만 남은 형태가 되었다. 프로토콜 소프트웨어는 서버가 데이터를 읽는 시스템 콜을 호출할 때 이 데이터를 서버의 가상 주소 공간으로 복사한다.

물론 위의 과정은 여러가지 이슈 사항들을 다루지 않고 넘어갔지만, 인터넷의 핵심적인 아이디어인 캡슐화를 보여주고 있다. 

 

 

 

 

 

 

 


 

Reference

https://6kkki.tistory.com/20

 

바이트순서(byte order) 그리고 빅엔디안(Big-endian)과 리틀엔디안(Little-endian)

오늘은 바이트 순서를 파헤쳐보는 시간이 되겠다. 처음 듣도보도 못했던 개념이었기에 파면 팔수록 뭔가 많이 나오리라! 했는데.. 기본적인 개념인가봉가 :-0 1. 바이트 순서(Byte order) : 바이트 순

6kkki.tistory.com

 

반응형

댓글