에어드롭(AirDrop)과 네트워크

    어쩌다 보니 맥 - 아이폰 - 아이패드를 사용하고 있는데, 애플 기기가 제공하는 기능들 중에 제대로 작동하면 참 좋은데 안 되면 종잡을 수가 없는 것 중에 하나가 에어드롭(AirDrop)이다. 오늘도 아이패드에서 맥으로 전송이 안 되어서 한숨을 쉬다가, 에어드롭이 어떻게 작동하는 건지 네트워크 관점에서 좀 더 파보면 재미있겠다는 생각을 했다. 어떻게 작동하는 건지 알면 작동 안 할 때 그래도 조금이나마 감을 잡을 수 있지 않을까… 하는 희망을 안고!

     

    에어드롭은 결국 와이파이다

    일단 아래 글을 참조해 보자.

    AirDrop uses Bluetooth to create a peer-to-peer Wi-Fi network between the devices. That means you don't need to be connected to your router or even the internet in order to have an AirDrop connection. You do have to have Wi-Fi and Bluetooth turned on, however.

    Each device creates a firewall around the connection and files are sent encrypted, which actually makes it safer than transferring via email. AirDrop will automatically detect nearby supported devices, and the devices only need to be close enough to establish a good Wi-Fi connection, making it possible to share files across several rooms.

     

    읽어보면 핵심은 에어드롭은 기기들 간에 1) 블루투스로 서로를 인식하고 2) P2P W-iFi 커넥션을 만든다는 것 같다. P2P면 P2P고 와이파이면 와이파이 아니야? 기기 간 WiFi 커넥션을 만든다는 게 뭘까? 그냥 동일한 와이파이 내부에서 와이파이로 전송하는 건가? 하지만 에어드롭은 기기들이 인터넷에 연결되어 있지 않아도 작동한다. 좀 더 정확히 말하면 이는 Wi-Fi Direct라는 기술을 이용한 것인데, Wi-Fi Direct를 사용하면 두 디바이스 중 하나가 액세스 포인트의 기능을 하게 되고, 다른 디바이스는 그 액세스 포인트에 연결한 형태가 된다.

     

     

    우리가 인터넷에 접속할 때는 주로 유선랜에 직접 연결되어 있는 공유기 등의 라우터가 액세스 포인트 역할을 한다. 이 말은 네트워크 내의 각 기기들이 유선랜에 직접 연결되어 있지 않아도, 공유기가 이를 중간에서 전달해주는 역할을 한다고 볼 수 있다. 흔한 질문이지만 주소창에 google.com을 치면 무슨 일이 일어날까?를 생각해 보면 된다. 인터넷에 연결되어 있다는 것은 중간중간의 수많은 라우터를 통해 우리의 IP 패킷(내부에 있는 TCP 세그먼트, 그리고 그 내부에 있는 HTTP 메시지)을 최종 목적지인 google.com의 IP 주소로 전달한다는 것이다.

     

    그런데 에어드롭의 목적은 그냥 내 바로 옆에 있는 기기와 1:1로 통신하는 것이다. 그렇기 때문에 중간 전달자(라우터)가 필요 없다. 우리는 기기와 기기를 직접 무선랜으로 연결해서 데이터만 주고 받으면 된다. 당연히 ‘인터넷’에 연결할 필요가 없다. 하지만 인터넷에 연결되어 있지 않을 뿐, 네트워크에는 연결되어 있다. 두 기기는 Wi-Fi라는 무선랜 규격을 통해 패킷을 주고받는다. 광케이블(유선랜 규격)을 인터넷 연결할 때 쓰는 게 당연해 보이지만, 만약 적절한 커넥터와 SW 지원이 있다고 가정하면 광케이블로 내 맥북과 아이폰을 연결해서 데이터를 다이렉트로 쏠 수도 있는 것 아니겠는가? Wi-Fi Direct를 단순하게 보면 무선랜으로 그런 걸 구현한 기술이다. Wi-Fi는 물리/데이터링크 계층의 무선랜 프로토콜(IEEE 802.11 표준)에 기반한 규약일 뿐이고, 맥북과 아이폰이 Wi-Fi로 공유기에 연결하듯 맥북과 아이폰을 Wi-Fi로 직접 연결한 것이다.

     

    에어드롭은 결국 TCP다

    여기까지 오니, 그럼 에어드롭 패킷을 패킷 캡처 프로그램으로도 볼 수 있을까? 하는 궁금증이 들었다. 가능하다! 맥북의 와이파이는 켜두되, 집 와이파이와의 연결은 끊어 놓고 sudo tcpdump -w <file_name>.pcap 명령을 주면 패킷을 덤프 떠서 WireShark에서 볼 수 있는 pcap 파일로 뽑아준다. 에어드롭으로 사진을 하나 보낸 후 WireShark로 해당 pcap 파일을 열어 보자.

     

     

    가장 먼저 보이는 것은 mDNS라는 프로토콜로 된 요청들이다. 자료를 찾아 보니 mDNS는 Multicast DNS의 약자로, 작은 범위의 로컬 네트워크에서 작동하는 DNS라고 보면 된다. 이 자료에 따르면, 에어드롭은 애플의 Bonjour라는 자체 프로토콜에 기반하고 있는데, 수동 설정 없이 mDNS 를 통해 로컬 네트워크에 참여한 장비를 자동으로 찾을 수 있다. 즉 mDNS는 에어드롭의 대상이 되는 로컬 네트워크 내 기기의 IP 주소와 도메인을 매핑하기 위해 사용된다.

     

    그 다음부터는 TCP 커넥션을 맺는다. SYN 등의 메시지를 봤을 때 Handshake 과정을 수행하는 것을 볼 수 있다. 이후에는 일반적인 TCP 연결처럼 데이터를 받고 ACK를 보내는 요청들이 이어진다. 전송 계층 프로토콜로 TCP를 선택한 건 사실 당연한 이치다. 일대일로 커넥션을 맺어서 파일을 전송하는 것이기 때문에 데이터의 손실 없이 온전히 전송되어야 하기 때문이다. 그래서 쭈욱 읽다 보면 유실된 패킷을 재전송하거나, 중복된 패킷을 처리하는 등 신뢰성 보장을 위한 TCP의 특징들을 그대로 확인할 수 있다.

     

    패킷(세그먼트)을 재전송하는 모습

     

    결국 아주 간단하게 말하면, 에어드롭은 기기 간에 Wi-Fi로 1:1 연결을 만들어 TCP 통신을 하는 것이라고 정리할 수 있다.

     

    이거 원래 있던 건데?

    조금 다른 관점의 이야기이긴 하지만, 애플 기기에서 다른 제조사 기기로 바꾸기 싫은 이유 중에 하나로 “에어드롭이 너무 편해서” 라는 얘기를 가끔 듣는다. 근데 사실 기술의 핵심만 놓고 보면 에어드롭은 결국 Wi-Fi Direct에 기반한 일대일 파일 전송 기술인데, 이건 안드로이드 진영에서도 갤럭시 초창기부터 들어갔던 기능이다! 근데 한 쪽은 일부 긱들을 제외하면 아무도 모르는 기능이고, 한 쪽은 이것 때문에 다른 진영으로 옮길 때 아쉽다는 이야기가 나오는 것. 삼성도 갤럭시 s20 이후로 QuickShare라는 명칭을 내세워서 해당 기능을 재정비했는데, 사실 이것도 Wi-Fi Direct를 이용한 기술인지라 핵심은 크게 다르지 않다. 이런 것들을 보면 역시 기술 자체도 중요하지만, 그 기술을 어떤 방향으로 전달하면서 사용자 경험을 만드는지가 비즈니스 차원에서는 큰 차이를 만든다는 걸 느끼게 된다. 새삼스럽게 리스펙트하게 되는 기획자 분들의 피땀눈물.

     


    하지만 이런 내용을 알게 된다고 에어드롭이 작동하지 않을 때 해결책까지 뿅 나타나지는 않았다는 슬픈 이야기… 이 글을 쓰면서도 아이폰 - 패드, 맥 - 아이폰은 되는데 맥 - 패드는 안 되는 바보같은 현상이 발생하고 그랬다. 애플도 에어드롭 버그를 못 잡고 있는 걸 보면, 내부적으로는 이 기능 하나에 얼마나 복잡하게 얽히고 설킨 지점들이 많을까 싶기도 하다.

     

     

    참고자료

    댓글