TCP 데이터를 서버로 보내는 애플리케이션이 있습니다. 내 서버는 응용 프로그램에서 보낸 패킷을 의도적으로 삭제하여 클라이언트가 패킷을 다시 전송하게 만듭니다. 클라이언트가 재전송하는 것을 방지해야 합니다. 재전송을 방지하기 위해 클라이언트에서 설정할 수 있는 것이 있습니까? 어쩌면 iptables 규칙이 있을까요? 아니면 뭔가 변수가 있는 걸까요 net.ipv4.tcp
?
TCP가 본질적으로 패킷을 재전송해야 한다는 것을 알고 있지만 실제로는 서버에서 TCP 패킷을 삭제하고 패킷을 재전송하지 않을 때 서버가 어떻게 동작하는지 관찰해야 하는 기능을 테스트해야 합니다. 그래서 여기서는 UDP를 사용할 수 없습니다.
클라이언트는 TCP 핸드셰이크를 완료할 수 있으며 이후에 전송된 패킷만 삭제되고 재전송이 발생합니다. 이것이 제가 방지해야 할 재전송입니다.
저는 Fedora를 사용하고 있습니다:
[root@test sipp.svn]# uname -r
2.6.23.1-42.fc8
[root@test sipp.svn]#
답변1
귀하의 의견을 바탕으로 (바람직하게는 귀하의 질문의 일부):
TCP가 본질적으로 패킷을 재전송해야 한다는 것을 알고 있지만 실제로는 서버에서 TCP 패킷을 삭제하고 패킷을 재전송하지 않을 때 서버가 어떻게 동작하는지 관찰해야 하는 기능을 테스트해야 합니다. 그래서 여기서는 UDP를 사용할 수 없습니다.
내 이해에 따르면 클라이언트가 보내는 내용에 대해 실제로 신경 쓸 필요는 없습니다. 중요한 것은 다시 제출된 패킷이 서버에 도달하지 않는다는 것입니다. 그렇다면 초기 패킷처럼 서버 측에서 이러한 패킷을 삭제하면 어떨까요? 이것을 어떻게 제거하는지 모르겠지만 iptables를 사용하면 클라이언트에서 SYN/FIN 없이 TCP 패킷을 차단하는 데 충분할 수 있습니다.
클라이언트가 신경 쓰지 않도록 하려면 서버에서 ACK를 가짜로 만들어야 합니다. 이를 위해 scapy 또는 유사한 도구를 사용할 수 있습니다.
답변2
내 댓글을 삭제하고 답변을 게시하세요..
TCP는 안정적이고 오류 검사가 가능한 전송을 위해 설계되었습니다. 따라서 전송되지 않은 패킷을 다시 보내는 것이 핵심입니다.확인하다- 연결의 다른 쪽 끝은 알고 있습니다. 이 메커니즘을 적용하고 싶지 않다면 아마도 UDP와 같은 다른 프로토콜을 사용해야 할 것입니다.
그러나 TCP를 사용할 수 없는 경우 프록시 애플리케이션을 사용해야 할 수도 있습니다. 서버측 애플리케이션에서 직접 TCP 패킷을 수신하지 말고, 다음과 같은 다른 애플리케이션에서 수신하도록 하십시오.대리인, 이는 패킷이 다음으로 전송되는지 여부를 결정합니다."진짜"적용이 늦어지고 있습니다. 원래:
- 클라이언트는 TCP 패킷을 보냅니다.
- 서버 측 프록시 애플리케이션은 포트 A에서 이를 수신합니다.
- 실제 서버 애플리케이션은 포트 B에서 수신 대기합니다.
- 프록시 애플리케이션은 A에서 B로 패킷을 전송할지 여부를 결정합니다.
에이전트를 구한 이후로언제나승인 패킷은 절대로 재전송되지 않습니다(실제로 패킷이 전송되지 않는 한).실패하다물론 거기에 가려면). 이를 염두에 두고 적절한 필터링 규칙을 적용하는 프록시 애플리케이션을 사용/설계할 수 있습니다. 이것은 링크입니다내가 물어본 관련 질문보안 스택 교환에.