작성
·
554
2
tcp가 ip 프로토콜에서는 제공하지 않는 오류제어, 흐름제어, 혼잡제어를 제공하는 신뢰성있는 연결지향 프로토콜이라는 것을 알았습니다.
tcp가 handshake과정을 통해 연결설정을 하는 것이 결국 오류제어, 흐름제어, 혼잡제어를 제공하기 위한것인가요?
연결설정과정 없이는 신뢰성 있는 서비스를 제공하지 못하는 것인지 궁금합니다.
그리고 왜 tcp는 비용을 감수하면서 연결설정 과정을 거치는 것인지 명확한 설명을 듣고 싶습니다.
답변 1
3
안녕하세요, 김경근 님! 공식 서포터즈 codesweaver 입니다.
네트워크는 양자간의 통신을 기반으로 하고 있습니다. 그래서 메시지를 전달할 때 상대가 들을 준비가 되어있는지 확인을 해야 합니다. 그래서 핸드쉐이크를 통해 나와 상대가 모두 메시지를 주고받을 준비가 되었음을 확인합니다. 핸드쉐이크는 이 정도의 의미를 갖습니다.
UDP와 비교하면 더 명확해 지는데, UDP는 상대가 들을 준비가 되어있는지 아닌지 확인하지 않고 일단 목적지로 전달합니다. 그래서 통신 자체는 매우 빠르죠. 그러나 내 요청이 정말 처리됬는지 아닌지 확인하려면 별도의 확인 과정이 필요합니다.
오류제어 등은 중간 데이터 전송 실패 시 이를 복구하기 위한 메커니즘을 말씀하신 것 같은데 이 방식은 TCP 헤더가 가지고 있는 정보를 활용합니다. TCP는 UDP와 달리 데이터를 여러 패킷으로 쪼갠 후 각 패킷이 순서를 갖고 있습니다. 가령 전체 데이터가 100인데 이를 10개로 쪼개면, 각 패킷은 1-10, 11-20, 21-30 ... 91-100 등으로 순서를 갖고 있습니다. 그래서 이 중 어떤 데이터가 누락되거나 할 경우 해당 데이터만 다시 전송하도록 요청을 할 수 있습니다. 핸드쉐이크와는 별개로 TCP 헤더를 이용한 기능이라고 할 수 있습니다.
감사합니다.