Le protocole TCP est-il fiable à 100%?

Bien que TCP soit un protocole fiable fournissant des mécanismes de retransmission et d’accusé de réception, j’estime qu’il n’est pas fiable à 100%, car le retour réussi de send () ne garantit pas que les données ont atteint le sharepoint destination. tampon du kernel.

Existe-t-il un mécanisme permettant à l’application de savoir si les données sont bien parvenues à la destination?

Une solution possible pourrait être d’instaurer un mécanisme de reconnaissance dans la couche application?

TCP est fiable en ce sens que les messages envoyés seront soit

  1. être reçus tels qu’ils ont été envoyés (même ordre, même contenu); en supposant que la sum de contrôle intégrée n’échoue pas, ce qui est le cas, puisqu’il ne s’agit que de 16 bits OU
  2. ne pas être reçu du tout

En utilisant TCP, les messages reçus ne doivent jamais être en panne ou manquants.

Pour distinguer les cas 1 et 2, vous devez implémenter un mécanisme d’accusé de réception. Une bonne idée qui garantirait également une intégrité de message supérieure à celle du CRC consiste à renvoyer un MD5 ou un autre hachage du message entrant.

Vous pouvez créer votre propre application, répondre au message de réussite de l’expéditeur par le destinataire et le renvoyer si nécessaire si aucun message de réussite n’est reçu.

En Java, JMS fait ce travail, je pense qu’une bibliothèque existante devrait faire de même en C.

Bien sûr, TCP est le protocole fiable. Si vous voulez connaître les données qui sont livrées et reçues via le port réseau, utilisez le logiciel Wirehark pour capturer les données transmises et reçues. Grâce à Wireshark, vous pouvez tracer les paquets.