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 |