본문으로 바로가기

2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 01. 허브, 스위치, 라우터

2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 02. L2, L3, L4, L7 스위치

2015/10/27 - [01. 기술 - 인프라] - 네트워킹 장비 - 03. 백본 스위치

2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 04. L4, L7 로드 밸런싱

2015/10/28 - [01. 기술 - 인프라] - 네트워킹 기본 - 05. LAN, WAN, VLAN

2015/11/05 - [01. 기술 - 인프라] - 네트워킹 기본 - 06. 프로토콜 개념

2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 07. TCP/IP 4 계층 모델

2015/11/08 - [01. 기술 - 인프라] - 네트워킹 기본 - 08. 어플리케이션 계층 프로토콜 HTTP

2015/11/24 - [01. 기술 - 인프라] - 네트워킹 기본 - 09. TCP, IP, Ethernet 프로토콜 그리고 통신



이제 전송 계층, 네트워크 계층, 링크 계층의 프로토콜에 대해서 정리해 본다. 아래 그림에서 IP 패킷이 "서버 A에서 서버 C"로 전달되는 과정은 네트워크 공부를 하면서 한번쯤은 궁금해하는 주제일 것이다. 이번 포스트의 주요 관점은 패킷이 출발지에서 출발해서 목적지에 도착할때까지의 원리이다. 


■ 계층별 주소


먼저 "주소"라는 것을 생각해보자. 패킷이 출발지에서 출발해서 목적지까지 도착하려면 목적지를 나타내는 주소가 필요한데 정확한 목적지를 표현하기 위한 주소는 어떻게 구성되어야 할까? 아래 그림을 보자.



                            [ 데이터 전달]


서버 A에서  최종 목적지 서버 C로 패킷을 전달하기 위해서 필요한 주소는 어떤 것들이 있을까? 

먼저 네트워크 A에서 네트워크 C까지 전송하기 위한 주소 즉 네트워크 주소가 필요하다.  

그런 다음 네트워크 C에 소속된 서버들중에서 서버 C에 대한 주소 즉 MAC 주소가 필요하다. 

마지막으로 서버 C에서 어떤 프로그램으로 전달되어야 하는가를 결정하는 주소, 이것이 포트 주소이다. 


※ 포트와 소켓의 차이점


포트는 한 머신에서 어플리케이션을 구분해줄 수 있는 논리적인 번호라면 소켓은 실제 물리적인 존재로서 IP 패킷을 주고 받는 곳이라고 보면 될 것이다. 소켓에도 소켓 번호가 부여되는데 통신이 시작되기 전에 포트 번호와 소켓 번호가 바인딩(bind)되어 있다. 전송계층까지 올라온 패킷은 이 바인딩 정보에 따라서 TCP 주소인 포트 번호에 바인딩된 소켓으로 패킷이 전송된다. 

아래 그림에서 포트 번호와 소켓 번호가 위치해있는 곳을 주의해 보자. 포트번호는 네트워크 시스템의 전송 계층에 속한다 즉 논리적인 존재로 볼 수 있다. 그리고 소켓번호는 어플리케이션에 위치해 있는데 실제로 어플리케이션으로 패킷을 받아들이는 물리적인 존재라고 볼 수 있다. 


[ 응용 프로그램과 소켓 그리고 TCP/IP ]


구글링을 해보면 아래 페이지도 검색된다. 

What is the difference between a port and a socket?


■ 패킷(이더넷 프레임) 생성


어플리케이션 계층에서 보낸 데이터는 잘게 잘려서 전송계층, 네트워크 계층 그리고 최종적으로 데이터 링크 계층을 거치면서 각 계층별 주소를 헤더에 추가한다. 각 계층에서 주로 사용하는 프로토콜은 TCP, IP, Ethernet인데, 쪼개진 데이터는 각 계층을 거치면서 해당 프로토콜에서 정의하고 있는 주소를 헤더에 추가한다. 최종적으로 네트워크 케이블로 나가기 전의 패킷의 모양은 아래와 같게 된다. 



               [이더넷프레임, 목적지 주소 구성]


데이터 링크 계층의 Ethernet 프로토콜에 의해서 MAC 주소가 추가된 패킷을 이더넷 프레임이라고 한다. 이더넷 프레임은 전기 신호로 바뀌어서 연결된 케이블로 흘러가서 "상대편 노드"로 전달된다. 케이블에서는 어떤 논리적 경로 결정 로직은 없다. 즉 들어온 프레임에 대한 전기적인 신호가 연결된 상대편 노드로 그냥 전달될 뿐이다.



■ 패킷 전달


이제 서버A에서 서버 C로 패킷이 전달되는 과정을 정리해본다.  





[네트워크 구성]


우선 네트워크 구성을 보자. 네트워크 A, 네트워크 C 내부에는 L2 스위치가 각각 한대씩 배치되어 있다. 그리고 네트워크 A와 네트워크 B를 연결하기 위해서 라우터가 있고, 그리고 네트워크 B와 C를 연결하기 위해서 라우터가 있다. 

이 그림을 통해서 L2 스위치와 라우터(L3 스위치)의 역할이 무엇인지 정리가 될 수 있을 것 같다. L2 스위치는 동일한 네트워크내의 즉 네트워크 주소가 같은 노드들을 연결하는 데 사용된다. 그리고 L3 스위치는 서로 다른 네트워크를 연결하기 위해서 즉 네트워크 주소가 다른 두 개의 네트워크를 연결하는데 사용된다. 따라서 라우터나 L3 스위치는 두 개의 다른 네트워크에 소속되어 양쪽에서서 접근할 수 있다. 라우터, L3 스위치의 이런 특성은 "네트워크를 연결"하기 위해서 사용되는 것으로 표현될 수도 있지만, "네트워크를 물리적으로 분리"하고자 할때도 사용된다. 


이제 패킷이 서버A에서 서버C로 전달되는 과정을 알아 보자.서버A에서 완성된 이더넷 프레임 그림을 보자. 이 프레임의 목적지 MAC 주소는 어디를 가리키고 있을까? L2 스위치 주소일까 L3 스위치 주소일까? 상대방 서버 C의 IP를 통해서 서버 A가 속한 네트워크 밖의 존재라는 것을 알 수 있다. 네트워크의 밖으로 나가기 위해서는 서버 A의 기본 게이트웨이로 설정되어 있는 라우터가 최초 경유할 목적지로 정해진다. 따라서 최초로 서버A에서 만들어진 이더넷 프레임의 구조는 아래와 같이 될 것이다.


[최초 서버A의  이데넷 프레임]



우리가 서버A의 "네트워크 속성" 창에서 입력하는 것은 기본 게이트웨이인 라우터의 "IP 주소"이다. 입력하는 것은 IP 주소인데 어떻게 게이트웨이의 MAC 주소를 알게 될까? "ARP 프로토콜(Address Resolution Protocol)"을 이용한다. 이 프로토콜은 브로드캐스팅을 이용한다. "이 IP가 자신의 IP인 머신은 MAC 주소 알려주세요"라고 브로드캐스팅을 날린다. 브로드캐스팅은 서버A가 속한 동일한 네트워크 내부의 노드들에게만 전달되고, 네트워크 밖으로는 전달되지 않는다. 서버A와 동일한 네트워크에 속한 게이트웨이인 라우터도 해당 브로드캐스트를 받게 되고 IP가 자신을 지칭한다는 것을 인식해서 자신의 MAC주소를 보내준다. 이렇게 모은 네트워크내의 노드들에 대한 MAC 주소는 서버A의 "ARP 테이블"이라는 메모리 캐시에 저장된다. 즉 ARP 테이블은 ( 노드의 IP 주소와 MAC 주소) 매핑 정보를 가지고 있는 테이블이다. ARP 테이블은 L3 장비에도 캐싱된다.


이제 완성된 이더넷 프레임은 케이블을 타고 최초의 네트워크 장비인 L2 스위치로 전송된다. 위 네트워크 구조의 경우 동일한 네트워크내에서 다른 노드와 통신을 위해서는 반드시 L2 스위치를 통하게 된다. 

L2 스위치에는 여러 개의 포트(TCP의 포트와는 다르다. 케이블을 연결하는 물리적인 포트를 말한다)가 있어서 많은 케이블이 연결되어 있다. L2 스위치에서는 모든 포트로 패킷을 보내지 않는다. 어떤 포트의 케이블로 패킷을 보낼지가 사전에 결정된다.  이것이 가능한 것은 L2 스위치도 앞에서 말한 L3의 ARP 테이블과 유사하게 목적지 MAC 주소와 스위치 포트 번호와의 매핑 정보 즉 (목적지 MAC, 스위치 포트)정보를 가지고 있는 스위칭 테이블을 참조한다. 해서 받은 패킷(정확히는 이더넷 프레임)의 목적지 MAC 주소를 확인해서 해당 패킷을 적절한 포트에 꽂힌 케이블로 흘려보낸다. 스위칭 테이블을 MAC 주소 테이블이라고도 하는 듯 하다. 


※ L2의 스위칭 테이블 정보 즉 ( MAC 주소, 스위치 포트) 정보를 구하는 방법도 L3의 ARP 테이블을 구성하는 방법과 유사하다. 아래 링크를 참조한다. 브리지 테이블, MAC 주소 테이블, MAC 주소 학습L2 스위치의 기본 동작 원리

 

이제 서버A가 속한 네트워크의 라우터에 도착했다. 지금까지의 패킷 흐름이 이해된다면 다음의 흐름은 이해가 되지 않을까 싶다. 다음부터는 L3 스위치->L3 스위치(네트워크B와 네트워크C를 연결하는 L3 스위치로 전달, 그리고 그 다음에는 네트워크 C 내부에서의 L2 스위치로의 전달이 있다. 이 패킷 전달 과정이 머릿속에 그려졌으면 좋겠다. 

네트워크C의 라우터에서 떠날때의 패킷의 목적지 MAC주소는 서버C의 주소로 채워져있을 것이다. 이때 목적지 IP를 통해서 라우터가 가지고 있는 ARP 테이블을 참조하게 될 것이다. 이 패킷이 네트워크C의 L2 스위치에 도착하면 목적지인 서버C의 MAC주소와 L2 스위치가 가지고 있는 MAC 주소 테이블을 참조해서 서버C의 케이블이 연결되어 있는 포트로 패킷을 흘려보낸다.

이렇게 해서 기나긴 패킷의 여행이 끝난다.


■ 논리적 통신


앞에서는 아래 그림처럼 패킷이 2계층의 장비와 3계층의 장비를 거쳐가는 전달 과정을 살펴봤다. 그러나 많은 경우 간단히 3계층에서 IP 주소를 기반으로 출발지에서 목적지로의 이동을 추상화해서 이야기 할 수 있다. 



[계층 관점의 통신]


졸립다. 이 정도면 나중에 업데이트할 기본 자료는 만들어놓은 듯하다. 




댓글을 달아 주세요

티스토리 툴바