[카운트 다운 노래: 7, 6, 5, 4, 3, 2, 1] 인터넷: 패킷, 라우팅, 신뢰성
안녕하세요. 제 이름은 Lynn이예요. 여기 Spotify의 소프트웨어 엔지니어입니다.
저는 제가 종종 인터넷의 신뢰성을 당연시 했음을 인정합니다. 인터넷에 떠도는
엄청난 양의 정보는 놀랍습니다. 하지만 데이터의 각 부분을
어떻게 신뢰성 있게 전달할 수 있을까요? 여러분이 Spotify의 노래를 재생하고 싶다고 가정합시다.
과정은 여러분의 컴퓨터를 직접 Spotify에 연결하고 Spotify가 직접, 전용선으로 여러분에게 노래를
보내는 것처럼 보입니다. 하지만, 사실, 그것은 인터넷이 하는 방식이 아닙니다.
인터넷이 직접적인, 전용 연결선으로 구성되어 있다면, 수 백만의 사용자가 동시에 로그인하여 각자의 일을
하는 것은 불가능할 것입니다. 특히, 각각의 배선과 컴퓨터가 항상 가동된다는 보장이 없기 때문에
더 그렇습니다. 대신, 데이터는 인터넷 상에서 훨씬 덜
직접적인 방식으로 여행합니다. 아주 오래 전인 1970년대에, 파트너인 Bob Kahn과 저는
지금 인터넷이라 불리는 것을 설계하기 시작했습니다. Bob과 나는 인터넷의
프로토콜과 아키텍처를 설계할 책임과 기회를 가졌습니다. 그래서 우리는 현재를 포함하여,
지금까지 모든 시간 동안 인터넷의 성장과 진화에 계속해서 참여하고 있습니다.
한 컴퓨터에서 다른 컴퓨터로 정보를 전달하는 방식은
상당히 흥미롭습니다. 이것은 고정된 경로를 따를 필요가 없습니다. 사실, 여러분의 경로는
어느 한 컴퓨터 속에서 컴퓨터 대화로 변화될 수 있습니다. 인터넷 상의 정보는 패킷이라 불리는 것 안에서
한 컴퓨터에서 다른 컴퓨터로 가고 패킷은 우리가 차 안에 타고 가며 한 곳에서
다른 곳으로 가는 것과 마찬가지로 인터넷 상에서 한 곳에서 다른 곳으로 여행합니다.
교통 체증 또는 도로 상태에 따라, 여행을 할 때 마다 우리는 다른 경로를 선택하거나
또는 어쩔 수 없이 다른 경로로 돌려 동일한 장소에 옵니다. 그리고,
차 안에 온갖 종류의 물건을 실어 나르듯이, 많은 종류의 디지털 정보를
IP 패킷과 함께 보낼 수 있지만 거기에는 약간의 제한이 있습니다. 예를 들어,
우주 왕복선을 그것을 만든 곳에서 발사 장소로 이동해야 한다고 가정하세요. 왕복선은
트럭 한 대에 고정시킬 수 없어 여러 부분으로 나눠야 하고 여러 대의 트럭을 사용하여
운송해야 합니다. 운송 시 여러 경로를 이용해야 하고 목적지에 각기 다르게 도착할 것입니다.
하지만, 일단 모든 부분이 거기에 모이면, 부분을 완전한 우주 왕복선으로 재조립
할 수 있고 발사할 준비가 될 것입니다. 인터넷 상에서 세부사항은 이와 유사합니다.
매우 큰 이미지를 친구에게 전송하고 싶거나 또는 웹 사이트에 업로드하고 싶으면,
그 이미지는 수 백 만 비트의 1과 0으로 구성되어 한 패킷 안에서 함께 보내기에는
너무 많습니다. 데이터가 컴퓨터 안에 있기 때문에 이미지를 보내는 컴퓨터는 빠르게
패킷이라 부르는 수 백개 또는 심지어 수 천개의 더 작은 부분으로 쪼갤 수 있습니다. 차 또는
트럭과 달리, 이러한 패킷은 운전자가 없고 경로를 선택하지 않습니다. 각 패킷에는
그것이 어디에서 왔으며 어디로 가는지 나타내는 인터넷 주소가 있습니다.
라우터라고 부르는 인터넷 상의 특수 컴퓨터는 트래픽 관리자와 같은 역할을 하여 패킷을 순조롭게
계속 네트워크를 통해 이동하게 합니다. 한 경로가 막히면, 개별 패킷은 인터넷을 통해
다른 경로로 여행하여 약간 다른 시간에 또는 심지어 제멋대로
목적지에 도착할 수 있어요. 어떻게 이렇게 되는지 이야기 해보죠. 인터텟 프로토콜의 일부로서
각 라우터는 패킷을 보내는 여러 개 경로의 트랙을 따르고, 패킷의 목적지 주소에
기초하여 각 데이터 조각별로 이용 가능한 가장 효율적인 경로를 선택합니다.
이 경우 가장 효율적이라는 건 비용을 의미하는 것이 아니라, 시간과, 회사 간의 방침 및 관계 등과 같은
비기술적인 요소를 의미합니다. 종종 여행할 데이터를 위한 최고의 루트가 직선코스일
필요는 없어요. 여러 경로의 옵션이 있으면 네트워크의 결점이 없어집니다. 이것은
비록 뭔가 정말 잘못되었더라도 네트워크가 계속해서 패킷을 보낼 수 있다는 의미입니다.
이것은 인터넷의 주요 원칙을 위한 기초로 즉, 신뢰성입니다. 지금 만약 데이터를 요청하려고
하는데 아무것도 전달받은 것이 없다면 어떻게 할래요? 가령 노래를 듣고 싶다고 가정해봐요.
모든 데이터를 전달받아 노래가 완벽하게 재생된다고 어떻게 100% 확신할 수 있어요?
새 친구인 TCP (전송제어 프로토콜)를 소개합니다. TCP는 패킷으로 전송 및 수신되는 모든 데이터를
관리합니다. 그것을 마치 등기 우편 서비스와 같다고 생각하세요.
기기 상에 있는 노래를 요청할 때, Spotify는 노래를 여러 패킷으로 쪼개서 보냅니다.
패킷이 도착하면, TCP는 정리를 하고 각 패킷을 수신했다는 확인서를
보냅니다. 패킷이 모두 있으면, TCP는 전달되었고 준비가 되었다고
신호합니다. (노래 재생) 만약 TCP가 일부 패킷이 빠져 있음을 발견하면, 신호를 하지 않고
노래가 제대로 나오지 않거나 또는 노래의 일부가 없을 수 있습니다. 없어지거나 또는 불완전한
패킷에 대해, Spotify는 응답할 것입니다. 일단 TCP가 요청된 그 노래를 위해
많은 패킷이 전달되었음을 확인하면, 노래는 재생되기 시작합니다. TCP와
라우터 시스템의 대단한 점은 그것들의 확장성이예요. 그것들은 8개 또는 80억개의 기기와 함께 일할 수 있어요.
사실, 이러한 무결점과 리던던시 원칙때문에, 우리가 더 많은 라우터를 추가할 수록
인터넷의 신뢰성은 더 높아져요. 또한 다른 이들이 인터넷을 사용할 수 있도록
서비스를 중단하지 않고도 인터넷을 성장 및 확장 시킬 수 있습니다. 인터넷은 수 십만개의
네트워크와 물리적으로 연결된 수 십억 대의 컴퓨터와 기기로 이루어 졌습니다. 인터넷을
구성하는 이러한 여러 시스템은 표준 하에서 인터넷 상의 데이터 전송방법에 동의했기 때문에
서로 연결되어 있고, 서로 커뮤니케이션하며, 함께 일합니다.
인터넷과 함께 전산 기기 또는 라우터는 필요하면, 모든 패킷이 그것들이 재조립될
목적지까지 잘 가도록 도와줍니다. 이러한 일은 여러분 또는 다른 사람이
이메일을 보내거나 또는 웹 페이지를 방문할 때, 비디오 채팅을 할 때,
모바일 앱을 사용할 때, 또는 인터넷 상의 센서 또는 기기가 서로 통신할 때 등
하루에 수 십억 번씩 일어납니다.