TCP, UDP에 대해 설명

TCP란 데이터 통신을 위한 프로토콜의 일종, Transport Layer에서 사용하는 프로토콜로 하위 계층에 사용되는 IP와 엮어 TCP/IP라고도 표현한다.

TCP는 Point To Point Service로 양끝에 연결되었다는 정보만 알고있다. 물리적인 자원은 하위 계층인 Ip를 통해 할당되어진다. 또한 Connection Oriented Service가상 회선방식을 제공하고 Flow Control, Congestion Control를 제공한다. 이를 통해 TCP는 높은 신뢰성을 보장한다.

UDP는 Connectionless Oriented Serive데이터그램 방식을 제공, 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다. 또한 별도의 연결 설정이나 해제 과정이 존재하지 않다. 때문에 속도가 빠르나 신뢰성이 낮다. 또한 서버는 클라이언트와 1대 다로 연결 될 수 있다.

TCP 서버 특징

  • 서버소켓은 연결만 담당한다.
  • 서버와 클라이언트는 1대1로 연결된다.
  • 스트림 전송으로 전송 데이터의 크기가 무제한이다.
  • 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
  • Streaming 서비스에 불리하다. (손실된 경우 재전송 요청을 하므로)

UDP 서버 특징

  • 비연결형 서비스로 데이터그램 방식을 제공한다.
  • 비연결형 서비스이기 때문에, 연결을 설정하고 해제하는 과정이 존재하지 않는다.
  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
  • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  • 신뢰성이 낮다.
  • TCP보다 속도가 빠르다.
  • 패킷에 순서를 부여하여 재조립을 하거나 흐름 제어 또는 혼잡 제어와 같은 기능을 처리하지 않는다.

TCP 연결과 해제

TCP는 연결시에 3 Way Hand Shake를 사용하고 해제시에는 4 Way HandShak 를 사용한다.

연결 과정은 아래와 같다

  1. 클라인터가 서버에게 연결 요청 메시지 전송(SYN)
  2. 서버가 수락하고 (SYN + ACK) 를 보낸다
  3. 클라이언트가 다시 ACK를 보내고 연결을 맺는다

해제 과정은 아래와 같다

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그 전송
  2. 서버는 ACK를 보내고, 자신의 통신이 끝날 때까지 기다린다.(TIME_WAIT)
  3. 서버가 통신이 끝나면, 연결이 종료됬다고 FIN플래그 전송
  4. 클라이언트는 확인했다는 ACK를 보내고 종료한다.

HTTP와 HTTPS 차이점

HTTP는 HyperText Transfer Protocal로 HyperText(평서문)을 주고 받는 통신 규약이다. 이 과정에서 주고 받는 평서문을 제 3자가 가로채 볼 수 있고, 클라이언트는 응답이 실제 서버에서 온 것인지 보장 할 수 없다.

이러한 문제를 해결하기 위해 나온 것이 HTTPS다. S는 Secure Socket으로 신뢰를 가진 CA를 이용해 공개키와 개인키를 관리한다. 공개키로 암호화한 데이터는 개인키로만 복호화 할 수 있고, 개인키로 암호화한 데이터는 개인키로만 복호화 할 수 있다.

이렇게 함으로 클라이언트는 서버에서 온 응답임을 보장할 수 있게 된다. 다만 여전히 클라이언트는 공캐키를 가지고 있기때문에 제 3자의 Sniffing은 해결하지는 못했다.