C#: Comment traiter de paquets TCP?
Peut plaire à quelqu'un d'expliquer la façon de traiter avec de paquets. Je suis à l'aide de socket raw pour capturer les paquets, et les analyser comme ils viennent, mais certains d'entre eux viennent dans un ordre incorrect, par exemple:
- Id...........Drapeaux
- 16390 : (PSH, ACK)
- 16535 : (PSH, ACK)
- 16638 : (ACK)
- 16640 : (PSH, ACK)
- 16639 : (ACK)
- 16695 : (PSH, ACK)
Paquets avec Id: 16390, 16535, 16695 sont séparés des paquets et peut être traitée librement
Les paquets avec Id: 16638, 16640, 16639 sont une séquence de paquets, et devrait être mis en ordre croissant avant l'analyse.
Pour le rendre pire les paquets avec indicateur Push parfois venir d'abord je viens donc de passer à l'analyseur, puis les paquets que preceds il vient et analyseur écarte tout simplement comme corrompu.
Est-il un moyen de traiter avec elle?
- Merci de préciser exactement ce que vous faites donc nous sommes plus en mesure de répondre à votre question.
- Ne pas utiliser une socket raw.
- C'est triste, je vous ai dit comment gérer les paquets, et j'ai seulement eu 3 votes, alors que l'on a accepté de répondre a 8 voix et, fondamentalement, n'ont pas répondu à la question...
- C'est parce que la bonne question n'était pas posée dans la première place.
Vous devez vous connecter pour publier un commentaire.
TCP garantit l'ordre. Donc, je suppose simplement que vous parlez de la propriété intellectuelle.
Une chose que vous pouvez essayer est de mettre les paquets dans un min-tas et puis d'attendre jusqu'à ce que le prochain paquet numéro d'identification que vous souhaitez est disponible.
Comme pour le pousser paquets, ceux qui sont censés être reçu dès que possible, sans restriction sur la commande, donc c'est à vous de décider combien de temps vous voulez attendre de voir si vous recevez une précédente poussée de paquets.
Les segments TCP ne sera pas hors de l'ordre parce que la prochaine ne sera pas envoyé jusqu'à ce que vous ACK la précédente.
Ce qui se passe sur une couche de transport ci-dessous TCP, donc les connexions TCP ne serait jamais "voir" cela se produise. En termes de TCP ils sont toujours dans l'ordre. Donc, si vous les voyez de l'ordre alors que vous ne travaillez pas sur la couche de transport TCP, vous êtes à un niveau inférieur.
Aussi, pour info...
Edit: Le lien que vous avez fourni vous fournira un flux de datagrammes IP de sorte que vous avez à gérer le flux TCP de votre propre. Je ne vais pas prétendre, comme il est facile et essayer de l'expliquer ici.
Pourquoi n'utilisez-vous pas la normale socket tcp afin qu'ils viennent dans l'ordre?
Le numéro de Séquence de l'ordre. Il encapsule à 4G de sorte que vous aurez à tenir compte de cela. Et vous aurez à utiliser la même routine de base que le protocole TCP utilise. Tampon de commande de paquets et de jeter les doublons. Numéro de séquence + Len de charge utile est le nexxt numéro de séquence.
TCP/IP Illistrated vol 2
ou TCP.c ?