Sockets: Internet-IP und dann ...?



  • hustbaer schrieb:

    @crispin kenton
    Ist bloss eine Reaktion darauf dass du regelmässig über Dinge schreibst von denen du offenbar keine Ahnung hast.
    Aber hey, hauptsacht du schreibst was, ob's stimmt oder nicht darum geht's ja wohl nicht.

    zum glück gibt es ja mr. perfect, was würden wir nur ohne dich machen 🙄



  • Kopfschmerznetzwerg schrieb:

    Ich dachte accept() nutzt man nur bei TCP?

    Ja. Schriebst Du nicht etwas von 'verbinden'? UDP ist doch verbindungslos ...
    Ich hätte auch vermutet, dass man für diese Zwecke üblicherweise TCP benutzt ...



  • @hustbear: Danke, das hilft mir schonmal sehr weiter, aber ...

    Wenn Client A ein UDP Paket an den Server schickt, dann übersetzt der Router die Absender-Adresse zu IP R, Port PAX.
    Und merkt sich in einer Tabelle dass Port PAX für A, Port PA verwendet wird.

    Also der Router verändert den Port automatisch?
    Beispiel:

    Client A: 192.168.0.1:2000 -> 88.167.34.135:20000
    Client B: 192.168.0.2:2000 -> 88.167.34.135:20001

    Oder muss man die Portveränderung doch selbst vornehmen?


  • Mod

    Kopfschmerznetzwerg schrieb:

    Also der Router verändert den Port automatisch?
    Beispiel:

    Client A: 192.168.0.1:2000 -> 88.167.34.135:20000
    Client B: 192.168.0.2:2000 -> 88.167.34.135:20001

    Oder muss man die Portveränderung doch selbst vornehmen?

    Wer ist in diesem Szenario "man"? Der einzige, der hier etwas vornehmen muss ist der Router und sein Administrator.



  • Ah, ich glaub jetzt versteh ichs 😃

    Im sockaddr_in auf das ich in revcfrom() referenziere stehen dann unterschiedliche Ports bei den. z.B. 20000 bei packeten von Client A, und 20001 von Client B, obwohl beide Clienten über den Port 2000 bei sendto() schicken?

    Oder bin ich immernoch auf dem Holzweg?


  • Mod

    Der Router verändert die Ports, ja. Deswegen habe ich doch oben
    http://en.wikipedia.org/wiki/NAT
    verlinkt, welches alles erklärt hätte, was hier seither nochmal erklärt wurde. Nicht gelesen?

    Einführung auf Wikipedia schrieb:

    However, it is common to hide an entire IP address space, usually consisting of private IP addresses, behind a single IP address (or in some cases a small group of IP addresses) in another (usually public) address space. To avoid ambiguity in the handling of returned packets, a one-to-many NAT must alter higher level information such as TCP/UDP ports in outgoing communications and must maintain a translation table so that return packets can be correctly translated back.

    Was in wenigen Worten das ist, was hustbaer seither nochmal ausführlich erklärt hat (und was auf Wikipedia natürlich auch nochmal viel ausführlicher beschreiben ist im Rest des Artikels).



  • Du solltest dich natürlich nicht zur Authentifizierung von Clienten darauf verlassen, da hilft nur Verschlüsselung.



  • SeppJ schrieb:

    Der Router verändert die Ports, ja. Deswegen habe ich doch oben
    http://en.wikipedia.org/wiki/NAT
    verlinkt, welches alles erklärt hätte, was hier seither nochmal erklärt wurde. Nicht gelesen?

    Einführung auf Wikipedia schrieb:

    However, it is common to hide an entire IP address space, usually consisting of private IP addresses, behind a single IP address (or in some cases a small group of IP addresses) in another (usually public) address space. To avoid ambiguity in the handling of returned packets, a one-to-many NAT must alter higher level information such as TCP/UDP ports in outgoing communications and must maintain a translation table so that return packets can be correctly translated back.

    Was in wenigen Worten das ist, was hustbaer seither nochmal ausführlich erklärt hat (und was auf Wikipedia natürlich auch nochmal viel ausführlicher beschreiben ist im Rest des Artikels).

    ich brauchte noch weniger worte. aber antworten gelten hier wohl nur als wertvoll, wenn sie nicht nur richtig sind, sondern auch schoen viel drum herum erzaehlt wird. 👎



  • Kopfschmerznetzwerg schrieb:

    Also der Router verändert den Port automatisch?
    Beispiel:

    Client A: 192.168.0.1:2000 -> 88.167.34.135:20000
    Client B: 192.168.0.2:2000 -> 88.167.34.135:20001

    Oder muss man die Portveränderung doch selbst vornehmen?

    Der Router verändert den ABSENDERport automatisch. Weil ... sonst würde das ja nicht gehen können, wenn zwei interne PCs mit dem selben Absenderport was schicken.
    Könnte er ja nimmer wissen wohin er Antworten zurückschicken muss.

    Das ganze funktioniert übrigens bei TCP und UDP gleich. Der einzige Unterschied ist, dass es bei TCP ein definiertes Ende der Verbindung gibt. D.h. der Router kann zu dem Zeitpunkt dann sicher sein dass die Verbindung nicht mehr existiert, und sie aus seiner Tabelle rauswerfen.

    Bei UDP wird dagegen einfach ein Timeout verwendet. Kann bei den meisten Routern eingestellt werden. D.h. wenn z.B. 5 Minuten lang nix mehr über einen bestimmten Tabelleneintrag weitergeleitet wurde (egal in welcher Richtung, also LAN->Internet oder Internet->LAN), dann löcht er den Tabelleneintrag einfach.

    Falls dann doch nochmal was kommt sieht es für den Router wie ne neue "Verbindung" aus, und er macht nen neuen Eintrag. Für den Rechner im Internet sieht es dann ebenso wie ne neue "Verbindung" aus, da ja ein neuer Port vom Router vergeben wurde.



  • Kopfschmerznetzwerg schrieb:

    Ah, ich glaub jetzt versteh ichs 😃

    Im sockaddr_in auf das ich in revcfrom() referenziere stehen dann unterschiedliche Ports bei den. z.B. 20000 bei packeten von Client A, und 20001 von Client B, obwohl beide Clienten über den Port 2000 bei sendto() schicken?

    ja


Anmelden zum Antworten