2014년 4월 22일 화요일

TCP와 UDP 개요와 비교

TCP/IP 전송 계층의 두 프로토콜 요구사항

  • 전송 제어 프로토콜(TCP)
    • TCP는 기능이 풍부하고, 연결형이며, 신뢰할 수 있는 TCP/IP 애플리케이션을 위한 전송 계층 프로토콜이다.
    • TCP는 여러 소프트웨어 애플리케이션이 동시에 단일 IP 주소를 사용할 수 있도록 하는 전송 계층 주소지정 방법을 제공하며 한 쌍의 장비가 가상 연결을 수립하고 양방향으로 데이터를 전달할 수 있도록 한다.
    • 전송은 승인받지 않은 패킷을 탐지하여 자동으로 재전송하는 특수한 슬라이딩 윈도우(sliding window) 시스템으로 관리된다.
    • 그리고 TCP는 장비간의 흐름 관리, 기타 특수 상황을 처리하기 위한 추가 기능도 제공한다.
  • 사용자 데이터그램 프로토콜(UDP)
    • UDP는 매우 단순한 전송 프로토콜로 TCP와 유사한 전송 계층 주소지정 방법을 제공하지만, 다른 기능은 거의 제공하지 않는다.
    • UDP는 애플리케이션이 IP에 접근할 수 있도록 하는 래퍼 프로토콜에 가깝다.
    • UDP에서는 연결이 수립되지 않고, 전송도 신뢰할 수 없으며, 데이터가 손실될 수 있다.

TCP와 UDP 애플리케이션

  • TCP 애플리케이션
    • 대부분의 애플리케이션은 TCP가 제공하는 신뢰성과 여러 서비스를 필요로 하며, TCP로 인해 생기는 약간의 부하로 인한 성능 저하에 신경 쓰지 않는다.
    • 하이퍼텍스트 전송 프로토콜(HTTP), 파일 전송 프로토콜(FTP), 단순 메일 전송 프로토콜(SMTP) 등이 있다.
  • UDP 애플리케이션
    • 데이터 일부가 손실되는 것이 그리 중요치 않은 애플리케이션(ex: 비디오나 멀티미디어 스트리밍)에 적합하다.

UDP와 TCP 비교 요약

특성/설명 UDP TCP
일반 설명 단순하고, 빠르며, 애플리케이션이 네트워크 계층에 접근할 수 있도록 하는 인터페이스만 제공할 뿐 다른 것은 거의 하지 않음 애플리케이션이 네트워크 계층 문제를 걱정하지 않고 데이터를 안정적으로 송신할 수 있도록 하는, 풍부한 기능의 프로토콜
프로토콜 연결 수립 비연결형. 연결 수립이 없이 데이터를 송신함 연결형. 전송 전에 연결을 먼저 맺어야 한다.
애플리케이션의 데이터 입력 인터페이스 메시지 기반임. 애플리케이션은 데이터를 별도의 패키지로 송신한다. 스티림 기반임. 애플리케이션은 특정한 구조 없이 데이터를 송신한다.
신뢰성과 승인 신뢰성이 없음. 승인이 없는 최선 노력 전송 방식 메시지 전송을 신뢰할 수 있음. 모든 데이터에 대한 승인이 있음
재전송 수행하지 않음. 애플리케이션은 손실 데이터를 탐지하고 필요할 경우 재전송해야 함 모든 데이터 전송을 관리하며, 손실된 데이터는 자동으로 재전송함
데이터 흐름 관리 기능 없음 슬라이딩 윈도우를 이용한 흐름 제어를 함. 윈도우 크기를 적절히 조정하고, 혼잡 회피 알고리즘을 사용함
부하 매우 낮음 낮지만 UDP 보다는 높음
전송 속도 매우 빠름 빠르지만 UDP 만큼은 아님
적합한 데이터 양 소형에서 중형 데이터(최대 수백 바이트) 소형에서 초대형 데이터까지(최대 수 기가 바이트)
프로토콜을 사용하는 애플리케이션의 유형 데이터의 완전성보다 전달 속도가 중요하고, 소량의 데이터를 송신하고, 멀티캐스트/브로트캐스트를 사용하는 애플리케이션 신뢰할 수 있는 방법으로 데이터를 송신해야 하는 대부분의 프로토콜과 애플리케이션. 대부분의 파일/메시지 전송 프로토콜을 포함함
유명 애플리케이션과 프로토콜 멀티미디어 애플리케이션, DNS, BOOTP, DHCP, TFTP, SNMP, RIP, NFS(초기버전) FTP, Telnet, SMTP, DNS, HTTP, POP, NNTP, IMAP, BGP, IRC, NFS(나중버전)

기타 라우팅 프로토콜 (41)

경계 경로 프로토콜(BGP/BGP-4) (40)

최단 경로 우선 프로토콜(OSPF) (39)

라우팅 정보 프로토콜(RIP, RIP-2, RIPNG) (38)

주요 라우팅 프로토콜 개념 (37)

IPv6 주변 발견(ND) 프로토콜 (36)

ICMPv6 정보 제공 메시지 유형과 포맷 (35)

ICMPv6 오류 메시지 유형과 포맷 (34)

ICMPv4 정보 제공 메시지 유형과 포맷 (33)

ICMPv4 오류 메시지 유형과 포맷 (32)

ICMP 개념과 일반 동작

인터넷 제어 프로토콜(ICMP, Internet Control Message Protocol)은 네트워킹 세계에서 진가를 인정받지 못하는 '일꾼' 중의 하나다.
원래 몇 가지 에러 상황을 보고하기 위해 설계된 ICMP 메시지는 이제 다양한 영역의 에러 보고, 피드백, 테스팅 기능을 구현하는 데 쓰인다.

ICMP 개요, 역사, 버전, 표준
  • TCP/IP에서 인터네트워크 계층의 진단, 테스트, 에러 보고 기능은 인터넷 제어 메시지 프로토콜(ICMP)에 의해 수행된다.
  • ICMP는 IP의 비서 역할을 한다.
  • 최초 ICMP 버전인 ICMPv4는 IPv4에 쓰였고 새 버전인 ICMPv6는 IPv6에 쓰인다.
ICMP 메시지를 정의하는 ICMP 이외의 인터넷 표준
정의한 메시지 유형의 ICMP 버전 RFC 번호 이름 정의한 ICMP 메시지 유형
ICMPv4 950 Internet Standard Subnetting Procedure 주소 마스크 요청, 주소 마스크 응답
1256 ICMP Router Discovery Messages 라우터 광고, 라우터 정보 요청
1393 Traceroute Using an IP Option 경로 추적
1812 Requirements for IP Version 4 Routers 목적지 접근 불가 메시지의 세 가지 새로운 코드(하위 유형)을 정의함
ICMPv6 2461 Neighbor Discovery for IP Version 6(IPv6) 라우터 광고, 라우터 정보 요청, 주변 정보 광고, 주변 정보 요청, 리다이렉트
2894 Router Renumbering for IPv6 라우터 주소 재지정


ICMP 일반 동작
  • ICMP 메시지 전달 서비스
    • ICMP는 다른 TCP/IP 프로토콜과는 달리 특정한 작업을 수행하지 않는다
    • ICMP는 다양한 기능을 구현하는 데 쓰이는 다양한 제어 메시지를 송수신하는 방법을 정의한다
    • ICMP는 일반적으로 IP 메시지 전송에 대한 피드백을 제공하는 데 쓰인다
  • ICMP 에러 보고는 데이터그램 원본으로만 송신 가능
    • IP 데이터그램의 문제로 인해 발생한 ICMP 에러 보고 메시지는 오직 최초 송신 장비에게만 전달될 수 있다
    • IP 데이터그램의 헤더에는 오직 최초 송신 장비의 주소만 들어 있기 때문에 중간 장비는 ICMP 메시지의 수신자가 될 수 없다

ICMP 메시지 클래스, 유형, 코드

  • ICMP 메시지 클래스
    • 오류 메시지
      • 이들 메시지는 어떤 에러가 발생했다는 것을 출발지 장비에게 알릴 때 쓰인다
      • 이것은 일반적으로 어떤 행위에 의한 응답으로 생성된다
      • 에러는 보통 데이터그램의 구조나 컨텐츠, 또는 데이터그램 라우팅 도중 발생한 인터네트워크상의 문제와 연관돼 있다
    • 정보 제공 (또는 요청) 메시지
      • 이들 메시지는 장비가 정보를 교환하고, 특정 IP 관련 기능을 구현하고, 테스트를 수행하도록 하는 데 쓰인다
      • 정보 제공 메시지는 애플리케이션에 의해, 또는 다른 장비에게 정보를 주기 위해 주기적으로 생성된다
    • ICMP 메시지는 문제 상황을 보고하는데 쓰이는 오류 메시지와 진단, 테스트, 기타 목적에 쓰이는 정보 제공 메시지로 나뉜다
  • ICMP 메시지 유형
    • ICMPv4와 ICMPv6는 각각 최대 256개의 메시지 유형이 정의될 수 있다
    • 각 메시지의 헤더에 포함된 유형 필드는 ICMP 메시지의 종류를 지정한다
    • ICMPv4에서 유형값과 메시지 유형에는 아무 연관 관계가 없다
    • 반면 ICMPv6에서는 오류 메시지의 유형값이 0에서 127까지고, 정보 제공 메시지는 1에서 255까지의 값을 갖는다
  • ICMP 메시지 코드
    • ICMP는 8비트로 된 코드 필드를 통해 각 메시지 유형 내에서 좀더 세부적으로 메시지를 분류한다
  • ICMP 메시지 클래스와 유형 요약
메시지 클래스 유형값 메시지 이름 메시지 유형 설명 요약 RFC 번호
ICMPv4 오류 메시지 3 목적지 접근 불가 데이터그램을 목적지로 전달할 수 없다는 것을 나타낸다. 코드값은 에러의 원인에 대한 좀더 구체적인 정보를 제공한다. 792
4 송신 속도 낮춤 데이터그램을 너무 많이 수신하는 IP 장비가 송신 장비에게 송신율을 낮추라고 요구할 때 쓰인다. 792
5 리다이렉트 라우터가 호스트에게 데이터그램 송신을 위한 더 좋은 경로를 알릴 수 있도록 한다. 792
11 시간 초과 TTL 필드가 만료하여 데이터그램이 전송 중 버려질 때 송신된다. 792
12 인자 문제 데이터그램을 전달하는 도중 사소한 문제를 나타낸다. 792
ICMPv4 정보 제공 메시지(1/2) 0 에코 응답 에코 요청 메시지에 대한 응답으로 전송된다. 연결을 테스트 하는 데 쓰인다. 792
8 에코 요청 장비가 인터네트워크의 다른 장비와 연결성을 테스트하는 데 쓰인다. 792
9 라우터 광고 라우터가 호스트에게 자신의 존재와 기능을 알리는 데 쓰인다. 1256
10 라우터 정보 요청 호스트가 다른 라우터에게 라우터 광고를 요청할 때 쓰인다. 1256
13 타임스탬프 요청 장비가 다른 장비에게 전파 시간 계산과 클럭 동기화를 위해 타임스탬프 정보를 요청할 때 쓰인다. 792
14 타임스탬프 응답 타임스탬프 요청에 대한 응답으로 송신되며 시간 계산과 클럭 동기화 정보를 제공한다. 792
15 정보 요청 원래 다른 장비에게 설정 정보를 요청할 때 쓰였다. 지금은 쓰이지 않는다. 792
ICMPv4 정보 제공 메시지(2/2) 16 정보 응답 정보 요청 메시지에 대한 응답으로, 설정 정보를 제공할 때 쓰였다. 지금은 쓰이지 않는다. 792
17 주소 마스크 요청 장비에게 주소 마스크 송신을 요청할 때 쓰인다. 950
18 주소 마스크 응답 주소 마스크 요청에 대한 응답으로, 서브넷 마스크를 담고 있다. 950
30 경로 추적 향상된 기능의 경로 추적 유틸리티를 실험하는 데 쓰인다. 1393
ICMPv6 오류 메시지 1 목적지 접근 불가 데이터그램을 목적지로 전달할 수 없다는 것을 나타낸다. 코드값은 그 이유에 대한 좀더 자세한 정보를 제공한다. 2463
2 패킷 크기 초과 데이터그램이 경로의 다음 홉의 최대 전송 단위(MTU)보다 커서 더 이상 데이터그램을 전달할 수 없을 때 송신된다. 이 메시지는 IPv4가 아닌 IPv6에서만 필요하다. 왜냐하면 IPv4에서는 라우터가 크기가 큰 메시지를 단편화할 수 있지만 IPv6는 그렇게 할 수 없기 때문이다. 2463
3 시간 초과 Hop Limit 필드가 0으로 감소되어서 데이터그램을 전달할 수 없다는 것을 나타낸다. 2463
4 인자 문제 데이터그램을 전달하는 도중 발생한 사소한 문제를 나타낸다. 2463
ICMPv6정보 제공 메시지 128 에코 요청 장비가 인터네트워크의 다른 장비와 연결성을 테스트하는 데 쓰인다. 2463
129 에코응답 에코 요청 메시지에 대한 응답으로 전송된다. 연결을 테스트하는 데 쓰인다. 2463
133 라우터 정보 요청 호스트가 다른 라우터에게 라우터 광고를 요청할 때 쓰인다. 2461
134 라우터 광고 라우터가 로컬 네트워크의 호스트에게 자신의 존재와 기능을 알리는 데 쓰인다. 2461
135 주변 정보 요청 장비가 다른 장비의 2계층 주소를 요청하고, 자신의 주소를 알리는 데 쓰인다. 2461
136 주변 정보 광고 호스트에 관한 정보를 네트워크의 다른 장비에게 알리는 데 쓰인다. 2461
137 리다이렉트 호스트가 데이터그램의 전달 방향을 네트워크의 바로 옆에 있는 호스트나 라우터로 변경하도록 한다. 2461
138 라우터 주소 재지정 라우터 주소 재지정에 쓰이는 정보를 전달한다. 2894


ICMP 메시지 생성과 처리 관습, 규칙

  • ICMP 메시지 응답의 한계
    • 과다한 ICMP 메시지를 네트워크로 송신하는 것을 막기 위해 언제, 어떻게 ICMP를 생성하는지에 대한 규칙이 존재한다.
    • 이들 대부분은 특정 상황에 의하여 대량의 ICMP 오류 메시지가 생성되는 것을 막도록 설계됐다.
  • ICMP 메시지 처리 관습
    • ICMP 메시지를 수신한 장비는 그 메시지 유형이 특정한 응답을 필수적으로 요구하지 않는 한 별다른 행동을 취할 필요가 없다.
    • 특히, 장비는 ICMP 오류 메시지를 수신했을 경우 특정한 작업을 반드시 할 필요는 없다.

ICMP 일반 메시지 포맷과 데이터 갭슐화

  • ICMP 일반 메시지 포맷
필드이름 크기(바이트) 설명
유형 1 ICMP 메시지 유형을 식별한다. ICMPv6의 경우 0에서 127까지의 값은 오류 메시지를, 128에서 255까지의 값은 정보 제공 메시지를 나타낸다.
코드 1 각 ICMP 메시지 유형 내에서의 하위 유형을 식별한다. 이 필드는 크기가 1바이트이기 때문에 각 메시지 유형별로 256개의 하위 유형을 정의할 수 있다.
체크섬 2 16비트 체크섬 필드로 IPv4의 IP 헤더 체크섬과 유사한 방법으로 계산된다. 이 필드는 전체 ICMP 멧지를 위한 에러 탐지 기능을 제공한다. ICMPv6에서는 체크섬 계산을 위해 가상의 IPv6 헤더 필드가 앞에 붙는다는 사실을 알아두자. 이것은 TCP에서의 체크섬 계산법과 유사하다.
메시지본문/데이터 가변적 각 메시지 유형을 구현하는 데 쓰이는 구체적인 필드를 포함한다. 이것은 메시지의 유일부분이다.
  • ICMP 오류 메시지에 포함된 원본 데이터그램
    • ICMPv4 오류 메시지
      • 각 오류 메시지는 IP 헤더 전체와 페이로드의 처음 8 바이트를 포함한다.
    • ICMPv6 오류 메시지
      • 각 오류 메시지는 크기(IP 헤더 캡슐화 포함)가 최소 IPv6 MTU인 1,280바이트를 초과하지 않는 범위에서 가능한 한 많은 양의 IPv6 데이터그램을 포함한다.
    • 각 ICMP 메시지는 그 메시지 유형에 유일한 데이터를 포함하지만, 모든 메시지는 일반 ICMP 메시지 포맷 구조를 갖는다. ICMP 오류 메시지는 항상 에러를 유발시킨 원본 IP 데이터그램의 일부를 메시지 본문에 포함시킨다.
  • ICMP 데이터 캡슐화
    • ICMP 메시지는 포매팅된 다음, 다른 여느 IP 메시지와 같이 IP 데이터그램으로 캡슐화된다.