CS/네트워크

[Network] TCP/IP를 제대로 풀어봐요 1. TCP/IP를 쓰는 이유 & 네트워크 인터페이스 계층의 프로토콜들

장아장 2024. 1. 17. 21:04

이전 포스트는 https://jangsarchive.tistory.com/158 여기를 참고해주세요!

서론

네트워크를 하나씩 딥하게 찾아보기 이전에, OSI 7계층이 아닌, TCP/IP를 풀어보려고 하는 이유가 뭘까?

웹 개발자로서, 그리고 인터넷 통신에 대해서 조금더 학습하기 위해서 TCP/IP를 풀어보려고 한다. 

그렇다면 OSI 7계층과 TCP/IP의 근본적인 차이가 무엇일까?

 

이를 위해서는 TCP/IP가 무엇인지 자세하게 생각해볼 필요가 있다. 

 

웹 개발에 핵심적인 웹 프로토콜이라는 것이 존재한다. 

여기에서 말하는 프로토콜이란, 간단히 '규칙'이라고 하는데,  

이는 OSI 7계층 중 응용 계층의 HTTP 프로토콜로 동작하며,

전송 계층의 TCP(HTTP 3/0에서는 UDP로 되어있긴 하다) 프로토콜을 기반으로 동작한다. 

 

또한 TCP/IP의 네트워크 인터페이스, 인터넷, 전송, 응용 4계층을 보았을 때

우리가 하는 웹 개발은 응용 계층에 속하게 된다. 

 

이러한 웹 개발에 초점을 맞추어, TCP/IP에 대해서 공부해볼 생각이다. 

이 중에서 네트워크 인터페이스와 인터넷 사이에 존재하는 LAN, WAN, ARP, NAT에 대해서 한번 정리해보기로 했다. 


Before We Start...

시작하기 전에 우리가 알아야 할 것이 몇가지 있다. 

가장 큰 것은, 우리가 터미널에서 보는 IP주소는 LAN 내에서 나의 로컬 주소일 뿐, WAN에서 접근을 허용하지 않는다는 것이다. 

LAN, WAN을 한번 정리해야 이 부분이 이해가 될 것이다. 

 

우리가 주로 랜선이라고 부를 때의 그 LAN은 Local Area Network의 약자다. 

이러한 랜 안에서, 우리의 컴퓨터는 각자 로컬 IP를 가지게 된다. 

 

그렇다면 로컬 영역 네트워크 바깥으로 요청을 주고받으면 어떻게 할까?

이를 WAN을 통해 연결시킨다. 

 

우리의 랜선은 공유기에 연결되어있다. 

이를 라우터라고 생각할 때, 

컴퓨터의 요청은 라우터를 통해 바깥으로 나가고, 라우터에서 다른 라우터로 계속해서 요청이 전달된다(OSI 7계층에서 데이터링크 계층)

이후에 목적 컴퓨터에 요청이 도착하면, 응답 계층까지 데이터를 가지고 가, 응답을 만들어낸다. 

만들어낸 응답은 다시 똑같은 동작을 통해 내 컴퓨터까지 오게된다. 

 

WAN이라는 것은, LAN들이 연결되어 있는 네트워크이다. 

인터넷, 전화선, 위성 신호들이 이에 해당한다. 


내 컴퓨터에서 라우터로 요청이 나가기까지(ARP, NAT)

데이터링크 계층에서 보았듯이, 내 컴퓨터와 라우터는 MAC 주소를 가지고 있다. 

그런데 우리가 보는 터미널의 정보는, MAC 주소 뿐만 아니라, IP주소도 가지고 있다. 

어떻게 이런일이 가능할까?

 

ARP

IP 주소 MAC 주소 인터페이스
192.168.1.1 00:1a:2b:3c:4d:5e eth0
192.168.1.2 6f:7g:8h:9i:0j:1k wlan0

이는 ARP(주소 할당 프로토콜)를 이용해서 동작하게 된다. 

주소할당 프로토콜은 네트워크 디바이스(우리로 치면 공유기)가 MAC 주소를 가지고 요청과 응답을 주고받는 로컬 머신(예를 들면 컴퓨터)에 IP주소를 할당해주는 프로토콜이다. 

 

네트워크 디바이스마다 얼마나 주소를 할당해줄 수 있는가는 다르다. (이에 대해서는 인터넷 계층으로 넘어가서 자세하게 다룰 생각이다.)

해당 프로토콜로 우리의 MAC주소와 할당된 IP, 그리고 네트워크 인터페이스(이더넷인지, wlan, 기타등등인지)에 대한

테이블을 만들어 저장해둔다. 

이를 통해 컴퓨터가 LAN 내부에서 요청을 보낼때, 요청 IP가 정확히 누구인지 알 수 있게 해준다. 

 

이 주소를 할당해주는 방식은 동적할당(DHCP), 정적할당(수동할당)방식으로 존재한다. 

정적할당은 말 그대로, 네트워크 관리자가 각 디바이스들에게 수동으로 IP를 할당해주는 방식이다. 

그런데, 우리는 집에서 한번도 그렇게 네트워크를 받아서 사용해본적이 없다. 

그렇다면 동적할당, DHCP는 어떻게 동작할까?

 

DHCP, 동적 호스트 할당 프로토콜
(네트워크에서 P로 끝나면 프로토콜이라고 보면 된다. HTTP 도 P가 프로토콜이란 뜻!)

DHCP 서버는 네트워크 디바이스에 IP 주소, 서브넷 마스크, 기본 게이트웨이 및 DNS 서버와 같은 네트워크 설정 정보를 제공한다. 

이 서버는 연결을 요청하는 클라이언트에게 동적으로 IP 주소를 할당해주는 방식으로 동작한다. 

 

동적으로 할당하는 서버를 두어, 해당 서버에서 요청이 지속될 경우 주소 할당을 갱신하거나, 중앙 관리로 주소 충돌을 방지해주는 역할을 겸임한다. 

이런 서버는 우리의 네트워크 디바이스에서 동작한다. 

 

다시 본론으로 돌아와봐야 한다. 

우리의 라우터는 내 로컬 컴퓨터의 MAC 주소를 ARP 프로토콜로 MAC 주소를 IP와 매핑해 테이블에 저장한다. 

이를 통해 내 컴퓨터도 LAN 주소를 가지게 된다. 

 

이제, LAN 내부가 아닌, WAN을 통해 외부까지 요청을 주고 받을 때 어떻게 될지를 생각해보아야 한다. 

우리가 받은 IP는 LAN 내부에서 사용되게 허가된 IP이다. 이 IP의 80포트로 다른 인터넷 공유기를 연결해서 요청을 보내면 어떨까?

 

NOT FOUND가 나오거나, 혹은 전혀 다른 웹 페이지로 나타나게 된다.

이유는, 해당 IP는 WAN에 등록되어, 외부에 공개된 주소가 아니기 때문이다. 

외부에 공개된 주소가 되기 위해서는 이에 대한 요청을 따로 해야하며, 이 때의 IP는 그 누구도 동일한 값을 가지지 않게 해야 한다. 

 

findip.kr이라는 곳을 들어가보면, 이런 내용이 있다. 

 

그렇다면, 우리의 사설 IP는 어떻게 WAN을 통해 서버까지 요청을 보내고 응답을 받을 수 있을까?

이는 NAT을 통해 가능하다. 

 

NAT, Network Address Translation

처음으로 T가 나왔다.( 야 너 Tㅂ..ㅏ....그만!)

T의 단어를 보았을 때 무언가를 번역, 해석한다는 뜻으로 보인다. 

이 NAT는 우리가 로컬 컴퓨터에서 WAN을 통해 외부 서버로 요청을 보내고 싶을 때 사용된다. 

로컬 컴퓨터가 ARP를 통해 할당받은 ip와 포트가 있을 때, 이 정보를 라우터에 저장된 공인 IP와 다른 포트로 매핑해 요청을 보내는 것이다. 

그렇다면 요청을 받을 때에는?

응답을 전달해줘야 할 IP와 포트를 보고(IP는 공인이니까 포트만 보겠지?) 매핑된 IP와 포트를 다시 LAN 안에서 뿌린다. 

 

모든 라우터는 동일하게 동작한다. 

NAT 테이블(매핑한 정보를 가지고 있는 표)는 항상 연결된 디바이스들이 요청을 보내면, 이를 외부로 뿌리기 위해 공인 IP와 커스텀한 포트로 매핑해 뿌려준다. 

뿌린 후에 다시 돌려받은 데이터는 매핑된 포트를 통해 연결된 디바이스들중 해당 IP로 보내지는 것이다. 

내부 IP(라우터의 내부로 연결) 내부 포트(해당 IP가 보낸 포트) 외부 IP(라우터에서 외부로 뿌릴) 외부 포트(라우터가 직접 설정)
xxx.xxx.xxx.xxx 80 aaa.aaa.aaa.aaa 1234
yyy.yyy.yyy.yyy 443 aaa.aaa.aaa.aaa 5678
zzz.zzz.zzz.zzz 3306 aaa.aaa.aaa.aaa 9012

결국, 외부로 나갈때에는 하나의 IP에 전혀 다른 포트로 나가게 되며, 이 포트는 내부로 돌아올 때에만 정상적으로 바뀌게 된다.

(포트가 왜 있어야 하는지는 이전 포스팅을 보면 안다!)


정리?

인터넷상에서 내가 네이버에 요청을 보내고, 받는 과정을 한번 위에서 정리한 정보를 토대로 생각해보았다. 

  1. 내 컴퓨터가 라우터에 ARP로 private IP를 받는다. 이 IP와 실제 MAC 주소간의 매핑은 라우터의 DHCP 서버에 저장된다. 
  2. 내가 www.naver.com을 크롬에 입력한다(응용 계층에서 요청을 보내기 시작한다)
  3. 라우터는 NAT로 내 IP와 요청 포트를 라우터의 WAN용 IP와 커스텀 포트로 매핑해 저장한다. 
  4. WAN용 IP와 커스텀 포트를 요청 주소로 다음 라우터를 간다. 
  5. 네이버에 도착할 때 까지 3, 4를 반복한다. 
  6. 네이버 서버의 응용 계층은 요청을 받아 요청 사항을 이행해 응답을 보낸다.
  7. 지금까지의 과정을 역순으로 수행한다. 
    1. 라우터에서는 WAN용 IP와 커스텀 포트로 응답이 온다. 
    2. 이 응답을 다시 매핑된 IP와 포트로 보내준다. 
    3. 1, 2를 반복해 내 컴퓨터로 온다. 

 

이렇게 지금까지 정리한 내용을 토대로 우리의 요청과 응답이 어떻게 오가는지 알게 되었다.

이 속에서 IP는 또 어떻게 동작하는지, 그리고 IP와 MAC 주소는 어떤 구조로 생긴건지 알아볼 필요가 있다. 

다음에는 인터넷 계층을 공부해봐야겠다. 

 

그럼...twenty thousand...🔥