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 하지만, 한 노드가 매체를 사용하는 동안 다른 노드들은 사용이 제한되므로 성능이 떨어짐.
- 따라서 Switching과 Interconnection으로 해결.
- 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 세그먼트를 적절한 소켓에 전달할 수 있다.
- Connection이란 두 종단이 통신을 유지하기 위해 필요한 상태 정보(4-tuple)이다.
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 패킷을 보낸다.
Data link layer에 ARQ가 구현되어 있어도 Transport layer에서 ARQ를 구현해야 하는 이유
- TCP/IP는 End-to-End에서 신뢰성 있는(reliable) 패킷 전달을 보장해야 하기 때문이다. 따라서 하위 계층(데이터링크 계층 등)에서 ARQ가 구현되어 있는지와 상관없이, Transport 계층 자체적으로 신뢰성을 보장할 수 있는 수단(ARQ)이 필요하다.