Transmission Control Protocol
- 인터넷 기본 프로토콜 중 하나로 TCP/IP 모델의 하위 게층에 관계없이 응용 프로그램이 신뢰성 있는 통신을 할 수 있다.
- 송/수신 호스트 내 프로세스 상호 간에 신뢰적인 연결 지향성 서스를 제공
(데이터가 온전하게 전달될 것이라는 보장이 있음)
- 송/수신 호스트 내 프로세스 상호 간에 신뢰적인 연결 지향성 서스를 제공
- IP의 비신뢰적인 최선형 서비스에다가 신뢰적인 연결지향성 서비스를 제공
- 신뢰적인 전송을 보장함으로써, 어플리케이션 구현이 한층 쉬워지게 됨
신뢰성이 있음 (Reliable)
- 패킷 손실/중복/순서 바뀜 등이 없도록 보장한다.
- TCP 하위 계층인 IP 계층의 신뢰성 없는 서비스에 대해 다방면으로 신뢰성을 제공한다.
연결지향적 (Connection-oriented)
- 같은 전송계층의 UDP가 비연결성(connectionless) 인 것과 달리, TCP는 연결지향적이다.
- 느슨한 연결(Loosly Connected)을 가지므로 강한 연결을 의미하는 가상회선이라는 표현보다는 오히려 연결지향적이라고 말한다.
- 연결 관리를 위한 연결 설정 및 연결 해제가 필요하다.
- 양단간 어플리케이션/프로세스는 TCP가 제공하는 연결성 회선을 통해 서로 통신한다.
- TCP는 많은 수의 응용 프로그램 계층 프로토콜을 제공하기 때문에 데이터(세크먼트)가 수신자에게 올바르게 도달해야 한다.
- 오류없이 순서대로 세그먼트를 전송할 때 세그먼트가 손상되거나 손실되면 자동으로 TCP 프로토콜 재전송을 시작한다.
- 어플리케이션 계층의 개입없이 모든 유형의 문제를 해결할 책임이 있기에, 데이터가 오류 없이 수신자에게 도달할 수 있게 된다.
MSS (Maximum Segment Size)
- TCP가 단일 세그먼트에서 수신할 수 있는 최대 크기(바이트) 이며, MTU와 비슷하지만 MSS는 전송 계층 수준에 있다.
- 최상의 성능을 얻으려면 MSS가 IP 조각화를 피할 수 있을 정도로 작아야 한다.
- MSS는 일반적으로 TCP 헤더 자체를 통해 통신 채널의 양쪽에 보급된다.
- 일반적인 크기는
MTU(일반적으로 1500byte) - TCP 헤더(가변 길이 20byte 이상) - IP헤더(가변 길이 20byte 이상)
User Definition Protocol
- 전송 계층의 통신 프로토콜의 하나로 TCP와 대비된다.
- 신뢰성이 낮은 프로토콜로써 완전성을 보증하지 않으나, 가상회선을 굳이 확립할 필요가 없고, 유연하며, 효율적 응용의 데이터 전송에 사용된다.
비연결성 / 신뢰성 없음 / 순서화 되지 않은 Datagram
- 확인 응답 X
- 메세지가 제대로 도착했는지 확인하지 않음
- 순서 제어 X
- 수신된 메세지의 순서를 맞추지 않음
- 흐름 제어 X
- 흐름 제어를 위한 피드백을 제공하지 않음
- 오류 제어 거의 X
- 검사합을 제외한 특별한 오류 검출 및 제어 없음
- UDP를 사용하는 프로그램 쪽에서 오류 제어 기능을 스스로 갖추어야 한다.
- 논리적인 가상회선 연결이 필요 X
- 비연결접속 상태 하에서 통신
실시간 응용 및 멀티 캐스팅 기능
- 빠른 요청과 응답이 필요한 경우에 적합
- 1 : 다수 전송이 가능하다.
헤더가 단순
- TCP 처럼 16비트의 포트 번호를 사용하지만, 헤더는 고정 크기 8yte만 사용한다.
- 즉, 헤더 처리에 많은 시간/노력을 요하지 않는다.
- (TCP는 20btye)
비교 | TCP | UDP |
---|---|---|
신뢰성 | O | X |
연결성 | X | O |
송수신자 간의 연결 여부 | 연결되어야 통신 가능 | 연결 없이도 통신 가능 |
- TCP는 신뢰성이 있고 연결지향적이지만, UDP는 신뢰성이 없고 비연결적이다.
- TCP는 송신-수신자 연결이 되어있어야 통신이 가능하지만, UDP는 연결되어있지 않아도 가능하다.
-
TCP
- 순서를 보장하고 신뢰도가 높다는 점에서 HTTP 통신, 이메일, 파일전송 등 순서대로 도착해야 하는 상황에 사용된다.
-
UDP
- 순서는 보장해주지 못하지만 실시간으로 반응해야하는 실시간 방송이나 게임 등에서 사용된다.
Q. 채팅 구현 시 TCP를 사용하는 이유는??
- 연결된 상태에서 순서대로 송신자와 숫니자가 보낸 메세지를 그대로 전송할 수 있기 때문이다. -> 따라서 양방향 통신에 유리하다. (UDP는 그 순서를 보장해주지 못하기 때문.)