개발 · 컴퓨터공학 / / 2021. 9. 3. 18:14

네트워크 프로그래밍 - Physical Address(MAC Address), Logical Address(IP Address), Port Address

728x90
반응형

주소에는 physical address, logical address, port address 등이 있다.

 

출발지에서 목적지까지 가지 위해서는 위의 physical address, logical address, port address 세 개의 주소가 반드시 필요하다.

 

physical address는 MAC 주소라고도 불리는데 physical address가 왜 필요할까?

 

10번이 87번으로 데이터를 보내는 상황이다. 

발신과 수신이 둘 다 이더넷(유선 네트워크 시스템) 즉 local에 위치하는 경우에는 MAC주소를 사용하게 된다. 

10번의 정보가 이더넷을 통해 이동하면서 만나는 컴퓨터들은 정보(Frame)의 목적지 주소가 자신과 일치하지 않음을 확인하고 지나쳐보낸다. 목적지와 일치하는 87번 만이 정보를 받는 것이다.

 

10번이 87번에게 보낼 정보를 스위치로 보낸다. 스위치가 87번 주소의 위치를 모를 경우, 자신에게 연결된 주소들에게 전부 보내본다. 목적지가 일치하지 않는 컴퓨터에서는 패킷을 허용하지 않다가, 87번에 전달하게 되면 정보전달이 완료되는 것이다. 이러한 방식이 이더넷의 방식이다.

 

스위치가 테이블에 10번이 인터페이스 #1에서 보내옴을 저장한다. 87번이 데이터(Frame)를 만들어서 보내면, 스위치는 인터페이스 #4에서 87번이 보낸 데이터가 있음을 저장한다. 이로써 스위치는 #1,#4 인터페이스에 10, 87번이 연결되어있음을 확인할 수 있다.

 10번이 87번에게 보낼 데이터를 스위치에 보내면, 스위치는 테이블에 저장된 인터페이스 중 목적지가 87번인 인터페이스를 찾아 보낼 수 있을 것이다. 다른 인터페이스에 굳이 보내보는 작업을 거치지 않고 말이다.

 

스위치는 각 인터페이스에 어떤 MAC주소가 연결되어있는지를 저장하고, 데이터를 받았을 때 저장된 MAC주소이면 대응되는 인터페이스로 바로 보내준다.

 

※ 스위치의 테이블의 정보를 관리하는 작업은 ARP(Address Resolution Protocol)이라는 프로토콜에서 따로 작업을 

 

네트워크 장비에 대해서 알아보자

 

Repeater라는 장비가 있다. 네트워크 신호는 500m를 가게되면 신호가 약해지는데, 이 때 신호를 중간중간 증폭 시켜주는 장비가 Repeater이다.

 

Hub는 인터페이스가 여러개 있고, Repeater의 역할도 동시에 하기 때문에 신호를 받으면 증폭시켜서 연결된 인터페이스들에 보내주는 장비이다.

 

Bridge에 대해서 알아보자. 위에서 스위치가 인터페이스에 연결된 MAC주소를 저장하여 데이터의 목적지가 저장된 MAC주소에 해당되면 찾아서 다른 인터페이스로 보내보는 작업없이 바로 보내준다고 하였다. 이를 filtering content라고 한다. Bridge는 Repeater의 역할을 하면서 filtering을 동시에 한다.

 

위 그림과 같이 S가 목적지인 정보를 Bridge에 보내게 되면 Bridge에는 연결된 인터페이스들의 정보가 목적지인 S와 일치하지 않으므로 데이터를 보내지 않고 필터링하게 된다. 

 

Switch는 multi port bridge 즉 Hub에 filtering 기능이 추가된 것이다. 

 

위와 같이 여러 인터페이스가 연결된 Hub에 목적지가 F인 정보가 들어오면 filtering하여 F인터페이스에만 보내주는 역할을 가진 도구가 Switch이다. 추가로 buffer라는 기능도 있는데 이는 나중에 알아보도록 한다.

 

 

MAC주소는 6-byte (48-bit)이고, 12진수로 표현한다.

 

모든 디바이스는 IP주소와 MAC주소를 가지고 있어야 한다. IP주소는 logical 주소라고 하며, 컴퓨터의 IP는 변경할 수 있다. MAC주소는 장비를 제작하는 회사에서 부여하는 physical한 번호이다.

 

 위 그림은 Network Layer와 DataLink Layer에 대해서 중점적으로 표현한 그림이다.

 A에서 P로 정보를 보내는 상황이다. A에서 정보를 보낼 때 목적지 P와 다음 목적지 F(Router의 IP주소)를 적어보낸다. 만약 Router로 보내는 과정에서 중간에 다른 디바이스가 있다면 어떨까? 그렇다면 MAC주소를 통해서 filtering 해야하므로 MAC주소를 헤더에 추가하여 Frame을 만든다. 

 

 F의 MAC주소가 20인지는 Sender가 따로 처리하여 테이블을 만들어준다고 가정한다. F에게 전달하기 위한 IP와 MAC주소를 담은 Frame을 추가한다. 그러면 filtering되어 중간에 다른 디바이스로 가지않고 IP가 F인 Router까지 도달한다. 

(만약에 테이블에 도착해야할 IP에 대한 MAC주소가 없으면 찾아내는 프로토콜이 따로 존재)

 

 그 다음 Router에서 자신의 IP주소와 Frame에 담았던 IP주소와 일치하므로 자신에게 전달하는 Frame임을 확인하고, Frame의 목적지 주소(P)를 확인한다. 목적지가 자신의 주소가 아니므로 다음으로 전달할 IP 주소를 찾아 IP주소와 MAC주소를 Frame에 저장한다.

 이때 라우터는 목적지 주소(P)를 향해서는 어떤 경로로 가야하는지에 대한 Next IP주소를 Routing Table에서 찾아온다. (이 라우팅 테이블의 생성은 나중에 알아보자)

 

Frame에 Next IP주소와 MAC주소를 담고 전달하는 방식은 이전 설명과 비슷하다.

 

그림에서 Router1은 LAN1 네트워크와 LAN2 네트워크 둘 다에 각각 IP, MAC주소를 가지고 있는데, 이는 장비가 연결될 때 각 네트워크에서 IP주소를 부여하고, MAC주소는 연결하는 장비의 단자마다 부여되어있다고 보면 좋다.

 

마찬가지로 N주소에 해당하는 Router2에 전달된 후 IP주소 일치를 확인하여 Router2가 Frame을 전달받으면, 목적지를 향한 다음 IP주소를 Frame에 저장하게 된다. (여기서는 다음 IP주소와 MAC주소를 안다고 가정하지만 실제로는 알아오는 작업이 따로 필요하다)

 

A에서 F주소까지 보내는 과정, T주소에서 N주소까지 보내는 과정, Z에서 P까지 보내는 과정을 hop-to-hop이라고 한다.

A에서 P까지는 가는 것을 source to destination이라고 한다.

 

과정을 보면 physical 주소는 계속해서 바뀌지만, 출발지와 최종 목적지가 담긴 IP주소 Frame은 바뀌지 않는다.

 

여기서 잠깐, IP주소는 전세계에 하나뿐인 고유한 주소인데 왜 hop-to-hop에 IP주소를 사용하지 않고, MAC주소를 따로 사용하는지 의문을 가질 수 있다.

네트워크가 인터넷으로 통합되기 전에는 다양한 프로토콜이 존재하였기에 IP만을 사용한 것이 아니었다.

 하지만 Network Layer에서 프로토콜이 다르더라도 LAN과 같은 DataLink Layer에서는 자유로히 돌아다닐 수 있도록 하기 위해서 이더넷(로컬)에서는 통일을 해야할 필요가 있었기에, hop-to-hop delivery를 위해서는 MAC주소를 사용하자고 먼저 약속이 되었다.
 회사에서 MAC주소를 부여하고 인터넷 기기를 주기 때문에 hop-to-hop에 대해서는 지금은 고민할 필요가 없지만, 만약 IP로 hop-to-hop을 한다면 규약을 따로 생각할 필요가 있다.

 

port address에 대해서 알아보자.

 

IP주소는 컴퓨터에 부여되는 번호이다. 우편번호와 같이 ~도 ~시,군,구 ~동 등 건물의 주소까지는 알려준다. 건물 내에서는 따로 호마다 번호가 부여되듯이 IP주소는 건물의 주소와 같은 개념이다. 

 

 컴퓨터가 인터넷 프로그램 a,b,c를 실행하고 있다고 하자. 외부에서 b에 보내져야할 패킷을 IP주소를 통해 컴퓨터로 전달하였는데, a,b,c 중 어떤 프로그램에 전달해야할지 정보가 필요하다.

 즉 인터넷을 사용하는 프로그램들에 번호를 부여해서 구별할 정보가 필요하다. 그래서 패킷을 보낼 때 포트번호를 부여한다. 쉽게 말해 포트번호는 프로그램마다 부여하는 번호라고 보면 된다.

 

네트워크 통신에는 이렇게 port address, IP address, MAC address (physical)가 필요하다.

 

hop-to-hop으로 갈 때마다 MAC주소(physical address)는 계속해서 바뀐다.

 

포트번호는 16비트를 할당하여 표현하여 0부터 65,535까지의 숫자로 할당할 수 있다 (포트번호는 1024 이후 번호로만 열 수 있다)

 

 만약 2MB의 정보를 보내는 상황이라고 하자. 패킷을 500Byte씩 잘라서 보낸다고 하면 총 4000번 보내야한다.

패킷에서 Header는 보통 20 Byte를 차지하는데

 포트번호가 보내는 포트번호, 받는 포트번호 각각 2Byte씩 총 4Byte를 차지한다.

 IP주소가 보내는 IP, 받는 IP 각각 4Byte씩 총 8Byte를 차지한다.

 그리고 현재는 자세히 다루지 않지만, MAC주소를 포함한 나머지 Header의 크기가 8Byte로 총 20Byte로 Header의 정보가 이루어진다.

 

OSI 계층 그림을 보자.

그림에서 Layer-to-Layer communication이라는 것은 '각 레이어마다 보는 정보가 정해져 있다'를 의미한다. Application Layer에서 데이터가 레이어를 내려갈수록 헤더에 정보가 추가되는데, 각 레이어마다 확인하는 헤더의 정보는 자신의 레이어에서 담당하는 정보만을 확인한다.

 예를들어 Transport는 헤더에 포트번호를 추가하기 때문에 Transport Layer는 받은 데이터의 헤더에서 포트번호를 확인하고 이상이 있다면 같은 계층인 상대편의 Transport Layer에게 전달한다. 

 

A에서 P로 데이터를 전달하기 위해서 A의 Data link Layer에서 Frame을 만들어 보내면,

 F의 Data link에서 MAC주소가 자신의 것과 같은지 확인하고 Network Layer로 올린다.

 Network Layer는 패킷(Datagram)의 목적지 IP주소를 확인하고 다음 IP주소에 해당하는 MAC주소를 라우터 테이블에서 찾는다.

 다음 IP주소인 N의 MAC주소로 Frame을 보내면 마찬가지로 MAC주소와 IP주소를 확인하는 과정으로 P로 전송한다.

이 과정에서 F와 N은 배송에 필요한 hop-to-hop 주소와 source to destination에 필요한 주소만 확인하고 그 안의 내용(상위 계층 정보)은 확인하지 않는다. (전송장비가 아니라 보안장비의 경우 내용물을 확인한다)

728x90
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유