2014년 8월 18일 월요일
2014년 7월 30일 수요일
전송 제어 프로토콜(TCP) 원리와 일반 동작
TCP 데이터 취급과 처리
- 애플리케이션 데이터 처리의 유연성 향상: TCP의 스트림 동작
- TCP는 애플리케이션에서 오는 데이터를 스트림으로 간주한다
- 그래서 TCP를 스트림 중심(stream-oriented) 프로토콜이라 한다.
- 각 애플리케이션은 전송하고자 하는 데이터를 옥텟(바이트) 스트림으로 송신한다.
- 즉, 애플리케이션은 데이터를 블록 크기에 맞추거나 스트림의 길이를 걱정할 필요가 없다.
- 단지 TCP에 바이트를 "던져 주면" 된다.
- TCP 데이터 패키징: 세그먼트
- TCP 세그먼트
- TCP는 애플리케이션에서 오는 스트림을 IP에서 보낼 수 있는 분리된 메시지로 나눈다. 이 메지시를 TCP 세그먼트라 함
- TCP에서는 최대 세그먼트 크기(MSS)라는 인자가 크기를 제한한다.
- MSS는 연결 수립 과정에서 결정된다.
- TCP에서는 일단 연결이 수립되면 각 장비가 어떤 시간에든지 받을 수 있는 데이터의 크기를 상대방에게 알리도록 설계돼 있다.
- 만약 크기가 MSS값보다 작다면 장비는 MSS보다 작은 세그먼트를 송신해야 한다.
- TCP 데이터 식별: 순서 번호
- TCP는 분리된 메시지가 아닌 개별 데이터 바이트를 다루기 때문에 데이터 송신과 추적 시스템을 구현하기 위해 바이트 수준의 식별 방법을 사용해야한다.
- 이를 위해 TCP는 처리하는 각 바이트에 순서 번호를 할당한다.
- 애플리케이션의 데이터 구분 필요
- 애플리케이션은 TCP로 미리 패키징된 메시지가 아닌 바이트 스트림을 송신한다.
- 그래서 각 애플리케이션은 한 데이터 요소가 어디에서 끝나고 어디에서 시작하는지를 결정하기 위한 고유한 방법을 사용해야 한다.
TCP 슬라이딩 윈도우 승인 체계
데이터 관리는 TCP의 다음 두 요구 사항을 충족시키기 위해 꼭 필요하다
TCP 범용 애플리케이션과 서버 포트 할당
- 신뢰성
- 송신한 데이터가 실제로 목적지에 도달한다는 것을 보장하고 만약 도달하지 않을 경우 그 사실을 탐지하여 재송신한다.
- 데이터 흐름 제어
- 데이터를 수신하는 장비가 처리할 수 있는 속도로 데이터 송신율을 관리한다.
이를 위해 TCP는 슬라이딩 윈도우 승인체계를 사용한다.
- 신뢰할 수 없는 프로토콜의 문제: 피드백이 없음
- IP와 같은 프로토콜에서는 메시지가 목적지에 도달하면 좋겠지만 만약 도달하지 못할 경우 아무도 그 사실을 알지 못한다.
- 재전송을 사용하는 긍정 승인(PAR)을 통한 기본적인 신뢰성 제공
- 통ㅅ니의 신뢰성을 보장하기 위한 기본적인 방법으로 장비가 메시지를 수신할 때마다 승인을 보내는 방법을 생각할 수 있다.
- 만약 특정 시간 동안 승인이 오지 않을 경우 송신자는 메시지를 재전송할 수 있다.
- 이 방법을 재전송을 사용하는 긍정 승인(PAR, positive acknowledgment with retransmission)이라 부른다.
- 단점은 첫 메시지에 대한 승인을 받기 전까지 둘째 메시지를 보낼 수 없다는 것이다.
- PAR 개선
- 송신하는 각 메시지에 식별 정보를 추가하여 여러 메시지를 동시에 송신함으로써 기본 PAR 방법을 개선할 수 있다.
- 그리고 송신 제한값을 사용하면 다른 장비가 데이터를 송신하는 비율을 제한하여 흐름 제어 기능도 제공할 수 있다.
- TCP의 스트림 중심 슬라이딩 윈도우 승인 체계
- 속도 저하 때문에 TCP는 바이트를 개별적으로 보내지 않고 세그먼트로 묶어서 보낸다.
- TCP 전송 스트림의 개념적 구분(4가지)
- 송신했고 승인이 완료된 바이트
- 송신했지만 아직 승인되지 않은 바이트
- 아직 송신하지 않았지만 수신자가 받을 준비를 마친 바이트
- 아직 송신하지 않았고 수신자가 받을 준비가 안된 바이트
- 순서 번호 할당과 동기화
- 송신했고 승인이 완료된 바이트는 1에서 31까지
- 송신했지만 아직 승인되지 않은 바이트는 32에서 45까지
- 아직 송신하지 않았지만 수신자가 받을 준비를 마친 바이트는 46에서 51
- 아직 송신하지 않았고 수신자가 받을 준비가 안된 바이트는 52에서 95
- 송신 윈도우와 사용 가능 윈도우
- 슬라이딩 윈도우 체계의 동작에서 핵심이 되는 것은 송신자가 승인받지 않은 데이터를 한 시점에 얼마나 가질 수 있도록 수신자가 허용하는지다.
- 허용 가능한 승인받지 않은 데이터 수 - 윈도우(or 송신윈도우)
- 윈도우
- 송신자가 전송하도록 허용되어 있는 바이트 수를 결정
- 범주 2와 범주 3에 속한 바이트 수의 합과 같다
- 범주 3과 범주 4를 구분하는 지점은 스트림의 맨 처음 승인받지 않은 바이트 번호에 윈도우를 더해서 구할 수 있다.
- 사용 가능 윈도우의 바이트를 송신한 뒤 TCP범주와 윈도우 크기 변화
- 승인 처리와 송신 위도우 슬라이딩
- TCP의 선택적 승인(selective acknowledgment)이라는 기능은 불연속적인 데이터 블록도 승인할 수 있도록 한다.
- 특정 바이트 범위에 대한 승인을 받은 장비는 목적지 장비가 바이트들을 성공적으로 수신했다는 것을 인지할 수 있다.
- 그래서 장비는 송신했지만 아직 승인되지 않은 바이트를 송신했고 승인이 완료된 바이트 범주로 이동시킬 수 있다.
- 그러면 송신 윈도우는 오른쪽으로 이동하고 장비는 더 많은 데이터를 송신할 수 있다.
- 빠진 승인 처리
- TCP 승인은 누적되며 송신자에게 수신 장비가 순서 번호까지의 모든 바이트를 성공적으로 수신했다는 사실을 알린다.
- 그래서 만약 수신 장비가 순서 번호가 뒤바뀐 바이트들을 받았따면 이전 바이트를 모두 수신하기 전까지는 승인을 보낼 수 없다.
TCP 포트, 연결, 연결 식별
- 장비는 하나 이상의 장비에 있는 여러 프로세스로 많은 TCP 연결을 동시에 맺을 수 있다.
- 연결이 맺어진 장비의 소켓 번호(연결의 종단이라고 부름)는 연결을 식별한다.
- 각 종단은 장비의 IP 주소와 포트번호로 구성되기 때문에 클라이언트 IP 주소와 포트번호, 서버 IP 주소와 포트번호가 연결을 식별하게 된다.
TCP 범용 애플리케이션과 서버 포트 할당
| 포트 # | 키워드 | 프로토콜 | 설명 |
| 20과 21 | ftp-data/ftp | 파일 전송 프로토콜(FTP)의 데이터와 제어 | 대형 파일을 송신하는 데 쓰이기 때문에 TCP에 매우 적합하다. |
| 23 | telnet | 텔넷 프로토콜 | 대화형 세션 기반 프로토콜. TCP의 연결 기반 특성을 필요로 한다. |
| 25 | smtp | 단순 메일 전송 프로토콜 | 명령을 교환하고 장비 간에 대형 파일을 보낼 수도 있다. |
| 53 | domain | 도메일 네임 서버(DNS) | UDP와 TCP를 모두 사용하는 프로토콜이다. 단순한 요청과 응답의 경우 DNS는 UDP를 사용한다. 대형 메시지(특히 구역 전달)의 경우에는 TCP를 사용한다. |
| 70 | gopher | 고퍼 프로토콜 | WWW로 대부분 대체된 메시징 프로토콜 |
| 80 | http | 하이퍼텍스트 전송 프로토콜 | TCP 기반 메시징 프로토콜의 전통적인 예제 |
| 110 | pop3 | 포스트 오피스 프로토콜(POP) 버전 3 | 이메일 메시지 수신 프로토콜로 TCP를 이용하여 명령과 데이터를 교환한다. |
| 119 | nntp | 유즈넷 뉴스 전송 프로토콜 | 유즈넷 메시지를 전달하는 데 쓰인다. 이 메시지는 매우 길 수도 있다. |
| 139 | netbios-ssn | NetBIOS 세션 서비스 | 세션 프로토콜로 UDP 보다는 TCP에 적합하다. |
| 143 | imap | 인터넷 메시지 접근 프로토콜 | 또 다른 이메일 메시지 수신 프로토콜 |
| 179 | bgp | 경계 경로 프로토콜 | RIP와 OSPF 같은 내부 라우팅 프로토콜은 UDP나 IP를 직접 사용하지만 BGP는 TCP 위에서 동작한다. 그래서 bGP는 원거리에 있는 장비와도 안정적으로 통신할 수 있다. |
| 194 | irc | 인터넷 릴레이 채팅 | IRC는 클라이언트와 서버 간의 지속적 연결에 기반한 대화형 프로토콜이라는 점에서 텔넷과 유사하다 |
| 2049 | nfs | 네트워크 파일 시스템 | NFS는 원래 성능 문제로 UDP로 구현됐다. 하지만 NFS는 대형 파일을 전달해야 하며 UDP는 신뢰할 수 없는 프로토콜이기 때문에 NFS 개발자들은 TCP 버전을 새로 개발했다. 최신 버전의 NFS는 오직 TCP만을 사용한다. |
| 6000-6063 | TCP | x11 | X 윈도우 그래픽 시스템에 쓰인다. 다수의 세션을 위한 다수의 포트가 예약돼 있다. |
2014년 6월 9일 월요일
TCP 개요, 기능, 특성
TCP 개요, 역사, 표준
TCP 기능
TCP 특성
- TCP 역사
- ARPAnet
- 1970년대 초창기의 인터넷은 ARPAnet이라고 불리는 작은 연구 인터네트워크에 불과
- ARPA(또는 DARPA)는 미국 국방부 고등 연구 계획국(United States Defense Advanced Research Projects Agency)의 약자
- 이 네트워크는 호스트가 서로 연결할 수 있도록 하는 기술인 네트워크 제어 프로토콜(NCP, Network Control Protocol)을 사용
- 초창기 TCP
- RFC 375로 전송 제어 프로그램(Transmission Control Program)이라 불림
- 기본적으로 애플리케이션이 인터네트워크에서 동작하기 위해 필요한 모든 것을 책임짐
- 초창기 TCP는 오늘날의 TCP와 IP 기능을 모두 가지고 있음
- TCP와 IP의 분리
- 4계층 기능은 전송 제어 프로토콜(Transmission Control Protocol)
- 3계층은 인터넷 프로토콜로 분리
- TCP 버전 4에서 확정 -> 그러므로 IP의 첫 버전도 "버전 4"로 명명
- 1981년 9월 RFC 793 "Transmission Control Protocol"은 TCP 버전 4를 정의했으며 현재까지 유효한 표준으로 쓰이고 있음
- TCP 동작 개요
- TCP/IP 프로토콜 슈트의 핵심 전송 계층 프로토콜은 전송 제어 프로토콜(TCP)이다.
- TCP는 연결형이고, 승인을 제공하며, 신뢰할 수 있는 다양한 기능을 갖춘 프로토콜로 안정적이지 않은 인터넷 프로토콜(IP) 위에서 애플리케이션이 안정적으로 데이터를 송신하는 방법을 제공한다.
- TCP는 애플리케이션이 데이터를 바이트 스트림으로 보낼 수 있도록 하며 그 바이트 스트림을 적절한 크기의 세그먼트로 자동 패키징한다.
- 그리고 TCP의 특수 슬라이딩 윈도우 체계는 수신자가 모든 데이터를 수신하고, 필요할 경우 재전송을 하며, 상대방의 송신 속도를 조절할 수 있는 흐름 제어 기능을 제공한다.
- TCP 표준
- RFC 793은 TCP를 정의하는 표준이지만 근래의 TCP가 동작하는 모든 세부 사항을 기술하지는 않음
- 보조 TCP 표준
| RFC | 이름 | 설명 |
| 813 | Window and Acknowledgment Strategy in TCP | TCP 슬라이딩 윈도우 승인 시스템과 그로 인해 발생할 수 있는 문제, 해결 방법을 설명한다. |
| 879 | The TCP Maximum Segment Size and Related Topics | TCP 메시지 크기를 제어하는 중요한 최대 세그먼트 크기(MSS) 인자를 설명하고 이 인자를 IP 데이터그램 크기와 연관시킨다. |
| 896 | Congestion Control in IP/TCP Internetworks | 혼잡 문제를 다루며 TCP를 이용해 그 문제를 해결하는 방법을 설명한다. 제목에 나온 프로토콜 이름이 거꾸로(IP/TCP) 적혀 있다는 것에 주목하자. |
| 1122 | Requirements for Internet Hosts - Communication Layers | 호스트에서 TCP를 구현하는 중요한 세부 사항을 설명한다. |
| 1146 | TCP Alternate Checksum Options | TCP 장비가 기존과는 다른 체크섬 계산법을 사용하도록 하는 방법을 명시한다. |
| 1323 | TCP Extensions for High Performance | 고속 링크를 위한 TCP 확장과 새로운 TCP 옵션을 정의한다. |
| 2018 | TCP Selective Acknowledgment Options | TCP 장비가 특정 세그먼트만을 재전송하도록 선택하는 기능을 설명한다. |
| 2581 | TCP Congestion Control | TCP 네트워크에서 혼잡을 제어하는 데 사용하는 4가지 알고리즘인 느린 시작, 혼잡 회피, 빠른 재전송, 빠른 회복을 설명한다. |
| 2988 | Computing TCP's Retransmission Timer | 장비가 데이터를 재전송하기 전에 승인 메시지를 기다리는 시간을 정의하는 TCP 재전송 타이머를 설정하는 문제를 다룬다. |
TCP 기능
- TCP가 수행하는 기능
- 주소지정/다중화
- 여러 프로세스에서 온 데이터를 다중화하여 하위 네트워크 계층 프로토콜로 송신되도록 하는 것은 TCP의 중요한 임무다
- 동시에 이들 상위 계층 애플리케이션은 TCP 포트를 통해 식별된다.
- 연결 수립, 유지, 종료
- TCP는 장비가 데이터를 이동시킬 수 있는 연결을 협상하고 수립하기 위해 따라야 할 절차 모음을 제공한다.
- 연결이 수립되면 TCP는 연결을 유지하고 혹시 발생할 지 모르는 문제를 처리하기 위한 방법이 있다.
- 장비가 TCP 연결로 할 일을 마치면 그 연결을 종료하기 위한 특수한 절차도 수행된다.
- 데이터 처리와 패키징
- 애플리케이션이 상위 계층에서 데이터를 송신할 수 있는 방법을 제공한다.
- 이 데이터는 메시지로 패키징되고 목적지 TCP 소프트웨어로 전달된다.
- 데이터 전송
- 송신 장비의 TCP 구현은 패키징된 데이터를 다른 장비의 TCP 프로세스로 전달할 책임이 있다.
- 신뢰성과 전송 품질 서비스 제공
- 애플리케이션이 데이터를 신뢰할 수 있게 송신할 수 있도록 여러 서비스와 기능을 제공한다.
- 흐름 제어와 혼잡 회피 기능 제공
- 두 장비 간의 데이터 흐름을 제어하고 관리할 수 있도록 한다.
- 두 장비 간 통신에서 발생할 수 있는 혼잡을 처리하는 기능도 포함한다.
- TCP가 수행하지 않는 기능
- 애플리케이션 사용 명시 안함
- 전송 프로토콜만을 정의하므로 애플리케이션이 어떻게 TCP를 사용해야 하는지 구체적으로 명시하지 않는다.
- 보안 제공 안함
- 전송하는 데이터의 인증이나 프라이버시를 보장하기 위한 어떤 방법도 제공하지 않음
- 메시지 경계 유지 안함
- TCP는 데이터를 분리된 메시지가 아닌 연속된 스트림으로 송신
- 한 메시지가 어디에서 끝나고 다음 메시지는 어디에서 시작되는지를 명시하는 것은 애플리케이션에게 달려있음
- 통신 보장 안함
- TCP는 승인을 받지 않는 전송을 탐지하고 필요할 경우 재전송
- 어떤 문제가 통신을 방해할 경우 TCP는 계속 재전송을 시도함
TCP 특성
- 연결형
- TCP는 장비가 데이터를 송신하기 전에 먼저 연결을 수립할 것을 요구
- 양방향
- 일단 연결이 수립되면 TCP 장비는 누가 연결을 초기화했는지에 관계없이 데이터를 양방향으로 송수신함
- 다중 연결과 종단 식별
- 연결된 두 장비가 사용하는 소켓 쌍은 TCP 연결의 종단을 식별
- 신뢰성
- TCP는 모든 데이터가 목적지에 도달할 수 있도록 송신, 수신한 데이터를 추적하기 때문에 TCP 통신은 신뢰성이 있다.
- 승인
- 신뢰성을 제공하는 데 핵심이 되는 특성은 TCP가 모든 전송에 대한 승인 메시지를 보낸다는 것이다.
- 스트림 기반
- TCP는 애플리케이션이 연속적인 데이터 스트림을 송신할 수 있도록 한다.
- 애플리케이션은 이 스트림을 블록으로 나누는 것을 걱정할 필요가 없다. TCP가 알아서 해준다.
- 구조화되지 않은 데이터
- TCP의 스트림 기반 특성때문에 애플리케이션은 메시지간 구별하는 방법을 제공해야 한다.
- 데이터 흐름 관리
- TCP는 데이터가 일정한 속도로 평탄하게 흐르고, 전송 경로 중 발생하는 문제를 처리할 수 있도록 연결을 관리한다.
견고성 원칙
"자신이 수행하는 작업은 보수적으로, 다른 사람에게서 무언가를 받을 때는 관대하게"
TCP/IP 사용자 데이터그램 프로토콜(UDP)
UDP 개요, 역사, 표준
사용자 데이터그램 프로토콜(UDP, User Datagram Protocol)은 전송 계층에서 신뢰성, 승인, 흐름 제어 기능을 필요로 하지 않는 애플리케이션을 위해 개발됐다. UDP는 단순하고 빠르게 설계됐고 전송 계층 주소지정(UDP 포트), 선택적인 체크섬 기능을 제외하면 거의 아무 것도 제공하지 않는다.
UDP 동작
UDP 가상 헤더 포맷
사용자 데이터그램 프로토콜(UDP, User Datagram Protocol)은 전송 계층에서 신뢰성, 승인, 흐름 제어 기능을 필요로 하지 않는 애플리케이션을 위해 개발됐다. UDP는 단순하고 빠르게 설계됐고 전송 계층 주소지정(UDP 포트), 선택적인 체크섬 기능을 제외하면 거의 아무 것도 제공하지 않는다.
UDP 동작
- UDP가 하는 일
- 상위 계층 데이터 전송
- UDP 메시지 캡슐화
- 메시지를 IP로 전달함
- UDP가 하지 않는 일
- 데이터를 송신하기 전에 연결을 수립하는 것
- 데이터를 수신했다는 것을 알리는 승인을 송신하는 것
- 메시지가 목적지에 도달할 것이라고 보장하는 것
- 손실 메시지를 탐지하여 재전송하는 것
- 데이터가 송신한 순서대로 수신되는 것
- 장비 간의 혼잡이나 흐름을 처리하는 방법을 제공하는 것
UDP 메시지 포맷
- 출발지 포트
- 2바이트
- 출발지 장비에서 UDP 메시지를 생성한 프로세스의 16비트 포트번호
- 이것은 클라이언트가 서버에게 데이터를 송신할 때 사용한 임시 클라이언트 포트번호, 또는 서버가 클라이언트에게 응답을 보낼 때 사용한 유명/등록 서버 포트를 의미
- 목적지 포트
- 2바이트
- 목적지 장비에서 UDP 메시지를 수신하는 프로세스의 16비트 포트번호
- 이것은 클라이언트 요청이 도달할 유명/등록 서버 포트, 또는 서버의 응답이 도달할 임시 클라이언트 포트번호를 의미
- 길이
- 2바이트
- 헤더와 데이터 필드를 포함한 전체 UDP 데이터그램의 길이
- 체크섬
- 2바이트
- 전체 UDP 데이터그램과 특수 가상 헤더 필드에 대해 계산되는 선택적인 체크섬
- 데이터
- 가변적
- UDP로 송신할 캡슐화된 상위 계층 메시지
UDP 가상 헤더 포맷
- 가상 헤더의 전체 길이는 11바이트다. 이 뒤에 1바이트의 0이 붙어 구성된 12바이트가 실제 UDP 메시지 앞에 붙는다.
- 이 가상 헤더와 실제 UDP 메시지 전체에 대하여 계산된 체크섬 값이 UDP 헤더의 체크섬 필드에 채워진다.
- 가상 헤더는 이 계산에만 쓰이고 버려지며 실제로 송신되지는 않는다.
피드 구독하기:
글 (Atom)

