[도서] 읽자마자 IT 전문가가 되는 네트워크 교과서

4장. 인터넷의 정보는 어떻게 움직일까?

bread-gee 2024. 11. 19. 15:09

📍 지금까지의 요약
- 데이터는 인터넷상에서 패킷의 형태로 이동한다.
- 패킷 헤더에는 발신지 및 목적지 주소 정보가 담겨있다.
- 라우터는 패킷을 전달하는 역할을 한다.

이 장에서는 
경계 경로 프로토콜(BGP, Border Gateway Protocol)과 
인터넷 익스체인지 포인트(IXP, Internet Exchange Points)를 활용해 피킷을 어느 경로로 보낼지 결정하는 과정과
전송 프로토콜이 어떻게 인터넷상의 노드 간 연결을 구축하고 데이터를 패킷으로 분할하는지 알아보자

 

 

 

📌 인터넷 지도

🧿 자율 시스템(AS, Autonomous System)
- 인터넷 상에서 하나의 관리 주체(주로 ISP나 대형 기업)가 통제하는 네트워크의 집합
- ISP, 통신사, 학교 등에 속해 있는 수만 개의 작은 네트워크
- AS가 모여 전 세계를 연결하는 인터넷을 구성한다.
- 각 AS는 독립적ㆍ자율적으로 관리된다.

인터넷이 전 세계를 나타내는 지도라면 AS는 그 지도의 마을, 도시, 국가에 해당한다.
한 도시에서 도시로 갈 때 도로를 이용하듯 AS도 경로로 연결되어 있다.
실제 도로처럼 어떤 경로는 규모가 커서 빠르게 이동할 수 있고, 어떤 경로는 비용을 지불해야 사용할 수 있다.

 

🧿 경계 경로 프로토콜(BGP, Border Gateway Protocol)
- 인터넷의 "길 안내 시스템"
- AS 간의 연결을 가능하게 만드는 인터넷 라우팅 표준
- IP 패킷 라우팅 정보가 인터넷을 통해 AS 사이에서 교환되는 방식을 정의하는 대규모 프로토콜(AS간의 연결을 가능하게 만든다.)
- 데이터가 가장 효율적이고 빠른 길로 이동할 수 있도록 경로를 계산해주는 역할
(이 경로는 여러 네트워크 그룹(AS, 자율 시스템) 사이에서 정해지는데, 각 네트워크 그룹은 자신만의 관리 영역과 정책이 있다.)

- 한 지점에서 다음 지점으로 패킷을 목적지까지 전달할 때 가장 짧고 저렴한 비용의 경로를 계산할 수 있다.
- BGP를 사용하면 AS는 각자의 인터넷 구역을 관리학, 각자의 방식으로 다른 네트워크까지의 경로와 거리를 참조할 수 있다.
- 인터넷을 통해 갈 수 있는 가능한 모든 경로가 그려진 완전한 지도를 보유한 BGP 서버는 거의 없다.

 

◾ BGP 라우터
- AS는 라우터를 통해 서로 연결된 수많은 컴퓨터로 구성되는데, 이 중 전체 AS의 출입구 역할을 하는 라우터
- 각 AS는 자신의 BGP 라우터를 통해 다른 AS와 경로 정보를 교환하고 통신하는데 이걸 세션(session)이라고 부른다.

- 세션이 시작되면 BGP는 이웃한 네트워크끼리 각자 가지고 있는 경로 정보를 교환한다.
- 서로의 경로 정보를 교환하며 BGP는 가장 짧고 효율적인 경로를 찾으려 한다.
- 이때, BGP는 다른 네트워크가 제공한 정보보다는 자기 자신이 만든 경로를 더 선호하는데, 이웃 네트워크를 거칠수록 경로가 길어지기 때문이다.

하지만, BGP가 이렇게 똑똑하고 유용한 프로토콜임에도 불구하고, 다른 네트워크와 밀접하게 연결되어 있어 문제가 발생하기도 한다.
예를 들어, 잘못된 경로 정보가 퍼지거나 경로 정보를 잘못 전달할 경우 전체 인터넷에 교착 상태나 정체가 발생할 수 있다.
이로 인해 심각한 경우에는 국가 단위의 대규모 인터넷 장애가 일어나기도 한다.

 

◾ 대등 접속(peering)
- 두 AS가 직접 데이터를 주고받는 것
- 규모가 큰 AS끼리 네트워크 연결이 되어있어 직접 데이터를 교환할 때 무료로 교환했었다.
하지만 요즘엔 직접 교환하더라도 비용을 지불하는 추세다.
중간 AS 거치면서 지불하는 비용보다 직접 교환하는 비용이 더 저렴하기 때문이다.
=> 중간 경유 비용보다 직접 교환 비용이 더 저렴하다.

 

◾ 중계(transit)
- 인터넷을 통해 데이터를 주고받을 때, 패킷은 다양한 네트워크를 거쳐서 목적지에 도찬한다.
- 규모가 큰 AS일수록 데이터를 더 효율적으로 전달할 수 있다. 
- 규모가 작은 AS에서 규모가 큰 AS 네트워크로 데이터를 보낼 때, 비용이 드는데, 이 비용을 중계 비용이라고 한다.

- BGP가 효율적인 경로를 찾을 때, 단순히 '가장 가까운 거리'만을 선택하는 것이 아니라 중계 비용도 고려한다.
예를 들어, 규모가 큰 AS는 중계 비용을 아끼기 위해 약간 멀더라도 무료 경로를 선택할 수 있다.
- 동적인 방식으로 패킷의 라우팅 경로를 최적화하는 BGP 말고도, 정적으로 라우팅을 구성할 수 있다.

 

🧿 인터넷 익스체인지 포인트(IXP, Internet eXchange Point)
- 수십~수백 새에 달하는 AS의 물리적 연결점을 말한다.
- 여러 인터넷 서비스 제공자(ISP)나 네트워크들이 물리적으로 연결되어 데이터를 교환하는 장소
물리적 연결 : 이더넷이나 광케이블, 데이터 센터 내 스위치나 라우터 등 다른 네트워크 장비를 통해 이어져 있다는 뜻

데이터 센터의 AS가 케이블로 연결되면 AS는 인터넷에 새로운 경로를 생성한다.
대등 접속과 중계 접속 계약은 구성원이 자동으로 대등해지는 IXP에서 AS 간의 관계에 필수적인 요소이다.
따라서 IXP 연결은 다양한 네트워크나 AS에 걸쳐 리소스(resource, 자원)에 도달하기 위한 더 빠른 경로를 만들 수 있다.
이 덕분에 최종 사용자가 리소스에 신속하게 접근할 수 있다.

* 한국의 IXP
- KT-IX
- SKB-IX
- DACOM-IX
- KINX
- 한국전산원(KIX, 비영리)
- 한국인터넷진흥원(비영리)
- 세종텔레콤 neutral IX

 

 

 

📌 전송 프로토콜

  • TCP(Transmission Control Protocol, 전송 제어 프로토콜)
    패킷을 정확하고 완전한 형태로 전송하지만, 다른 프로토콜에 비해 보내는 속도가 느리다.
  • UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)
    정확한 패킷 전달이나 전송 순서보다 속도를 우선시하는 프로토콜
  • QUIC(Quick UDP Internet Connections, 빠른 UDP 인터넷 연결)
    여러 개의 빠른 UDP 연결을 활용하지만, TCP처럼 정확하고 신뢰할 수 있는 방식으로 데이터를 전송한다.

🧿 사용자 데이터그램 프로토콜(UDP, User Datagram Protocol)

- 인터넷의 가장 기본적인 프로토콜
- 신뢰성이나 정확성보다는 속도를 우선시한다.
- 데이터를 어떤 프로그램이 처리할지 결정한다.

더보기

📍 IP와 UDP

* IP
- IP는 IP 주소와 IP 패킷의 형식을 규정하는데 쓰인다.
- 패킷을 어떻게 구성할 것인지, 패킷을 목적지까지 보낼 주소를 어떻게 지정할 것인지 표준화하는 프로토콜
=> 데이터를 어디로 보낼지 결정하는 역할

* UDP
- 인터넷의 가장 기본적인 프로토콜
- 신뢰성이나 정확성보다는 속도를 우선시한다.
- 데이터를 어떤 프로그램이 처리할지 결정한다.

◾ UDP 전송 과정
데이터가 분할되면, UDP는 분할된 작은 데이터 조각인 데이터그램을 개별적으로 IP 패킷으로 보낸다.
이때 UDP 소스-대상 주소 체계가 사용된다.

UDP 소스-대상 주소 체계



◾ 포트 번호(port number)
UDP는 포트 번호를 포함한 헤더를 각 데이터그램에 추가한다.
헤더에는 소스 애플리케이션의 포트 번호와 대상 호스트에 있는 소프트웨어 또는 서비스의 포트 번호가 적혀 있다.
ex) DNS 검색처럼 잘 알려진 인터넷 서비스는 포트 53을 포트번호로 사용한다.

❗ UDP는 패킷이 목적지에 도착했는지, 올바른 순서로 도착했는지, 중간에 분실되었는지 신경쓰지 않는다.
신뢰성보다 속도를 우선시하기 때문이다.
∴ UDP를 사용하는 애플리케이션은 자체적으로 이런 오류들을 수정해야 한다.

◾ UDP 활용
UDP는 영상 통화, 동영상 스트리밍, 온라인 게임, 인터넷 전화(VoIP, Voice over IP) 애플리케이션처럼 빠르게 데이터를 전달하는 것이 중요하고, 지연된 패킷을 기다리거나 오류를 수정할 필요가 없는 경우에 많이 활용한다.
ex) 동영상 스트리밍할 때 데이터그램 몇 개가 누락되더라도 보는 데 지장 없음.

더보기

📍 데이터그램

📍 포트번호

 

* 데이터그램(datagram)

패킷 교환 네트워크와 관련된 기본 전송 단위(작은 단위의 데이터)
큰 데이터가 네트워크를 통해 전송될 때, 한 번에 보내기 힘들거나 네트워크에서 잘리거나 오류가 발생할 수 있다.
그래서 큰 데이터를 작은 조각으로 나누어 보낸다.


* 포트 번호(port number)

특정한 소프트웨어나 서비스와 연결된 번호

 

 

 

🧿 전송 제어 프로토콜(TCP, Transmission Control Protocol)
- 느리더라도 모든 데이터를 올바른 순서로 재구성한다.
- 패킷이 완전한 형태를 유지하며 정확한 순서대로 목적지에 도달한다.
- 월드 와이드 웹(www), 이메일, 개인 간 통신(P2P, Peer-to-Peer) 등의 애플리케이션에서 쓰인다.
- TCP는 오류를 수정할 수 있고, 패킷이 도착하면 순서를 정렬하고 검사하는 기능을 수행하기도 한다.

👉🏻 두 애플리케이션이 인터넷으로 TCP를 통해 서로 패킷을 보내려 한다면, TCP는 양방향으로 데이터를 보낼 수 있도록 둘의 노드에 통신 채널을 구축한다.
이 통신 채널을 파이프(pipe) 또는 스트림(stream)이라고 부른다.

◾ TCP 전송 과정
TCP는 각 노드에서 애플리케이션이 보내려는 데이터를 더 작은 세그먼트(segment)로 만들고,
전송 과정을 추적할 수 있도록 세그먼트에 번호를 매긴다.

애플리케이션이 데이터를 분할하면 TCP는 모든 세그먼트를 개별적으로 IP 소프트웨어에 전송한다.
그러면 각 세그먼트가 패킷으로 압축된다.

TCP는 패킷을 받는 애플리케이션이 수신한 세그먼트를 다시 전달받는다.
그리고 세그먼트에 매긴 번호를 일일이 확인하면서 패킷이 제대로 전송되었는 확인한다.

더보기

📍 요약


애플리케이션이 전송하려는 데이터를 세그먼트로 분할하고, 각 세그먼트에 번호를 매긴다.
TCP는 모든 세그먼트를 개별적으로 IP 소프트웨어에 전송한다. 그러면 각 세그먼트가 패킷으로 압축된다.
전송된 세그먼트는 다시 올바른 순서대로 재조합되며, 신뢰성 있는 데이터 전송을 보장한다.

TCP 전송 과정

 

◾ 핸드셰이크(handshake)
TCP를 사용하는 애플리케이션은 핸드셰이크라는 작업을 3가지 방식으로 수행해서 패킷을 전달한다.

전송을 시작할 때 애플리케이션은 우선 SYN-SYN/ACK-ACK라는 TCP를 통해 특별 패킷을 보낸다.
그 뒤에 진짜 내용이 담긴 패킷을 보낸다.

* SYN(synchronized, 동기화)
* ACK(acknwledge, 인식하다)

만약 패킷을 수신하는 애플리케이션이 발송된 패킷 하나를 인지하지 못하거나 패킷이 훼손되었다고 보고하면,
발신자쪽의 TCP에서 이를 확인하고 해당 패킷을 다시 전송한다.

애플리케이션이 한 패킷이라도 보내거나 받는 데 문제가 생기면 TCP는 이 문제가 해결될 때까지
파이프 안에 있는 다른 전송 패킷을 모두 대기시킨다.

발신 애플리케이션이 네트워크로 모든 패킷을 전달하면,
수신 애플이케이션은 이를 하나씩 풀어서 원래 순서대로 나열하고 수신한 모두를 재정렬한다.
그러고 나면 FIN-FIN/ACK-ACK라는 명령과 함께 마찬가지로 특별 패킷을 보낸다.
이 과정까지 끝나야 비로소 전송이 완료된 상태
* FIN(finalized, 마무리)

◾ 핸드셰이크 과정
1. SYN
클라이언트가 서버에 연결 요청 패킷(SYN)을 보냄.
👉 "연결 요청"

2. SYN + ACK
서버가 클라이언트의 요청을 받아들였음을 확인(SYN)하고, 클라이언트가 준비 상태인지 확인(ACK).
👉 "요청 확인 및 준비 완료"

3. ACK
클라이언트가 서버로부터의 준비 상태 확인(ACK)을 수신하고, 연결 설정 완료.
👉 "연결 설정 완료"

🚗🚓🚕 데이터 전송 ✈🚁🚀

4. FIN
데이터를 모두 전송한 쪽에서 연결 종료 요청(FIN)을 보냄.
👉 "전송 완료 및 연결 종료 요청"

5. ACK
FIN 요청을 받은 쪽에서 이를 확인(ACK).
👉 "요청 확인"

6. FIN
상대방도 데이터를 모두 전송한 후 연결 종료 요청(FIN)을 보냄.
👉 "연결 종료 요청"

7. ACK
마지막으로 이를 확인(ACK)하고 연결 종료.
👉 "연결 종료 완료"

❗ TCP는 높은 무결성과 신뢰성을 제공하지만, 그만큼 속도가 느리다는 결정적인 단점이 있다.
TCP에서는 애플리케이션에서 데이터 발신 및 수신이 필요할때마다 세 가지 핸드셰이크를 꼭 수행해야 되기 때문!
만약 TCP연결이 암호화되어 있다면 이보다 더 많은 핸드셰이크 과정을 거쳐야 한다.

 

 


❓ UDP의 속도와 TCP의 신뢰성, 무결성을 모두 갖춘 프로토콜이 있다면 인터넷 데이터 전송의 속도가 빨라지고 안전해지겠지?
그래서 나온 것이 빠른 UDP 인터넷 연결(QUIC)이다.


🧿 빠른 UDP 인터넷 연결(QUIC, Quick UDP Internet Connections)
- UDP와 TCP의 장점만 취합
- QUIC는 기본적으로 UDP 전송 프로토콜을 사용해서 패킷을 보낸다.

QUIC 전송 과정



다른 점은 UDP가 데이터그램을 보내서 이를 IP 패킷으로 만드는 방식이었다면, QUIC는 자신만의 고유한 방식으로 데이터그램을 준비한다.

- QUIC는 TCP처럼 순서대로 패킷을 전달하는 방식을 채택했다.
QUIC 데이터그램에서는 수신자쪽에서 활용할 수 있는 QUIC 프로토콜 정보가 포함되어 있어 수신된 데이터그램을 추적하고 순서를 맞출 수 있게 된다.
- QUIC 데이터그램에는 TCP 파이프의 신뢰성을 확보하기 위해 연결 ID(connection ID)라는 요소가 포함되어 있다.
연결 ID는 IP 주소가 바뀌더라도 발신자나 수신자가 서로 알아보고 연결을 유지해 주는 역할을 한다.
- QUIC에서 패킷은 기본적으로 암호화되어 있다.
중간에 거치는 중개 노드가 패킷에 접근하거나 콘텐츠를 변조하지 못하도록 막는다.
- QUIC는 데이터 처리를 할 때 TCP처럼 단일 스트림에 의존하지 않는다.
한 세크먼트에 오류가 생겼을 때 그것이 해결될 때까지 다음 세그먼트들을 계속 대기시킬 필요가 없다는 뜻이다.
- QUIC는 오류가 발생하면 해당 오류가 수정될 때까지 기다리지 않고 나머지 데이터를 처리할 수 있다.

 

 


출처
읽자마자 IT 전문가가 되는 네트워크 교과서