지식

[Network] 네트워크 기초 이론 2강 — MAC 주소·IP 주소·포트 번호는 각각 무엇을 식별하는가

네트워크 기초 이론 시리즈 정리 — 2강. 참고: 널널한 개발자 TV, MAC주소, IP주소, Port번호가 식별하는 것 (재생목록)

1강에서 계층별 식별자로 MAC 주소, IP 주소, 포트 번호를 봤고, "이 셋은 각각 무엇을 식별하는가"라는 질문을 남겼다. 이번 편이 그 답이다.

계층 식별자 식별하는 대상
네트워크 액세스 MAC 주소 NIC(네트워크 인터페이스 카드)
네트워크 IP 주소 호스트
전송 포트 번호 보는 자리에 따라 달라진다

셋 다 "식별자"로 묶이지만 가리키는 대상의 층위가 전부 다르다. 특히 포트 번호는 답이 하나가 아니다.

MAC 주소 — NIC를 식별한다

MAC 주소는 호스트가 아니라 NIC(랜카드)를 식별한다. 유선 랜카드에도, 무선 랜카드에도 각각 붙는다.

그래서 이런 결론이 나온다. 유선과 무선을 모두 가진 노트북은 MAC 주소를 2개 가진다. NIC가 2개니까 2개다. 컴퓨터 한 대에 MAC 주소 하나가 아니다.

즉 MAC 주소는 호스트를 식별하지 않는다. 호스트에 장착된 부품을 식별할 뿐이다.

MAC 주소는 바꿀 수 있다

MAC 주소를 하드웨어 주소라고도 부른다. 그래서 "하드웨어에 박혀 있으니 못 바꾼다"고 생각하기 쉽지만, 바꿀 수 있다.

칩을 교체하는 게 아니다. NIC에 각인된 값과 별개로, 운영체제와 드라이버가 프레임을 보낼 때 사용할 주소를 덮어쓸 수 있다. 리눅스라면 ip link set dev eth0 address 00:11:22:33:44:55, 윈도우라면 어댑터 고급 속성에서 바꾼다.

다만 자주 바뀌는 값은 아니다. 평상시에는 고정된 값이라고 보고 다뤄도 된다.

IP 주소 — 호스트를 식별한다

IP 주소가 식별하는 것은 호스트다. 그럼 호스트란 무엇인가.

호스트 = 네트워크(인터넷)에 연결된 컴퓨터

컴퓨터라는 점이 중요한 게 아니라 연결되어 있다는 점이 중요하다. 네트워크에 연결되지 않은 컴퓨터는 그냥 컴퓨터고, 연결되었을 때 특별히 호스트라고 바꿔 부른다.

컴퓨터 한 대의 IP 주소는 몇 개인가

랜카드가 하나면 IP도 하나일 것 같지만, 답은 N개다.

NIC 하나에 IP 주소를 여러 개 바인딩(binding) 할 수 있다. 하나의 인터페이스에 IP를 하나 붙이고, 또 다른 IP를 추가로 붙여 쓸 수 있다. 그래서 컴퓨터 한 대가 IP 주소를 여러 개 가질 수 있다.

여기서 쓰는 말은 매핑(mapping)보다 **바인딩(binding)**이다. IP 주소가 컴퓨터라는 덩어리에 붙는 게 아니라 인터페이스에 묶인다는 뉘앙스이기 때문이다. "IP는 호스트의 식별자"라는 정리는 호스트가 인터페이스 하나에 주소 하나를 쓰는 흔한 경우를 단순화한 표현이고, 실제로 주소가 매달리는 위치는 인터페이스다.

포트 번호 — 답이 세 개다

포트 번호가 무엇을 식별하느냐고 물으면, 답하는 사람이 어느 자리에서 일하는지에 따라 답이 갈린다.

일하는 자리 포트 번호란
유저 모드 애플리케이션 개발·운영 프로세스 식별자
네트워크 관리 서비스 식별자
물리 네트워크 설치·통신 공사 인터페이스 번호

애플리케이션 쪽에서는 "이 포트로 들어온 데이터가 어느 프로그램으로 가는가"가 관심사다. 그래서 프로세스를 가리키는 번호로 이해한다.

네트워크 관리 쪽에서는 번호 자체보다 그 번호가 대표하는 서비스를 본다. HTTP는 보통 TCP 80번을 쓰고, 8080번을 쓰기도 한다. 그래서 실무에서는 "80번 열어 주세요"보다 **"HTTP 서비스 열어 주세요"**라고 말한다.

물리 설비 쪽에서 포트는 아예 다른 것이다. 공유기나 스위치에 랜 케이블을 꽂는 단자의 번호를 떠올린다. 장비 앞면에 1, 2, 3… 이라고 적힌 그 번호다.

실제로 포트 번호가 식별하는 것

TCP/UDP 헤더에 들어가는 16비트 포트 번호(0~65535)가 하는 일은 하나다. 호스트에 도착한 데이터를 어느 통신 종단점으로 넘길지 고르는 것 — 역다중화(demultiplexing)다.

커널은 도착한 세그먼트의 목적지 포트를 보고 어느 소켓에 넣을지 결정한다. 그러니 엄밀히 말하면 포트 번호가 묶이는 대상은 프로세스가 아니라 소켓이다. 프로세스가 그 소켓을 들고 있으니 결과적으로 프로세스를 가리키는 것처럼 보일 뿐이다. 한 프로세스가 소켓을 여러 개 열 수도 있고, 반대로 여러 프로세스가 하나의 리스닝 소켓을 나눠 가질 수도 있다.

그리고 물리 장비의 "포트 번호"는 이름만 같은 다른 개념이다. TCP/IP의 포트 번호와는 아무 관계가 없다.

정리

  • MAC 주소는 NIC를 식별한다. 유선·무선 둘 다 있으면 MAC도 2개. 하드웨어 주소지만 변경 가능하다.
  • IP 주소는 호스트를 식별한다. 호스트는 네트워크에 연결된 컴퓨터다. NIC 하나에 IP를 여러 개 바인딩할 수 있어 컴퓨터 한 대의 IP는 N개일 수 있다.
  • 포트 번호는 문맥에 따라 프로세스·서비스·물리 단자로 달리 읽힌다. 프로토콜 수준에서 실제로 식별하는 것은 호스트 안의 소켓이고, 장비의 물리 포트는 이름만 같은 별개다.
조회 0댓글 0

댓글

아직 댓글이 없습니다. 첫 댓글을 남겨보세요.