- TCP 프로토콜에서 장치 간 연결을 성립시킬 때 사용하는 기법.
- TCP는 정확하고 안전하게 데이터를 전송한다고 했다.
- 그 안전함의 과정 중 첫 번째 단계이다.
- 클라이언트와 서버가 연결되는 시작 단계.
- 아래 3-way handshake를 통해 정확성을 보장하고, 연결을 성립시킨다.
- 데이터 전송은 정상적인 연결 성립 이후에 발생하겠지?
1. Client ---> Server
TCP SYN
2. Server ---> Client
TCP SYN+ACK
3. Client ---> Server
TCP ACK
여기서 SYN, ACK와 같은 것들을 제어 플래그(Control Flag) 라고 한다.
(자세한 사항은 추후 포스트로 다룰 예정)

| Flag 명 | 직역 | 설명 | |
| URG | Urgent | 긴급한 | 특정 데이터가 긴급하여, 우선순위가 지정되어야 함을 수신측에 알림 |
| ACK | Acknowledgement | 승인 | SYN에 대한 응답 |
| PSH | Push | 푸시 | 버퍼가 채워지길 기다리지 않고 바로 수신측에 던짐 |
| RST | Reset | 초기화 | 연결 초기화 과정에서 사용된다. |
| SYN | Synchronize | 동기화 | 초기 세션 설정에 사용됨 |
| FIN | Finish | 끝 | 세션을 종료시킬 때 사용된다. |
- 3way handshake는 아래와 같은 Flow 로 진행된다.
- 단순히 listen(), bind(), accept(), connect()만 된다고 생각했던 나는
- 아래를 보고 네트워크에 대해 더 잘 이해할 수 있었다...

1. Client ---> Server
TCP SYN
클라이언트 쪽에서 SYN을 보낸다.
자신의 상태를 SYN_SENT로 바꾼다.
대기...
2. Server ---> Client
TCP SYN+ACK
서버 쪽에서 SYN을 받는다.
자신의 상태를 SYN_RCVD 로 바꾼다.
클라이언트에게 SYN과 ACK를 보낸다.
3. Client ---> Server
TCP ACK
클라이언트 쪽에서 SYN을 받는다.
자신의 상태를 ESTABLISHED로 바꾼다.
서버에게 ACK를 보낸다.
서버 쪽에서 ACK를 받는다.
자신의 상태를 ESTABLISHED로 바꾼다.
- 이 방법이 3-way handshake 이다.
- 이를 통해 서버와 클라이언트 간 연결이 성립된다.
- 연결이 종료(Disconnect)되는 방법은
- 4-way handshake다.
- 이는 다음 포스트에 다룰 예정..
'Network > [TCPIP]' 카테고리의 다른 글
| [Network] TCP란? (0) | 2020.11.18 |
|---|