나의개발일지

[네트워크 기초] 3계층의 라우터 테이블과 패킷 조각화 본문

기초네트워크

[네트워크 기초] 3계층의 라우터 테이블과 패킷 조각화

kdy9kdy 2023. 5. 1. 15:36

 

 

 

본 글은 작성자가 어디선가 주워듣고 이해한 내용들을 개인적인 언어로 작성한 게시물입니다.

잘못된 내용이 존재할 수 있으니, 읽게 되신다면 이점을 감안해 주세요!!!

 

우리는 결국 자신이 가진 이야기로 상대방을 이해할 수 있을 뿐이다.-

 

 

 

3 계층에서 알아본 프로토콜로는 IPv4프로토콜, ICMP프로토콜, ARP프로토콜을 알아보았다. 각각의 프로토콜에 대해서 간략히 설명하면 ARP프로토콜은 같은 네트워크 대역에서 IP주소를 이용해서 MAC주소를 알아내는 것이었고, ICMP프로토콜은 특정 IP에 대해서 통신이 가능하지 아닌지에 대해서 판단하는 프로토콜, IPv4프로토콜은 ip주소를 이용해서 다른 네트워크 대역 또는 멀이 있는 디바이스와 통신을 하기 위한 프로토콜이었다. 지금까지는, 이런 프로토콜을 이용해서 통신을 한다는 것은 알았으나, 실제로는 어떻게 통신이 이루어지는지에 대해서는 알지 못한다. 그 이면에는 좀 더 복잡한 과정이 담겨 있는데, 그 과정을 조금 더 알아보고 정리하는 시간이다.

 

 

라우터테이블

3계층의 프로토콜은 결국 다른 디바이스까지의 경로를 찾아가는 것이다. ARP프로토콜이나, ICMP프로토콜과 같은 다른 프로토콜도 존재하지만, 3 계층의 프로토콜은 인터넷프로토콜로(IPv4), 패킷을 라우팅 하기 위한 IP주소 정보를 사용하여 네트워크 상에서 데이터를 전송하기 위한 것이다. 따라서 A디바이스와 B디바이스가 통신을 하기 위해서는 IP 프로토콜을 이용하여 목적지 IP 주소를 설정하고, 이 주소를 기반으로 라우팅 경로를 결정해야 한다. 라우터는 패킷의 목적지 IP주소를 검사하고, 자신의 라우팅 테이블을 사용하여 목적지에 가장 가까운 다음 라우터나 호스트에게 패킷을 전달한다. 라우팅 테이블에는 라우터가 연결된 네트워크 정보와 연결된 다른 네트워크 경로 정보가 저장된다.

따라서 라우팅 테이블은 A디바이스에서 B디바이스로 데이터를 전송하기 위한 경로 정보를 저장하는 데이터베이스와 같다. 이를 통해 라우터는 패킷을 전달하기 위한 최적의 경로를 결정하게 된다.

 

A디바이스에서 다른 네트워크 대역에 있는 B디바이스 까지 통신을 통해 데이터를 전달하기 위한 방법은 아래와 같은 과정을 반복하게 된다.

 

  1. A디바이스에서 전송하고자 하는 데이터에 대한 목적지 IP주소를 설정한다.
  2. A디바이스는 자신의 라우팅 테이블을 참조하여 목적지 IP주소까지의 경로를 결정한다.
  3. A디바이스는 목적지 IP조소를 갖는 패킷을 생성한다.
  4. 생성된 패킷을 출발지 IP주소와 목적지 IP주소가 포함되어 있다.
  5. A디바이스는 패킷을 네트워크로 전송한다.
  6. 패킷은 인접한 라우터에 도달하게 된다.
  7. 라우터는 패킷을 목적지 IP주소를 확인하고, 다시 자신의 라우팅 테이블을 참조하여 다음 목적지 라우터나 호스트에게 패킷을 전달한다.
  8. 위 과정을 반복해서 패킷은 목적지인 B디바이스까지 전달된다.
  9. B디바이스는 패킷을 수신하고 데이터를 처리한다.

위 과정이 반복해서 A와 B가 통해서 데이터를 전달하거나 통신을 할 수 있게 된다. 또한 위 과정 중에서 네트워크 대역별로 스위치나, 라우터 또 다른 네트워크 대역을 넘어가면서 MAC주소를 확인하는 ARP프로토콜도 이루어지게 된다. 

 

 

결론은 A에서 B까지 다른 네트워크 대역으로 통신을 하기 위해서는 라우트테이블을 확인하는 것과 MAC주소를 계속 해서 새롭게 작성해 주면서, MAC주소를 모를 때는 ARP프로토콜로 통신까지 빠르게 수행되는 것이 이루어진다. 

 

 

 

IPv4조각화

IPv4프로토콜을 이용해서 데이터를 다른 네트워크 대역으로 보내기 위해서는 데이터에 대한 사전 작업이 필요하다. MTU라는 것이 있다. MTU는 데이터의 최대전송단위를 의미하며, 각 네트워크 장비마다 설정되어 있다. 일반적으로는 1500바이트로 설정되어 있다. 하지만, 이 이상의 데이터를 보내기 위해서는 조각화 하는 과정이 필요하다. 만약, 조각화하지 않고, 2000바이트라는 데이터를 보내게 되면, 보내지지 않는다. 그렇기 때문에 MTU에 맞게 데이터를 조각화 하는 과정이 필요하다. 이렇게 조각화되어서 만들어지는 것이 패킷이다. 패킷에는 일련번호, 출발지 및 목적지 IP, 데이터 크기 등의 정보가 포함된다. 이렇게 쪼개진 패킷은 네트워크 상에서 독립적으로 전송되며, 도착지에 도착하여 이를 다시 조합하여 원래의 데이터로 복원하게 된다. 앞서 포스팅한 글 중에 IPv4프로토콜의 구조 중에 패킷과 관련된 정보가 저장되는 것이 있다. 아이디 값, mf, offset 등이 위의 패킷과 관련된 정보이다. 각 패킷별로 IPv4프로토콜이 캡슐화돼서 보내지게 된다. 아래는 데이터가 어떻게 패킷화 되는지에 대해서 예를 들은 것이다.

 

2000 바이트 data를 A디바이스에서 B디바이스로 통신해서 보낸다고 할 때 data는 어떻게 패킷화 되어야 하는가? MTU는 1500이다.

 

패킷을 쪼개지 않고 요청을 보낸다고 한다면, 

2000 data(2000)

2008 ICMP요청(8) + data(2000)

2028 IPv4(20) + ICMP요청(8) + data(2000)

 

위의 통신은 MTU1500보다 크기 때문에 통신이 이루어지지 않는다. 그렇기 때문에 아래와 같은 과정이 필요하다.

 

1480 data1(1480)   //    520  data2(520)

1480 data1(1480)   //    528  ICMP요청(8) + data(520)

1500 IPv4(20) + data1(1480)   //     548 IPv4(20) + ICMP요청(8) + data(520)

두개의 패킷 모두 MTU1500보다 작거나 같기 때문에 전송이 된다.

 

이후의 패킷에 이더넷프로토콜(14)이 붙어서 1514와 562가 보내지게 된다.  

 

 

 

정리하자면

3계층에는 여러 개의 프로토콜이 있는데, 그중 가장 중요한 게 IPv4프로토콜 같다. IPv4프로토콜을 이용해서 다른 네트워크 대역에 있는 디바이스와 통신을 할 수 있고, 통신을 하기 위해서는 라우트테이블을 확인하는 것도 필요하고, 그리고 데이터를 보낼 때는 최대전송단위인 MTU를 확인해서 최대전송단위보다는 작게 쪼개서 데이터를 보내야 한다. 라우트테이블은 최적의 경로를 확인하는 것이다. 이외에도 내용은 많은데 이해하지는 못한 거 같다. 하하하하하ㅏ하하하하하하하ㅏ하하하하