2022. 12. 8. 00:17ㆍ네트워크 및 통신
목차 |
1. TCP 1.1. 3 way hand shaking 1.2. 4 way hand shaking |
1. TCP
4계층의 프로코톨(규약)이다. L4라고도 한다.
- TCP에는 연결이라는 개념이 있다.
- Connection, Session
- 연결이 되기 때문에 상태라는 개념이 있다.
- 로그인, 로그아웃
- 연결은 순차적으로 진행된다.
1.1 3 way hand shaking
3-way-hand shaking이란, TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
그림으로 3 way hand shaking을 이해해보도록하자.
그림 2의 용어부터 한 번 정리해보자.
- syn : synchronize sequence numbers의 약자이며, 클라이언트가 서버에게 연결을 요청할 때 먼저 보낸다.
- ack : acknowledgment의 약자이며, 그대로 해석하면 승인이라는 뜻이된다.
- 연결 : 데이터를 주고 받는 것을 의미한다.
과정을 순서대로 정리해보자면,
클라이언트가 syn 패킷을 서버에 보낸다. 이 때, 클라이언트는 syn을 보내고 syn/ack 응답을 기다리는 syn_sent 상태, 서버는 wait for client 상태이다. (가운데 맨위 화살표에 해당한다.)
서버는 syn요청을 받고 클라이언트에게 요청을 수락한다는 syn와 ack를 보내고, 클라이언트가 다시 응답하기를 기다린다.
이 상태를 syn_received 라고한다.(가운데 두 번째 화살표에 해당한다.)
마지막으로 클라이언트가 ack을 서버에게 보내고 연결된다. 이 떄부터 데이터가 오갈수 있게 된다. 이 때의 서버 상태를 established라고 한다.
이 과정을 3 way hand shaking이라고 한다.
3 way hand shaking의 역할을 정리해보자면,
- TCP의 연결을 초기화 할 때 사용한다.
- 서버, 클라이언트 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터가 전달되기 전에 준비됨을 알린다.
- 서버와 클라이언트 모두 상대에 대한 초기 순차 일련번호를 얻을 수 있다.
1.2 4 way hand shaking
연결이 되었다면 연결을 끊기도 해야한다. 이를 4 way hand shaking이라고 한다.
과정을 정리해보자면,
클라이언트가 연결을 종료하겠다는 FIN을 전송한다. 이 상태를 FIN-Wait라고 한다.(아래에서 4번째)
서버는 FIN을 받고, 확인 메시지인 ack를 보내고 자신의 통신이 끝날때까지 기다린다. 이 상태를 서버의 close_wait이라고 한다.(아래에서 3번째)
서버는 연결을 종료할 때가 되면, 연결해지를 위한준비가 되었음을 알리기 위해 클라이언트에게 FIN을 전송한다. 이 때의 서버 상태를 last_ack 라고한다.(아래에서 2번쨰)
클라이언트는 해지준비가 되었다는 ack를 확인했다는 메시지를 보냈다. 클라이언트의 상태는 fin_wait에서 time_wait으로 바뀐다.
time_wait 상태가 있는 이유
만약 서버에서 FIN을 보내기 전에 전송한 패킷(데이터)가 세션이 종료된 후에 도착한다면, 데이터가 유실될 것이다.
이런 사태를 대비해서 time_wait이라는 상태로 패킷을 기다리는데 이를 time_wait이라고 하며, 이 시간(디폴트 240초)이 지나면 세션을 만료하고 연결을 종료시켜 close 상태로 변화한다.
마지막으로 각 부분 별로 용어와 설명을 추가한 그림이 있으니 참고하도록 하자.
'네트워크 및 통신' 카테고리의 다른 글
RPC(Remote Procedure Call) 통신 (0) | 2023.05.26 |
---|---|
웹 소켓(Web Socket) 소개 (0) | 2023.01.26 |
HTTP Message (0) | 2022.12.14 |
HTTP Protocol (0) | 2022.12.13 |
네트워크의 이해 (0) | 2022.12.07 |