인터넷(일반적인 TCP/IP 네트워크)은 애플리케이션에게 2개의 전송 프로토콜 즉, UDP(user datagram protocol)와 TCP(transmission control protocol)를 제공한다. 애플리케이션 개발자는 첫번째로 UDP, TCP 중에 무엇을 쓸 것인지 결정해야한다.
연결 지향형 서비스라고 불린다. 왜냐면 애플리케이션 계층 메시지를 전송하기 전에 TCP는 클라이언트와 서버가 서로 전송 제어 정보를 교환하도록 한다.(3-way handshake)
이 핸드셰이킹 과정이 클라이언트와 서버에 패킷이 곧 도달할 것이니 준비하라고 알려주는 역할을 한다. 핸드 셰이킹 단계를 지나면, TCP 연결이 두 프로세스의 소켓 사이에 존재한다고 얘기한다.
이 연결은 두 프로세스가 서로에게 동시에 메시지를 보낼 수 있기에 전이중(full-duplex) 연결이라고 한다.
신뢰적인 데이터 전송 서비스 이다. 통신 프로세스는 모든 데이터를 오류없이 올바른 순서로 전달하기위해 TCP에 의존한다. TCP는 애플리케이션의 한쪽이 바이트 스트림을 소켓으로 전달하면 그 바이트 스트림을 손실하거나 중복되지 않게 수신 소켓으로 전달한다.
TCP는 혼잡제어를 하면서 데이터의 속도를 조절하는데 UDP는 혼잡제어를 하지 않는다. 그러면 개발자는 TCP의 신뢰성만 사용하고 혼잡제어를 사용하지 않으면 데이터를 효율적으로 전송할 수 있을것이다!!--> 라고 생각하면 아주 틀린생각이다. 왜냐하면 앞의 게시물에서 말한것처럼 개발자는 트랜스포트 계층에대한 통제권이 상당히 제한적이다. 개발자는 UDP, TCP중에 둘이 선택만 가능하며 TCP를 쓰면 당연히 혼잡제어를 사용해야하니 이 생각은 틀린 생각이다.