TCP

BirdsOnTree·2022년 10월 26일
0

Web

목록 보기
4/8
post-thumbnail

TCP

TCP는 TCP/IP 모델의 3계층인 트랜스포트 계층의 프로토콜이다.
Port번호를 사용하여 도착지 컴퓨터의 최종 도착지인 프로세스에 까지 데이터가 도달하게 하는 모듈(함수)이다.
데이터를 세그먼트(Segment, 출발지, 목적지 PORT, 전송 제어, 순서 검증 정보)로 감싸고 있다.
데이터 전달 보증, 순서를 보장 할 수 있는 이유는 3Way handshake과정이 있기 때문이다.

TCP 프로세스 연결 과정

TCP는 연결지향 프로토콜로, 클라이언트와 서버가 서로에게 데이터를 보내기 전, 먼저 TCP 연결 설정을 할 필요가 있음을 의미한다.

TCP연결을 생성할 때 클라이언트 소켓 주소(IP 주소와 포트 번호)와 서버 소켓 주소(IP 주소와 포트 번호)를 연결과 연관시킨다. TCP연결이 설정된 후, 한쪽에서 다른 쪽으로 데이터를 보내려면 소켓을 통해 데이터를 TCP 연결로 보내면 된다.

서버 프로그램은 임의의 컴퓨터에서 수행되고 있는 클라이언트로부터의 초기 접속을 처리하는 특별한 출입문(즉, 특별한 소켓)을 가져야 하는데 여기서는 환영소켓이라 한다.

서버 프로세스가 실행되면, 클라이언트 프로세스는 서버로 TCP 연결을 시도한다. 이러한 초기 접속을 "출입문을 두드리는 것"으로 표현하고, 이는 클라이언트 프로세스에서 TCP 소켓을 생성함으로써 가능하다.

클라이언트는 TCP 소켓을 생성할 때 서버에 있는 환영소켓의 주소, 즉 서버의 IP 주소와 소켓의 포트 번호를 명시하고, 소켓을 생성한 후 서버에게 3-way 핸드세이크를 시도한다. 이상이 없다면, 서버는 이 클라이언트에게 지정된 연결 소켓을 생성한다.
전송 계층에서 일어나는 3-way 핸드세이크를 클라이언트와 서버 프로그램은 전혀 인식하지 못한다.

클라이언트에서 서버로 TCP 소켓을 생성하고, IP주소와 포트번호를 가지고? 연결을 시도한다. 이상이 없다면 서버에서는 클라이언트에게 지정된? 연결 소켓을 생성한다.

  1. 연결 요청단계
    클라이언트 측 TCP는 서버 TCP에게 특별한 TCP 세그먼트를 송신한다. 이 특별한 세그먼트는 애플리케이션 계층 데이터를 포함하지 않는다. 세그먼트 헤더에 SYN 비트라고 불리는 하나의 플래그 비트를 가지고, 이러한 특별한 세그먼트를 SYN 세그먼트라 부른다.
    추가로 클라이언트는 최초의 순서번호(client_isn)을 선택하고, 최초의 TCP SYN 세그먼트의 순서번호 필드에 이 번호를 넣는다. 이 세그먼트는 IP 데이터그램 안에서 캡슐화되고 서버로 송신된다.

클라이언트 TCP는 서버 TCP 에게 TCP 세크먼트를 송신한다. SYN 세그먼트 헤더에는 SYN 비트와 여러가지 세그먼트를 가지고 있다.

  1. 연결 승인단계
    1단계에서 보낸 데이터그램이 서버 호스트에 도착했을 때, 서버는 데이터 그램에서 TCP SYN 세그먼트를 뽑아낸다. 그리고 연결에 TCP 버퍼와 변수들을 할당한다. 또한 클라이언트 TCP로 연결 승인 세그먼트를 송신한다. 이 연결 승인 세그먼트도 애플리케이션 데이터를 포함하지 않는다. 그러나 세그먼트 헤더 안에 3개의 중요한 정보를 포함한다. 1. SYN비트는 1로 설정된다. 2. TCP 세그먼트 헤더의 확인응답 필드는 client_isn+1로 설정된다. 3. 자신의 최초의 순서번호(server_isn)을 선택하고, TCP 세그먼트 헤더의 순서번호 필드에 이 값을 넣는다. 이 과정은 "나는 당신의 최초 순서번호(client_isn)를 가지고 연결을 시작하기 위해서 당신의 SYN 패킷을 수신했으며, 이 연결설정에 동의하고, 나의 최초 순서번호는 server_isn이다"라고 말하는 것과 같다. 연결 승인 세그먼트는 SYN-ACK 세그먼트라 부른다.

서버 호스트에 도착한 데이터에서 SYN 세그먼트를 뽑아낸 후 클라이언트 TCP 로 연결 승인 세그먼트를 보낸다. 이를 SYN-ACK 세그먼트라고 한다.

  1. ACK 단계
    SYN-ACK를 수신한 클라이언트는 연결에 버퍼와 변수들을 할당한다. 그 다음에 클라이언트 호스트는 서버로 또 다른 세그먼트를 송신한다.
    이 마지막 세그먼트가 서버의 연결 승인 세그먼트를 확인한다. (클라이언트는 TCP 세그먼트 헤더의 확인응답 필드안에 server_isn+1 값을 넣는 것으로 그 일을 한다.) 연결이 설정되었기 때문에 SYN 비트는 0으로 설정되고, 3 way 핸드셰이크의 세 번째 단계는 클라이언트에서 서버로 세그먼트 페이로드에 데이터를 보낼 수 있다.

SYN-ACK를 수신한 클라이언트는 서버로 다른 세그먼트를 송신한다. 그 후 마지막 세그먼트가 연결 승인 세그먼트를 확인한다.

연결 완료

앞의 세 단계가 완료되면
클라이언트와 서버 호스트들은 각각 서로에게 데이터를 포함하는 세그먼트를 보낼 수 있다. 이 각각의 다음 세그먼트들에 SYN 비트는 0으로 설정된다.
두 호스트들 사이에 3개의 패킷이 송신되는 이유로 TCP 연결 설정 절차를 3way 핸드셰이크라고 부른다.

출처: [경험의 연장선:티스토리]
https://livenow14.tistory.com/57#recentComments

0개의 댓글