Network - TCP

이소라·2023년 1월 30일
0

TCP (Transmission Control Protocol)

Overview

  • 인터넷 프로토콜(IP)를 보완하기 위해 나옴
  • TCP와 IP를 묶어서 TCP/IP라 지칭함
  • IP 네트워크를 통한 호스트 통신을 하는 애플리케이션 간 octets(bytes) stream임
  • 신뢰할 만하고, 순서가 있으며, 에러를 확인하는 데이터 전송 규약
  • www, email, 원격 제어, 파일 전송과 같은 인터넷 애플리케이션은 TCP를 사용함
  • 커넥션 기반임
    • 데이터가 전송되기 전에 클라이언트와 서버 간의 커넥션이 연결됨
    • 서버는 커넥션이 연결되기 전에 클라이언트로부터 연결 요청을 들어야 함(passive open)
  • three-way handshake(active open), 재전송, 에러 감지는 신뢰성을 추가하는 반면에 지연을 늘림
  • 네트워크 혼잡 회피를 시행함
  • TCP의 취약점 : denial of service, connection hijacking, TCP veto, reset attack



Network function

  • TCP는 인터넷 프토토콜과 애플리케이션 사이 중간 단계에서의 통신 서비스를 제공함

    • 인터넷 모델의 전송 계층에서 호스트 간의 연결성을 제공함
    • 애플리케이션은 다른 호스트와의 연결을 통해 데이터를 전송하는 메커니즘을 알 필요 없음
      • 전송 계층에서 TCP가 모든 handshaking과 전송 내용을 처리하기 때문에
  • TCP는 IP 패킷이 없어지거나, 중복되거나, 순서에 맞지 않게 전달된 것을 감지할 수 있음

    • TCP는 없어진 IP 패킷의 재전송을 요청하고, 순서에 맞지 않은 데이터를 재정렬하고, 다른 문제들의 발생을 감소시켜서 네트워크 혼잡을 줄임
  • TCP는 정시 전송보다 정확한 전송에 최적화되어 있음

    • TCP는 Voice over IP와 같은 실시간 애플리케이션은 적합하지 않음
  • TCP는 재전송과 함께 긍정적인 승인(positive acknowledgement)을 사용하여 신뢰성을 얻음

    • 수신자가 데이터를 받을 때 마다 승인 메세지와 함께 응답함
    • 발신자는 모든 보낸 패킷을 기록하고, 패킷을 보냈을 때부터 타이머를 유지함
    • 승인를 받기 전에 타이머가 만료되면, 발신자가 패킷을 재전송함
      • 타이머는 패킷이 없어지거나 변조됬을 경우를 위해 필요함
  • TCP는 데이터 전송의 개별 단위인 segment를 추적함

    • 인터넷 계층 소프트웨어는 목적지 IP 주소가 포함된 헤더를 추가함으로써 각 TCP segment를 IP 패킷으로 캡슐화함
    • IP 패킷이 목적지의 컴퓨터 프로그램에 도달했을 때, 전송 계층의 TCP 소프트웨어는 segment를 재조립하고 정확한 순서인지 에러가 없는지 확인함



Protocol operation

  • TCP 프토토콜 과정은 3단계로 나뉘어짐

    1. 커넥션 연결
    2. 데이터 전송 단계
    3. 커넥션 종료
  • TCP 커넥션은 인터넷 소켓을 통해서 운영체제에 의해 제어됨

    • TCP 커넥션의 생명주기 동안, 양 끝단은 다음과 같은 상태 변화를 겪음
StateEndpointDescription
LISTEN서버원격 TCP 끝단으로부터 커넥션 요청을 기다림
SYN-SEND클라이언트커넥션 요청을 보낸 후 매칭되는 커넥션 요청을 기다림
ESTABLISHED서버 & 클라이언트열린 커넥션 상태, 전달받은 데이터를 수용자에게 전송할 수 있음
FIN-WAIT1서버 & 클라이언트원격 TCP로부터 커넥션 종료를 기다리거나 이전에 보낸 커넥션 종료 요청에 대한 승인을 기다림
FIN-WAIT2서버 & 클라이언트원격 TCP로부터 커넥션 종료 요청을 기다림
CLOSE-WAIT서버 & 클라이언트로컬 사용자로부터 커넥션 종료 요청을 기다림
CLOSING서버 & 클라이언트원격 TCP로부터 커넥션 종료 요청 승인을 기다림
LAST-ACK서버 & 클라이언트이전에 원격 TCP로부터 보낸 커넥션 종료 요청에 대한 승인을 기다림
TIME-WAIT서버 & 클라이언트커넥션의 모든 남아있는 패킷이 만료되었는지 확실하게 하기 위해 충분한 시간을 기다림
CLOSED서버 & 클라이언트커넥션 상태가 없음

Connection establishment

  • 클라이언트가 서버와 연결을 시도하기 전에, 서버는 커넥션을 위해 port와 연결하고 듣는 중이어야함 (passive open)
  • passive open이 되면, 클라이언트는 three-way handshake를 사용하여 active open을 시작하여 커넥션을 연결함
    1. SYN
      • 클라이언트가 서버에 SYN을 보냄으로써 active open이 수행됨
      • 클라이언트는 segment의 sequence number를 랜덤 숫자 A로 설정함
    2. SYN-ACK
      • 서버는 SYN-ACK로 응답함
      • acknowlegement number는 전달받은 seqence number에 1을 더해서 설정함(예: A + 1)
      • 패킷에 대해 서버가 정한 sequence number는 또다른 랜덤 숫자 B로 설정함
    3. ACK
      • 클라이언트는 서버에 ACK를 보냄
      • sequence number는 전달받은 acknowledgement number(예: A + 1)로 설정함
      • acknowledegement number는 전달받은 sequence number에 1을 더해서 설정함(예: B + 1)


이미지출처 : What is a TCP 3-way handshake process?

  • 1, 2단계는 한 방향에 대한 sequence number를 정하고 승인함
  • 2, 3단계는 다른 방향에 대한 sequence number를 정하고 승인함
  • 3단계를 통해 클라이언트와 서버는모두 승인을 받고, 양방향 커넥션이 연결됨

Connection termination

  • 커넥션 종료는 커넥션의 양쪽을 독립적으로 종료하는 four-way handshake를 사용함
    1. 커넥션의 절반을 중지하길 원하는 끝단에서 FIN 패킷을 전송함
    2. 다른 끝단에서 ACK 패킷과 함께 승인함
    3. 다른 끝단에서도 FIN 패킷을 전송함
    4. 처음 FIN을 보낸 끝단에서 마지막 ACK 패킷으로 응답함
    • 마지막 ACK 패킷을 전송한 후, 최종적으로 커넥션이 닫히기 전에 타이머가 만료되길 기다림
      • 이유 : ACK 전송에 실패할 경우, 서버에 ACK 재전송하기 위해서
      • 커넥션 중 한 끝단만 열려 있어도, 닫힌 끝단으로 데이터의 전송이 가능함
      • 기다리는 시간은 보통 30 sec, 1 min, 2 min임
    • 타이머의 시간이 만료된 후, 처음 FIN을 보낸 끝단은 CLOSED 상태에 들어감
    • port를 새로운 커넥션에서 사용 가능해짐

  • three-way handshake로 커넥션을 종료할 수 있음
    • 호스트 A가 FIN를 보낼 때, 호스트 B가 FIN & ACK로 응답하고, 호스트 A가 ACK로 응답함

Data transfer

  • UDP와 비교한 TCP의 주요 특징들
    • 순서대로 데이터 전송
      • 목적지 호스트는 sequence number에 따라 segments를 재정렬함
    • 손실한 패킷 재전송
      • 승인되지 않은 누적 스트림(cumulative stream)은 재전송됨
    • 에러 없는 데이터 전송
      • 신뢰성 있는 전달을 보장하기 위해 발신자가 데이터를 보내는 비율을 제한함
      • 수신자는 발신자에게 받을 수 있는 데이터 양을 끊임없이 알려줌
      • 수신자 호스트의 버퍼가 가득차면, 다음 승인은 전송을 연기하고 버퍼에 있는 데이터가 처리되도록 함
    • 혼잡 제어
      • 혼잡에 의해 손실된 패킷은 데이터 전송 비율의 감소를 유발함



참고

0개의 댓글