TCP란
네트워크 계층 중 전송계층에서 사용하는 프로토콜로서, 장치들 사이에 논리적인 접속을 설입하기 위해 연결을 설정하여 신뢰성을 보장하는 연결형 서비스
TCP Handshake 란?
OSI 7계층 중 Network layer에 해당하는 프로토콜인 TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 3-way handshake를 사용하고 세션을 종료를 성립하기 위해
4-way handshake를 사용한다.
즉, TCP Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
3-way handshake 접속 과정
1. 클라이언트는 접속을 요청하는 SYN 패킷을 보낸다. 이때 클라이언트는 SYN 패킷을 보냄과 동시에 SYN/ACK 응답을 기다리기위해 SYN_SENT 상태로 변하게 된다.
2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락하는 ACK 패킷과 SYN 패킷을 보내고 SYN_RCVD(SYN_RECEIVED)상태로 변하여 클라이언트가 ACK 패킷을 보낼 때 까지 기다리게 된다.
3. 클라이언트는 서버에 ACK 패킷을 보내고 이 후 ESTABLISHED 상태가 되어 데이터 통신이 가능하게 된다.
* 즉, ACK 패킷의 Acknowledgement Number는 신뢰적 데이터 전송을 위해 사용되는 것이다.
* ISN( Initialized Sequence Number ): 초기 시퀀스 번호 - SYN 패킷의 Sequence Number는 운영체제의 의해서 랜덤하게 생성된다.
* 동기화 요청에 대한 답신 - 클라이언트의 시퀀스 넘버에 +1을 해서 ack로 돌려준다.
4-way handshake 종료 과정
1. 서버와 클라이언트가 TCP 연결이 되어있는 상태에서 클라이언트가 접속을 끊기 위해 CLOSE() 함수를 호출하게 된다.
이후 CLOSE() 함수를 호출하면서 FIN segment를 보내게 되고 클라이언트는 FIN_WAIT1 상태로 변하게 된다.
2. 서버는 클라이언트가 CLOSE() 한다는 것을 알게되고 CLOSE_WAIT 상태로 바꾼 후 ACK segment를 전송한다.
즉, 클라이언트가 끊을 것이라는 신호를 받았다는 의미이고 CLOSE_WAIT를 통해 자신의 통신이 끝날때까지 기다리는 상태가 된다.
3. ACK segment를 받은 클라이언트는 FIN_WAIT2로 변환되고 이때 서버는 CLOSE() 함수를 호출하고 FIN segment를 클라이언트에게 보낸다.
4. 서버도 연결을 닫았다는 신호를 클라이언트가 수신하면 ACK segment를 보낸 후 TIME_WAIT 상태로 전환된다.
이 후 모든것이 끝나면 CLOSED 상태로 변환된다.
출처-
https://yubh1017.tistory.com/81
https://gmlwjd9405.github.io/2018/09/19/tcp-connection.html
'1일1CS' 카테고리의 다른 글
36. Transaction과 ACID (2) | 2023.01.12 |
---|---|
35. UDP/TCP 특징 및 차이점 (0) | 2023.01.11 |
34. SOLID 란? (2) | 2023.01.10 |
33. 웹브라우저에 www.google.com을 치면 일어나는 일 (1) | 2023.01.09 |
32. 디자인패턴이란? (0) | 2023.01.09 |
댓글