3Way Hand Shaking
Tcp 커넥션의 연결과정
커넥션을 맺을려고 하는 측이 Active Open 수신하는 측이 Passive Open이라 하며 다음과 같이 동작한다
- Passive Open측은 포트를 열어두고 연결을 기다린다
- Listen 상태
- Active Open측은 원격으로 연결 요청을 보낸다
- Syn send상태
- SYN NUM은 랜덤하게 사용한다
- SYN NUM이 매번 0부터 시작할 경우 Passive Open측에서 이전 연결에 대한 응답인지 새로운 연결에 대한 응답인지 구분할 수가 없기 때문이다
- Passive Open측은 요청을 받고 응답을 보낸다
- Syn recv 상태
- Passive Open측에서 메세지가 잘 가는지 확인하는 단계
- Active Open측은 메세지를 받고 응답을 보낸다
- Active Open은 이 때 부터 Established 상태가 된다
- Active Open에서 보낸 메세지가 올바르게 응답이 왔다는 확인이 된다
- Passive Open측은 응답을 받는다
- Passive Open은 이 때 부터 Established 상태가 된다
- Passive Open에서 보낸 메세지가 올바르게 전송되었고 응담이 왔다는 확인이 된다
4Way Hand Shaking
Tcp 커넥션의 종료과정
커넥션을 끊으려고 하는 측이 Active Close 수신하는 측이 Passive Close이라 하며 다음과 같이 동작한다
- Active Close측은 종료를 위해 FIN 메세지를 보낸다
- FIN_WAIT_1 상태
- Passive Close측은 FIN메세지를 수신하고 ACK메세지를 보낸다
- CLOSE_WAIT 상태
- 이 응답을 받은 Active Close측은 FIN_WAIT_2 상태가 된다
- Passive Close측은 FIN메세지를 보낸다
- LASK_ACK 상태
- FIN 메세지를 받고 전송하던 파일이 존재할 수도 있으니 ACK와 FIN을 나눠서 보내게 된다
- Active Close측은 메세지를 받고 응답을 보낸다
- 이 때 Active Close측은 Time_Wait을 가진다
- ACK 메세지가 올바르게 전달이 되지 않았을 경우 Passive Close측에서 FIN 메세지가 다시 오게 되는데 이런 정상 연결 종료를 위한 대기 시간이다
- Passive Close측은 응답을 받고 종료한다
- Active Close측은 Time_Wait이 지나 종료한다