안녕하세요!

FE 개발자 유진주입니다.

CS/네트워크

[컴퓨터네트워크] Chapter3.5 TCP 연결관리

ypearl 2023. 12. 4. 19:01

Chapter3.5 TCP 연결관리

  • TCP 연결
  • TCP 연결 설정
  • TCP 연결 해제
  • TCP 상태 변화

 

TCP 연결

- 1:1 소켓 연결

  • 연결 설정 과정(handshaking) 필요
  • 서버 연결 소켓: 서버 IP 주소서버 Port 번호 공유 가능
    → 하지만, 클라이언트 IP 주소, Port 번호가 다르므로
        같은 호스트의 IP 주소와 Port 번호를 가졌더라도, 각각의 소켓이 구분 가능하다!
  • 멀티캐스팅(multicasting) 지원 불가

* 소켓주소: IP 주소 + Port 번호

 

 

- Full-duplex(전이중) 통신

  • 양방향 동시 세그먼트 전송
  • MSS(Maximum Segment Size): 세그먼트의 데이터 필드 최대 크기 (보통 1460 바이트)
  • 송신 버퍼에서 MSS 단위로 송신

 

 

- 바이트 스트림(Byte Stream) 전송

  • 송신 프로세스가 소켓의 송신 버퍼에 전달(write)한 바이트 스트림을 수신
    소켓의 수신 버퍼에 순서대로 전송
  • 송신 프로세스는 송신 버퍼에 임의의 크기의 바이트열을 씀(write),
    TCP는 세그먼트 단위(MSS)로 수신 버퍼에 전달,
    수신 프로세스는 수신 버퍼에서 원하는 크기의 바이트열을 읽음(read)

 

 

 

 

TCP 연결 설정

- 3-way Handshake

  • 클라이언트서버 간에 동기(synchronization)를 맞추는 과정
  • 동기 정보: 소켓 주소, 시작 순서 번호(Initial Sequence Number), 수신 윈도우 크기(버퍼의 크기)

 

 

- SYN 세그먼트

  • 연결 설정을 위해 클라이언트 TCP가 서버 TCP에 전송
  • SYN 비트 1 설정
  • 시작 순서 번호(ISN) 설정
  • ACK를 위해 순서번호 1 소비
    (가상의 1 바이트 데이터 전송)

* ACK: SN + 1

 

- SYN+ACK 세그먼트

  • SYN 세그먼트를 수신한 서버 TCP가 클라이언트 TCP에 전송
  • SYN 비트와 ACK 비트 1 설정
  • 시작 순서 번호(ISN) 설정
  • 확인 번호(ACK) 설정
  • 수신 윈도우 크기 설정
  • ACK를 위해 순서번호 1 소비
    (가상의 1 바이트 데이터 전송)
  • 이후 DATA  세그먼트 전송

 

- ACK 세그먼트

  • SYN+ACK 세그먼트를 수신한 클라이언트 TCP가 서버 TCP에 전송
  • ACK 비트 1 설정
  • 확인번호 (ACK) 설정
  • 수신 윈도우 크기 설정
  • 데이터 포함 가능
  • 데이터 미포함 시에는 순서 번호 소비하지 않음
  • 이후 DATA 세그먼트 전송

 

 

TCP 연결 해제

- 4-way Handshake

*ACK와 FIN 세그먼트를 하나로 합쳐서 보낼 수도 있다.

 

 

- 3-way Handshake

  • Full-close: 서버 ACK 세그먼트와 FIN 세그먼트 통합
  • Half-close: 4-way handshake

 

- FIN 세그먼트

  • ACK를 위해 순서 번호 1 소비

 

- ACK 세그먼트

  • 데이터가 없으면 순서 번호 소비 없음

 

- 클라이언트 시간 대기(Time-Wait)

  • 마지막 ACK 세그먼트 손실 시에 재전송되는 FIN 세그먼트 처리
  • 일반적으로 30초

 

 

TCP 상태 변화

- 클라이언트 상태 변화