6.1.1. Initialisation TCP (TCP Initialization)
Pendant la phase d'établissement de connexion TCP, les TCP source et destination échangent des informations sur leur volonté d'utiliser ECN. Après la fin de cette négociation, le TCP expéditeur définit le codepoint ECT dans l'en-tête IP des paquets pour indiquer au réseau que le transport est capable et disposé à participer à ECN pour ce paquet. Cela indique aux routeurs qu'ils peuvent marquer ce paquet avec le codepoint CE s'ils souhaitent utiliser cette méthode comme notification de congestion. Si la connexion TCP ne souhaite pas utiliser la notification ECN pour un paquet particulier, le TCP expéditeur définit le codepoint ECN sur not-ECT, et le récepteur TCP ignore le codepoint CE dans le paquet reçu.
Pour cette discussion, nous désignons l'hôte initiateur comme hôte A et l'hôte répondant comme hôte B. Nous faisons référence à un paquet SYN avec les drapeaux ECE et CWR définis comme un "ECN-setup SYN packet" (paquet SYN de configuration ECN), et à un paquet SYN avec au moins un des drapeaux ECE et CWR non défini comme un "non-ECN-setup SYN packet" (paquet SYN non de configuration ECN). De même, nous faisons référence à un paquet SYN-ACK avec seulement le drapeau ECE défini et le drapeau CWR non défini comme un "ECN-setup SYN-ACK packet" (paquet SYN-ACK de configuration ECN), et à un paquet SYN-ACK avec toute autre configuration des drapeaux ECE et CWR comme un "non-ECN-setup SYN-ACK packet" (paquet SYN-ACK non de configuration ECN).
Avant qu'une connexion TCP puisse utiliser ECN, l'hôte A envoie un paquet SYN de configuration ECN et l'hôte B envoie un paquet SYN-ACK de configuration ECN. Pour un paquet SYN, la définition simultanée d'ECE et CWR dans un paquet SYN de configuration ECN est définie comme une indication que le TCP expéditeur prend en charge ECN, et non comme une indication de congestion ou de réponse à la congestion. Plus précisément, un paquet SYN de configuration ECN indique que l'implémentation TCP transmettant le paquet SYN participera à ECN en tant qu'expéditeur et en tant que récepteur. En tant que récepteur, il répondra aux paquets entrants avec le codepoint CE défini dans l'en-tête IP en définissant ECE dans les paquets d'accusé de réception (Acknowledgement, ACK) TCP sortants. En tant qu'expéditeur, il répondra aux paquets entrants avec ECE défini en réduisant la fenêtre de congestion et en définissant CWR le cas échéant. Un paquet SYN de configuration ECN ne s'engage pas à ce que l'expéditeur TCP définisse le codepoint ECT dans l'un ou tous les paquets qu'il peut transmettre. Cependant, l'engagement de répondre de manière appropriée aux paquets entrants avec le codepoint CE défini reste, même si le TCP expéditeur envoie un paquet SYN sans ECE et CWR définis dans les transmissions ultérieures au sein de cette connexion TCP.
Lorsque l'hôte B envoie un paquet SYN-ACK de configuration ECN, il définit le drapeau ECE mais pas le drapeau CWR. Un paquet SYN-ACK de configuration ECN est défini comme une indication que le TCP transmettant le paquet SYN-ACK prend en charge ECN. Comme pour un paquet SYN, un paquet SYN-ACK de configuration ECN ne s'engage pas à ce que l'hôte TCP définisse le codepoint ECT dans les paquets transmis.
Les règles suivantes s'appliquent à l'envoi de paquets de configuration ECN au sein d'une connexion TCP, où une connexion TCP est définie par les règles standards pour l'établissement et la terminaison de connexion TCP.
-
Si un hôte reçoit un paquet SYN de configuration ECN, il PEUT envoyer un paquet SYN-ACK de configuration ECN. Sinon, il NE DOIT ABSOLUMENT PAS envoyer un paquet SYN-ACK de configuration ECN.
-
Un hôte NE DOIT ABSOLUMENT PAS définir ECT sur un paquet à moins que l'hôte n'ait envoyé au moins un paquet SYN de configuration ECN ou SYN-ACK de configuration ECN, et ait reçu au moins un paquet SYN de configuration ECN ou SYN-ACK de configuration ECN, et n'ait pas envoyé de paquet SYN non de configuration ECN ou SYN-ACK non de configuration ECN. Un hôte NE DEVRAIT PAS définir ECT sur un paquet s'il a reçu au moins un paquet SYN non de configuration ECN ou SYN-ACK non de configuration ECN.
-
Si un hôte a déjà défini le codepoint ECT sur un paquet, cet hôte DOIT définir/effacer correctement le bit TCP CWR sur tous les paquets ultérieurs de la connexion.
-
Si un hôte a envoyé au moins un paquet SYN de configuration ECN ou SYN-ACK de configuration ECN, et n'a reçu aucun paquet SYN non de configuration ECN ou SYN-ACK non de configuration ECN, alors si cet hôte reçoit un paquet TCP avec les codepoints ECT et CE définis dans l'en-tête IP, cet hôte DOIT traiter ces paquets de la manière spécifiée pour une connexion compatible ECN.
-
Un hôte qui ne souhaite pas utiliser ECN sur une connexion TCP DEVRAIT effacer les drapeaux ECE et CWR dans tous les paquets SYN et/ou SYN-ACK non de configuration ECN qu'il envoie pour indiquer cette réticence. Un récepteur DOIT traiter correctement toutes les formes de paquets SYN et SYN-ACK non de configuration ECN.
-
Un hôte NE DOIT ABSOLUMENT PAS définir ECT sur un paquet SYN ou SYN-ACK.
Un client TCP entre dans l'état TIME-WAIT après réception d'un FIN-ACK, et passe à l'état CLOSED après un délai d'expiration. De nombreuses implémentations TCP créent une nouvelle connexion TCP lors de la réception d'un paquet SYN dans la fenêtre pendant l'état TIME-WAIT. Lorsqu'un hôte TCP entre dans l'état TIME-WAIT ou CLOSED, il DEVRAIT ignorer tout état antérieur concernant la négociation ECN pour cette connexion.