대용량 데이터 전송 및 수신

VLBI(초장기선 전파간섭계) 관측에서는 수백 ~ 수천 km 떨어진 망원경들이 같은 천체를 동시에 관측하고, 각자 기록한 데이터를 한곳(상관센터)에 모아야 상관처리를 할 수 있습니다. 문제는 그 양입니다. 망원경 한 대가 하룻밤에 수십 TB(테라바이트)를 만들고, 파일 하나가 수백 GB ~ 수 TB에 이릅니다. 관측 준비와 관측데이터 저장에 이어, 이 장에서는 이렇게 큰 데이터를 빠르게, 빠짐없이, 틀림없이 보내고 받기 위해 전파천문학에서 쓰는 방법을 알아봅니다.

① 얼마나 많은 데이터를 옮겨야 할까?

전파망원경의 디지털 장비는 받은 전파를 1초에 수십억 번 표본화하고, 표본 하나를 2비트로 기록합니다. 그래서 데이터는 '파일 크기'보다 초당 몇 비트(bps)로 쏟아지는 흐름으로 생각하는 편이 쉽습니다. 관측 시간을 곱하면 쌓이는 양이 나옵니다.

\[\text{데이터 양(바이트)} = \frac{\text{기록 속도(bps)} \times \text{관측 시간(s)}}{8}, \qquad \text{전송 시간} = \frac{\text{데이터 양(비트)}}{\text{실제 전송 속도(bps)}}\]

🧮 실제 값으로 계산해 보기 — 16 Gbps로 8시간 관측한 망원경 한 대의 데이터

상황: KVN 망원경 한 대가 1초에 16 Gbit(160억 비트)씩 기록하며 하룻밤 8시간 관측했습니다. 이 데이터를 상관센터로 보내려면 얼마나 걸릴까요?

  1. 관측 시간을 초로: \(8 \times 3{,}600\ \text{s} = 28{,}800\ \text{s}\) → 8시간은 2만 8,800초라는 뜻입니다.
  2. 쌓인 데이터 양(비트를 8로 나누어 바이트로)
    \[\frac{16\times10^{9}\ \text{bit/s} \times 8 \times 3600\ \text{s}}{8} = 5.76\times10^{13}\ \text{byte} = 57.6\ \text{TB}\]
    → 1 TB 외장 하드 58개쯤을 하룻밤에 채운다는 뜻입니다.
  3. 보내는 시간 = 데이터 양(비트) ÷ 회선 속도. 57.6 TB는 \(57.6\times10^{12} \times 8 = 4.608\times10^{14}\)비트이므로 1 Gbps 회선이면 \(4.608\times10^{14} \div 10^{9} = 460{,}800\ \text{s}\), 약 128시간
    회선 속도 (실제로 다 쓴다고 할 때)57.6 TB를 보내는 시간비교
    1 Gbps약 128시간 (5.3일)관측보다 16배 오래 걸림
    10 Gbps약 12.8시간관측 시간의 1.6배
    100 Gbps약 1.3시간관측보다 빠름 — 실시간 전송도 가능
    → 회선이 기록 속도(16 Gbps)보다 느리면 관측보다 전송이 더 오래 걸린다는 뜻입니다.

📐 수학 도움말: G(기가)는 \(10^9\) = 10억, T(테라)는 \(10^{12}\) = 1조입니다. \(5.76\times10^{13}\)은 5.76에 10을 13번 곱한 57조 6천억입니다. 1바이트 = 8비트라서 비트를 바이트로 바꿀 때는 8로 나누고, 거꾸로는 8을 곱합니다.
📘 기초 수학 참고: 큰 수·작은 수와 단위 · 2진수와 비트

  • 망원경이 여러 대면 이 양이 대수만큼 늘고, 모두 한 상관센터로 모입니다. 받는 쪽 회선과 저장 장치는 보내는 쪽보다 몇 배 더 빨라야 합니다.
  • 표의 시간은 회선을 100 % 쓴다고 가정한 '가장 좋은 경우'입니다. 아래 ③에서 보듯 먼 거리에서는 보통의 방법으로는 회선 속도의 몇 %밖에 못 쓰기도 합니다.

👉 정리: 데이터 양은 '기록 속도 × 관측 시간 ÷ 8'이고, 전송 시간은 이 양을 회선 속도로 나눈 값입니다. 회선이 기록 속도보다 빨라야 관측을 따라잡을 수 있습니다.

② 데이터를 옮기는 세 가지 방법

전파망원경에서 상관센터로 데이터를 옮기는 세 가지 길 전파망원경과 기록기에서 상관센터까지 세 가지 길이 있습니다. 위쪽은 디스크 모듈을 택배나 항공으로 보내는 방법으로 며칠에서 몇 주가 걸립니다. 가운데는 관측 후 연구망으로 파일을 전송하는 방법으로 몇 시간에서 며칠이 걸립니다. 아래쪽은 실시간 e-VLBI로, 데이터를 기록하지 않고 곧바로 상관기로 흘려보냅니다. 전파망원경 + 기록기 예: 16 Gbps 상관센터 저장소 → 상관기 Ⓐ 디스크 운송 (택배·항공) 기록한 디스크 모듈을 통째로 보냄 · 며칠 ~ 몇 주 Ⓑ 관측 후 파일 전송 (e-transfer) 연구망으로 파일을 보냄 · 몇 시간 ~ 며칠 Ⓒ 실시간 e-VLBI (스트리밍) 기록 없이 곧바로 상관기로 · 거의 즉시
한 관측에서도 망원경마다 다른 길을 쓸 수 있습니다. 연구망이 잘 연결된 망원경은 Ⓑ·Ⓒ로, 남극이나 높은 산처럼 회선이 느린 곳의 망원경은 Ⓐ로 보내는 식입니다.
방법좋은 점아쉬운 점주로 쓰는 경우
Ⓐ 디스크 운송한 번에 수백 TB ~ PB를 옮김. 회선이 없어도 됨며칠 ~ 몇 주 걸림, 분실·파손 위험, 디스크를 다시 돌려받아야 함밀리미터파 초광대역 관측, 오지의 망원경
Ⓑ 관측 후 파일 전송디스크를 옮기지 않아 빠르고 안전, 잘못 받은 부분만 다시 받을 수 있음고속 연구망과 전송 기술이 필요오늘날 대부분의 VLBI 관측
Ⓒ 실시간 e-VLBI관측 중에 바로 결과 확인, 기록 장치 불필요, 급히 변하는 천체 관측에 유리관측 내내 회선이 기록 속도만큼 비어 있어야 하고, 놓친 데이터는 되찾을 수 없음빠른 대응이 필요한 관측, 장비 점검용 시험 관측

③ 회선은 빠른데 전송은 왜 느릴까? — 먼 거리와 TCP

인터넷에서 파일을 보낼 때는 보통 TCP라는 규약을 씁니다(OSI 7계층의 전송 계층, 인터넷과패킷 편 참고). TCP는 보낸 데이터를 받는 쪽이 "잘 받았다(확인 응답)"고 알려 줘야 다음 데이터를 계속 보냅니다. 그래서 확인 응답을 기다리지 않고 미리 보낼 수 있는 양(창 크기, window)과 데이터가 갔다 오는 시간(왕복 지연, RTT)이 속도를 정합니다. 한국에서 유럽까지 빛의 속도로 광섬유를 오가는 데만 0.2초 가까이 걸리므로, 거리가 멀수록 '길 위에 떠 있어야 하는 데이터'가 많아집니다.

\[\text{TCP 한 줄기의 최대 속도} \approx \frac{\text{창 크기}}{\text{RTT}}, \qquad \text{필요한 창 크기} = \text{회선 속도} \times \text{RTT}\ (\text{대역폭-지연 곱})\]

또 TCP는 패킷이 하나라도 사라지면 '길이 막혔다'고 보고 속도를 절반으로 확 줄인 뒤 천천히 다시 올립니다. 거리가 멀면 다시 올라가는 데 오래 걸리므로, 아주 적은 손실도 속도를 크게 떨어뜨립니다. 이를 어림하는 식이 있습니다(MSS: 패킷 하나에 담는 데이터 크기, \(p\): 패킷 손실률).

\[\text{TCP 한 줄기의 최대 속도} \approx \frac{\text{MSS}}{\text{RTT}} \times \frac{1.22}{\sqrt{p}}\]

🧮 실제 값으로 계산해 보기 — RTT 150 ms인 10 Gbps 국제 회선

상황: KVN 관측 데이터를 10 Gbps 국제 회선으로 미국의 상관센터에 보낸다고 해 봅시다. 데이터가 갔다가 확인 응답이 돌아오는 데(RTT) 0.15초가 걸립니다.

  1. 보통 설정의 64 KB 창이라면 \(\dfrac{65\,535 \times 8\ \text{bit}}{0.15\ \text{s}} \approx 3.5\ \text{Mbps}\) → 0.15초마다 64 KB만 보내고 확인을 기다리느라, 10 Gbps 회선을 거의 놀린다는 뜻입니다.
  2. 10 Gbps를 다 쓰는 데 필요한 창: \(10^{10} \times 0.15 \div 8 \approx 188\ \text{MB}\) → 확인이 돌아오기 전까지 188 MB가 '길 위에 떠 있어야' 회선이 꽉 찬다는 뜻입니다.
  3. 창을 충분히 키워도, 10만 개 중 1개(\(p = 10^{-5}\))가 사라지면
    \[\frac{1460 \times 8}{0.15} \times \frac{1.22}{\sqrt{10^{-5}}} \approx 77{,}900 \times 386 \approx 30\ \text{Mbps}\]
    → 아주 드문 손실에도 TCP가 속도를 절반으로 줄였다가 천천히 올리느라, 한 줄기가 30 Mbps 남짓밖에 못 낸다는 뜻입니다.
  4. 점보 프레임(MSS 8960 바이트)이면 약 6배인 \(\approx 184\ \text{Mbps}\) → 패킷 하나에 더 많이 담으면 같은 손실에서도 빨리 회복한다는 뜻입니다.

📐 수학 도움말: ms(밀리초)는 1,000분의 1초라서 150 ms = 0.15초입니다. 64 KB 창은 실제로 최대 65,535바이트(2¹⁶ − 1)이고, 1바이트 = 8비트입니다. \(10^{-5}\)은 10만분의 1(0.00001)이고, \(\sqrt{10^{-5}} \approx 0.00316\)이므로 \(1.22 \div 0.00316 \approx 386\)입니다.
📘 기초 수학 참고: 큰 수·작은 수와 단위 · 2진수와 비트

  • 10 Gbps 회선인데 보통의 TCP 하나로는 3.5 Mbps ~ 수백 Mbps밖에 못 냅니다. 회선의 0.04 % ~ 2 %입니다.
  • 같은 조건에서 국내(RTT 5 ms)라면 30배 빠릅니다.

👉 정리: 먼 거리에서 전송이 느린 원인은 회선 속도가 아니라 거리 × 손실입니다. 그래서 아래 ④의 기술로 이를 극복합니다.

④ 빠르게 보내는 기술

기술어떻게 빨라지나전파천문에서의 예
창 크기 키우기(튜닝)운영체제의 TCP 버퍼를 대역폭-지연 곱 이상으로 늘려 확인 응답을 기다리는 시간을 없앰데이터 전송 전용 서버의 기본 설정
병렬 스트림TCP 연결 여러 개(예: 8 ~ 32개)를 동시에 열어 각각의 한계를 더함. 하나가 손실로 느려져도 나머지가 계속 달림bbcp, GridFTP, 여러 파일 동시 전송
UDP 기반 전송확인을 기다리지 않고 정해진 속도로 계속 보낸 뒤, 빠진 조각만 따로 다시 요청. 손실이 있어도 속도를 절반으로 줄이지 않음Tsunami, UDT, VLBI 전용 도구(jive5ab, etransfer)
점보 프레임패킷 하나의 크기를 1,500 → 9,000 바이트로 키워 처리 횟수를 줄이고 TCP 회복을 빠르게 함연구망 구간 전체를 9,000 바이트로 맞춤(네트워크 카드, 네트워크장비 편 참고)
전용 전송 서버·연구망방화벽 병목을 피한 데이터 전송 전용 서버(DTN)를 두고, 일반 인터넷 대신 손실이 적은 고속 연구망 사용국내 KREONET 같은 연구망, 국가 간 연구망 연결(네트워크아키텍처 편 참고)
🧮 전송 속도 계산기

👉 거리(RTT), 패킷 손실, 전송 방식, 병렬 스트림 수를 바꾸며 무엇이 병목인지 찾아보세요!

실제 전송 속도회선 사용률가장 좁은 병목전송 시간항공 운송(약 3일)과 비교

TCP는 '창 크기 ÷ RTT'와 손실 어림식 중 작은 값을 한 줄기의 한계로 보고 스트림 수만큼 더했고, UDP 기반 전송은 손실된 만큼만 다시 보낸다고 가정했습니다. 실제 속도는 서버 성능, 중간 장비, 다른 사용자의 트래픽에 따라 달라지는 어림값입니다. 막대는 로그 눈금(한 칸이 10배)입니다.

⑤ 큰 파일을 틀림없이 받기 — 쪼개기, 체크섬, 이어받기

수 TB짜리 파일을 몇 시간 동안 보내다 보면 중간에 회선이 끊기거나, 드물게 비트 몇 개가 바뀌어 도착하기도 합니다. 그래서 큰 파일은 일정한 크기의 조각(chunk)으로 나누어 보냅니다. 보내는 쪽은 조각마다 체크섬(내용으로 계산한 짧은 지문, 예: MD5·SHA-256)을 함께 보내고, 받는 쪽은 받은 내용으로 다시 계산해 지문이 같은지 확인합니다. 다르면 그 조각만 다시 받고, 회선이 끊겨도 받은 조각은 그대로 두고 이어받기를 합니다. 클라우드 저장소(S3 방식 객체 저장소)의 '여러 조각 올리기(multipart upload)'도 같은 원리입니다.

👉 1 TB 파일을 '통째로' 보낼 때와 '조각 + 체크섬 + 이어받기'로 보낼 때를 비교해 보세요!

조각마다 체크섬을 확인해 틀린 조각만 다시 보내면, 오류가 있어도 전송이 끝까지 진행됩니다.

10 Gbps 회선, RTT 150 ms에서 창 크기를 튜닝한 TCP 한 줄기가 약 1.2 Gbps를 낸다고 가정한 모형입니다(조각 하나 = 10 GB). '통째로' 방식은 한 줄기로 보내며, 어느 한 부분이라도 틀리면 파일 전체를 다시 보냅니다. 시간은 실제보다 빠르게 흐릅니다.

🧮 실제 값으로 계산해 보기 — 통째로 보내면 왜 끝나지 않을까?

상황: 1 TB 관측 파일을 100조각(조각 하나 10 GB)으로 나누어 보내는데, 조각 하나가 틀려 도착할 확률이 3 %라고 해 봅시다.

  1. 조각 하나가 맞게 도착할 확률: \(1 - 0.03 = 0.97\) → 조각 100개 중 97개꼴로 제대로 도착한다는 뜻입니다.
  2. 100조각이 모두 맞게 도착할 확률: \((1 - 0.03)^{100} = 0.97^{100} \approx 0.048 = 4.8\ \%\) → 파일을 통째로 100번 보내면 5번 정도만 한 군데도 안 틀리고 도착한다는 뜻입니다.
  3. 통째로 보내면 평균 \(1 \div 0.048 \approx 21\)번 → 처음부터 다시 보내기를 21번쯤 해야 성공하니, 1 TB를 21번 보내는 셈이라는 뜻입니다.
  4. 조각으로 보내면 \(100 \times 0.03 = 3\)개 정도만 다시 보냄 → 전체의 약 3 %만 더 보내면 끝난다는 뜻입니다.
  5. 받은 뒤 체크섬 확인: 초당 500 MB를 읽으면 \(1{,}000{,}000\ \text{MB} \div 500\ \text{MB/s} = 2{,}000\ \text{s}\), 약 33분 → 확인에도 시간이 들어서, 보통 조각을 받는 동시에 계산해 둔다는 뜻입니다.
  6. 받는 쪽 저장 장치: 하드디스크 하나는 초당 약 200 MB(1.6 Gbps)를 쓰므로 \(10 \div 1.6 \approx 6.3\), 즉 7개 이상 → 10 Gbps를 받으려면 디스크 7개 이상을 묶어 동시에 써야 한다는 뜻입니다. 디스크 8개를 묶는 Mark6 모듈도 같은 이유입니다.

📐 수학 도움말: 여러 번 연속으로 성공할 확률은 한 번 성공할 확률을 그 횟수만큼 곱합니다. 동전 앞면이 2번 연속 나올 확률은 \(0.5 \times 0.5 = 0.25\)이고, 97 % 성공을 100번 연속 해내려면 0.97을 100번 곱해 \(0.97^{100}\)이 됩니다. 1 TB는 100만 MB이고, 1바이트 = 8비트라서 200 MB/s는 1.6 Gbps입니다.
📘 기초 수학 참고: 분수·비율·비례 · 2진수와 비트 · 확률과 통계

👉 정리: 큰 파일은 하나라도 틀릴 확률이 매우 높아서, 조각으로 나누어 틀린 조각만 다시 받는 방법이 훨씬 빠르고 확실합니다.

⑥ 실시간 e-VLBI: 기다리지 않고 흘려보내기

실시간 e-VLBI는 데이터를 파일로 만들지 않고 VDIF라는 VLBI 공통 형식의 작은 묶음(프레임)으로 잘라, 각 프레임에 관측 시각과 순번을 붙여 UDP로 곧바로 상관기에 보냅니다. 파일 전송과 달리 놓친 프레임을 다시 요청하지 않습니다. 망원경 데이터는 대부분 잡음처럼 보이는 신호여서, 프레임 몇 개가 빠지면 그 자리를 비워 두고 계산해도 감도가 아주 조금 떨어질 뿐 결과는 거의 같기 때문입니다. 대신 상관기는 프레임의 시각과 순번을 보고 늦게 오거나 순서가 바뀐 것을 제자리에 맞춥니다.

🧮 실제 값으로 계산해 보기 — 1초에 몇 개의 패킷이 날아갈까?

상황: KVN 망원경이 8 Gbps 데이터를 실시간 e-VLBI로 상관기에 흘려보낸다고 해 봅시다. 프레임 하나에는 데이터 8,000 바이트를 담습니다.

  1. 프레임 하나의 비트 수: \(8{,}000\ \text{byte} \times 8\ \text{bit/byte} = 64{,}000\ \text{bit}\) → 봉투 하나에 0과 1을 6만 4천 개 담는다는 뜻입니다.
  2. 1초에 보내는 프레임 수
    \[\frac{8\times10^{9}\ \text{bit/s}}{8000\ \text{byte} \times 8\ \text{bit/byte}} = 125\,000\ \text{개/초}\]
    → 1초에 봉투 12만 5천 개가 쉬지 않고 날아간다는 뜻입니다.
  3. 패킷이 1,500 바이트로 제한되면 약 5배로 늘어남 → 장비가 1초에 처리할 봉투가 수십만 개로 늘어나 부담이 커진다는 뜻입니다. 그래서 e-VLBI 회선은 점보 프레임을 씁니다.
  4. 0.1 %(1천 개 중 1개)의 프레임을 잃으면 데이터의 99.9 %가 남고, 감도는 \(\sqrt{0.999} \approx 0.9995\)배 → 신호 대 잡음비는 남은 데이터 양의 제곱근에 비례하므로, 감도가 약 0.05 %만 줄어든다는 뜻입니다.

📐 수학 도움말: G(기가)는 \(10^9\) = 10억이라서 8 Gbps는 1초에 80억 비트입니다. 1바이트 = 8비트입니다. \(\sqrt{\ }\)(제곱근)는 "두 번 곱해서 그 수가 되는 값"으로, 1보다 조금 작은 수의 제곱근은 1에 더 가까워집니다(\(\sqrt{0.999} \approx 0.9995\)).
📘 기초 수학 참고: 큰 수·작은 수와 단위 · 2진수와 비트

👉 정리: 실시간 e-VLBI는 1초에 십만 개가 넘는 패킷을 보내지만, 몇 개를 잃어도 결과는 거의 같아서 놓친 프레임을 다시 요청하지 않습니다.

⑦ 실제 도구로 보내기 — jive5ab와 m5copy 활용 예제

VLBI 관측소와 상관센터에서 가장 널리 쓰는 전송 도구는 유럽 VLBI 합동연구소(JIVE)가 만든 jive5ab과, 함께 배포되는 스크립트 m5copy입니다. jive5ab은 Mark5·Mark6 기록기, FlexBuff(일반 서버형 기록기), 보통의 리눅스 서버에서 실행되어 제어 포트(기본 2620)로 명령을 기다리고, 데이터는 따로 데이터 포트(기본 2630)로 주고받습니다. m5copy는 보내는 곳(SRC)과 받는 곳(DST)을 주소 형식으로 적으면 양쪽 jive5ab에 명령을 보내 복사를 진행시키는 '지휘자' 역할을 합니다. 그래서 m5copy를 실행하는 컴퓨터는 보내는 쪽도 받는 쪽도 아닌 제3의 제어용 컴퓨터여도 됩니다.

주소 형식가리키는 것쓰는 곳
file://호스트/경로보통 디스크의 파일 또는 디렉터리(끝에 /를 붙이면 디렉터리)SRC, DST
mk6://호스트/모듈/기록이름Mark6 디스크 모듈에 기록된 관측(jive5ab 2.6.1부터 SRC 가능)SRC, DST
vbs://호스트/기록이름FlexBuff에 여러 디스크로 흩어 기록된 관측SRC, DST
mk5://호스트/스캔Mark5 디스크 팩의 스캔(번호 범위 1-10 같은 지정 가능)SRC, DST
etd://호스트/경로받는 쪽에서 실행 중인 e-transfer 전송 서버DST만
in://, mem://기록 장치로 들어오는 실시간 데이터, jive5ab의 메모리 버퍼SRC만
옵션하는 일이 장의 원리와 연결
-udt기본 TCP 대신 UDT(UDP 기반 전송 규약)로 보냄④ UDP 기반 전송 — 먼 거리·손실에 강함
-r 속도보내는 속도를 제한(예: 2G = 초당 2기가비트). UDT에서만 효과회선을 다른 관측소와 나눠 쓸 때 몫을 정함
-m MTU패킷 크기(예: 9000). UDT와 실시간 전송에서만 사용④ 점보 프레임
-n 개수FlexBuff → FlexBuff 복사에서 조각을 병렬로 보냄④ 병렬 스트림, ⑤ 조각 전송
--resume받는 쪽 파일이 원본보다 짧으면 모자란 뒷부분만 이어 보냄⑤ 이어받기 (체크섬 확인은 따로 해야 함)
--ignore-existing받는 쪽에 이미 있는 파일은 건너뜀(있는 파일은 완전하다고 가정)여러 파일 전송을 다시 시작할 때
--allow-overwrite받는 쪽 파일을 모두 덮어씀(처음부터 다시)⑤의 '통째로 다시' — 신중히 사용
-rtin://, mem://에서 순번을 붙인 UDP로 실시간 전송⑥ 실시간 e-VLBI
먼저 서버마다 agent(jive5ab) 설치하기

m5copy는 명령만 내리는 '지휘자'라서 혼자서는 아무것도 옮기지 못합니다. 데이터를 보내는 서버와 받는 서버 양쪽에 jive5ab이 설치되어 항상 실행 중(agent)이어야 m5copy의 명령을 받아 서로 데이터를 주고받습니다. 받는 쪽은 jive5ab 대신 e-transfer 데몬(etd)을 띄워 둘 수도 있습니다.

m5copy와 jive5ab agent의 역할 제어용 컴퓨터의 m5copy가 관측소 서버와 상관센터 저장 서버에서 실행 중인 jive5ab agent에 제어 포트 2620으로 명령을 보냅니다. 실제 데이터는 두 서버의 jive5ab 사이에서 데이터 포트 2630으로 TCP 또는 UDT를 써서 직접 흐릅니다. 제어용 컴퓨터 m5copy (파이썬) — 명령만 보냄 관측소 서버 Mark6 · FlexBuff · 파일 서버 jive5ab agent 상주 상관센터 저장 서버 대용량 저장소 jive5ab agent (또는 etd) 상주 제어 명령 TCP 2620 제어 명령 TCP 2620 데이터: 포트 2630 TCP, 또는 -udt면 UDT(UDP 위)
명령(점선)과 데이터(굵은 선)는 따로 흐릅니다. 데이터는 m5copy를 거치지 않고 두 서버의 jive5ab 사이를 곧바로 오가므로, 제어용 컴퓨터는 느린 회선에 있어도 됩니다.
컴퓨터설치할 것실행 방식열어 둘 포트 (기본값)
관측소 서버
(보내는 쪽)
jive5ab항상 실행되는 agent(systemd 서비스 등)2620/TCP 제어 — 제어용 컴퓨터에서만
2630 데이터 — 상대 서버에서만(TCP, -udt면 UDP)
상관센터 저장 서버
(받는 쪽)
jive5ab, 또는 e-transfer 데몬(etd)항상 실행되는 agentjive5ab: 2620/TCP, 2630
etd: 4004/TCP 명령, 8008/UDP(UDT) 데이터
제어용 컴퓨터m5copy (파이썬 + six 모듈)전송할 때만 실행열 필요 없음(나가는 연결만)

리눅스(Debian·Ubuntu 계열) 서버를 예로 든 설치 순서입니다. 명령과 옵션은 jive5ab·e-transfer 공식 저장소의 README와 문서를 바탕으로 정리했으며, 버전·경로·사용자 이름·IP 주소는 예시입니다. Mark5처럼 StreamStor 카드가 있는 장비는 빌드 옵션이 다르므로 공식 문서를 따르세요.

예제 0-1 — jive5ab 빌드와 설치 (보내는 서버·받는 서버 모두)

# 빌드 도구와 m5copy가 쓰는 파이썬 모듈 설치
$ sudo apt install git cmake g++ make python3 python3-six netcat-openbsd

# 소스 받기 → 별도 폴더에서 cmake로 설정 → 빌드
# StreamStor 카드가 없는 일반 서버·FlexBuff·Mark6는 -DSSAPI_ROOT=nossapi 가 꼭 필요
$ git clone https://github.com/jive-vlbi/jive5ab.git
$ mkdir jive5ab-build && cd jive5ab-build
$ cmake -DSSAPI_ROOT=nossapi -DCMAKE_INSTALL_PREFIX=/opt/jive5ab ../jive5ab
$ make -j 8
$ sudo make install
# → /opt/jive5ab/bin/jive5ab-<버전>-64bit-Release 와 m5copy 등의 스크립트가 설치됨

# 버전이 붙은 이름 대신 쓰기 쉽도록 고정 이름 링크 만들기
$ sudo ln -sf /opt/jive5ab/bin/jive5ab-*-64bit-Release /opt/jive5ab/bin/jive5ab

# 시험 실행: 제어 포트 2620(기본, -p로 변경)에서 명령을 기다림. -m은 화면 메시지 수준(0~3)
$ /opt/jive5ab/bin/jive5ab -m 3

예제 0-2 — 부팅 때 자동으로 뜨는 agent로 등록 (systemd)

# /etc/systemd/system/jive5ab.service  (예시 — 데이터 폴더에 쓸 수 있는 전용 사용자 vlbi로 실행)
[Unit]
Description=jive5ab VLBI data transfer agent
After=network-online.target
Wants=network-online.target

[Service]
User=vlbi
WorkingDirectory=/data
ExecStart=/opt/jive5ab/bin/jive5ab -m 1 -p 2620
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 등록하고 바로 시작, 상태 확인
$ sudo systemctl daemon-reload
$ sudo systemctl enable --now jive5ab
$ systemctl status jive5ab

예제 0-3 — 방화벽: 필요한 상대에게만 포트 열기 (ufw 예시)

# 제어 포트는 m5copy를 실행하는 제어용 컴퓨터에서만
$ sudo ufw allow from 10.0.0.5 to any port 2620 proto tcp
# 데이터 포트는 데이터를 주고받는 상대 서버에서만 (TCP, 그리고 -udt를 쓰면 UDP도)
$ sudo ufw allow from 192.168.100.10 to any port 2630 proto tcp
$ sudo ufw allow from 192.168.100.10 to any port 2630 proto udp

예제 0-4 — (선택) 받는 쪽에 e-transfer 데몬(etd) 설치

# C++11 컴파일러가 필요. 빌드 결과 etd(데몬)와 etc(클라이언트)가 <arch>-native-opt 폴더에 생김
$ git clone https://github.com/jive-vlbi/etransfer.git
$ cd etransfer && make -j 8

# 명령 채널(TCP 4004)과 데이터 채널(UDT 8008)을 지정해 실행 — 포트는 기본값이지만 규약은 꼭 적어야 함
$ ./Linux-x86_64-native-opt/etd --command tcp://:4004 --data udt://:8008

# 보내는 쪽 jive5ab이 etd:// 로 보내려면, e-transfer 소스 위치를 알려 주고 다시 빌드
$ cmake -DSSAPI_ROOT=nossapi -DETRANSFER_ROOT=/path/to/etransfer ../jive5ab && make && sudo make install
  • m5copy의 첫 줄은 python으로 되어 있습니다. python 명령이 없는 최신 리눅스에서는 python3 /opt/jive5ab/bin/m5copy …처럼 실행하거나 python-is-python3 패키지를 설치합니다.
  • jive5ab의 제어 포트에는 비밀번호 같은 인증이 없어, 접속만 되면 누구나 전송·덮어쓰기 명령을 내릴 수 있습니다. 그래서 예제 0-3처럼 허락된 주소에서만 열어 두고, 인터넷 전체에 공개하지 않습니다(통신 보안 편 참고). etd는 v2.0부터 --acl 옵션으로 읽기·쓰기 경로를 제한할 수 있습니다.
  • Mark6·FlexBuff 디스크를 다루려면 jive5ab을 실행하는 사용자가 디스크 마운트 위치에 읽고 쓸 수 있어야 합니다. Mark6 형식을 기본으로 쓰려면 -6 또는 -f mk6 옵션을 더합니다.

아래 호스트 이름(stn-kys.example.org: 관측소 서버, corr-store.example.org: 상관센터 저장소)과 IP 주소, 경로, 파일 이름은 설명용 예시입니다. 실제 값은 각 기관의 장비 구성과 관측 코드에 맞게 바꿔야 합니다. 명령은 jive5ab 저장소에 들어 있는 m5copy의 사용법 설명을 바탕으로 정리했습니다.

예제 1 — 전송 전에 양쪽 agent가 살아 있는지 확인하기

# 각 서버에서: 예제 0-2로 등록한 agent가 실행 중인지
$ systemctl is-active jive5ab
active

# 제어용 컴퓨터에서: 양쪽 jive5ab이 제어 포트 2620으로 대답하는지
$ echo "version?;" | nc stn-kys.example.org 2620
!version? 0 : jive5ab : ... ;      # ← 버전 정보가 돌아오면 준비 완료
$ echo "version?;" | nc corr-store.example.org 2620
!version? 0 : jive5ab : ... ;
# 대답이 없으면: agent가 꺼져 있거나, 방화벽(예제 0-3)이 제어용 컴퓨터를 막고 있는 것

예제 2 — 관측 파일을 상관센터로 보내기 (기본 TCP)

# 관측소 서버에서 실행: 로컬 파일 여러 개 → 상관센터의 디렉터리(끝의 / 필수)
# 와일드카드(*)는 m5copy를 실행하는 그 컴퓨터의 파일에만 쓸 수 있음
$ m5copy file:///data/kv26a/kv26a_kys_no00*.vdif \
         file://corr-store.example.org/data/kv26a/

예제 3 — 먼 거리 고속 전송: UDT + 점보 프레임 + 속도 제한

# UDT로 보내되 회선의 몫을 초당 2기가비트로 제한하고, 9000 바이트 패킷 사용
# (회선의 모든 구간이 점보 프레임을 지원해야 -m 9000이 효과가 있음)
$ m5copy -udt -r 2G -m 9000 \
         file:///data/kv26a/kv26a_kys_no00*.vdif \
         file://corr-store.example.org/data/kv26a/

예제 4 — 끊긴 전송 이어받기와 체크섬 확인

# 똑같은 명령에 --resume만 붙여 다시 실행: 덜 받은 파일의 뒷부분만 이어서 보냄
$ m5copy -udt -r 2G -m 9000 \
         file:///data/kv26a/kv26a_kys_no00*.vdif \
         file://corr-store.example.org/data/kv26a/ --resume

# --resume은 이어 붙이기만 하고 내용 일치(MD5)는 확인하지 않으므로, 양쪽에서 지문을 비교
stn-kys$     cd /data/kv26a && sha256sum kv26a_kys_no00*.vdif > kys.sha256
corr-store$  cd /data/kv26a && sha256sum -c kys.sha256    # kys.sha256 파일을 옮겨 와서 확인
kv26a_kys_no0001.vdif: OK
kv26a_kys_no0002.vdif: OK                                   # 하나라도 FAILED면 그 파일만 다시

예제 5 — 제어망과 데이터망을 나누어 보내기

# 받는 쪽 주소를 '제어 IP::데이터 IP' 형식으로 적으면,
# 명령은 일반 제어망(10.0.0.20)으로, 데이터는 고속 연구망(192.168.100.20)으로 흐름
$ m5copy file:///data/kv26a/kv26a_kys_no00*.vdif \
         file://10.0.0.20::192.168.100.20/data/kv26a/

예제 6 — 기록 장치에서 바로 보내기 (Mark6, FlexBuff, e-transfer)

# Mark6의 1번 슬롯 모듈에 기록된 관측을 상관센터 디렉터리로 (jive5ab 2.6.1 이상)
$ m5copy mk6://stn-kys.example.org/1/kv26a_kys_no0001 \
         file://corr-store.example.org/data/kv26a/

# FlexBuff → FlexBuff: 8개 조각을 병렬로 보내는 동기화(rsync와 비슷)
$ m5copy -n 8 vbs://stn-kys.example.org/kv26a_kys_no0001 \
              vbs://corr-store.example.org/

# 받는 쪽에 e-transfer 서버(etd)가 떠 있으면: 규약·포트는 둘이 알아서 정하고,
# --resume으로 덜 받은 부분만 마저 채움
$ m5copy mk6://stn-kys.example.org/1/kv26a_kys_no0001 \
         etd://corr-store.example.org/data/kv26a/ --resume
  • "완료"라고 나와도 확인하기 — 전송 도구의 성공 메시지만 믿지 말고, 받는 쪽에서 파일 개수·크기와 체크섬을 직접 비교해야 합니다(예제 4). 권한이 없거나 경로가 틀렸는데도 오류를 놓치는 경우가 실제로 있습니다.
  • 한 번에 하나씩 바꾸기 — 속도가 안 나오면 ④의 계산기처럼 병목을 하나씩 의심합니다. TCP → -udt, 패킷 크기 -m 9000, 받는 쪽 디스크 순으로 바꿔 보며 어느 것이 효과가 있는지 확인합니다.
  • 회선 나눠 쓰기 — 여러 관측소가 한 상관센터로 동시에 보낼 때는 -r로 각자의 몫을 정해, 한 곳이 회선을 독차지해 다른 전송이 끊기지 않게 합니다.

🔗 네트워크 단원과 함께 보기

이 장의 내용은 대메뉴 「네트워크」의 각 단원과 이어집니다. 각 단원 끝에도 대용량 관측 데이터 전송과 연결된 내용을 보태 두었습니다.

네트워크 단원이 장과 이어지는 내용이 장의 위치
신호 전송 시스템안테나 → 기록기 → 상관센터 구간별 신호와 매체, e-VLBI②, ⑥
유선통신57.6 TB를 무선과 유선으로 보낼 때의 차이, 매체·장비·규약①
전기신호 전송빠를수록 짧아지는 구리선, 전선 위에 떠 있는 비트③
광통신광섬유 속 빛의 지연(한국 ↔ 유럽 왕복 약 0.2초), 파장 분할 다중화③
네트워크 카드점보 프레임으로 처리할 프레임 수 줄이기④, ⑥
유선 매체와 규격경로에서 가장 느린 구간이 전체 속도를 정함④ 계산기
네트워크장비스위치 버퍼, 경로 전체의 MTU, 방화벽 처리 한계, 디스크 속도④, ⑤
네트워크아키텍처연구망(KREONET 등), 데이터 전송 전용 서버(과학 DMZ), agent와 클라이언트④, ⑦
인터넷과패킷57.6 TB = 패킷 약 64억 개, 잃은 것만 다시 보내기③, ⑤
OSI 7계층계층별 전송 기술(L1 광섬유 ~ L7 jive5ab·UDT·VDIF)④, ⑦
통신보안인증 없는 제어 포트 보호, 받기·올리기 권한 분리, 체크섬⑦

핵심 정리

  • VLBI 데이터는 '기록 속도 × 관측 시간'만큼 쌓입니다. 16 Gbps로 8시간이면 망원경 한 대에 57.6 TB입니다.
  • 옮기는 방법은 디스크 운송, 관측 후 파일 전송(e-transfer), 실시간 e-VLBI 세 가지이며, 회선 사정과 급한 정도에 따라 함께 씁니다.
  • 먼 거리에서는 TCP가 '창 크기 ÷ RTT'와 패킷 손실에 막혀 회선 속도를 다 쓰지 못합니다. 문제는 회선 속도보다 거리 × 손실입니다.
  • 창 크기 튜닝, 병렬 스트림, UDP 기반 전송, 점보 프레임, 전용 전송 서버와 연구망으로 회선을 거의 다 쓸 수 있습니다.
  • 큰 파일은 조각으로 나누고 체크섬으로 확인해, 틀린 조각만 다시 받고 끊긴 곳부터 이어받습니다. 받는 쪽 저장 장치 속도도 병목이 될 수 있습니다.
  • 실시간 e-VLBI는 VDIF 프레임을 UDP로 흘려보내며, 잃은 프레임은 다시 받지 않고 비워 둔 채 상관처리합니다.
  • 보내는 서버와 받는 서버에는 jive5ab을 agent로 설치해 항상 실행해 두고(받는 쪽은 etd도 가능), 제어용 컴퓨터의 m5copy가 명령을 내립니다. 제어 포트는 인증이 없으므로 허락된 주소에만 엽니다.
  • 현장에서는 jive5ab(제어 포트 2620, 데이터 포트 2630)과 m5copy로 file://·mk6://·vbs://·etd:// 사이를 옮기며, -udt·-m·-r·-n·--resume으로 이 장의 원리를 그대로 적용합니다. 전송 뒤에는 체크섬으로 직접 확인합니다.

🧑‍🏫 선생님·학부모님을 위한 설명 도움말

원리 자세히 보기

  • 빛의 속도로도 지연이 생긴다 — 광섬유 속 빛은 진공보다 느린 초속 약 20만 km로 갑니다. 한국에서 유럽까지 실제 광케이블 경로가 2만 km 남짓이면 편도 약 0.1초, 왕복 약 0.2초입니다. 아무리 회선이 빨라도 이 지연은 줄일 수 없어, 전송 방식을 바꿔 극복합니다(광통신 편 참고).
  • TCP와 UDP의 차이 — TCP는 '등기 우편'처럼 받았다는 확인을 주고받으며 순서와 완전함을 보장합니다. UDP는 '일반 우편'처럼 확인 없이 보내기만 합니다. UDP 기반 고속 전송 도구는 UDP로 빠르게 보내고, 빠진 조각 목록만 따로 확인해 다시 보내는 방식으로 두 장점을 섞습니다(인터넷과 패킷, OSI 7계층 편 참고).
  • 체크섬은 '지문' — 체크섬 함수는 아무리 큰 파일도 짧은 숫자 하나로 요약하는데, 내용이 한 비트만 달라도 결과가 완전히 달라집니다. 그래서 1 TB 전체를 다시 비교하지 않고 짧은 지문만 비교해도 틀린 곳이 있는지 알 수 있습니다.
  • 왜 받는 쪽이 더 중요할까? — 상관센터에는 여러 망원경의 데이터가 동시에 몰려듭니다. 망원경 10대가 각각 10 Gbps로 보내면 받는 쪽은 100 Gbps를 받아 써야 합니다. 그래서 상관센터는 수십 ~ 수백 개의 디스크를 묶은 대용량 저장소와 빠른 회선을 갖춥니다.
  • 공개 다운로드와 업로드 권한을 나누는 이유 — 관측 자료를 연구자에게 나눠 주는 저장소는 누구나 '받기'는 할 수 있게 열어 두더라도, '올리기·지우기'는 허락된 장비와 주소에서만 하도록 막아 둡니다. 큰 자료일수록 잘못 덮어쓰거나 지우면 되돌리기 어렵기 때문입니다(통신 보안 편 참고).

대용량 전송 기술이 발전해 온 역사

시기사건의미
1967년첫 VLBI 관측망원경마다 자기 테이프에 기록하고, 테이프를 직접 들고 모아 비교했습니다. 대용량 전송의 출발은 '운송'이었습니다.
1988년TCP 혼잡 제어인터넷이 붐벼 마비되는 일을 막으려고, 손실이 생기면 속도를 줄이는 TCP 혼잡 제어가 도입되었습니다. 오늘날 먼 거리 전송이 느려지는 원인이기도 합니다.
1992년TCP 창 크기 확장원래 최대 64 KB이던 TCP 창을 1 GB까지 늘리는 규약이 정해져, 먼 거리 고속 회선을 쓸 길이 열렸습니다.
2000년대 초병렬·UDP 기반 전송 도구GridFTP, bbcp, Tsunami, UDT처럼 과학 데이터를 위한 고속 전송 도구가 나와, 전파천문을 포함한 여러 분야에서 쓰이기 시작했습니다.
2004년e-VLBI 실시간 관측유럽 VLBI 관측망이 연구망으로 망원경을 연결해 실시간 상관처리를 하는 과학 관측을 해냈습니다.
2009년VDIF 표준나라와 장비마다 달랐던 VLBI 데이터 형식을 하나로 맞춘 공통 형식이 정해져, 네트워크로 데이터를 주고받기가 쉬워졌습니다.
2010년대100 Gbps 연구망과 전용 전송 서버대륙 사이 연구망이 100 Gbps로 빨라지고, 방화벽 병목을 피한 데이터 전송 전용 구간(과학 DMZ) 개념이 퍼졌습니다.
2017 ~ 2019년EHT 데이터 모으기사건의 지평선 망원경은 수 PB의 데이터를 디스크로 운송했고, 남극 망원경의 디스크는 겨울이 끝나 비행기가 뜰 수 있을 때까지 기다려야 했습니다. 지금도 운송과 전송을 함께 씁니다.

비유로 설명하기

  • TCP의 창 크기는 컨베이어 벨트 위에 동시에 올려 둘 수 있는 상자 수입니다. 벨트가 길면(먼 거리) 상자를 많이 올려 둬야 끊김 없이 흐릅니다.
  • 병렬 스트림은 계산대를 여러 개 여는 것입니다. 한 줄이 막혀도 다른 줄은 계속 줄어듭니다.
  • 조각 + 체크섬은 퍼즐을 상자 여러 개에 나눠 보내고 상자마다 조각 수를 적어 두는 것입니다. 한 상자가 망가지면 그 상자만 다시 받으면 됩니다.
  • 디스크 운송은 "테이프를 실은 트럭의 대역폭을 얕보지 말라"는 말과 같습니다. 1 PB를 담은 상자를 비행기로 하루 만에 보내면, 약 93 Gbps 회선과 맞먹습니다.

자주 하는 오해

  • "10 Gbps 회선이면 10 Gbps로 보낼 수 있다" — 먼 거리에서는 TCP 설정, 패킷 손실, 저장 장치 때문에 몇 %밖에 못 쓰기도 합니다.
  • "UDP는 데이터를 잃어버리니 과학 데이터에 못 쓴다" — 파일 전송 도구는 UDP로 보내되 빠진 조각을 다시 받아 완전하게 만들고, 실시간 e-VLBI는 아주 적은 손실을 처음부터 감수하도록 설계되어 있습니다.
  • "전송이 끝났다고 나오면 다 받은 것이다" — 도구가 오류를 성공으로 잘못 알리는 경우도 있습니다. 받은 쪽에서 파일 목록·크기·체크섬을 직접 확인하는 습관이 중요합니다.
  • "인터넷이 발달했으니 이제 디스크 운송은 필요 없다" — 회선이 닿지 않거나 느린 오지의 망원경, PB 단위 관측에는 지금도 운송이 더 빠르고 확실할 때가 있습니다.

함께 해 볼 질문·활동

  • 집 인터넷 속도 측정 사이트에서 '지연 시간(ping)'과 속도를 재고, 가까운 서버와 먼 나라 서버를 골라 비교하기. ③의 '창 크기 ÷ RTT'로 차이를 설명해 보기
  • ④의 계산기에서 '한국 ↔ 유럽, 10만 개 중 1개 손실'로 놓고, 스트림 수·점보 프레임·UDP 중 무엇이 가장 효과가 큰지 순서 매기기
  • ⑤의 시뮬레이션을 '통째로'와 '조각'으로 각각 돌려 걸린 시간과 다시 보낸 양을 표로 정리하기
  • 컴퓨터에서 같은 파일 두 개의 체크섬(예: SHA-256)을 구한 뒤, 한 파일의 글자 하나만 바꾸고 다시 구해 결과가 얼마나 달라지는지 확인하기
  • "1 PB를 비행기로 하루에 보내면 몇 Gbps와 같을까?"를 직접 계산하기(약 93 Gbps)

본 교육자료는 Anthropic(Claude) 및 OpenAI(ChatGPT)를 활용하여 제작하였으며, 제작자가 내용을 검토·편집하였습니다. 주요 참고자료와 출처는 각 페이지의 「참고 자료 및 출처」에 명시하였습니다. 출처가 별도로 표기되지 않은 페이지와 참고자료에 포함되지 않은 내용은 제작자가 직접 작성하거나 정리한 것입니다. 내용에 오류가 있거나 수정이 필요한 사항을 발견하시면 kvnsite@kasi.re.kr로 알려 주시기 바랍니다.