본문 바로가기
Computer Science/컴퓨터 네트워크

컴퓨터 네트워크: State transition diagram

by 청량리 물냉면 2021. 10. 1.
반응형

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)
반응형