컴퓨터 네트워크: State transition diagram

2021. 10. 1. 00:45·Computer Science/컴퓨터 네트워크
반응형

TCP: Transmission Control Protocol

3. State transition diagram

TCP 연결요청 / 수락 과정

 

State transition diagram

 

 

<연결>

 

 

Client / Server 동작 및 상태 설명 (왼: 클라이언트 / 오: 서버)

Passive open 수동으로 서버를 열어놓음

[LISTEN] 연결요청 대기, 클라이언트로부터 SYN이 오기를 기다리는 상태

Active open / SYN Active open하기 위해 SYN을 서버에게 전송

[SYN-SENT] SYN을 전송한 뒤 서버로부터 SYN+ACK이 오기를 대기중인 상태

SYN / SYN + ACK 클라이언트로부터 SYN이 오면 클라이언트에게 SYN + ACK을 전송

[SYN-RCVD] 클라이언트로부터 SYN을 수신받고 ACK 올 때까지 기다리는 구간

SYN+ACK / ACK 서버로부터 SYN+ACK이 오면 서버에게 ACK를 전송

ACK 서버로 ACK을 보냄

[ESTABLISHED] 연결 완료

→ 버퍼 연결됨. 데이터 송수신 가능

 

 

 

<종료>

 

Client / Server 동작 및 상태 설명 (왼: 클라이언트 / 오: 서버) (Half Close)

Close / FIN 연결종료(Close)를 위해 서버에게 FIN을 보냄

[FIN-WAIT1] 첫번째 FIN을 서버에게 보내고 ACK를 기다림

FIN / ACK 클라이언트로부터 FIN을 받고 ACK을 전송

[FIN-WAIT2] 첫번째 FIN에 대한 ACK를 받고, 두번째 FIN을 대기

*클라이언트 쪽 Sending buffer 삭제 / Recieving buffer에는 서버가 보낸 데이터 계속 들어와서 쌓임

[CLOSE-WAIT] 첫번째 FIN을 받고 ACK을 전송한 상태. 응용 프로그램 종료 대기

Close / FIN 서버 측 연결종료(Close)를 위해 클라이언트에게 FIN을 보냄

[LAST-ACK] 서버 측에서 클라이언트에게 FIN을 보낸 상태. ACK 수신 대기

FIN / ACK 서버에게서 FIN 요청이 오면 ACK을 전송

[TIME-WAIT] 두 번째 FIN(서버측에서 전송한 FIN) 받고 ACK 보낸 상태. 1 ~ 2분 정도 대기 후 CLOSE

ACK 클라이언트로부터 FIN요청에 대한 ACK를 받음

[CLOSED] 연결 종료

 

* CLOSED: client / server의 송수신 버퍼가 모두 삭제된 상태

 

 

 

Time-line diagram

 

Client / Server 동작 및 상태 설명 (왼: 클라이언트 / 오: 서버)

Passive open 수동으로 서버를 열어놓음

[LISTEN] 연결요청 대기, 클라이언트로부터 SYN이 오기를 기다리는 상태

Active open / SYN Active open하기 위해 SYN을 서버에게 전송

[SYN-SENT] SYN을 전송한 뒤 서버로부터 SYN+ACK이 오기를 대기중인 상태

SYN / SYN + ACK 클라이언트로부터 SYN이 오면 클라이언트에게 SYN + ACK을 전송

[SYN-RCVD] 클라이언트로부터 SYN을 수신받고 ACK 올 때까지 기다리는 구간

SYN+ACK / ACK 서버로부터 SYN+ACK이 오면 서버에게 ACK를 전송

ACK 서버로 ACK을 보냄

 

[ESTABLISHED] 연결 완료

데이터 송수신

 

Close / FIN 연결종료(Close)를 위해 서버에게 FIN을 보냄

[FIN-WAIT1] 첫번째 FIN을 서버에게 보내고 ACK를 기다림

FIN / ACK 클라이언트로부터 FIN을 받고 ACK을 전송

[FIN-WAIT2] 첫번째 FIN에 대한 ACK를 받고, 두번째 FIN을 대기

[CLOSE-WAIT] 첫번째 FIN을 받고 ACK을 전송한 상태. 응용 프로그램 종료 대기

 

데이터 송신

(서버 측에서 클라이언트 측에 데이터를 보내고,

클라이언트는 데이터를 받았다는 뜻으로 서버에게 ACK을 전송)

 

Close / FIN 서버 측 연결종료(Close)를 위해 클라이언트에게 FIN을 보냄

[LAST-ACK] 서버 측에서 클라이언트에게 FIN을 보낸 상태. ACK 수신 대기

FIN / ACK 서버에게서 FIN 요청이 오면 ACK을 전송

[TIME-WAIT] 두 번째 FIN(서버측에서 전송한 FIN) 받고 ACK 보낸 상태. 1 ~ 2분 정도 대기 후 CLOSE

ACK 클라이언트로부터 FIN요청에 대한 ACK를 받음

[CLOSED] 연결 종료

 

 

TIME LIMIT이 필요한 이유

1. 마지막 ACK이 없어지는 경우를 대비

2. 연결 종료 후 새로운 PORT 번호로 새로운 CONNECTION을 열기 위함


☞ TIME-WAIT 상태에서는 아직 버퍼가 살아있기 때문에 재전송된 패킷에 대한 ACK을 서버에게 다시 보내줄 수 있다.

 

 

 

포트번호 #3456을 사용하던 클라이언트가 서버에 FIN을 보내 연결을 종료한 직후 다시 연결해야 하는 상황이 생겼을 때, 종료한 PORT 번호 #3456를 재사용하게 되면 이전 실행 시 제 시간에 들어오지 않아 서버로부터 재전송 받은 패킷이 해당 PORT를 찾아 들어와 데이터를 오염시킬 수 있다. 

이를 방지하기 위해 TIME-WAIT을 이용해 #3456를 살려두고 다른 PORT번호를 배정받는다.

 

 

Denying a connection

SYN을 받고 SYN + ACK대신 RST를 보내면 연결되지 않고 바로 종료된다. 

 

 

Aborting a connection

 

RST + ACK 

연결을 종료하고자 하는 상대가 RST를 보내면 handshake 없이 바로 종료

ex. 컴퓨터 종료

 

 

 

 


자료 출처:

  • TCP/IP Protocol Suite 4th Edition Slide
    (Behrouz A. Forouzan 저, McGraw-Hill, 2010)
반응형
저작자표시 비영리 변경금지 (새창열림)

'Computer Science > 컴퓨터 네트워크' 카테고리의 다른 글

컴퓨터 네트워크: Error Control  (0) 2021.10.07
컴퓨터 네트워크: Flow Control  (0) 2021.10.05
컴퓨터 네트워크: Windows in TCP  (0) 2021.10.01
컴퓨터 네트워크: A TCP Connection  (0) 2021.09.24
컴퓨터 네트워크: Segment  (0) 2021.09.24
컴퓨터 네트워크: TCP Services, TCP Features  (0) 2021.09.09
'Computer Science/컴퓨터 네트워크' 카테고리의 다른 글
  • 컴퓨터 네트워크: Flow Control
  • 컴퓨터 네트워크: Windows in TCP
  • 컴퓨터 네트워크: A TCP Connection
  • 컴퓨터 네트워크: Segment
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    웹사이트
    클론 프로젝트
    프로그래머스
    Til
    타입스크립트
    d3
    자바스크립트
    spring boot
    구현
    리액트
    블로그 제작
    플러터
    강의내용정리
    프로젝트
    뉴렉처
    파이썬
    mysql
    포트폴리오
    Jiraynor Programming
    공식문서
    알고리즘
    백준
    자바
    SWEA
    React
    Next.js
    AWS
    컴퓨터네트워크
    bfs
    ZeroCho
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
컴퓨터 네트워크: State transition diagram
상단으로

티스토리툴바