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 서버 특징
UDP 서버 특징
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는 HyperText Transfer Protocal로 HyperText(평서문)을 주고 받는 통신 규약이다. 이 과정에서 주고 받는 평서문을 제 3자가 가로채 볼 수 있고, 클라이언트는 응답이 실제 서버에서 온 것인지 보장 할 수 없다.
이러한 문제를 해결하기 위해 나온 것이 HTTPS다. S는 Secure Socket으로 신뢰를 가진 CA를 이용해 공개키와 개인키를 관리한다. 공개키로 암호화한 데이터는 개인키로만 복호화 할 수 있고, 개인키로 암호화한 데이터는 개인키로만 복호화 할 수 있다.
이렇게 함으로 클라이언트는 서버에서 온 응답임을 보장할 수 있게 된다. 다만 여전히 클라이언트는 공캐키를 가지고 있기때문에 제 3자의 Sniffing은 해결하지는 못했다.