해결된 질문
작성
·
20
·
수정됨
0
안녕하세요 개발자님
수신측 에서 송신측으로 순서 바뀜 및 패킷 유실에 대한 응답을
송신측으로 전달 하면, 송신측에서 재전송을 시도 하는데,
송신측에서는 수신측으로 데이터를 전송 할때, 재전송 요청에
대해 미리 대비해서 수신측으로 전송 되기전의 패킷을
TCP Buffer 에 쌓아 놓고, 전송을 하며,
정상적인 응답이 와야 TCP Buffer 에서 비우는 작업을 하는 것인가여?
TCP Buffer 에 전송전에 데이터를 쌓아 놓는 것은 맞는 걸까여?
수신측에 재전송 요청에 대한 데이터 조회는 TCP Buffer 에서 찾는것은 맞는 걸까여?
답변 2
0
만일 소켓이 입/출력 버퍼를 사용하도록 설정했다면 맞는 말입니다. 송신과정에서도 버퍼링을 일단 합니다. 그리고 상대방이 잘 받았다는 ACK를 보내주기 전까지 전송이 완료된 것이 아니라 판단합니다. 문제는 '얼마나 오래' 입니다.
ACK를 기다리는 시간이나 재전송 요구 가능성을 고려해 송신할 데이터를 버리지 않을 시간 등이 중요한 변수가 됩니다. 이 때문에 TCP는 내부적으로 여러 타이머들을 운영합니다. 이는 표준과 무관하지만 성능과 직결되므로 매우 중요합니다. 더 자세한 정보는 'TCP 혼잡제어'에 대해 알아보시기 바랍니다. 감사합니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다. otteu1m님.
TCP 통신 과정에서 수신측에서 송신측으로 수신된 데이터의 순서 바뀜이나 패킷 유실에 관한 응답을 보내면, 송신측에서는 이에 대해 재전송을 시도하게 됩니다. 송신측이 재전송 요청에 대비하여 어떻게 동작하는지에 대한 부분을 살펴보겠습니다.
TCP 버퍼에 데이터 저장: 송신측에서는 데이터를 전송할 때, 전송하기 전의 데이터를 미리 송신 버퍼라는 곳에 저장해 놓습니다. 이 버퍼에 저장된 데이터는 실제로 상대방에게 데이터가 성공적으로 도착했음을 확인할 수 있는 ACK(Acknowledgement) 신호를 받기 전까지 유지됩니다. 만약 수신측으로부터 재전송 요청이 오면, 이 버퍼에서 데이터를 꺼내 다시 전송합니다.
ACK 기반의 데이터 삭제: 송신측은 수신측에서 ACK 신호를 받을 때마다 정상적으로 데이터가 수신되었음을 확인하고, 해당 데이터를 송신 버퍼에서 삭제합니다. 이로써 송신 버퍼는 새로운 데이터를 위한 공간을 확보하게 됩니다.
주고받는 프로세스: 수신측에서 패킷 유실 또는 순서 바뀜이 발생했을 때 이를 송신측에 알려주면, 송신측은 송신 버퍼에 저장된 데이터를 바탕으로 올바른 데이터 조각을 다시 보내는 과정을 반복합니다. 이는 TCP가 데이터 전송의 신뢰성을 보장하기 위한 기법 중 하나입니다.
이러한 TCP 통신의 동작 원리에 대해 보다 깊이 이해하실 수 있도록 관련된 기존 답변을 추천드리겠습니다. 다음 게시물을 참고하시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.