완성
콘트라베이스
완성
전체 방문자
오늘
어제
  • 분류 전체보기 (5)
    • CS (4)
      • 자료구조 (3)
      • 알고리즘 (0)
      • 네트워크 (1)
    • 기록 (1)
      • 후기 (1)
      • 회고 (0)
    • Java (0)

최근 글

블로그 메뉴

  • 홈
  • 관리
  • 글 쓰기
hELLO · Designed By 정상우.
완성

콘트라베이스

MacOS 네트워크 인터페이스(Networt Interfaces)
CS/네트워크

MacOS 네트워크 인터페이스(Networt Interfaces)

2023. 4. 23. 20:02

개요

tcp 3 way handshake 과정에서 실제로 헤더에 어떤 정보가 담기는지 확인하기 위한 방법을 알아보던 중

tcpdump를 통해 패킷 헤더의 내용을 확인할 수 있다는 사실을 알게되었다.

그러나 tcpdump를 활용한 예시들이 전부 'eth0'이라는 네트워크 인터페이스를 통한 접근을 기본으로 하는데,

내 맥북에는 그런 이름의 인터페이스가 존재하지 않았다.

따라서 ifconfig(interface configuration) 명령어를 통해 확인한

맥북의 네트워크 인터페이스와 각각의 역할에 대해 이해한 바를 정리하는 목적으로 작성하는 글이다.


명칭과 역할

먼저, 모든 네트워크 인터페이스의 이름만을 확인하기 위해 아래와 같은 명령어를 사용할 수 있다.

$ ifconfig -l

해당 명령어를 내 터미널에 실행했을 때 실제로 출력된 결과는 아래와 같다.

각 인터페이스의 자세한 정보를 확인하기 위해서는 아래의 명령어를 실행한다.

$ ifconfig -v [인터페이스이름]

### 예시
$ ifconfig -v lo0

각각의 의미와 역할을 정리해보았다. 역할을 이해하는 정도의 피상적인 수준에서 작성했다.

출처: http://newosxbook.com/bonus/vol1ch16.html

lo0

Loopback인터페이스. 루프백이라는 용어 자체는 전기신호나 디지털 데이터 스트림 등이 원래의 장치로 돌아가는 것을 의미하며, 주로 전송 시설의 테스트 수단으로 사용된다고 한다. TCP/IP에서 루프백은 웹서버를 띄우고 테스트할 때 자주 사용하는 127.0.0.1이라는 IP주소나 localhost라는 도메인 네임이 자기 자신(접근을 시도한 호스트)으로 되돌아 가게 해주는 역할을 한다. 이는 '물리적으로 존재하는 NIC(Network Interface Card)가 아니라 논리적인 인터페이스'이며 인터넷 프로토콜(IP)이 지원하는 기능이다.

루프백 인터페이스가 동작하는 방식에대해 이해한 내용은 다음과 같다.

L7(애플리케이션)에서 주소가 포함된 데이터를 L4(TCP)로 내려주면,
TCP는 Encapsulation 후 이를 L3(IP)로 내려준다.
이 때 IP 주소가 127.0.0.1(IPv4) (또는 ::1(IPv6) 또는 도메인 이름이 localhost)이라면 해당 패킷이 NIC를 거쳐 L2로 전달되는 것이 아닌, 그대로 L4로 올려보내져서 작업을 수행한다.

결과적으로 TCP/IP의 lo0 루프백 인터페이스란 L2, L1와 네트워크를 거치지 않고 OS의 네트워킹 소프트웨어만을 통하며, 같은 기기에서 클라이언트와 서버가 동작할 때 통신할 수 있는 간단한 방법을 제공하는 것이 그 목적인 네트워크 인터페이스라고 할 수 있겠다.

gif0

Generic Tunnel Interface

네트워크의 일반적인 터널링 의사 장치(pseudo-device)라고 하는데, 정확히 어떤 의미인지 잘 와닿지는 않는다.다만 GRE(Generic Routing Encapsulation)라는 프로토콜과 유사하다는 설명이 있어 이를 참고하였다. 자세한 내용은 여기서 확인할 수 있다.

터널링(Tunneling)은 해당 네트워크에서 지원하지 않는 프로토콜을 사용하여, 한 네트워크에서 다른 네트워크로 패킷을 이동시키는(전송하는) 방법이라고 한다. '__지원하지 않는 프로토콜' 을 이용하기 위해 패킷을 캡슐화하는데, 여기서 말하는 캡슐화란 OSI 계층 구조의 상위 계층에서 하위 계층으로 데이터를 전달하며 일어나는 캡슐화와 같은 의미로 원본 패킷을 페이로드로 하는 새로운 패킷을 만드는 방식을 말한다. 다만 터널링에서의 캡슐화가 항상 상위-하위 계층간의 전송만을 위한 것은 아니다. 터널링은 같은 계층 간의 데이터 전송을 위해서도 캡슐화를 사용한다.

GRE는 이러한 터널링 프로토콜로 암호화 없이 두 호스트 간에 트래픽을 터널링하는 수단이며, GIF는 GRE와 유사하지만 덜 범용적이고 몇가지 세부적인 특징에서 차이가 있는 프로토콜이라고 이해했다.

이 부분은 네트워크에 대해 좀 더 공부해야 정확히 알 수 있을 것 같다.

stf0

6(six)to4(four) tunnel interface

IPv4의 캡슐화를 통해 "6to4" IPv6를 지원하는 인터페이스이다.

6to4는 IPv4에서 IPv6로의 마이그레이션을 위한 인터넷 전환 메커니즘이다.

IPv4와 IPv6가 공존하는 동안 두 프로토콜간의 통신을 지정한 RFC3056의 매커니즘을 구현하며,

캡슐화를 통해 IPv4의 주소를 IPv6네트워크에서 이용할 수 있도록 바꿔준다.

출처: By Mro - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=10461514

stf0는 이를 위한 인터페이스로, 위 그림처럼 IPv6 Island의 경계에 있는 6to4 라우터에서 사용되는 인터페이스 이다.

anpi#(0~1)

식별자의 유래가 정확히 무엇인지, 또한 어떠한 인터페이스인지 알 수 있는 사용 예시나 설명을 찾아보았지만 확인하지 못했다.

리눅스/유닉스 계열의 네트워크 인터페이스 카드(NIC)를 나타내는 인터페이스 이름 중 하나라는 것 정도만을 알 수 있었다.

en#(0~4)

Ethernet

이더넷 네트워크 인터페이스. IP를 사용하여 이더넷을 통해 인터넷과 연결하는 네트워크 인터페이스이다.

내가 찾던 eth# 인터페이스와 같은 역할을 하며

이더넷을 전송 매커니즘으로 사용하여 컴퓨터를 LAN(Local Area Network)에 연결한다.

각각의 타입은 다음과 같았다.

en0: WI-FI

en1, en2: IP over Thunderbolt

en3, en4: USB Ethernet

bridge0

브릿지 네트워킹 인터페이스

리눅스 계열에서 제공하는 가상 네트워크 인터페이스이며 맥에서는 기본적으로 Thunderbolt 브릿지로 설정되어있다.

BSD는 Berkeley Software Distribution의 약자로 버클리에서 개발한 유닉스 운영체제를 의미한다.

브릿지는 두 개 이상의 네트워크를 연결하고, 연결된 네트워크간에는 패킷을 전달 할 수 있다.

여러 네트워크를 연결할 수 있기 때문에 다양한 작업이 가능하다.

외부와 연결을 위해 항상 브릿지를 거쳐가게 하며 패킷 필터링 등을 통해 브릿지 방화벽을 구축하는것도 가능하며

모든 내부 네트워크를 모니터링 하기 위한 수단으로 사용하기도 한다.

또 브릿지를 이용해서 하나의 장치에서 동작하는 여러 가상 머신(또는 컨테이너)이 네트워크 통신을 할 수 있다고 한다.

맥에서는 브릿지를 이용해서 실제 인터페이스인 Thunderbolt를 통해 서로 다른 두 Mac 기기간의 IP 통신을 가능하게 해준다고 설명한다.

다른 네트워크 인터페이스와 다르게 member라는 프로퍼티(?)를 가지며, 기본적으로 en1, en2 두개의 인터페이스를 멤버로 하고 있는것으로 보아 두개의 물리적인 인터페이스를 이용해서 네트워크 통신이 가능하도록 구성함을 확인 할 수 있었다.

ap1

Access Point

장치(맥북)의 연결을 공유하기 위해서 장치(맥북)를 무선 호스트로 사용할 때 이용하는 인터페이스라고 한다.

출처: https://networkencyclopedia.com/access-point/

그림과 같이, 유선 LAN에 무선 스테이션이 연결할 수 있도록 _접근 가능한 지점_으로서 기능하기 때문에 Access Point라는 이름을 가진다.

awdl0

Apple Wireless Direct Link(AWDL) 기술에서 사용되는 인터페이스이다.

AirDrop, AirPlay, Handoff, Continuity 등의 Apple의 기능을 사용할 때 사용되는 애플의 자체적인 인터페이스이다.

llw0

Low-latency WLAN Interface. Used by the Skywalk system.

대기 시간이 짧은 특수한 종류의 WiFi 연결을 위한 네트워크 인터페이스라고 한다.

Skywalk system??

아무리 검색해도 관련 정보가 나오지 않았는데,

애플의 개발자 포럼에서 같은 궁금증을 가지는 사람이 쓴 글의 답글에 작성된 링크를 통해 관련된 내용을 확인할 수 있었다.

...
The second is the mysterious Skywalk, and its nexus and channel objects. This is an entire subsystem which is not only undocumented, but intentionally left out of XNU's public sources.
...

재밌는 얘기가 나왔다.

조금 더 확인해본 바로는

애플의 모든 운영체제는 Darwin이라는 운영체제를 기반으로 하고,

Darwin의 커널은 XNU이며, 이 XNU의 네트워크 서브 시스템이 Skywalk라고 한다.

관련 유틸인 skywalkctl(8)의 매뉴얼은 여기서 확인 가능하다.

utun#(0~6)

User Tunneling interface

유저 스페이스(User space)와 커널 스페이스(Kernel space) 간의 터널링을 담당하는 가상 네트워크 인터페이스이며 VPN에 이용된다. utun0 인터페이스를 직접 언급하는 자료는 거의 없었으나, 리눅스의 tun과 유사한 역할과 기능을 지원한다고 하여 리눅스의 tun이라는 가상 네트워크 인터페이스가 어떤식으로 VPN에 이용되는지 같이 알아보았다.

VPN(Virtual Private Network; 가상 사설 망)은 public 네트워크에서 패킷의 암호화 작업과 터널링을 통해 가상의 사설망을 구축하는 방법 또는 그러한 통신망이다. 가상의 사설망을 구축한다는 개념 자체는 터널링만으로도 가능 하지만, 사설망을 구축하는 의도는 외부의 공공 망과의 분리이며, 따라서 전송하는 데이터를 외부에서 확인할 수 없도록 하는 암호화 작업이 대부분 필수적이다.

사이트와 사이트 간의 VPN 구성(Site-to-Site(또는 Gateway) VPN)의 경우에는 연결을 원하는 각 사이트의 게이트웨이 간에 VPN 터널을 생성한다. 같은 회사에서 물리적으로 충분히 떨어져 있는 여러 지점간의 통신을 위해 사설망을 구축하는 상황을 생각할 수 있겠다.

출처 : https://commons.wikimedia.org/wiki/File:Site-to-site_VPN-en.svg

개별 호스트가 사이트에 VPN 연결을 하려는 경우(Host(또는 Client)-to-Site(또는 Host-to-Gateway) VPN)에는 접속자 단위로 VPN 터널이 생성되어야 한다. 이는 원격으로 근무하는 직원이 회사의 로컬망에 접근해서 작업을 진행해야 하는 경우를 예로 들 수 있을 것이다.

출처 : https://www.tp-link.com/kr/blog/1268/vpn-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94-tp-link-%EA%B3%B5%EC%9C%A0%EA%B8%B0%EC%97%90-vpn-%EC%84%A4%EC%B9%98%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95/

Host-to-Site VPN의 경우 일반 PC의 네트워크 트래픽을 VPN Server로 전송해야 하기 때문에 VPN Client 프로그램의 설치가 필요하다. VPN Client 프로그램이 실행되면, VPN Server와의 터널을 만들고 해당 PC에서 전송하는 모든 네트워크 트래픽을 캡쳐하여 VPN 터널을 통해 VPN Server로 전송한다.

네트워크 트래픽을 캡쳐한다는것은 운영체제에서 발생하는 모든 네트워크 트래픽을 가로채서 VPN 터널을 통해 전송되도록 리디렉션 해준다는 것이다. 이는 User 레벨의 어플리케이션인 VPN Client가 독단적으로 수행할 수 있는 것이 아니며, 커널과의 긴밀한 협력이 필요한 작업이다. 커널과의 협력과 동시에 터널링을 통해 VPN 터널로의 전송을 가능하게 해주는것이 바로 tun과 tap이라는 이름의 가상 네트워크 인터페이스(혹은 디바이스)이다.

어플리케이션과 NIC를 제외한 TCP, IP는 커널 영역에 속하는 네트워크 스택의 레이어이다. (출처 : https://d2.naver.com/helloworld/47667)

tun/tap은 리눅스에서 제공하는 가상 네트워크 인터페이스(디바이스)로서 소프트웨어적으로 구현된 가상의 네트워크 장치이다. tun은 OSI L3(Network)인터페이스의 에뮬레이션이고, tap은 L2(Data Link)인터페이스의 에뮬레이션이다.

즉, tun은 3계층의 패킷을 터널링 할 수 있고 tap은 2계층의 패킷을 터널링 할 수 있다.

출처 : By Ikluft - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=80385349

두 가상 장치는 전송받은 패킷을 사용자 공간(User Space)에서 실행되는 프로세스에게 전달한다. 반대로 사용자 공간의 프로세스가 tun 또는 tap으로 패킷을 전달할 수도 있다.

출처 : https://tttsss77.tistory.com/235

정리하자면, tun은 Host-to-Site VPN에서 VPN Client가 VPN Server와의 통신을 위한 터널링에 사용되며, User Space의 어플리케이션인 VPN Client가 모든 네트워크 트래픽을 컨트롤 하기 위해 커널과 통신하는 가상 네트워크 인터페이스라고 이해할 수 있을 것 같다.

아직은 실제로 VPN을 구성해본적은 없어서, 터널이 구성된 뒤 tun이 실제로 어떤 방식으로 유저-커널 사이에서 패킷을 전송하고 네트워크 트래픽을 캡쳐하는 지 등 구체적인 동작 과정을 알기 위해서는 OpenVPN을 이용한 구현을 직접 해보며 공부가 좀 더 필요할 것 같다.


.

쓰다보니 애매하게 알고있는 것들이 많이 있었다. 잘 모른는건 최대한 알아보려고 했으나 아직까지 모호한 것들이 남아있다.

네트워크도 재밌는것같다.


참고 출처

리눅스 네트워크 관리에 필요한 사용법 11가지 | 와탭 블로그
https://stackoverflow.com/questions/29958143/what-are-en0-en1-p2p-and-so-on-that-are-displayed-after-executing-ifconfig
TCPdump 활용하기 (명령어 및 사용법)
https://www.juniper.net/documentation/kr/ko/software/junos/interfaces-fundamentals/topics/topic-map/loopback-interfaces.html
https://www.cloudflare.com/ko-kr/learning/network-layer/what-is-tunneling/
https://velog.io/@koo8624/Linux-Linux-Virtual-networking-Interface
https://superuser.com/questions/1681992/why-the-bridge0-has-a-ethernet-port-address-it-refers-to-what
https://apple.stackexchange.com/questions/394047/what-is-the-network-interface-llw0
https://www.joinc.co.kr/w/Site/cloud/NetworkVirtualization/tunneling
www.joinc.co.kr](https://www.joinc.co.kr/w/Site/cloud/NetworkVirtualization/tunneling)
https://www.geeksforgeeks.org/tunneling/
https://ebrary.net/26730/computer_science/remote_access_host-to-site
https://www.joinc.co.kr/w/Site/System_management/VPN/OpenVPN
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rpg2003a&logNo=221209134202

완성
완성

티스토리툴바