ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TCP 커넥션이란 무엇인가
    CS지식/네트워크 2021. 5. 27. 23:07

    HTTP는 웹에서 클라이언트와 서버가 통신을 하기 위해 사용되는 프로토콜이다.

    HTTP를 사용한 통신에서 실제로 데이터가 클라이언트에서 서버로 가고 서버에서 클라이언트로 가는 것은 패킷 교환 네트워크 프로토콜들의 계층화된 집합인 TCP/IP를 통해 이루어진다.

    클라이언트는 서버로 TCP/IP 커넥션을 맺을 수 있고 TCP/IP의 특성에 의해 통신되는 메시지들은 손실이나 순서가 바뀌지 않고 안전하게 전달된다.

     

    TCP 커넥션은 어떻게 이루어질까?

    웹 브라우저(클라이언트)에서 URL을 입력받으면 URL에서 IP주소와 포트번호를 추출한다.

    목적지의 IP주소와 포트번호를 가지고 TCP커넥션을 생성하게 된다.

    먼저 클라이언트는 TCP커넥션을 생성하기 위해 작은 TCP 패킷을 서버에게 보낸다.

    이 패킷에는 SYN이라는 플래그를 가지고 있어 보낸 패킷이 커넥션을 생성하기 위한 요청이라는 것을 알려준다.

    서버가 클라이언트로부터 패킷을 받으면 커넥션을 요청을 수락한다는 의미로 SYN과 ACK 플래그를 호함하여 TCP 패킷을 클라이언트에게 보낸다.

    마지막으로 클라이언트는 TCP 커넥션이 잘 맺어졌다는 것을 알기기 위해 서버에게 다시 확인응답 신호를 보내고

    클라이언트와 서버사이에 TCP 커넥션이 이루어져 HTTP 통신을 할 수 있게 된다.

     

    이렇게 연결된 TCP 커넥션을 통해 메시지들은 다음과 같이 이동한다.

    HTTP는 TCP 커넥션을 통해 메시지 데이터의 내용을 순서대로 보낸다. 메시지를 받은 TCP는 세그먼트라는 단위로 데이터를 나누고, 각 세그먼트는 목적지로 IP 패킷에 담겨 전달된다.

     

    HTTP 프로토콜 스택

    하나의 컴퓨터에는 여러 개의 TCP 커넥션이 있을 수 있는데 TCP는 여러 개의 커넥션을 포트 번호를 통해 유지한다.

    포트 번호는 애플리케이션을 구분짓는 역할을 하여 포트 번호를 통해 어떠한 애플리케이션인지 알 수 있다.

    <발신지 IP 주소, 발신지 포트 번호, 수신지 IP주소, 수신지 포트 번호> 이 4가지 정보로 TCP 커넥션을 식별하게 된다.

     

    TCP 커넥션을 통한 통신에서는 하드웨어의 성능, 네트워크와 서버의 전송 속도, 요청과 응답 메시지의 크기, 클라이언트와 서버 간의 거리에 따라 지연이 발생할 수 있다.

    이러한 TCP 외부 요인이외에 TCP의 내부 요인에 의해 지연이 발생하기도한다.

    먼저, 위에서 언급한 TCP 커넥션이 이루어지는 과정에서 새로운 TCP 커넥션이 생성될 때마다 ①일련의 과정(핸드쉐이크)이 필요하므로 지연이 발생하게 된다.

     

    다음으로 ②확인응답으로 인해 지연이 발생할 수 있다.

    인터넷 환경 자체가 데이터 전송에 있어 손실이나 손상, 순서를 보장하지 않기 때문에 TCP가 역할을 맡아 안전하고 신뢰성있는 통신환경을 제공한다.

    TCP 세그먼트는 순번과 데이터 무결성 checksum을 가지고 있어 수신자는 이 정보를 이용하여 세그먼트를 순서대로 받았는지와 손실이 없는지 확인하여 확인응답 패킷을 송신자에게 보낸다.

    만약에 정해진 시간 안에 확인응답 패킷이 오지 않는다면 송신자는 재송신을 하게 된다.

    이러한 확인응답에 의해 지연이 발생하게 된다.

     

    마지막으로 ③TCP의 느린 시작(slow start)로 인해 지연이 발생할 수 있다.

    TCP의 데이터 전송 속도는 TCP 커넥션이 만들어진 지 얼마나 지났는지에 따라 달라진다.

    처음에는 데이터 전송 속도의 최대 속도를 제한하고 데이터가 성공적으로 전송되면서 시간이 지남에 따라 속도 제한을 높여준다.

    이러한 방식을 TCP의 느린 시작이라고 한다.

    이는 갑작스러운 부하와 혼잡을 방지하는 데 쓰이며 새롭게 생성된 TCP 커넥션은 지연이 발생하게 되는 것이다.

     

    댓글

Designed by Tistory.