스터디 - 3way, 4way handshake

정상화·2023년 4월 13일
0

스터디

목록 보기
5/10

TCP 기반의 초기 연결


간단 개요
1. 클라이언트 -> 서버 : 연결 요청
2. 서버 -> 클라이언트 : 연결 요청 확인&수락
3. 클라이언트 -> 서버 : 요청 수락 확인


그림

1. 클라이언트에서 서버로 SYN요청을 보냄

SYN(Synchronization): TCP 의 제어플래그 중 하나.
'이 세그먼트로 연결을 시작합니다'

2. 서버에서 클라이언트로 SYN+ACK 응답을 보냄

ACK(Acknowlege): TCP의 제어플래그 중 하나.
'이 세그먼트는 요청에 대한 응답입니다.'

3. 클라이언트에서 서버로 ACK 응답을 보냄

3way handshake는 TCP에서 연결을 처음 시작할 때 사용하는 일종의 관례

플래그

  • SYN 세그먼트는 데이터를 담고 있지 않다(헤더만 존재한다).
  • 마찬가지로 SYN+ACK 세그먼트는 데이터를 담고 있지 않다.
  • ACK 세그먼트는 데이터를 가질 수도 있고 안 가질 수도 있다.

TCP 기반의 연결 종료


간단 개요
1. 클라이언트 -> 서버 : 종료 요청
2. 서버 -> 클라이언트 : 요청 응답
3. 서버 -> 클라이언트 : 종료 요청 수락
4. 클라이언트 -> 서버 : 수락에 대한 응답


그림

1. 클라리언트에서 서버로 FIN 요청

FIN(Finish): TCP의 제어플래그 중 하나
'이 세그먼트로 연결 종료를 요청합니다.'

2. 서버에서 클라이언트로 ACK 응답

3. 서버에서 클라이언트로 FIN 요청

4. 클라이언트에서 서버로 ACK응답

특이사항

클라이언트가 서버의 FIN에 대해 ACK을 보낸 후 연결이 '즉시' 종료되지 않는다.
이 기간을 TIME-WAIT이라고 한다.

서버가 FIN과 ACK을 거의 동시에 보내는 경우 그림과 같이 FIN+ACK으로 나가기도 한다.

클라이언트의 상태서버의 상태액션
ESTABLISHEDESTABLISHED데이터 주고 받음(아직 종료요청 X)
FIN-WAIT1CLOSE-WAIT클라이언트 FIN 보냄, 서버 FIN 받음
FIN-WAIT2CLOSE-WAIT클라이언트 ACK 받음, 서버 ACK 보냄
FIN-WAIT2LAST-ACK클라이언트 FIN 받음, 서버 FIN 보냄
TIME-WAITCLOSED클라이언트 ACK 보냄, 서버 ACK 받음
CLOSEDCLOSED2MSL이 지남

2MSL(Maximum Segment Lifetime):패킷이 폐기되기 전에 네트워크에서 살아있을 수 있는 시간

TIME-WAIT은 왜 필요한가

  • 지연 패킷 문제 : 새로운 연결이 성사됐는데 이전 상대가 보낸 데이터가 이제서야 도착하면 문제가 생길 수 있음.

  • 연결 종료 문제: 서버가 ACK을 보내고 Last-Ack에 빠졌는데 해당 Ack이 중간에 손실된 상황리라 치자. 서버입장에선 아무리 기다려도(Last-ack상태) 답장이 없으니 다시 Fin을 보낸다. 이때 클라이언트가 time-wait없이 즉시 종료됐다면 클라이언트는 당연히 답장을 안해줄 거고 서버는 무한 대기가 된다.


전체 그림



참고자료


  • TCP/IP Protocol Suite, 4th Edition
  • 챗gpt
profile
백엔드 희망

4개의 댓글

comment-user-thumbnail
2023년 4월 13일

TIME-WAIT가 왜 필요한지에 대해 이유를 따로 정리해주셔서 이해가 잘 되었던것 같습니다! 😊

답글 달기
comment-user-thumbnail
2023년 4월 13일

정리를 잘해주신거 같은데 내용 자체는 어려운 내용인거 같네요,,,^^ 여러번 봐야겠습니당

답글 달기
comment-user-thumbnail
2023년 4월 13일

어려운 내용인데 그림이 있어서 보기 좋았습니다!

답글 달기
comment-user-thumbnail
2023년 4월 14일

연결할때는 3way, 연결 해제할때는 4way로 작동한다는 것에 대해서 알게되었습니다.

답글 달기