본문 바로가기
카테고리 없음

[WEB] 3-way-handshake, 4-way-handshake

by 상똥 2024. 1. 10.

[TCP 통신]

- TCP (Transmission Control Protocol) : 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜

* 가상회선 패킷 교환 방식 : 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식 

 

[3-way-handshake, 4-way-handshake]
1. 둘의 차이?
- 3-way-handshake는 TCP의 연결 과정
- 4-way-handshake는 TCP의 연결 해제 과정
* TCP는 위와같은 과정이 있어 신뢰성이 있지만 느리고, UDP는 위와 같은 과정이 없어서 신뢰성이 없지만 빠르다
 
2. 포트 상태 정보
- CLOSED : 포트가 닫힌 상태
- LISTEN : 포트가 열린 상태로 연결 요청 대기중
- SYN_RVC : SYN 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED : 포트 연결 상태
 
3. 플래그 정보
- TCP header에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit는 URG / ACK / PSH / RST / SYN / FIN의 의미를 가짐

     
SYN Synchronization, 연결요청플래그 TCP 교환과정의 첫 번째 패킷, 세션 연결을 위해 임의적 시퀀스 번호를 보냄
ACK Acknowledgement, 응답 플래그 첫번째 패킷을 받았다는 것 알려주는 패킷, 성공/실패를 판단하여 다음 패킷을 전송
RST REST, 재연결 종료 비정상적인 세션 연결 끊기, 즉시 연결을 끊는 행위
PSH Push OSI 7계층인 Application 계층으로 전송하는 Flag
URG Urgent, 긴급 데이터 행위가 유효한 것인지 나타냄
FIN Finish, 연결 종료 요청 세션 종료 시킬 때 사용

 
[3-way-handshake]
1. 개념
- TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish)하는 과정
- 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장
- 실제로 데이터 전달이 시작되기 전에 한쪽에게 다른쪽이 준비되었음을 알림
- 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미
 
2. 작동 방식

(1) SYN(연결 요청 플래그) 단계
- 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냄
* ISN: 초기 네트워크 연결을 할 때 할당된 고유 시퀀스 번호를 말하며 장치마다 다름
 
(2) SYN + ACK(응답 플래그) 단계 
- 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보냄
- 승인번호로 클라이언트의 ISN+1을 보낸다
 
(3) ACK단계 
- 클라이언트는 서버의 ISN+1한 값인 승인번호를 담아 ACK를 서버에 보냄
- 이 단계에서 데이터 전송 가능
 
[4-way-handshake]
1. 개념
- 연결을 해제하는 과정
- FIN플래그 사용
 
2. 연결 해제 종류
- 갑작스런 연결 해제, Abrupt connection release
- 정상적인 연결 해제, Graceful connection release
 
3. 갑작스런 연결 해제
- 존재하지 않는 TCP연결에 대해 비SYN 세그먼트가 수신된 경우
- 여린 커넥션에서 일부 TCP 구현이 잘못된 헤더가 있는 세그먼트가 수신된 경우 
- 일부 구현에서 기존 TCP 연결을 종료해야 하는 경우
 
4. 정상적인 연결 해제

(1)
- 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보냄
- 클라이언트는 FIN_WAIT_1 상대로 들어가고 서버의 응답을 기다림
(2)
- 서버는 클라이언트로 ACK라는 승인 세그먼트를 보냄
- CLOSE_WAIT상태로 들어감
- 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어감
(3)
- 서버는 ACK를 보내고 일정 시간 이후에 클라이언드에 FIN이라는 세그먼트를 보냄
(4) 
- 클라이언트는 TIME_WAIT상태가 되고 다시 서버로 ACK를 보내 서버는 CLOSED상태가 됨
- 이후 클라이언트는 어느정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원 연결이 해제됨
*time wait : 지연 패킷이 발생해 데이터 무결성 문제가 발생하는 것을 방지, LAST_ACK상태로 계속 유지되는 것을 방지