Protocol

  • 통신을 할 때 지켜야 하는 잘 정리된 규칙
    • 사용자에게 꼭 지켜야 한다는 의무를 지우는 느낌
  • Protocol 3요소
    • Syntax (구문): 문법, 정보가 어디에 위치해야 하는지 정의.
    • Semantics (의미): 정보가 어떤 식으로 해석되는지 정의.
    • Timing (순서): 어떤 순서로 메시지들이 교환되는지 정의.
  • Network Protocol의 필요성
    • 네트워크상에서 데이터를 주고받을 때 사용되는 기술이 너무 복잡하고 많다. 예를 들면 통신 환경에 영향을 받아 데이터가 손상되는 경우 에러를 검출하거나 재전송하는 등의 절차가 필요하거나, 어느 한쪽 장비의 성능이 낮아 한 번에 보내는 데이터의 양을 조절하는 등 여러 상황을 잘 처리해야 하므로 양쪽이 지켜야 할 잘 정리된 규칙이 반드시 필요하다.

Internet은 국제 표준이 아니다

  • De facto 표준 (사실상의 표준): 공식 표준은 아니지만 시장에서 널리 사용되어 사실상 표준처럼 쓰이는 기술.
    • IETF (Internet Engineering Task Force): 인터넷 프로토콜을 개발하고 표준을 정하는 실무 그룹.
    • RFC (Request for Comments): IETF에서 발행하는 인터넷 기술 관련 주요 문서.

Cerf and Kahn’s Internetworking Principles

  • Minimalism, Autonomy: 네트워크를 서로 연결하기 위해 내부적인 변경이 필요 없어야 한다.
  • Best-effort service model: 통신을 항상 보장하지는 않지만, 최대한 노력해서 데이터를 전송한다.
  • Stateless routing: 중간 라우터들은 과거 패킷의 상태를 기억하지 않는다.
  • Decentralized control: 중앙 집중적인 제어 기관 없이 네트워크가 동작한다.

Protocol Layering 하는 이유

  • 네트워크에서 다루는 기능들이 복잡해서 이를 이해하기 쉽게 각 계층에서의 관심사를 정해 기능을 계층별로 나누어 다룬다.
  • 통신 기능이 순서대로 처리되는 경우가 많아서 윗 계층과 아래 계층만 신경 쓰면 되는 layer model이 적합하다.
  • 아래 계층이 어떤 식으로 구현됐는지 관심이 없고 데이터만 전달되면 된다.

Protocol Layering 장점 단점

  • 장점: Layering을 함으로써 각각의 layer가 가진 기능을 독립적으로 유지, 관리하기 쉽다. 새로운 기능이나 사용자의 요구로 인해 기능의 확장 및 변경이 일어날 때 인접한 다른 layer만 신경 쓰면 된다.
  • 단점: 데이터가 수신자에게 도착하기 위해 계층 간의 상호작용이 필요하기 때문에 과도한 overhead와 지연 시간이 증가하게 된다.

End to End Argument

  • 인터넷의 기능은 네트워크 안에 있는 모든 전송 장치(라우터 등)들이 보유하기보다는 네트워크의 단말기(End device)가 보유하고 있어야 한다는 원칙.
  • 중간 장비가 그런 기능을 갖는다면 CPU가 그것을 처리하기 위한 overhead가 생긴다.

Protocol Encapsulation

  • 상위 layer는 바로 아래 layer의 서비스를 기반으로 만들어진다.
  • 바로 아래 layer에 데이터를 보낼 때, 기존 데이터 패킷에 헤더(Header) 를 추가한다.
  • 수신 측의 상위 layer에서는 아래 layer의 헤더를 제거하고 데이터를 읽는다.

OSI 7 layer

Protocol Data Unit (PDU)

Apocalypse of the two elephants (OSI 7 계층의 실패 원인)

  • OSI 7 계층의 표준 구현에 시간이 오래 걸리다 보니, 기업들이 먼저 자체 기술을 만들어 상용화했다. 나중에 표준이 완성된 후 기업에게 이것을 쓰라고 강요하면, 이미 사용 중인 기술을 교체하는 데 비용이 막대하게 들고, 국가에서 표준을 의무적으로 쓰라고 한 것도 아니기 때문에 OSI 7 layer가 널리 채택되지 못했다.

Hourglass Model (TCP/IP 모델)

  • 많은 상위 계층 프로토콜들이 TCP/IP(혹은 UDP/IP)의 서비스를 공유한다. 이 때문에 TCP/IP의 문제점을 수정할 필요가 있을 때 영향받는 프로토콜들이 많아 수정하기 어렵다.
  • 하지만 이는 의도된 것으로, 상위 계층 프로토콜은 IP에만 연결되면 다른 하위 계층은 신경 쓰지 않아도 되게끔 설계한 것이다.

Hop-by-hop and End-to-end

  • 인터넷에서 Hop은 일반적으로 라우터에 의한 Store-and-forward 동작을 의미한다.

Physical Addressing

  • 주소들은 특정한 Link layer에서 통용되는 주소를 사용한다 (IP 주소 아님).

Network Design Requirements

  • Cost-effective (비용 효율성)
  • Scalable (확장성)
    • 규모가 커질 것을 상정하고 설계 (scalability).
    • Full connectivity는 scalable 하지 않음 (노드가 늘어날 때마다 모든 노드에 케이블을 연결해야 함).
    • Shared medium은 scalable 하지만, 한 노드가 매체를 사용하는 동안 다른 노드들은 사용이 제한되므로 성능이 떨어짐.
    • 따라서 SwitchingInterconnection으로 해결.
      • Switching: 두 노드가 임시로 연결되게 해주는 기술 (Circuit switch and Packet switch).
      • Interconnection: 여러 network들이 서로 연결되어 internetwork를 이루는 것.
  • Support for common services (공통 서비스 지원)
  • Manageability (관리 용이성)
    • 바꾸지 않는 것이 관리하기 편하다.
    • 최근에는 클라우드 컴퓨팅에서 필요할 때 자원을 줄이거나 늘릴 수 있어야 하므로, 이때 네트워크 설정도 필요할 때마다 적절하게 수정할 필요가 있다.
  • Connectivity (연결성)
    • 임의의 두 사람이 원할 때 언제나 연결할 수 있어야 한다.

Store and Forward

  • 패킷을 buffer(나가는 방향)에 저장하고 전송한다.
  • Block size에 상한선(upper bound)을 두어서 아무리 긴 message라도 패킷을 나누어(split) 짧은 패킷으로 전송한다. 이를 통해 특정 호스트가 자원을 독점하는 것을 막을 수 있다.
  • 라우터에서 패킷 스위칭을 하는 기법이다.

Circuit switching

  • Circuit switching은 노드마다 전용선이 있어서 performance를 보장할 수 있다.
  • 연결 전에 연결 설정(set up) 과정이 필요하다.

Packet Switching

  • Packet switching은 라우터에서 어느 노드로 가야 할지 선택하는 계산(processing) 이 필요하다.
  • 패킷 경로를 계산하는 동안 패킷이 쌓일 수 있으므로 저장 공간(buffer) 도 필요하다.
  • 연결된 노드들이 케이블을 공유하므로 interconnect 하기 위해 케이블은 하나만 필요하다.
  • Scalable한 connectivity에는 packet switching이 좀 더 적합하다.
  • 하지만 데이터를 쪼개서 패킷으로 전송하기 때문에 손상될 수도 있고, 순서대로 도착하지 않을 수 있고, 중복될 수도 있고, 버려질 수도 있다.

Multiplexing

  • 시간 혹은 주파수를 나누어 다중화(mux)할 수 있다 (TDM, FDM).
  • 어떤 사용자가 통신을 하지 않을 때 Mux channel이 유휴(idle) 상태가 되어 자원이 낭비된다.
    • 각 노드별로 buffer를 두어 패킷이 많거나 많이 사용되는 것을 더 자주 선택하여 전송하는 Statistical Multiplexing으로 on-demand 하게 처리할 수 있다.

Performance Metric

  • Traffic intensity: La/R (L: 패킷 길이, a: 평균 도착률, R: 전송률)

  • RTT (Round-trip time)

    • 네트워크 요청이 출발점에서 목적지까지 갔다가 다시 출발점으로 돌아오는 데 걸리는 시간.
    • 1byte를 보내서 1byte를 받을 때까지 걸리는 시간.
    • Processing delay를 배제하고 측정하기 어렵다.
  • BDP (Bandwidth-Delay Product)

    • Bandwidth * Delay.
    • 네트워크 파이프(pipe) 안에 최대로 존재할 수 있는 데이터의 크기.
  • Jitter

    • 패킷 간 지연 시간(delay)의 변동성 또는 분산.

Ethernet

  • RFC-894 형식을 주로 사용한다.
  • 802.3 형식의 data link layer 주소 형식은 거의 쓰이지 않는다.

Wireless LAN

  • Basic Service Set (BSS) contains:

    • Wireless stations (단말기들)
    • Access Point (AP)
  • Association in 802.11: AP가 Beacon frame(SSID + MAC address)을 주변에 전파하여 단말기들이 연결할 수 있게 한다.

  • CSMA/CA (Collision Avoidance)

    • 충돌은 전파 지연(propagation delay) 때문에 발생하는데, 802.11은 Local area에서 통신하므로 RTS, CTS를 수신하면 충돌이 일어나지 않는 시간을 어느 정도 예측 가능하다.
    • **Ready To Send(RTS), Clear To Send(CTS)**를 패킷 전송 전후에 보내는데, 주변 기기들이 이 신호를 들을 수 있기 때문에 충돌을 피하기 위해 정해진 시간 동안 기다릴 수 있다.

Network Devices

  • Repeater: Filtering 없이 신호를 증폭. 전기로 신호를 증폭하므로 노이즈(garbage)도 함께 증폭된다.
  • Bridge: Filtering 기능이 있는 허브. MAC 주소를 학습하여 패킷을 전달한다.
  • Router: 서로 다른 네트워크를 연결. 각 인터페이스마다 별도의 IP와 MAC 주소가 존재한다.

TCP

  • Reliable, in-order delivery

  • Congestion control (혼잡 제어)

  • Flow control (흐름 제어)

  • Connection setup (연결 설정)

  • 인터넷 계층의 프로토콜은 delay나 bandwidth를 보장하지 못한다.

  • Transport layer의 host는 mux, demux 수행

    • 여러 소켓으로부터 온 데이터를 Transport layer 헤더를 추가해서 다중화(mux).
    • 수신 측에서는 헤더 정보를 읽어서 세그먼트를 올바른 소켓으로 전달(demux).
  • Connection-oriented Mux/Demux

    • Connection이란 두 종단이 통신을 유지하기 위해 필요한 상태 정보(4-tuple)이다.
      • Source Address, Source Port, Destination Address, Destination Port
    • TCP 전송 시 4-tuple을 모두 기재해서 보내면, 수신자는 TCP 세그먼트를 적절한 소켓에 전달할 수 있다.

TCP 구성 요소

  • Connection-oriented: 3-way handshake를 통해 연결을 기준으로 모든 통신이 이루어진다.
  • Reliable: Checksum을 헤더에 기재하여 데이터가 변조되면 checksum 값이 깨지므로, 확률적으로 패킷의 무결성을 보장한다.
  • Byte stream: Application에서 보낸 데이터의 경계를 구분하지 않고, 연속된 바이트의 흐름으로 데이터를 처리한다. 양방향 통신(Full-duplex)이 가능하다.

TCP (추가 특징)

  • Point-to-point: 단일 송신자와 단일 수신자 간의 통신.
  • Full-duplex: 데이터가 양방향으로 동시에 전송 가능.
  • Cumulative ACK: 수신한 데이터의 마지막 순서 번호까지를 한 번에 확인 응답.
  • Pipelining: 확인 응답(ACK)을 기다리지 않고 여러 세그먼트를 연속해서 전송.
    • Congestion and flow control set window size.
  • Connection-oriented를 위해서 Handshake를 한다.
  • Flow-controlled (흐름 제어).

Cumulative ACK를 사용하는 이유 (Selective ACK 대신)

  • Cumulative ACK은 한 번에 여러 패킷을 보냈더라도 문제가 된 마지막 패킷의 ACK 하나만 기억하면 된다.
  • 반면 Selective ACK은 여러 패킷에 대해서 각각 ACK을 받았는지를 모두 기억해야 한다.
  • 다시 말해, Cumulative ACK은 기억할 정보가 적고 구현이 간단한 반면, Selective ACK은 기억할 정보가 많고 구현이 복잡하다. 이는 효율성과 복잡성에 대한 전형적인 트레이드오프(trade-off) 예라고 할 수 있다.

TCP 옵션들

  • Kind라고 불리는 1바이트 공간에 옵션 종류를 저장.
  • MSS (Max Segment Size)
    • 모든 경로의 MTU를 확인할 수는 없으니, 양 끝단의 MTU만이라도 고려해서 최대 세그먼트 크기를 정하자!
    • 보통 1460 바이트 (Ethernet MTU 1500 - IP헤더 20 - TCP헤더 20).
  • Window Size
    • 수신자(Receiver)의 버퍼 여유 공간.
    • 16비트 크기이므로 최대 64KB까지 표현 가능.
  • Window Scale
    • 16비트 Window 크기(64KB)는 현대 고속 네트워크에서 부족하므로, 이 값을 왼쪽으로 shift하여 단위를 올릴 수 있게 하는 옵션.
    • 64KB * 2^14 = 약 1GB까지 표현 가능.
  • Timestamp
    • RTT(Round-Trip Time)를 더 정확하게 계산하는 데 사용된다.
  • PAWS (Protection Against Wrapped Sequence numbers)
    • Sequence number(32비트)는 네트워크 지연 등으로 인해 재사용(Wrapping)될 수 있다.
    • PAWS는 Timestamp 옵션을 사용하여 오래된 중복 패킷을 식별하고 폐기한다.
  • Reset Segment (RST)
    • Ctrl+C 같은 강제 종료 시, RST+ACK 패킷을 보내 연결을 비정상적으로 닫는다.
    • 존재하지 않는 포트로 접속 시도 시, 해당 포트가 닫혔음을 알리기 위해 RST 패킷을 보낸다.
  • TCP/IP는 End-to-End에서 신뢰성 있는(reliable) 패킷 전달을 보장해야 하기 때문이다. 따라서 하위 계층(데이터링크 계층 등)에서 ARQ가 구현되어 있는지와 상관없이, Transport 계층 자체적으로 신뢰성을 보장할 수 있는 수단(ARQ)이 필요하다.