SlideShare uma empresa Scribd logo
1 de 57
Netzwerke, Sockets und Server




C# Workshop, TU Darmstadt 2008,
Präsentation von Qiong Wu (Microsoft Student Partner)
   Kommunikation zwischen Applikationen
   Bereitstellen von Services
   Server Applikationen
   Client Applikationen
   Anbindung an das Internet
   Kommunikationsnetze sind das A und O
    heutiger Computerapplikationen
   Ohne Kommunikationsnetze wäre IT
    heutzutage nicht IT
Ethernet          Token Ring

                                                                 IPv6
     RTSP                  UDP          TCP                              PPP
                                                    IPv4

                          RSVP       FTP                                  RIP
Telnet            IPX                                      SCTP
                                    HTTP
                                               SMTP
         DNS                                                            IGMP
                 SIP                                       RTP
                                  POP
                   NTP
                                                           ICMP
                                              SSH
• Schnittstelle von Anwendung zum
 Logische Aufteilung der      Application      Netzwerk

  Netzwerkkommunikation                       • Darstellung von Daten,
                               Presentation     Komprimierung & Verschlüsselung
  in Layer
 7 Layer durch OSI Standard     Session      • Prozesskommunikation

  definiert
                                Transport     • Ende-zu-Ende Verbindung
 Relevant für .net
  Programmierung                Network       • Paketvermittlung,
                                                Wegeermittlung (Routing)
  hauptsächlich Layer 3-7
                                              • MAC & LLC, Physikalische
                                Data Link
 OSI Protokolle kaum                           Adressierung

  verwendet                      Physical     • Medium, Signal & Bitübertragung
 Auf Internetprotokolle                 • Austausch
                           Application     anwendungsspezifischer Daten
  zugeschnitten
 TCP/IP Protokolle
  heute enorm wichtig      Transport     • Ende-zu-Ende Verbindung




                                         • Paketvermittlung,
                            Internet       Wegeermittlung (Routing) &
                                           Adressierung (IP)



                                         • Physikalische Adressierung,
                              Link         Bitübertragung, Medium &
                                           Signal
 De Facto Standards für                 • DNS, DHCP, HTTP,
                           Application
  Internetkommunikatio                     FTP, IMAP, SMTP

  n
 Nutzung durch Sockets    Transport     • TCP, UDP, SCTP



                            Internet     • IP (IPv4, IPv6)



                                         • Ethernet, Token Bus,
                              Link
                                           Token Ring, FDDI
 Network Layer                                • DNS, DHCP, HTTP,
                                 Application
 Wichtigstes Protokoll                          FTP, IMAP, SMTP
  für heutige
  Datenkommunikation
                                 Transport     • TCP, UDP, SCTP
 2 Standards
     IPv4
      ▪ Derzeit nahezu überall
        ausgebaut                 Internet     • IP (IPv4, IPv6)
     IPv6
      ▪ Noch nicht großflächig
        produziert                             • Ethernet, Token Bus,
                                    Link
      ▪ Größerer Adressraum                      Token Ring, FDDI
 Transport Layer                         • DNS, DHCP, HTTP,
                            Application
 Nutzt IP als                              FTP, IMAP, SMTP

  Netzwerkprotokoll
 zuverlässiges, Verbindu   Transport     • TCP, UDP, SCTP
  ngs- und Stream-
  orientiertes Punkt-zu-
  Punkt-Protokoll            Internet     • IP (IPv4, IPv6)
 Daten erreichen das
  Ziel sicher                             • Ethernet, Token Bus,
                               Link
                                            Token Ring, FDDI
 Transport Layer                        • DNS, DHCP, HTTP, FT
                           Application
 Nutzt IP als                             P, IMAP, SMTP

  Netzwerkprotokoll
 unzuverlässiges Punkt-   Transport     • TCP, UDP, SCTP
  zu-Punkt-Protokoll
 Schneller als TCP,
  weniger Overhead          Internet     • IP (IPv4, IPv6)



                                         • Ethernet, Token Bus,
                              Link
                                           Token Ring, FDDI
   Identifizieren eine IP Maschine
   Adressen können je nach IP Version in zwei
    Versionen auftreten
     IPv4 Adressen 0.0.0.0-255.255.255.255
     IPv6 Adressen 3FFE:FFFF:7654:FEDA
   Namensverwaltung erforderlich um
    umständliche Adressen „nachzuschlagen“ ->
    Domain Name System
     Beispiel: www.microsoft.com-> 207.46.192.254
 Bereitstellung           Well-                Dynamic /
                                   Registered
  mehrerer Services auf   Known                  Private
                                     Ports
                           Ports                  Ports
  einem Hosts
 Adressierung von
  Protokollen der
  Anwendungsschicht
                                    1024-       49152-
 Getrennte TCP und       0-1023
                                    49151       65535
  UDP Ports
   Schnittstelle zur Netzwerkkommunikation
   Berkeley Sockets / Microsoft Winsock
   Verschiedene Sockettypen
     Raw Sockets
     Datagram Sockets
     Stream Sockets
Computer 1                                             Computer 1


     Anwendung                                                                               Anwendung




                  Application Layer (TCP/IP Layer 4)    Application Layer (TCP/IP Layer 4)
     HTTPWebRe                                                                               HTTPWebRe
     quest,         Application Layer (OSI Layer 7)       Application Layer (OSI Layer 7)    quest,
     FTPWebReq     Presentation Layer (OSI Layer 6)      Presentation Layer (OSI Layer 6)    FTPWebReq
     uest, etc.                                                                              uest, etc.
                     Session Layer (OSI Layer 5)           Session Layer (OSI Layer 5)




     UDP Socket   Transport Layer (TCP/IP Layer 3)      Transport Layer (TCP/IP Layer 3)     UDP Socket
     TCP Socket     Transport Layer (OSI Layer 4)         Transport Layer (OSI Layer 4)
                                                                                             TCP Socket



     Raw Socket   Internet Layer (TCP/IP Layer 2)       Internet Layer (TCP/IP Layer 2)      Raw Socket

                     Network Layer (OSI Layer 3)           Network Layer (OSI Layer 3)




     NDIS         Network Access Layer (TCP/IP          Network Access Layer (TCP/IP         NDIS
                  Layer 1)                              Layer 1)

                    Data Link Layer (OSI Layer 2)         Data Link Layer (OSI Layer 2)

                     Physical Layer (OSI Layer 1)          Physical Layer (OSI Layer 1)




                                    LAN / MAN / WAN
   Raw Sockets
     Zugriff auf Protokolle der Netzwerkschicht (Layer 3)
     Beispiel: IP
   Datagram Sockets
     Verschicken Daten paketweise
     Beispiel: UDP
   Stream Sockets
     Zugriff auf Datenstrom
     Beispiel: TCP
   Socket selber arbeitet zwar auf dem
    jeweiligen Layer, Applikation kann aber nur
    auf Daten des um eins höheren Layers
    zugreifen
   Um Informationen des Socketlayers zu
    erhalten ist der Zugriff auf die
    Socketeigenschaften notwendig
   System.Net
     Bietet Schnittstellen für einfache
      Netzwerkkommunikation auf Applikationsebene
     DNS
     WebClient
     IPAddress, IPEndpoint
   System.Net.Sockets
     Bietet Schnittstellen für einfachen Zugriff auf
      Windows Sockets
     Socket Object
     TCPClient, TCPListener, UDPClient
   IP Adresse repräsentiert durch IPAddress
    Objekt
     Konvertieren von Strings in IPAddress mit
     IPAddress.Parse()
   IPEndPoint beinhaltet IPAddress und
    Portnummer um eindeutigen Endpunkt zu
    identifizieren
   Dns.GetHostEntry() um Hostnamen
    zugeordnete IP Adresse zu finden
String to IP Conversion
                                                               Adressen ermitteln


IPAddress ExampleAddress = IPAddress.Parse(quot;192.168.1.1quot;);

foreach (IPAddress HostIPAddress in Dns.GetHostEntry(quot;www.microsoft.comquot;).AddressList)
{
    Console.WriteLine(HostIPAddress.ToString());
}
   Konstruktor erfordert 3 Parameter
     AddressFamily – spezifiert das
      Adressierungsschema, z.B. IPv4 oder IPv6
     SocketType – Typ des Sockets, z.B. Datagram,
      Stream, oder Raw
     ProtocolType – Protokolltyp, TCP, UDP, IP
   Vorteil
     Hohe Anpassung möglich
     Raw Sockets möglich
   Nachteil
     Keine einfache Handhabung
   Normalerweise ist direktes Arbeiten mit
    Sockets nicht erforderlich
   Client
     Fordert einen Service an
     Muss die Adresse des
      Servers kennen (z.B. IP
      Adresse + Port)
     Fordert mit Request an
   Server
     Stellt einen Service
      bereit
     Antwortet mit Response
 Client und Server nicht
  getrennt
 Peers können Dienste
  sowohl anfordern als
  auch bereitstellen
   Ziel: Kommunikation zwischen Client und
    Server Applikation
   Implementierung mit TCP
   Server lauscht über Sockets auf einem
    dedizierten Port
   Client sendet Nachricht an den Server
   Server antwortet mit Hallo
   Wichtig! Termination Message
   Möglichst einfacher Server
     Nur ein Client gleichzeitig verbunden
   Ein Socket für Clientannahme bindet einen
    Port mit Socket.Bind() und lauscht dann auf
    Port & Adresse mit Socket.Listen()
     Erstellt Socket für Clientkommunikation mit
     Socket.Accept()
   Socket für Clientkommunikation empfängt
    Daten mit Socket.Receive()
Socketparameter
   Socket Objekt erstellen                                        übermitteln

Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Any, PORT));

listener.Listen(0);            Auf Port lauschen                  Port an Socket binden
Console.WriteLine(quot;Waiting for incoming V4 connections on quot; + PORT);

Socket socket = listener.Accept();       Neuer Socket aus angenommener
listener.Close();                              Verbindungsanfrage
byte[] b = new byte[100];                       Empfangspuffer
int len;
while ((len = socket.Receive(b)) != 0)                            Bytes empfangen
{
    System.Console.WriteLine(quot;RXv4: Received Packet with length: quot; + len);
    Console.WriteLine(quot;Package Content Begin--->quot;);
    Console.WriteLine(Encoding.ASCII.GetString(b).Trim());
    Console.WriteLine(quot;<---Package Content Endquot;);
    b = new byte[100];
}                                                       Bytes senden
socket.Send(b);
socket.Close();                                         Verbindung beenden
   Verbinden mit Socket.Connect()
     IP Adresse und Port übergeben
     IP Parsen mit IPAdress.Parse()
     (optional) Dns Auflösung mit DNS.GetHostEntry()
   Daten kodieren mit Encoding.GetBytes()
     Konvertierung von Plain Text in Bytes erforderlich
   Daten senden mit Socket.Send()
     Erwartet zu sendendes Bytearray
     (optional) SocketFlags
     Gibt Anzahl gesendeter Bytes zurück
IP Adresse definieren                    IP Endpunkt aus IP Adresse + Port
                                                          definieren
IPAddress ipav4 = IPAddress.Parse(IPv4_ADDR);
IPEndPoint ipehv4 = new IPEndPoint(ipav4, PORT);
Socket connectionv4 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

try                                               Verbindung zu Endpunkt
{
      connectionv4.Connect(ipehv4);                      herstellen
      byte[] b = Encoding.ASCII.GetBytes(String.Format(quot;This is a message.quot;));
      Console.WriteLine(quot;TXv4: Sending Packet with length: quot; + b.Length.ToString());
      Console.WriteLine(quot;Package Content Begin--->quot;);
      Console.WriteLine(Encoding.ASCII.GetString(b).Trim());    Verbindung zu Endpunkt
      Console.WriteLine(quot;<---Package Content Endquot;);
      connectionv4.Send(b, SocketFlags.None);                           herstellen
      b = new byte[1];
      connectionv4.Send(b, SocketFlags.None);
}
catch
{                                                                Terminierungsnachricht
}                     Verbindung beenden                                 senden
finally
{
    connectionv4.Close();
}
   Praktische Werkzeuge für Diagnose &
    Netzwerkdebugging
   Leider unter Vista stark eingeschränkt
   In Produktionsumgebungen kaum einsetzbar
   Möglich Unabhängig von TCP/UDP direkt IP
    Pakete zu manipulieren
   Ggf. Notwendig um Protokolle wie ICMP,
    IGMP, etc. zu implementieren
 Vereinfachen den
                        TCPClient   TCPListener   UDPClient
  Umgang mit Sockets
 Liefern einfache
                                      Socket
  Schnittstelle zur
  Kommunikation mit                 WinSock API
  TCP & UDP
 Verwenden
  automatisch Sockets
   Stellt Routinen für das Herstellen von TCP
    Verbindungen bereit
   Verbindungsaufbau mit TCPClient.Connect()
   NetworkStream Objekt mit
    TCPClient.GetStream()
   Senden von Paketen mit
    NetworkStream.Write()
   Empfang von Paketen mit
    NetworkStream.Read()
TcpClient tcpClient = null;     TCPClient Objekt deklarieren
         try
         {                                                   Ziel-Endpunkt übergeben
             tcpClient = new TcpClient(Host, RemotePort);

             NetworkStream netStream = tcpClient.GetStream();
             Byte[] sendBytes = new Byte[1500];
             sendBytes[0] = 0x31;                         Netzwerk Stream erstellen

             netStream.Write(sendBytes, 0, sendBytes.Length);
 Bytes
senden       Byte[] receiveBytes = new Byte[1500];
             netStream.Read(receiveBytes, 0, receiveBytes.Length);
             Console.WriteLine(Encoding.ASCII.GetString(receiveBytes));
         }
         catch
                                                                       Bytes
         {                                                           empfangen
         }
         finally
         {
             tcpClient.Close();
         }
   Lauscht auf eingehende TCP Verbindungen
   Gegenstück zum TCPClient
   Kann TCPClient Accepten, aber auch Socket
   Funktionsweise wie Server Socket
TcpListener tcpListener = null;              TCPListener + ClientObjekt
      TcpClient tcpClient = null;                         deklarieren
      try
      {
          tcpListener = new TcpListener(IPAddress.Any, 80);
          tcpListener.Start(0);                                       Zu lauschende
          tcpClient = tcpListener.AcceptTcpClient();                  Adresse + Port
  Client   NetworkStream netStream = tcpClient.GetStream();
annehmen                                                  Netzwerk Stream erstellen
           Byte[] sendBytes = new Byte[1500];
           sendBytes[0] = 0x31;
           netStream.Write(sendBytes, 0, sendBytes.Length);
           IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
           Byte[] receiveBytes = new Byte[1500];
           netStream.Read(receiveBytes, 0, receiveBytes.Length);
           Console.WriteLine(Encoding.ASCII.GetString(receiveBytes));
      }
      finally
      {
          tcpClient.Close();
          tcpListener.Stop();
      }
   Keine Verbindung vor Senden von Daten
    erforderlich
   Kein Listener erforderlich
   Einfacher Zugriff auf UDP Paketroutinen
   Senden von Daten mit UDPClient.Send()
   Empfang von Daten mit UDPClient.Receive()
UDPClient Objekt deklarieren

         UdpClient udpClient = new UdpClient(LocalPort);
         try                                           (optional) Host und Port
         {
                                                              festlegen
             udpClient.Connect(Host, RemotePort);
             Byte[] sendBytes = new Byte[13];
             sendBytes[0] = 0x31;
             udpClient.Send(sendBytes, sendBytes.Length);
 Bytes       IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
             Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint);
senden       Console.WriteLine(Encoding.ASCII.GetString(receiveBytes));
         }
         catch
         {
         }
         finally
                                                              Bytes
         {                                                 empfangen
             udpClient.Close();
         }
   Stellt Routinen für den Abruf von URIs
    (Uniform Resource Identifier) bereit
   Unterstützung von http:, https:, ftp:, file:
   Verwendet
     HttpWebRequest
     HttpWebResponse
     FtpWebRequest
     FtpWebResponse
WebClient Objekt deklarieren

WebClient client = new WebClient();                WebClient Optionen ändern
client.Headers.Add(quot;user-agentquot;,
quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)quot;);

client.DownloadFile(quot;http://localhost/IE_T.pngquot;, quot;IE.pngquot;);     Datei laden
Stream data = client.OpenRead(quot;http://localhost/index.htmlquot;);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
Console.WriteLine(s);

data.Close();
reader.Close();


        Stream
      extrahieren
   Ping Klasse im
    System.Net.NetworkInformation
    NameSpace
   PingOptions erlaubt setzen von Ping
    Optionen wie DontFragment, TTL, etc.
   Ping.Send() gibt PingReplay Objekt zurück
    das ausgewertet werden kann
Ping Objekt deklarieren
Ping myPing = new Ping();                              Byte Buffer
byte[] buffer = new byte[buffersize];
int timeout = 1000;
PingOptions pingOptions = new PingOptions();
                                                        Ping Optionen
PingReply reply = myPing.Send(host, timeout, buffer, pingOptions);

                                                   Ping Senden
if (reply.Status == IPStatus.Success)
{
    return (quot;Antwort in quot; + reply.RoundtripTime.ToString()
    + quot;ms erhalten Bytes=quot; + reply.Buffer.Length.ToString());
}
else if (reply.Status == IPStatus.TimedOut)
{
    return (quot;Timeoutquot;);                             Status Checken
}
else
{
    return reply.Status.ToString();
}
   System.Net.Mail NameSpace enthält Klassen
   SmtpClient
     Versendet
      ▪ MailMessage mit
        ▪   MailAddress
        ▪   Subject
        ▪   Body
        ▪   MailAttachment
     Benötigt ggf.
      ▪ NetworkCredentials
Email Adressen definieren

MailAddress from = new MailAddress(quot;qiong.wu@studentpartners.dequot;, quot;Qiong Wuquot;);
MailAddress to = new MailAddress(quot;roman.brehm@studentpartners.dequot;, quot;Roman Brehmquot;);

MailMessage message = new MailMessage(from, to);            Nachricht erstellen
message.Subject = quot;FYI: Hot Topicquot;;
message.Body = quot;Hi Roman, this is Qiongquot;;
message.Attachments.Add(new Attachment(quot;test.htmlquot;));
SmtpClient emailClient = new SmtpClient(quot;smtp.example.comquot;, 587);
System.Net.NetworkCredential SMTPUserInfo =
new System.Net.NetworkCredential(quot;Userquot;, quot;Passwordquot;);      SMTP Server festlegen
emailClient.Credentials = SMTPUserInfo;
emailClient.Send(message);
Console.WriteLine(quot;Message Sentquot;);                           Zugangsdaten zuweisen

                                                          Email senden
   Netzwerkoperationen können oft lange dauern
   Oft blockieren Netzwerkoperationen ein
    Programm für relativ lange Zeit
   Lösungen:
     Asynchrone Methoden wie
      ▪   BeginRead
      ▪   EndRead
      ▪   BeginConnect
      ▪   EndConnect
     Multithreaded Server / Clients
   Server erstellt für jeden Client der mit
    Socket.Accept() angenommen wird einen
    eigenen Thread
   Verhindert Blockieren
   Erlaubt parallele Abfertigung von Clients ->
    bessere Skalierbarkeit, mehr Performance,
    weniger Lag
   Im letzten Kapitel lernten wir etwas über
    Threads…
Main Thread                                 Client Handler Thread

   Listener Socket                           Kommunikation mit
       Erstellen                                 Client



 Auf Listener Socket
      lauschen                              ClientSocket schließen

   Bei Clientannahme


ClientSocket erstellen
                         Thread erstellen
Socket listener = null;
try
{
    listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    listener.Bind(new IPEndPoint(IPAddress.Any, PORT));
    listener.Listen(10);
    Console.WriteLine(quot;[ServerThread]: Waiting for incoming V4 connections on quot; + PORT);
    while (true)
    {
        Socket socket = listener.Accept();
        Console.WriteLine(quot;[ServerThread]: Client connectedquot;);
        ThreadPool.QueueUserWorkItem(new WaitCallback(AcceptClient), socket);
    }
}
catch
{
}
finally
{
    listener.Close();
}
static void AcceptClient(object ClientSocket)
{
    Socket Client = null;
    try
    {
        Client = (Socket)ClientSocket;
        byte[] b = new byte[100];
        int len;
        while ((len = Client.Receive(b)) != 0)
        {
            System.Console.WriteLine(quot;[ClientThread]: Received Packet with length: quot; + len);
            Console.WriteLine(quot;[ClientThread]: Package Content Begin--->quot;);
            Console.WriteLine(quot;[ClientThread]: quot; + Encoding.ASCII.GetString(b).Trim());
            Console.WriteLine(quot;[ClientThread]: <---Package Content Endquot;);
            b = new byte[100];
        }
        Client.Send(b);
    }
    catch
    {
    }
    finally
    {
        Client.Close();
    }
}
   Oft ist es wichtig Protokolle zu
    implementieren, z.B. HTTP, Instant
    Messenger, etc.
   Funktionsweise ist bei Standards oft in
    Dokumenten hinterlegt z.B. RFCs (Request
    for Comments)
   Für proprietäre und nicht dokumentierte
    Protokolle wird oft Reverse Engineering
    verwendet
   Dokumente zum Internet
   Beinhalten technische Spezifikationen zu
    Bestandteilen des Internets
   Genaue Funktionsweise von Protokollen wie
    IP, UDP, TCP, etc. in RFCs Dokumentiert
   Durchnummeriert, z.B.:
     RFC 1945 HTTP1.0
     RFC 768 UDP
     RFC 791 IP
   Zu finden unter http://www.rfc-editor.org/
 Netzwerksniffer
  Wireshark, früher
  Ethereal
 Analysiert
  Netzwerkverkehr
 Schlüsselt die meisten
  Protokolle auf
 Sehr nützlich für
  Reverse Engineering /
  Debugging
 Normalerweise sind Kommunikationsstandards
  bekannt
 Oft ist für die Nachprogrammierung eines
  Clients/Servers allerdings Kenntnis über das
  Netzwerkprotokoll notwendig
 Wenn dieses nicht dokumentiert ist kann man Reverse
  Engineering betreiben
 Bedeutet
     Kommunikation zwischen Originalserver & Client
      mitschneiden
     Mitschnitt analysieren
     Client/Server programmieren sodass Anfragen/Antworten
      dem originalen Server entsprechen
   Bisher: Programm muss sich um die
    Kommunikation selber kümmern und
    übertragene Payloads auswerten
   Mit WCF: Serviceorientierte Architektur
   Zugriff auf Methoden von Remoteclient aus
    möglich

Mais conteúdo relacionado

Destaque

Reise nach berlin
Reise nach berlinReise nach berlin
Reise nach berlinkrizser
 
Hardware
HardwareHardware
HardwareFLIEEP
 
Open Data als Chance für die IT-Branche
Open Data als Chance für die IT-BrancheOpen Data als Chance für die IT-Branche
Open Data als Chance für die IT-BrancheRobert Seyfriedsberger
 
Pragmatic SOA - Beschränken auf das Wesentliche
Pragmatic SOA - Beschränken auf das WesentlichePragmatic SOA - Beschränken auf das Wesentliche
Pragmatic SOA - Beschränken auf das Wesentliche1&1
 
Grobe einführung der fahrzeugelektronik und vernetzungssystem
Grobe einführung der fahrzeugelektronik und vernetzungssystemGrobe einführung der fahrzeugelektronik und vernetzungssystem
Grobe einführung der fahrzeugelektronik und vernetzungssystemTG-CDA
 
learn German with street signs
learn German with street signslearn German with street signs
learn German with street signsRomyMatthies
 
Online flight booking srs document
Online flight booking srs documentOnline flight booking srs document
Online flight booking srs documentmanthankdesai
 
Integrated Public Transport System - Bangalore
Integrated Public Transport System - BangaloreIntegrated Public Transport System - Bangalore
Integrated Public Transport System - BangaloreTehsin Kazi
 
Means Of Transport 1st Class
Means Of Transport   1st ClassMeans Of Transport   1st Class
Means Of Transport 1st Classmonodeth
 
ESL: Means of Transport: Video
ESL: Means of Transport: VideoESL: Means of Transport: Video
ESL: Means of Transport: VideoA. Simoes
 
German Transport
German TransportGerman Transport
German TransportPGCEMaster
 
Transport and word order jtr 2013
Transport and word order   jtr 2013Transport and word order   jtr 2013
Transport and word order jtr 2013osamfl
 
Multi model integration of bus and train services mira bhayandar
Multi model integration of bus and train services mira bhayandarMulti model integration of bus and train services mira bhayandar
Multi model integration of bus and train services mira bhayandarunclecruise
 
Andréa
AndréaAndréa
Andréasyljl
 

Destaque (20)

Reise nach berlin
Reise nach berlinReise nach berlin
Reise nach berlin
 
Hardware
HardwareHardware
Hardware
 
Open Data als Chance für die IT-Branche
Open Data als Chance für die IT-BrancheOpen Data als Chance für die IT-Branche
Open Data als Chance für die IT-Branche
 
Pragmatic SOA - Beschränken auf das Wesentliche
Pragmatic SOA - Beschränken auf das WesentlichePragmatic SOA - Beschränken auf das Wesentliche
Pragmatic SOA - Beschränken auf das Wesentliche
 
Grobe einführung der fahrzeugelektronik und vernetzungssystem
Grobe einführung der fahrzeugelektronik und vernetzungssystemGrobe einführung der fahrzeugelektronik und vernetzungssystem
Grobe einführung der fahrzeugelektronik und vernetzungssystem
 
learn German with street signs
learn German with street signslearn German with street signs
learn German with street signs
 
Crocodile App
Crocodile AppCrocodile App
Crocodile App
 
World Usability Day
World Usability DayWorld Usability Day
World Usability Day
 
Means of transport
Means of transport Means of transport
Means of transport
 
Tom's TEFL - Transport
Tom's TEFL - TransportTom's TEFL - Transport
Tom's TEFL - Transport
 
Online flight booking srs document
Online flight booking srs documentOnline flight booking srs document
Online flight booking srs document
 
Integrated Public Transport System - Bangalore
Integrated Public Transport System - BangaloreIntegrated Public Transport System - Bangalore
Integrated Public Transport System - Bangalore
 
Means Of Transport 1st Class
Means Of Transport   1st ClassMeans Of Transport   1st Class
Means Of Transport 1st Class
 
ESL: Means of Transport: Video
ESL: Means of Transport: VideoESL: Means of Transport: Video
ESL: Means of Transport: Video
 
Transports and travelling
Transports and travellingTransports and travelling
Transports and travelling
 
Was ist Lonbus?
Was ist Lonbus?Was ist Lonbus?
Was ist Lonbus?
 
German Transport
German TransportGerman Transport
German Transport
 
Transport and word order jtr 2013
Transport and word order   jtr 2013Transport and word order   jtr 2013
Transport and word order jtr 2013
 
Multi model integration of bus and train services mira bhayandar
Multi model integration of bus and train services mira bhayandarMulti model integration of bus and train services mira bhayandar
Multi model integration of bus and train services mira bhayandar
 
Andréa
AndréaAndréa
Andréa
 

Semelhante a C# Workshop - Networking

Grundlagen der Kommunikation - von Binär zum OSI Modell
Grundlagen der Kommunikation - von Binär zum OSI ModellGrundlagen der Kommunikation - von Binär zum OSI Modell
Grundlagen der Kommunikation - von Binär zum OSI ModellChristian Höserle
 
12. Smooth migration from IPv4 to IPv6 with Citrix NetScaler - Daniel Künzli
12. Smooth migration from IPv4 to IPv6 with Citrix NetScaler - Daniel Künzli12. Smooth migration from IPv4 to IPv6 with Citrix NetScaler - Daniel Künzli
12. Smooth migration from IPv4 to IPv6 with Citrix NetScaler - Daniel KünzliDigicomp Academy AG
 
Transport Layer Multipathing: MPTCP und CMT-SCTP
Transport Layer Multipathing: MPTCP und CMT-SCTPTransport Layer Multipathing: MPTCP und CMT-SCTP
Transport Layer Multipathing: MPTCP und CMT-SCTPMarkus Jungbluth
 
3. IPv6 im täglichen Geschäftsleben - Simon Leinen
3. IPv6 im täglichen Geschäftsleben - Simon Leinen3. IPv6 im täglichen Geschäftsleben - Simon Leinen
3. IPv6 im täglichen Geschäftsleben - Simon LeinenDigicomp Academy AG
 
Internet Information Services (deutsch)
Internet Information Services (deutsch)Internet Information Services (deutsch)
Internet Information Services (deutsch)Joerg Krause
 
Citrix Day 2013: Citirx Networking
Citrix Day 2013: Citirx NetworkingCitrix Day 2013: Citirx Networking
Citrix Day 2013: Citirx NetworkingDigicomp Academy AG
 
Feedbox - ServerPush Implementierung
Feedbox - ServerPush ImplementierungFeedbox - ServerPush Implementierung
Feedbox - ServerPush ImplementierungMartin Wöginger
 
2. IPv6 Neighbor Discovery und Autokonfiguration - Marc Eggenberger
2. IPv6 Neighbor Discovery und Autokonfiguration - Marc Eggenberger2. IPv6 Neighbor Discovery und Autokonfiguration - Marc Eggenberger
2. IPv6 Neighbor Discovery und Autokonfiguration - Marc EggenbergerDigicomp Academy AG
 
OSDC 2011 | Automatische Netzwerkdokumentation mit NetDot und RANCID by Jens ...
OSDC 2011 | Automatische Netzwerkdokumentation mit NetDot und RANCID by Jens ...OSDC 2011 | Automatische Netzwerkdokumentation mit NetDot und RANCID by Jens ...
OSDC 2011 | Automatische Netzwerkdokumentation mit NetDot und RANCID by Jens ...NETWAYS
 
Making the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICMaking the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICQAware GmbH
 
Praxismodul Abschlussdiskussion.pptx
Praxismodul Abschlussdiskussion.pptxPraxismodul Abschlussdiskussion.pptx
Praxismodul Abschlussdiskussion.pptxKendriKx
 
WS: Uhl, Lisog - Deutsche Wolke
WS: Uhl, Lisog - Deutsche WolkeWS: Uhl, Lisog - Deutsche Wolke
WS: Uhl, Lisog - Deutsche WolkeCloudOps Summit
 
HTTP und Java Servlets Programmierung
HTTP und Java Servlets ProgrammierungHTTP und Java Servlets Programmierung
HTTP und Java Servlets ProgrammierungChristian Baranowski
 

Semelhante a C# Workshop - Networking (20)

Grundlagen der Kommunikation - von Binär zum OSI Modell
Grundlagen der Kommunikation - von Binär zum OSI ModellGrundlagen der Kommunikation - von Binär zum OSI Modell
Grundlagen der Kommunikation - von Binär zum OSI Modell
 
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-iiBit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
 
12. Smooth migration from IPv4 to IPv6 with Citrix NetScaler - Daniel Künzli
12. Smooth migration from IPv4 to IPv6 with Citrix NetScaler - Daniel Künzli12. Smooth migration from IPv4 to IPv6 with Citrix NetScaler - Daniel Künzli
12. Smooth migration from IPv4 to IPv6 with Citrix NetScaler - Daniel Künzli
 
Interaktives Web
Interaktives WebInteraktives Web
Interaktives Web
 
Transport Layer Multipathing: MPTCP und CMT-SCTP
Transport Layer Multipathing: MPTCP und CMT-SCTPTransport Layer Multipathing: MPTCP und CMT-SCTP
Transport Layer Multipathing: MPTCP und CMT-SCTP
 
3. IPv6 im täglichen Geschäftsleben - Simon Leinen
3. IPv6 im täglichen Geschäftsleben - Simon Leinen3. IPv6 im täglichen Geschäftsleben - Simon Leinen
3. IPv6 im täglichen Geschäftsleben - Simon Leinen
 
Internet Information Services (deutsch)
Internet Information Services (deutsch)Internet Information Services (deutsch)
Internet Information Services (deutsch)
 
Citrix Day 2013: Citirx Networking
Citrix Day 2013: Citirx NetworkingCitrix Day 2013: Citirx Networking
Citrix Day 2013: Citirx Networking
 
[14] Nu P 09 2
[14] Nu P 09 2[14] Nu P 09 2
[14] Nu P 09 2
 
[14] Nu P 09 2
[14] Nu P 09 2[14] Nu P 09 2
[14] Nu P 09 2
 
Feedbox - ServerPush Implementierung
Feedbox - ServerPush ImplementierungFeedbox - ServerPush Implementierung
Feedbox - ServerPush Implementierung
 
Webinar Serial-over-IP
Webinar Serial-over-IPWebinar Serial-over-IP
Webinar Serial-over-IP
 
Ipv6
Ipv6Ipv6
Ipv6
 
2. IPv6 Neighbor Discovery und Autokonfiguration - Marc Eggenberger
2. IPv6 Neighbor Discovery und Autokonfiguration - Marc Eggenberger2. IPv6 Neighbor Discovery und Autokonfiguration - Marc Eggenberger
2. IPv6 Neighbor Discovery und Autokonfiguration - Marc Eggenberger
 
OSDC 2011 | Automatische Netzwerkdokumentation mit NetDot und RANCID by Jens ...
OSDC 2011 | Automatische Netzwerkdokumentation mit NetDot und RANCID by Jens ...OSDC 2011 | Automatische Netzwerkdokumentation mit NetDot und RANCID by Jens ...
OSDC 2011 | Automatische Netzwerkdokumentation mit NetDot und RANCID by Jens ...
 
VampirTrace und Vampir
VampirTrace und VampirVampirTrace und Vampir
VampirTrace und Vampir
 
Making the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICMaking the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUIC
 
Praxismodul Abschlussdiskussion.pptx
Praxismodul Abschlussdiskussion.pptxPraxismodul Abschlussdiskussion.pptx
Praxismodul Abschlussdiskussion.pptx
 
WS: Uhl, Lisog - Deutsche Wolke
WS: Uhl, Lisog - Deutsche WolkeWS: Uhl, Lisog - Deutsche Wolke
WS: Uhl, Lisog - Deutsche Wolke
 
HTTP und Java Servlets Programmierung
HTTP und Java Servlets ProgrammierungHTTP und Java Servlets Programmierung
HTTP und Java Servlets Programmierung
 

Mais de Qiong Wu

node.js workshop- node.js databases
node.js workshop- node.js databasesnode.js workshop- node.js databases
node.js workshop- node.js databasesQiong Wu
 
node.js workshop- node.js unit testing
node.js workshop- node.js unit testingnode.js workshop- node.js unit testing
node.js workshop- node.js unit testingQiong Wu
 
node.js workshop- node.js middleware
node.js workshop- node.js middlewarenode.js workshop- node.js middleware
node.js workshop- node.js middlewareQiong Wu
 
node.js workshop- node.js basics
node.js workshop- node.js basicsnode.js workshop- node.js basics
node.js workshop- node.js basicsQiong Wu
 
node.js workshop- JavaScript Async
node.js workshop- JavaScript Asyncnode.js workshop- JavaScript Async
node.js workshop- JavaScript AsyncQiong Wu
 
node.js workshop- JavaScript Basics
node.js workshop- JavaScript Basicsnode.js workshop- JavaScript Basics
node.js workshop- JavaScript BasicsQiong Wu
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Qiong Wu
 
S N A I L Final Presentation
S N A I L    Final  PresentationS N A I L    Final  Presentation
S N A I L Final PresentationQiong Wu
 
3 Interop Part2
3 Interop Part23 Interop Part2
3 Interop Part2Qiong Wu
 
C# Workshop - File Operations
C# Workshop - File OperationsC# Workshop - File Operations
C# Workshop - File OperationsQiong Wu
 
C# Workshop - Threading
C# Workshop - ThreadingC# Workshop - Threading
C# Workshop - ThreadingQiong Wu
 
Life In Power Point
Life In Power PointLife In Power Point
Life In Power PointQiong Wu
 

Mais de Qiong Wu (14)

node.js workshop- node.js databases
node.js workshop- node.js databasesnode.js workshop- node.js databases
node.js workshop- node.js databases
 
node.js workshop- node.js unit testing
node.js workshop- node.js unit testingnode.js workshop- node.js unit testing
node.js workshop- node.js unit testing
 
node.js workshop- node.js middleware
node.js workshop- node.js middlewarenode.js workshop- node.js middleware
node.js workshop- node.js middleware
 
node.js workshop- node.js basics
node.js workshop- node.js basicsnode.js workshop- node.js basics
node.js workshop- node.js basics
 
node.js workshop- JavaScript Async
node.js workshop- JavaScript Asyncnode.js workshop- JavaScript Async
node.js workshop- JavaScript Async
 
node.js workshop- JavaScript Basics
node.js workshop- JavaScript Basicsnode.js workshop- JavaScript Basics
node.js workshop- JavaScript Basics
 
Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0Parallele Softwareentwicklung mit .NET 4.0
Parallele Softwareentwicklung mit .NET 4.0
 
S N A I L Final Presentation
S N A I L    Final  PresentationS N A I L    Final  Presentation
S N A I L Final Presentation
 
3 Interop Part2
3 Interop Part23 Interop Part2
3 Interop Part2
 
Kickoff
KickoffKickoff
Kickoff
 
2 Interop
2 Interop2 Interop
2 Interop
 
C# Workshop - File Operations
C# Workshop - File OperationsC# Workshop - File Operations
C# Workshop - File Operations
 
C# Workshop - Threading
C# Workshop - ThreadingC# Workshop - Threading
C# Workshop - Threading
 
Life In Power Point
Life In Power PointLife In Power Point
Life In Power Point
 

C# Workshop - Networking

  • 1. Netzwerke, Sockets und Server C# Workshop, TU Darmstadt 2008, Präsentation von Qiong Wu (Microsoft Student Partner)
  • 2. Kommunikation zwischen Applikationen  Bereitstellen von Services  Server Applikationen  Client Applikationen  Anbindung an das Internet
  • 3. Kommunikationsnetze sind das A und O heutiger Computerapplikationen  Ohne Kommunikationsnetze wäre IT heutzutage nicht IT
  • 4. Ethernet Token Ring IPv6 RTSP UDP TCP PPP IPv4 RSVP FTP RIP Telnet IPX SCTP HTTP SMTP DNS IGMP SIP RTP POP NTP ICMP SSH
  • 5. • Schnittstelle von Anwendung zum  Logische Aufteilung der Application Netzwerk Netzwerkkommunikation • Darstellung von Daten, Presentation Komprimierung & Verschlüsselung in Layer  7 Layer durch OSI Standard Session • Prozesskommunikation definiert Transport • Ende-zu-Ende Verbindung  Relevant für .net Programmierung Network • Paketvermittlung, Wegeermittlung (Routing) hauptsächlich Layer 3-7 • MAC & LLC, Physikalische Data Link  OSI Protokolle kaum Adressierung verwendet Physical • Medium, Signal & Bitübertragung
  • 6.  Auf Internetprotokolle • Austausch Application anwendungsspezifischer Daten zugeschnitten  TCP/IP Protokolle heute enorm wichtig Transport • Ende-zu-Ende Verbindung • Paketvermittlung, Internet Wegeermittlung (Routing) & Adressierung (IP) • Physikalische Adressierung, Link Bitübertragung, Medium & Signal
  • 7.  De Facto Standards für • DNS, DHCP, HTTP, Application Internetkommunikatio FTP, IMAP, SMTP n  Nutzung durch Sockets Transport • TCP, UDP, SCTP Internet • IP (IPv4, IPv6) • Ethernet, Token Bus, Link Token Ring, FDDI
  • 8.  Network Layer • DNS, DHCP, HTTP, Application  Wichtigstes Protokoll FTP, IMAP, SMTP für heutige Datenkommunikation Transport • TCP, UDP, SCTP  2 Standards  IPv4 ▪ Derzeit nahezu überall ausgebaut Internet • IP (IPv4, IPv6)  IPv6 ▪ Noch nicht großflächig produziert • Ethernet, Token Bus, Link ▪ Größerer Adressraum Token Ring, FDDI
  • 9.  Transport Layer • DNS, DHCP, HTTP, Application  Nutzt IP als FTP, IMAP, SMTP Netzwerkprotokoll  zuverlässiges, Verbindu Transport • TCP, UDP, SCTP ngs- und Stream- orientiertes Punkt-zu- Punkt-Protokoll Internet • IP (IPv4, IPv6)  Daten erreichen das Ziel sicher • Ethernet, Token Bus, Link Token Ring, FDDI
  • 10.  Transport Layer • DNS, DHCP, HTTP, FT Application  Nutzt IP als P, IMAP, SMTP Netzwerkprotokoll  unzuverlässiges Punkt- Transport • TCP, UDP, SCTP zu-Punkt-Protokoll  Schneller als TCP, weniger Overhead Internet • IP (IPv4, IPv6) • Ethernet, Token Bus, Link Token Ring, FDDI
  • 11. Identifizieren eine IP Maschine  Adressen können je nach IP Version in zwei Versionen auftreten  IPv4 Adressen 0.0.0.0-255.255.255.255  IPv6 Adressen 3FFE:FFFF:7654:FEDA  Namensverwaltung erforderlich um umständliche Adressen „nachzuschlagen“ -> Domain Name System  Beispiel: www.microsoft.com-> 207.46.192.254
  • 12.  Bereitstellung Well- Dynamic / Registered mehrerer Services auf Known Private Ports Ports Ports einem Hosts  Adressierung von Protokollen der Anwendungsschicht 1024- 49152-  Getrennte TCP und 0-1023 49151 65535 UDP Ports
  • 13. Schnittstelle zur Netzwerkkommunikation  Berkeley Sockets / Microsoft Winsock  Verschiedene Sockettypen  Raw Sockets  Datagram Sockets  Stream Sockets
  • 14. Computer 1 Computer 1 Anwendung Anwendung Application Layer (TCP/IP Layer 4) Application Layer (TCP/IP Layer 4) HTTPWebRe HTTPWebRe quest, Application Layer (OSI Layer 7) Application Layer (OSI Layer 7) quest, FTPWebReq Presentation Layer (OSI Layer 6) Presentation Layer (OSI Layer 6) FTPWebReq uest, etc. uest, etc. Session Layer (OSI Layer 5) Session Layer (OSI Layer 5) UDP Socket Transport Layer (TCP/IP Layer 3) Transport Layer (TCP/IP Layer 3) UDP Socket TCP Socket Transport Layer (OSI Layer 4) Transport Layer (OSI Layer 4) TCP Socket Raw Socket Internet Layer (TCP/IP Layer 2) Internet Layer (TCP/IP Layer 2) Raw Socket Network Layer (OSI Layer 3) Network Layer (OSI Layer 3) NDIS Network Access Layer (TCP/IP Network Access Layer (TCP/IP NDIS Layer 1) Layer 1) Data Link Layer (OSI Layer 2) Data Link Layer (OSI Layer 2) Physical Layer (OSI Layer 1) Physical Layer (OSI Layer 1) LAN / MAN / WAN
  • 15. Raw Sockets  Zugriff auf Protokolle der Netzwerkschicht (Layer 3)  Beispiel: IP  Datagram Sockets  Verschicken Daten paketweise  Beispiel: UDP  Stream Sockets  Zugriff auf Datenstrom  Beispiel: TCP
  • 16. Socket selber arbeitet zwar auf dem jeweiligen Layer, Applikation kann aber nur auf Daten des um eins höheren Layers zugreifen  Um Informationen des Socketlayers zu erhalten ist der Zugriff auf die Socketeigenschaften notwendig
  • 17. System.Net  Bietet Schnittstellen für einfache Netzwerkkommunikation auf Applikationsebene  DNS  WebClient  IPAddress, IPEndpoint  System.Net.Sockets  Bietet Schnittstellen für einfachen Zugriff auf Windows Sockets  Socket Object  TCPClient, TCPListener, UDPClient
  • 18. IP Adresse repräsentiert durch IPAddress Objekt  Konvertieren von Strings in IPAddress mit IPAddress.Parse()  IPEndPoint beinhaltet IPAddress und Portnummer um eindeutigen Endpunkt zu identifizieren  Dns.GetHostEntry() um Hostnamen zugeordnete IP Adresse zu finden
  • 19. String to IP Conversion Adressen ermitteln IPAddress ExampleAddress = IPAddress.Parse(quot;192.168.1.1quot;); foreach (IPAddress HostIPAddress in Dns.GetHostEntry(quot;www.microsoft.comquot;).AddressList) { Console.WriteLine(HostIPAddress.ToString()); }
  • 20. Konstruktor erfordert 3 Parameter  AddressFamily – spezifiert das Adressierungsschema, z.B. IPv4 oder IPv6  SocketType – Typ des Sockets, z.B. Datagram, Stream, oder Raw  ProtocolType – Protokolltyp, TCP, UDP, IP
  • 21. Vorteil  Hohe Anpassung möglich  Raw Sockets möglich  Nachteil  Keine einfache Handhabung  Normalerweise ist direktes Arbeiten mit Sockets nicht erforderlich
  • 22.
  • 23. Client  Fordert einen Service an  Muss die Adresse des Servers kennen (z.B. IP Adresse + Port)  Fordert mit Request an  Server  Stellt einen Service bereit  Antwortet mit Response
  • 24.  Client und Server nicht getrennt  Peers können Dienste sowohl anfordern als auch bereitstellen
  • 25. Ziel: Kommunikation zwischen Client und Server Applikation  Implementierung mit TCP  Server lauscht über Sockets auf einem dedizierten Port  Client sendet Nachricht an den Server  Server antwortet mit Hallo  Wichtig! Termination Message
  • 26. Möglichst einfacher Server  Nur ein Client gleichzeitig verbunden  Ein Socket für Clientannahme bindet einen Port mit Socket.Bind() und lauscht dann auf Port & Adresse mit Socket.Listen()  Erstellt Socket für Clientkommunikation mit Socket.Accept()  Socket für Clientkommunikation empfängt Daten mit Socket.Receive()
  • 27. Socketparameter Socket Objekt erstellen übermitteln Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(IPAddress.Any, PORT)); listener.Listen(0); Auf Port lauschen Port an Socket binden Console.WriteLine(quot;Waiting for incoming V4 connections on quot; + PORT); Socket socket = listener.Accept(); Neuer Socket aus angenommener listener.Close(); Verbindungsanfrage byte[] b = new byte[100]; Empfangspuffer int len; while ((len = socket.Receive(b)) != 0) Bytes empfangen { System.Console.WriteLine(quot;RXv4: Received Packet with length: quot; + len); Console.WriteLine(quot;Package Content Begin--->quot;); Console.WriteLine(Encoding.ASCII.GetString(b).Trim()); Console.WriteLine(quot;<---Package Content Endquot;); b = new byte[100]; } Bytes senden socket.Send(b); socket.Close(); Verbindung beenden
  • 28. Verbinden mit Socket.Connect()  IP Adresse und Port übergeben  IP Parsen mit IPAdress.Parse()  (optional) Dns Auflösung mit DNS.GetHostEntry()  Daten kodieren mit Encoding.GetBytes()  Konvertierung von Plain Text in Bytes erforderlich  Daten senden mit Socket.Send()  Erwartet zu sendendes Bytearray  (optional) SocketFlags  Gibt Anzahl gesendeter Bytes zurück
  • 29. IP Adresse definieren IP Endpunkt aus IP Adresse + Port definieren IPAddress ipav4 = IPAddress.Parse(IPv4_ADDR); IPEndPoint ipehv4 = new IPEndPoint(ipav4, PORT); Socket connectionv4 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try Verbindung zu Endpunkt { connectionv4.Connect(ipehv4); herstellen byte[] b = Encoding.ASCII.GetBytes(String.Format(quot;This is a message.quot;)); Console.WriteLine(quot;TXv4: Sending Packet with length: quot; + b.Length.ToString()); Console.WriteLine(quot;Package Content Begin--->quot;); Console.WriteLine(Encoding.ASCII.GetString(b).Trim()); Verbindung zu Endpunkt Console.WriteLine(quot;<---Package Content Endquot;); connectionv4.Send(b, SocketFlags.None); herstellen b = new byte[1]; connectionv4.Send(b, SocketFlags.None); } catch { Terminierungsnachricht } Verbindung beenden senden finally { connectionv4.Close(); }
  • 30. Praktische Werkzeuge für Diagnose & Netzwerkdebugging  Leider unter Vista stark eingeschränkt  In Produktionsumgebungen kaum einsetzbar  Möglich Unabhängig von TCP/UDP direkt IP Pakete zu manipulieren  Ggf. Notwendig um Protokolle wie ICMP, IGMP, etc. zu implementieren
  • 31.  Vereinfachen den TCPClient TCPListener UDPClient Umgang mit Sockets  Liefern einfache Socket Schnittstelle zur Kommunikation mit WinSock API TCP & UDP  Verwenden automatisch Sockets
  • 32. Stellt Routinen für das Herstellen von TCP Verbindungen bereit  Verbindungsaufbau mit TCPClient.Connect()  NetworkStream Objekt mit TCPClient.GetStream()  Senden von Paketen mit NetworkStream.Write()  Empfang von Paketen mit NetworkStream.Read()
  • 33. TcpClient tcpClient = null; TCPClient Objekt deklarieren try { Ziel-Endpunkt übergeben tcpClient = new TcpClient(Host, RemotePort); NetworkStream netStream = tcpClient.GetStream(); Byte[] sendBytes = new Byte[1500]; sendBytes[0] = 0x31; Netzwerk Stream erstellen netStream.Write(sendBytes, 0, sendBytes.Length); Bytes senden Byte[] receiveBytes = new Byte[1500]; netStream.Read(receiveBytes, 0, receiveBytes.Length); Console.WriteLine(Encoding.ASCII.GetString(receiveBytes)); } catch Bytes { empfangen } finally { tcpClient.Close(); }
  • 34. Lauscht auf eingehende TCP Verbindungen  Gegenstück zum TCPClient  Kann TCPClient Accepten, aber auch Socket  Funktionsweise wie Server Socket
  • 35. TcpListener tcpListener = null; TCPListener + ClientObjekt TcpClient tcpClient = null; deklarieren try { tcpListener = new TcpListener(IPAddress.Any, 80); tcpListener.Start(0); Zu lauschende tcpClient = tcpListener.AcceptTcpClient(); Adresse + Port Client NetworkStream netStream = tcpClient.GetStream(); annehmen Netzwerk Stream erstellen Byte[] sendBytes = new Byte[1500]; sendBytes[0] = 0x31; netStream.Write(sendBytes, 0, sendBytes.Length); IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); Byte[] receiveBytes = new Byte[1500]; netStream.Read(receiveBytes, 0, receiveBytes.Length); Console.WriteLine(Encoding.ASCII.GetString(receiveBytes)); } finally { tcpClient.Close(); tcpListener.Stop(); }
  • 36. Keine Verbindung vor Senden von Daten erforderlich  Kein Listener erforderlich  Einfacher Zugriff auf UDP Paketroutinen  Senden von Daten mit UDPClient.Send()  Empfang von Daten mit UDPClient.Receive()
  • 37. UDPClient Objekt deklarieren UdpClient udpClient = new UdpClient(LocalPort); try (optional) Host und Port { festlegen udpClient.Connect(Host, RemotePort); Byte[] sendBytes = new Byte[13]; sendBytes[0] = 0x31; udpClient.Send(sendBytes, sendBytes.Length); Bytes IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); Byte[] receiveBytes = udpClient.Receive(ref RemoteIpEndPoint); senden Console.WriteLine(Encoding.ASCII.GetString(receiveBytes)); } catch { } finally Bytes { empfangen udpClient.Close(); }
  • 38. Stellt Routinen für den Abruf von URIs (Uniform Resource Identifier) bereit  Unterstützung von http:, https:, ftp:, file:  Verwendet  HttpWebRequest  HttpWebResponse  FtpWebRequest  FtpWebResponse
  • 39. WebClient Objekt deklarieren WebClient client = new WebClient(); WebClient Optionen ändern client.Headers.Add(quot;user-agentquot;, quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)quot;); client.DownloadFile(quot;http://localhost/IE_T.pngquot;, quot;IE.pngquot;); Datei laden Stream data = client.OpenRead(quot;http://localhost/index.htmlquot;); StreamReader reader = new StreamReader(data); string s = reader.ReadToEnd(); Console.WriteLine(s); data.Close(); reader.Close(); Stream extrahieren
  • 40. Ping Klasse im System.Net.NetworkInformation NameSpace  PingOptions erlaubt setzen von Ping Optionen wie DontFragment, TTL, etc.  Ping.Send() gibt PingReplay Objekt zurück das ausgewertet werden kann
  • 41. Ping Objekt deklarieren Ping myPing = new Ping(); Byte Buffer byte[] buffer = new byte[buffersize]; int timeout = 1000; PingOptions pingOptions = new PingOptions(); Ping Optionen PingReply reply = myPing.Send(host, timeout, buffer, pingOptions); Ping Senden if (reply.Status == IPStatus.Success) { return (quot;Antwort in quot; + reply.RoundtripTime.ToString() + quot;ms erhalten Bytes=quot; + reply.Buffer.Length.ToString()); } else if (reply.Status == IPStatus.TimedOut) { return (quot;Timeoutquot;); Status Checken } else { return reply.Status.ToString(); }
  • 42. System.Net.Mail NameSpace enthält Klassen  SmtpClient  Versendet ▪ MailMessage mit ▪ MailAddress ▪ Subject ▪ Body ▪ MailAttachment  Benötigt ggf. ▪ NetworkCredentials
  • 43. Email Adressen definieren MailAddress from = new MailAddress(quot;qiong.wu@studentpartners.dequot;, quot;Qiong Wuquot;); MailAddress to = new MailAddress(quot;roman.brehm@studentpartners.dequot;, quot;Roman Brehmquot;); MailMessage message = new MailMessage(from, to); Nachricht erstellen message.Subject = quot;FYI: Hot Topicquot;; message.Body = quot;Hi Roman, this is Qiongquot;; message.Attachments.Add(new Attachment(quot;test.htmlquot;)); SmtpClient emailClient = new SmtpClient(quot;smtp.example.comquot;, 587); System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(quot;Userquot;, quot;Passwordquot;); SMTP Server festlegen emailClient.Credentials = SMTPUserInfo; emailClient.Send(message); Console.WriteLine(quot;Message Sentquot;); Zugangsdaten zuweisen Email senden
  • 44. Netzwerkoperationen können oft lange dauern  Oft blockieren Netzwerkoperationen ein Programm für relativ lange Zeit  Lösungen:  Asynchrone Methoden wie ▪ BeginRead ▪ EndRead ▪ BeginConnect ▪ EndConnect  Multithreaded Server / Clients
  • 45. Server erstellt für jeden Client der mit Socket.Accept() angenommen wird einen eigenen Thread  Verhindert Blockieren  Erlaubt parallele Abfertigung von Clients -> bessere Skalierbarkeit, mehr Performance, weniger Lag
  • 46. Im letzten Kapitel lernten wir etwas über Threads…
  • 47. Main Thread Client Handler Thread Listener Socket Kommunikation mit Erstellen Client Auf Listener Socket lauschen ClientSocket schließen Bei Clientannahme ClientSocket erstellen Thread erstellen
  • 48. Socket listener = null; try { listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(new IPEndPoint(IPAddress.Any, PORT)); listener.Listen(10); Console.WriteLine(quot;[ServerThread]: Waiting for incoming V4 connections on quot; + PORT); while (true) { Socket socket = listener.Accept(); Console.WriteLine(quot;[ServerThread]: Client connectedquot;); ThreadPool.QueueUserWorkItem(new WaitCallback(AcceptClient), socket); } } catch { } finally { listener.Close(); }
  • 49. static void AcceptClient(object ClientSocket) { Socket Client = null; try { Client = (Socket)ClientSocket; byte[] b = new byte[100]; int len; while ((len = Client.Receive(b)) != 0) { System.Console.WriteLine(quot;[ClientThread]: Received Packet with length: quot; + len); Console.WriteLine(quot;[ClientThread]: Package Content Begin--->quot;); Console.WriteLine(quot;[ClientThread]: quot; + Encoding.ASCII.GetString(b).Trim()); Console.WriteLine(quot;[ClientThread]: <---Package Content Endquot;); b = new byte[100]; } Client.Send(b); } catch { } finally { Client.Close(); } }
  • 50. Oft ist es wichtig Protokolle zu implementieren, z.B. HTTP, Instant Messenger, etc.  Funktionsweise ist bei Standards oft in Dokumenten hinterlegt z.B. RFCs (Request for Comments)  Für proprietäre und nicht dokumentierte Protokolle wird oft Reverse Engineering verwendet
  • 51. Dokumente zum Internet  Beinhalten technische Spezifikationen zu Bestandteilen des Internets  Genaue Funktionsweise von Protokollen wie IP, UDP, TCP, etc. in RFCs Dokumentiert  Durchnummeriert, z.B.:  RFC 1945 HTTP1.0  RFC 768 UDP  RFC 791 IP  Zu finden unter http://www.rfc-editor.org/
  • 52.  Netzwerksniffer Wireshark, früher Ethereal  Analysiert Netzwerkverkehr  Schlüsselt die meisten Protokolle auf  Sehr nützlich für Reverse Engineering / Debugging
  • 53.
  • 54.
  • 55.
  • 56.  Normalerweise sind Kommunikationsstandards bekannt  Oft ist für die Nachprogrammierung eines Clients/Servers allerdings Kenntnis über das Netzwerkprotokoll notwendig  Wenn dieses nicht dokumentiert ist kann man Reverse Engineering betreiben  Bedeutet  Kommunikation zwischen Originalserver & Client mitschneiden  Mitschnitt analysieren  Client/Server programmieren sodass Anfragen/Antworten dem originalen Server entsprechen
  • 57. Bisher: Programm muss sich um die Kommunikation selber kümmern und übertragene Payloads auswerten  Mit WCF: Serviceorientierte Architektur  Zugriff auf Methoden von Remoteclient aus möglich