[CS][네트워크] 3-way handshake 와 4-way handshake

손경이·2024년 4월 27일
0

CS Study

목록 보기
17/25

3-way handshake 와 4-way handshake


TCP 통신을 할 때 연결 과정인 3-way handshake 와 연결 해제 과정인 4-way handshake

3-way handshake : 클라이언트가 서버에게 SYN 패킷을 보내고, 서버가 이에 대한 응답으로 SYN-ACK 패킷을 보내며, 클라이언트가 이에 대한 확인 응답으로 ACK 패킷을 보내는 과정

4-way handshake : 양쪽 모두가 FIN 패킷을 보내고, 상대방의 FIN에 대한 ACK를 보내는 과정

플래그 정보

  • SYN(SYnchronize sequence Numbers)
    • 연결 설정, 연결 확인을 보내는 무작위 숫자 값
  • ACK(ACKnowledgement)
    • 응답 확인, 클라이언트 혹은 서버로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK 값
  • FIN(FINish)
    • 연결 해제, 세션 연결을 종료시킬 때 사용
    • 더이상 전송할 데이터가 없음을 의미

> 3-way handshake

| 3-way handshake 연결 흐름
1. 클라이언트가 SYN을 보내고 SYN_SENT 상태로 대기
2. 서버는 SYN-RECEIVED 상태로 바꾸고 SYN과 ACK를 보냄
3. SYN과 ACK를 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버한테 ACK를 보냄
4. ACK를 받은 서버는 ESTABLISHED 상태로 변경

포트 상태 정보

  • CLOSED
    • 연결 없음, 연결 수립 시작 하기 전 기본 상태
  • LISTEN
    • 포트가 열린 상태로 연결 요청 대기 중
  • SYN_SENT
    • SYN을 요청한 상태
  • SYN_RECEIVED
    • SYN 요청을 받고 상대방의 응답을 기다리는 중
  • ESTABLISHED
    • 연결됨, 연결 수립이 완료된 상태, 서로 데이터 교환 가능

> 4-way handshake

| 4-way handshake 연결 흐름
1. close 실행한 클라이언트가 FIN을 보내고 FIN-WAIT-1 상태로 대기
2. 서버는 CLOSE_WAIT 상태로 변경하고 ACK를 전달,
동시에 해당 포트에 연결되어 있는 애플리케이션에게 close 요청
3. ACK을 받은 클라이언트는 FIN_WAIT-2로 상태 변경
4. close 요청을 받은 서버 애플리케이션은 종료 프로세스를 진행,
그리고 FIN을 클라이언트로 보내고 LAST-ACK 상태로 변경
5. FIN을 받은 클라이언트는 ACK을 서버에 전달하고 TIME-WAIT 상태로 변경
6. 일정 시간이 지나면 CLOSED 상태로 변경, ACK을 받은 서버도 포트를 CLOSED 상태로 변경하고 닫음

포트 상태 정보

  • ESTABLISHED
    • 연결됨, 연결 수립이 완료된 상태, 서로 데이터 교환 가능
  • FIN-WAIT-1
    • 자신이 보낸 FIN에 대한 ACK를 기다리거나 상대방의 FIN을 기다림
  • FIN-WAIT-2
    • 자신이 보낸 FIN에 대한 ACK를 받았고, 상대방의 FIN을 기다림
  • CLOSE-WAIT
    • 상대방의 FIN을 받은 상태, 상대방 FIN에 대한 ACK를 보내고 어플리케이션에 종료를 알림
  • LAST-ACK
    • CLOSE-WAIT 상태를 처리 후 자신의 FIN 요청을 보낸 후 FIN에 대한 ACK를 기다리는 상태
  • TIME-WAIT
    • 모든 FIN에 대한 ACK를 받고 연결 종료가 완료된 상태
    • 먼저 연결을 끊는 쪽에서 생성되는 소켓
    • 혹시 모를 전송 실패에 대비하기 위해 존재
  • CLOSED
    • 연결 없음, 연결 수립 시작 하기 전 기본 상태

참고

0개의 댓글