IPEndPoint oraz AddressFamily z czym to ugryźć?

0

Witam,

czy ktoś potrafi mi w jakiś prosty sposób wytłumaczyć dlaczego te 2 obiekty się tak nazywają i jak wygląda ich rola w przesyłaniu pakietów. Oczywiście wiem, że są do tego niezbędne, ale nie rozumiem sposobu ich działania. Na MSDN jest napisane :

An AddressFamily member specifies the addressing scheme that a Socket will use to resolve an address.

The IPEndPoint class contains the host and local or remote port information needed by an application to connect to a service on a host. By combining the host's IP address and port number of a service, the IPEndPoint class forms a connection point to a service.

To do mnie nie przemawia. Właściwie jak to się ma do pakietów? Jakieś nagłówki, coś?

Napisałem sobie bardzo prosty programik w C#. Odpaliłem Wiresharka i użyłem Socket.Connect(..);
Okazało się, że jakieś pakiety są przesyłane do destination IP:

najpierw ten:

0000   00 17 9a db f4 20 00 18 f3 5f cf ee 08 00 45 00  ..... ..._....E.
0010   00 34 26 e0 40 00 80 06 b9 6f c0 a8 01 0e d1 55  .4&[email protected]
0020   87 68 c6 be 00 50 eb c4 24 2c 00 00 00 00 80 02  .h...P..$,......
0030   20 00 5d 9c 00 00 02 04 05 b4 01 03 03 08 01 01   .].............
0040   04 02                                            ..

później odbiór tego:

0000   00 18 f3 5f cf ee 00 17 9a db f4 20 08 00 45 00  ..._....... ..E.
0010   00 34 88 d5 00 00 39 06 de 7a d1 55 87 68 c0 a8  .4....9..z.U.h..
0020   01 0e 00 50 c6 be d4 10 f1 95 eb c4 24 2d 80 12  ...P........$-..
0030   16 58 a1 ac 00 00 02 04 05 96 01 01 04 02 01 03  .X..............
0040   03 06                                            ..

i znowu wysyłamy:

0000   00 17 9a db f4 20 00 18 f3 5f cf ee 08 00 45 00  ..... ..._....E.
0010   00 28 26 e1 40 00 80 06 b9 7a c0 a8 01 0e d1 55  .(&[email protected]
0020   87 68 c6 be 00 50 eb c4 24 2d d4 10 f1 96 50 10  .h...P..$-....P.
0030   01 00 f7 b7 00 00                                ......

Co tam właściwie jest zapisane? Do czego to służy? Proszę o jakieś porównanie :P

Pozdrawiam
Tilosag

0

Zapoznaj się z pojęciami

  1. Pakiet IP (wystarczy, możesz poczytać o warstwach modelu TCP/IP. Ewentualnie ramka Ethernet/WiFI ale nie ma potrzeby)
  2. Pakiet TCP (ewentualnie UDP) i czym jest warstwa transportowa (w której biorą się porty).
  3. Jak są przydzielane porty w systemie.

Wireshark ma takie okienko drzewiaste gdzie wypisuje i nazywa jaki bajt należy do czego w nagłówku i nie trzeba się samym hexem masochizować.

0

A co się stanie gdy zrobię coś takiego:

            IPAddress address = IPAddress.Parse("209.85.135.104");
            

            Socket sock = new Socket(address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

InterNetwork to tak jakby to że pakiet będzie zawierał nagłówek IP i jeszcze jakieś ustawienia.
Ale tutaj address jest po prostu adresem, więc jakie ma ustawienia Address Family? czy można tak robić?

0

Sockety mogą obsługiwać różne protokoły, nie tylko IP. Adres nie jest "po prostu adresem", jest "adresem IP". Albo "adresem IPv6". Albo "adresem Bluetooth". I to właśnie określa AddressFamily.

0

Programowanie to nie zgadywanie.

Tam przechowujesz adres IP (protokołu IP) a addressfamily to klasa do jakiej należy adres (i zapewne w twoim przypadku będzie miał wartość InterNetwork bo używasz protokołu IPv4). IPEndPoint reprezentuje adres IP oraz Port. Gniazdo (Socket) i funkcje z nim związane dopiero będą budować nagłówki ()/IP/TCP/(twoje dane). W normalnym przypadku programista ma niewielkie możliwości (i jeśli to nie wymagane - nie powinien) sterować nagłówkami poniżej warstwy aplikacji.

A czy tak można robić no jak zrobiłeś to można - co chesz osiągnąć

1 użytkowników online, w tym zalogowanych: 0, gości: 1