TCP nie może „tolerować” 50% utraty pakietów. Po prostu zatrzyma się, z prostego powodu: dostosowuje prędkość transmisji na podstawie utraty pakietów. Gdy pakiety zostaną utracone, należy je rozumieć jako zator. Jeśli upuścisz 50% pakietów (powiedzmy, z przypadkową regułą zapory) niezależnie od ruchu, zobaczysz coraz mniejszą przepustowość.
Ponadto wątpię, by dostawcy usług internetowych kształtowali ICMP w porównaniu z TCP. Niektórzy mogą to zrobić, ponieważ są naprawdę głupi ludzie, ale nie ma to większego sensu. Większość ukształtuje całe połączenie lub „ukształtuje się” z powodu przeciążenia. W obu przypadkach pakiety są zazwyczaj upuszczane losowo.
To powiedziawszy, możesz pingować za pomocą TCP, ale istnieje kilka zastrzeżeń. Pierwszym z nich jest po prostu wysłanie pakietu początkowego w połączeniu TCP, który wywoła odpowiedź z serwera z otwartym portem, ale będzie postrzegany jako próba połączenia. Idealnie byłoby, gdybyś mógł skorzystać z usługi „echo” (port TCP 7) ... ale tak naprawdę nie możesz, ponieważ jest teraz domyślnie wyłączony wszędzie. W każdym razie, jeśli możesz poprosić kogoś o włączenie go dla ciebie na maszynie, którą chcesz przetestować, program mógłby użyć tego, aby sprawdzić czas obchodzenia pakietów w połączeniu TCP.
To powiedziawszy, prawdopodobnie masz na komputerze polecenie „tracepath”; jest podobny do traceroute, ale nie używa TCP ani ICMP, ale UDP. W przypadku TCP istnieją różne narzędzia, możesz spróbować hping .