3.5.1 TCP 연결

TCP는 애플리케이션 프로세스가 데이터를 다른 프로세스에게 보내기 전에 두 프로세스가 ‘핸드 셰이크’를 먼저 해야 하므로 연결 지향형(connection-oriented) 이다

즉, 데이터 전송을 보장하는 파라미터들을 각자 설정하기 전에 사전 세그먼트들을 보내야 한다

TCP의 ‘연결’은 두 통신 종단 시스템의 TCP에 존재하는 상태를 공유하는 논리적인 것이다

  • 오직 종단 시스템에서만 동작하고 중간의 네트워크 요소에서는 동작하지 않으므로 중간의 네트워크 요소들은 TCP 연결 상태를 유지하지 않는다

TCP 연결은 전이중 서비스(full-duplex service)를 제공한다

호스트 A와 B 프로세스 사이에 TCP 연결이 있다면 애플리이케션 계층 데이터는 B에서 A로 흐르는 동시에 A에서 B로 흐를 수 있다

TCP연결은 단일 송신자와 단일 수신자 사이의 점대점(point-to-point) 이다 한 송신자가 여러 수신자에게 데이터를 전송하는 멀티캐스팅(multicasting) 은 불가능하다


  • 클라이언트 프로세스 : 연결을 초기화하는 프로세스
  • 서버 프로세스 : 다른 프로세스
세 방향 핸드셰이크
  1. 클라이언트 애플리케이션 프로세스는 서버 프로세스와 연결 설정을 원한다고 TCP 클라이언트에게 먼저 알린다
  2. 클라이언트의 트랜스포트 계층은 서버의 TCP와의 TCP 연결 설정을 진행한다
    • 클라이언트가 먼저 특별한 TCP 세그먼트를 보낸다
  3. 서버는 두번째 특별한 TCP 세그먼트로 응답한다
  4. 마지막으로 클라이언트가 세번째 특별한 세그먼트로 다시 응답한다
  • 처음 2 개의 세그먼트에는 페이로드(애플리케이션 계층 데이터)가 없다
  • 세번째 세그먼트는 페이로드를 포함할 수 있다

두 호스트 사이에 3개의 세그먼트가 보내지므로 세 방향 핸드셰이크라 부른다

TCP 연결이 설정된 후

TCP 연결이 설정되면 두 애플리케이션 프로세스는 서로 데이터를 보낼 수 있다

  1. 클라이언트 프로세스는 소켓을 통해 데이터의 스트림을 전달한다
  2. 데이터가 관문을 통해 전달되면, 이제 데이터는 클라이언트에서 동작하고 있는 TCP에 맡겨진다
  3. TCP는 초기 세 방향 핸드셰이크동안 준비된 버퍼 중의 하나인 연결의 송신 버퍼로 데이터를 전송
  4. 때때로 TCP는 송신 버퍼에서 데이터 묶음을 만들어서 네트워크로 전송

세그먼트로 모아 담을 수 있는 최대 데이터의 양은 최대 세그먼트 크기(Maximum segment size,MSS) 로 제한

  • 로컬 송신 호스트에 의해 전송될 수 있는 가장 큰 링크 계층 프레임 길이(최대 전송 단위, MTU)에 의해 결정되고
  • TCP 세그먼트가 단일 링크 계층 프레임에 딱 맞도록 하여 정해진다
TCP 세그먼트

TCP 헤더 + 클라이언트 데이터

  1. 세그먼트는 네트워크 계층에 전달되어 네트워크 계층 IP 데이터 그램안에 각각 캡슐화
  2. 네트워크로 송신
  3. TCP가 상대에게서 세그먼트를 수신했을 때 세그먼트의 데이터는 TCP 연결의 수신 버퍼에 위치
  4. 애플리케이션은 이 버퍼로부터 데이터의 스트림을 읽는다