Salut !
je développe un petit projet perso pour être au top au niveau communication ( surtout vis à vis des sockets ) dans un logiciel. J'ai une partie en C et une partie en java seulement je me pose 2-3 questions.
Admettons que je veuille communiquer avec mon pote qui est chez lui et qui connaît mon @IP publique ( il n'est donc pas dans mon réseau privé ) via mon logiciel : ça marche tout seul par magie comme s'il était dans mon réseau privé ou sinon quelles dispositions je dois prendre pour que ça marche ?
Il y a des transferts de fichiers qui doivent se faire, je l'ai déjà fait pour voir comment ça marchait. Seulement ce n'étaient pas des fichiers volumineux et je découpais ce même fichier en plusieurs partie de 20 octets que je transférais or maintenant je dois pouvoir transférer des fichiers de plusieurs Go avec UDP ( j'ai un dispositif pour éviter les éventuelles pertes liées à la non fiabilité du protocole, ce n'est pas le problème ici ) seulement voilà, sur internet j'ai pas réussi à trouver la quantité maximale de données qu'un paquet pouvait transporter et surtout il faut qu'il puisse transiter par le réseau publique sans qu'il soit jeté par le premier routeur donc quelle quantité max udp peut il transporter concrètement ( ou quelle quantité est la plus efficace dans le cadre d'un transfert de fichiers ) ?
Et quelle est la meilleure stratégie pour envoyer un fichier avec udp ? J'avais pensé à bêtement découper mon fichier avec la quantité max de données que peut transporter udp et faire une boucle pour envoyer petit à petit le fichier jusqu'à ce qu'il n'y ait plus rien à envoyer. Est ce qu'il y a mieux ?
Ensuite comment mesurer le débit d'émission et de réception, je dois calculer à chaque seconde quelle quantité de données j'ai envoyé/reçu via mon logiciel ou il y a un dispositif qui existe pour avoir ce débit ?
Ah oui, j'ai faillis oublier, admettons que je sois capable d'émettre 10Mo/seconde et que mon pote ne peut recevoir que 1Mo/seconde, j'imagine que je n'ai pas besoin de synchroniser les débits mais comment ça se passe concrètement sur le réseau : les paquets sont "stockés" sur le chemin vers mon pote et quand il est capable de les recevoir il les reçoit ou tout ceux que mon pote ne peut pas lire sont jetés ?
j'espère avoir été clair dans mes questions ahah, merci !
Le 03 juin 2018 à 10:53:44 MonsieurBeauf a écrit :
Salut !je développe un petit projet perso pour être au top au niveau communication ( surtout vis à vis des sockets ) dans un logiciel. J'ai une partie en C et une partie en java seulement je me pose 2-3 questions.
Admettons que je veuille communiquer avec mon pote qui est chez lui et qui connaît mon @IP publique ( il n'est donc pas dans mon réseau privé ) via mon logiciel : ça marche tout seul par magie comme s'il était dans mon réseau privé ou sinon quelles dispositions je dois prendre pour que ça marche ?
Ton pote doit ouvrir le bon port, ou bien t'implément l'UPnP pour le négocier automatiquement
Il y a des transferts de fichiers qui doivent se faire, je l'ai déjà fait pour voir comment ça marchait. Seulement ce n'étaient pas des fichiers volumineux et je découpais ce même fichier en plusieurs partie de 20 octets que je transférais or maintenant je dois pouvoir transférer des fichiers de plusieurs Go avec UDP ( j'ai un dispositif pour éviter les éventuelles pertes liées à la non fiabilité du protocole, ce n'est pas le problème ici ) seulement voilà, sur internet j'ai pas réussi à trouver la quantité maximale de données qu'un paquet pouvait transporter et surtout il faut qu'il puisse transiter par le réseau publique sans qu'il soit jeté par le premier routeur donc quelle quantité max udp peut il transporter concrètement ( ou quelle quantité est la plus efficace dans le cadre d'un transfert de fichiers ) ?
Et quelle est la meilleure stratégie pour envoyer un fichier avec udp ? J'avais pensé à bêtement découper mon fichier avec la quantité max de données que peut transporter udp et faire une boucle pour envoyer petit à petit le fichier jusqu'à ce qu'il n'y ait plus rien à envoyer. Est ce qu'il y a mieux ?
Ensuite comment mesurer le débit d'émission et de réception, je dois calculer à chaque seconde quelle quantité de données j'ai envoyé/reçu via mon logiciel ou il y a un dispositif qui existe pour avoir ce débit ?
Aucune idée, mais en allant voir la RFC tu dois pouvoir trouver l'info
Ah oui, j'ai faillis oublier, admettons que je sois capable d'émettre 10Mo/seconde et que mon pote ne peut recevoir que 1Mo/seconde, j'imagine que je n'ai pas besoin de synchroniser les débits mais comment ça se passe concrètement sur le réseau : les paquets sont "stockés" sur le chemin vers mon pote et quand il est capable de les recevoir il les reçoit ou tout ceux que mon pote ne peut pas lire sont jetés ?
C'est là où faire de l'UDP c'est pas vraiment très malin
, tu vas devoir réimplémenter tout les mécanismes de TCP
(contrôle de congestion, Contrôle de flux
Le 03 juin 2018 à 13:16:14 RegleGraduee a écrit :
Le 03 juin 2018 à 10:53:44 MonsieurBeauf a écrit :
Salut !je développe un petit projet perso pour être au top au niveau communication ( surtout vis à vis des sockets ) dans un logiciel. J'ai une partie en C et une partie en java seulement je me pose 2-3 questions.
Admettons que je veuille communiquer avec mon pote qui est chez lui et qui connaît mon @IP publique ( il n'est donc pas dans mon réseau privé ) via mon logiciel : ça marche tout seul par magie comme s'il était dans mon réseau privé ou sinon quelles dispositions je dois prendre pour que ça marche ?
Ton pote doit ouvrir le bon port, ou bien t'implément l'UPnP pour le négocier automatiquement
Il y a des transferts de fichiers qui doivent se faire, je l'ai déjà fait pour voir comment ça marchait. Seulement ce n'étaient pas des fichiers volumineux et je découpais ce même fichier en plusieurs partie de 20 octets que je transférais or maintenant je dois pouvoir transférer des fichiers de plusieurs Go avec UDP ( j'ai un dispositif pour éviter les éventuelles pertes liées à la non fiabilité du protocole, ce n'est pas le problème ici ) seulement voilà, sur internet j'ai pas réussi à trouver la quantité maximale de données qu'un paquet pouvait transporter et surtout il faut qu'il puisse transiter par le réseau publique sans qu'il soit jeté par le premier routeur donc quelle quantité max udp peut il transporter concrètement ( ou quelle quantité est la plus efficace dans le cadre d'un transfert de fichiers ) ?
Et quelle est la meilleure stratégie pour envoyer un fichier avec udp ? J'avais pensé à bêtement découper mon fichier avec la quantité max de données que peut transporter udp et faire une boucle pour envoyer petit à petit le fichier jusqu'à ce qu'il n'y ait plus rien à envoyer. Est ce qu'il y a mieux ?
Ensuite comment mesurer le débit d'émission et de réception, je dois calculer à chaque seconde quelle quantité de données j'ai envoyé/reçu via mon logiciel ou il y a un dispositif qui existe pour avoir ce débit ?
Aucune idée, mais en allant voir la RFC tu dois pouvoir trouver l'info
Ah oui, j'ai faillis oublier, admettons que je sois capable d'émettre 10Mo/seconde et que mon pote ne peut recevoir que 1Mo/seconde, j'imagine que je n'ai pas besoin de synchroniser les débits mais comment ça se passe concrètement sur le réseau : les paquets sont "stockés" sur le chemin vers mon pote et quand il est capable de les recevoir il les reçoit ou tout ceux que mon pote ne peut pas lire sont jetés ?
C'est là où faire de l'UDP c'est pas vraiment très malin
, tu vas devoir réimplémenter tout les mécanismes de TCP
(contrôle de congestion, Contrôle de flux
cimer pour les réponses !
pour ta première réponse, ça veut dire que admettons j'ai 2 clients lancés sur 2 machines différentes dans le même sous réseau et que les deux ont leur socket ouvert sur le même port, si mon pote envoie un truc à l'un des 2 clients, seul celui concerné recevra l'information ?
De manière plus générale si j'ai bien compris du coup, quand un paquet traverse un NAT en direction d'un sous réseau, toutes les machines de ce sous réseau reçoivent ce paquet et chacun se démerde avec c'est ça ?
Ouais autant j'avais prévu la possible perte de données autant les problèmes de congestion et autres..
je vais plutôt aller sur du TCP du coup ![]()
Le 03 juin 2018 à 14:39:07 MonsieurBeauf a écrit :
Le 03 juin 2018 à 13:16:14 RegleGraduee a écrit :
Le 03 juin 2018 à 10:53:44 MonsieurBeauf a écrit :
Salut !je développe un petit projet perso pour être au top au niveau communication ( surtout vis à vis des sockets ) dans un logiciel. J'ai une partie en C et une partie en java seulement je me pose 2-3 questions.
Admettons que je veuille communiquer avec mon pote qui est chez lui et qui connaît mon @IP publique ( il n'est donc pas dans mon réseau privé ) via mon logiciel : ça marche tout seul par magie comme s'il était dans mon réseau privé ou sinon quelles dispositions je dois prendre pour que ça marche ?
Ton pote doit ouvrir le bon port, ou bien t'implément l'UPnP pour le négocier automatiquement
Il y a des transferts de fichiers qui doivent se faire, je l'ai déjà fait pour voir comment ça marchait. Seulement ce n'étaient pas des fichiers volumineux et je découpais ce même fichier en plusieurs partie de 20 octets que je transférais or maintenant je dois pouvoir transférer des fichiers de plusieurs Go avec UDP ( j'ai un dispositif pour éviter les éventuelles pertes liées à la non fiabilité du protocole, ce n'est pas le problème ici ) seulement voilà, sur internet j'ai pas réussi à trouver la quantité maximale de données qu'un paquet pouvait transporter et surtout il faut qu'il puisse transiter par le réseau publique sans qu'il soit jeté par le premier routeur donc quelle quantité max udp peut il transporter concrètement ( ou quelle quantité est la plus efficace dans le cadre d'un transfert de fichiers ) ?
Et quelle est la meilleure stratégie pour envoyer un fichier avec udp ? J'avais pensé à bêtement découper mon fichier avec la quantité max de données que peut transporter udp et faire une boucle pour envoyer petit à petit le fichier jusqu'à ce qu'il n'y ait plus rien à envoyer. Est ce qu'il y a mieux ?
Ensuite comment mesurer le débit d'émission et de réception, je dois calculer à chaque seconde quelle quantité de données j'ai envoyé/reçu via mon logiciel ou il y a un dispositif qui existe pour avoir ce débit ?
Aucune idée, mais en allant voir la RFC tu dois pouvoir trouver l'info
Ah oui, j'ai faillis oublier, admettons que je sois capable d'émettre 10Mo/seconde et que mon pote ne peut recevoir que 1Mo/seconde, j'imagine que je n'ai pas besoin de synchroniser les débits mais comment ça se passe concrètement sur le réseau : les paquets sont "stockés" sur le chemin vers mon pote et quand il est capable de les recevoir il les reçoit ou tout ceux que mon pote ne peut pas lire sont jetés ?
C'est là où faire de l'UDP c'est pas vraiment très malin
, tu vas devoir réimplémenter tout les mécanismes de TCP
(contrôle de congestion, Contrôle de flux
cimer pour les réponses !
pour ta première réponse, ça veut dire que admettons j'ai 2 clients lancés sur 2 machines différentes dans le même sous réseau et que les deux ont leur socket ouvert sur le même port, si mon pote envoie un truc à l'un des 2 clients, seul celui concerné recevra l'information ?
De manière plus générale si j'ai bien compris du coup, quand un paquet traverse un NAT en direction d'un sous réseau, toutes les machines de ce sous réseau reçoivent ce paquet et chacun se démerde avec c'est ça ?
Ouais autant j'avais prévu la possible perte de données autant les problèmes de congestion et autres..
je vais plutôt aller sur du TCP du coup
Si tu es sur le même réseau t'as pas besoin de gérer les hitsoires de port, c'est seulement si t'es derrière un autre routeur.
Le but du NAT, c'est justement de faire le tri entre les paquets pour savoir qui doit recevoir quoi, d'où le besoin d'ouvrir les ports, pour savoir où doivent aller les paquets venant sur le port X.