TCP는 TCP/IP 모델의 3계층인 트랜스포트 계층의 프로토콜이다.
Port번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스에 까지 데이터가 도달하게 하는 모듈(함수)이다.
데이터를 세그먼트(Segment, 출발지, 목적지 PORT, 전송 제어, 순서 검증 정보)로 감싸고 있다.
데이터 전달 보증, 순서를 보장 할 수 있는 이유는 3Way handshake과정이 있기 때문이다.
TCP는 연결지향 프로토콜로, 클라이언트와 서버가 서로에게 데이터를 보내기 전, 먼저 TCP 연결 설정을 할 필요가 있음을 의미한다.
TCP연결을 생성할 때 클라이언트 소켓 주소(IP 주소와 포트 번호)와 서버 소켓 주소(IP 주소와 포트 번호)를 연결과 연관시킨다. TCP연결이 설정된 후, 한쪽에서 다른 쪽으로 데이터를 보내려면 소켓을 통해 데이터를 TCP 연결로 보내면 된다.
서버 프로그램은 임의의 컴퓨터에서 수행되고 있는 클라이언트로부터의 초기 접속을 처리하는 특별한 출입문(즉, 특별한 소켓)을 가져야 하는데 여기서는 환영소켓이라 한다.
서버 프로세스가 실행되면, 클라이언트 프로세스는 서버로 TCP 연결을 시도한다. 이러한 초기 접속을 "출입문을 두드리는 것"으로 표현하고, 이는 클라이언트 프로세스에서 TCP 소켓을 생성함으로써 가능하다.
클라이언트는 TCP 소켓을 생성할 때 서버에 있는 환영소켓의 주소, 즉 서버의 IP 주소와 소켓의 포트 번호를 명시하고, 소켓을 생성한 후 서버에게 3-way 핸드세이크를 시도한다. 이상이 없다면, 서버는 이 클라이언트에게 지정된 연결 소켓을 생성한다.
전송 계층에서 일어나는 3-way 핸드세이크를 클라이언트와 서버 프로그램은 전혀 인식하지 못한다.
클라이언트에서 서버로 TCP 소켓을 생성하고, IP주소와 포트번호를 가지고? 연결을 시도한다. 이상이 없다면 서버에서는 클라이언트에게 지정된? 연결 소켓을 생성한다.
클라이언트 TCP는 서버 TCP 에게 TCP 세크먼트를 송신한다. SYN 세그먼트 헤더에는 SYN 비트와 여러가지 세그먼트를 가지고 있다.
서버 호스트에 도착한 데이터에서 SYN 세그먼트를 뽑아낸 후 클라이언트 TCP 로 연결 승인 세그먼트를 보낸다. 이를 SYN-ACK 세그먼트라고 한다.
SYN-ACK를 수신한 클라이언트는 서버로 다른 세그먼트를 송신한다. 그 후 마지막 세그먼트가 연결 승인 세그먼트를 확인한다.
앞의 세 단계가 완료되면
클라이언트와 서버 호스트들은 각각 서로에게 데이터를 포함하는 세그먼트를 보낼 수 있다. 이 각각의 다음 세그먼트들에 SYN 비트는 0으로 설정된다.
두 호스트들 사이에 3개의 패킷이 송신되는 이유로 TCP 연결 설정 절차를 3way 핸드셰이크라고 부른다.
출처: [경험의 연장선:티스토리]
https://livenow14.tistory.com/57#recentComments