summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100293.html
blob: 538e4e2fa5829cd30de80c1f78b9b120aabf0e33 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100292.html;106,k100292.html;107,k100294.html;108,k100298.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100294.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100298.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">Kapitel 46 - Netzwerkprogrammierung
</table>
<hr>


<!-- Section -->
<a name="sectlevel2id046001"></a>
<h2>46.1 Grundlagen der Netzwerkprogrammierung </h2>
<hr>
<ul>
<li><a href="k100293.html#sectlevel2id046001">46.1 Grundlagen der Netzwerkprogrammierung</a>
<ul>
<li><a href="k100293.html#sectlevel3id046001001">46.1.1 Was ist ein Netzwerk?</a>
<li><a href="k100293.html#sectlevel3id046001002">46.1.2 Protokolle</a>
<li><a href="k100293.html#sectlevel3id046001003">46.1.3 Adressierung von Daten</a>
<ul>
<li><a href="k100293.html#sectlevel4id046001003001">IP-Adressen</a>
<li><a href="k100293.html#sectlevel4id046001003002">Domain-Namen</a>
</ul>
<li><a href="k100293.html#portsapplikationen">46.1.4 Ports und Applikationen</a>
<li><a href="k100293.html#requestforcomments">46.1.5 Request for Comments</a>
<li><a href="k100293.html#sectlevel3id046001006">46.1.6 Firewalls und Proxys</a>
</ul>
</ul>
<hr>


<!-- Section -->
<a name="sectlevel3id046001001"></a>
<h3>46.1.1 Was ist ein Netzwerk? </h3>

<p>
Man k&ouml;nnte ganz plakativ sagen, dass ein Netzwerk die Verbindung
zwischen zwei oder mehr Computern ist, um Daten miteinander auszutauschen.
Das ist nat&uuml;rlich eine sehr vereinfachte Darstellung, die am
besten in die Anfangszeit der Entstehung von Computernetzen passt.
Heutzutage gibt es eine Vielzahl von Anwendungen, die auf dem Austausch
von Daten &uuml;ber ein Netzwerk basieren. Zu ihnen z&auml;hlen beispielsweise:
<ul>
<li>Ein Anwender m&ouml;chte auf eine Datei zugreifen, die ein anderer
Anwender erstellt hat.
<li>Mehrere Arbeitspl&auml;tze sollen auf einen gemeinsamen Drucker
oder ein zentrales Faxger&auml;t zugreifen.
<li>Beim Booten sollen sich PC-Arbeitspl&auml;tze die aktuelle Uhrzeit
von einem Server im Netz holen.
<li>Das Intranet eines Unternehmens gibt den Angestellten Zugriff
auf oft ben&ouml;tigte Informationen.
<li>&Uuml;ber einen Internet-Zugang soll eine elektronische Mail an
einen Bekannten oder Gesch&auml;ftspartner in einem anderen Teil der
Welt verschickt werden.
<li>Ein Wissenschaftler m&ouml;chte ein Experiment auf einem weit
entfernten Hochleistungsrechner laufen lassen.
<li>Ein Dutzend Rechner sollen zur Leistungssteigerung in einem Cluster
verbunden werden.
<li>Das lokale Netz eines Unternehmens wird zur &Uuml;bertragung von
Sprach- und Bilddaten verwendet.
<li>In einem Chatroom treffen sich Interessierte aus der ganzen Welt,
um zeitgleich &uuml;ber ein gemeinsames Thema zu diskutieren.
</ul>

<p>
So vielf&auml;ltig wie diese Anwendungen ist auch die daf&uuml;r erforderliche
Hard- und Softwaretechnik. Das Thema &#187;Computernetze&#171; hat
in den letzten Jahren stark an Dynamik und Umfang zugenommen. Es gibt
heute eigene Studieng&auml;nge, deren Schwerpunkt auf der Vernetzung
von Computersystemen liegt. Fast jedes gr&ouml;&szlig;ere Unternehmen
besch&auml;ftigt Mitarbeiter, die sich ausschlie&szlig;lich um den
Betrieb und die Erweiterung der unternehmenseigenen Netze und ihrer
Anbindung an &ouml;ffentliche Netze k&uuml;mmern. 

<!-- Section -->

<a name="sectlevel3id046001002"></a>
<h3>46.1.2 Protokolle </h3>

<p>
Um &uuml;berhaupt Daten zwischen zwei oder mehr Partnern austauschen
zu k&ouml;nnen, m&uuml;ssen sich die Teilnehmer auf ein gemeinsames
<a name="ixa103339"><i>Protokoll</i></a> geeinigt haben. Als <i>Protokoll</i>
bezeichnet man die Menge aller Regeln, die notwendig sind, um einen
kontrollierten und eindeutigen Verbindungsaufbau, Datenaustausch und
Verbindungsabbau gew&auml;hrleisten zu k&ouml;nnen. Es gibt sehr viele
Protokolle mit sehr unterschiedlichen Anspr&uuml;chen. Ein weitverbreitetes
Architekturmodell, das <a name="ixa103340"><i>ISO/OSI-7-Schichten-Modell</i></a>,
unterteilt sie in Abh&auml;ngigkeit von ihrem Abstraktionsgrad in
sieben Schichten (siehe <a href="k100293.html#isoosimodell">Abbildung 46.1</a>).
<p>
<a name="isoosimodell"></a>
<img src="images/IsoOsi7.gif">
<p>

<p><i>
Abbildung 46.1: Das ISO/OSI-7-Schichten-Modell</i></p>

<p>
Die derzeit in Java verf&uuml;gbaren Netzwerkf&auml;higkeiten basieren
alle auf den Internet-Protokollen <a name="ixa103341"><i>TCP/IP</i></a>
(bzw. <a name="ixa103342"><i>TCP/UDP</i></a>). Wir wollen uns in diesem
Kapitel ausschlie&szlig;lich mit der TCP/IP-Familie von Protokollen
besch&auml;ftigen. Hierf&uuml;r wird h&auml;ufig eine etwas vereinfachte
Unterteilung in vier Ebenen vorgenommen (siehe <a href="k100293.html#vierebenenmodell">Abbildung 46.2</a>):
<ul>
<li>Die unterste Ebene repr&auml;sentiert die physikalischen Ger&auml;te.
Sie wird durch die Netzwerkhardware und -leitungen und die unmittelbar
darauf laufenden Protokolle wie beispielsweise <a name="ixa103343"><i>Ethernet</i></a>,
<a name="ixa103344"><i>FDDI</i></a> oder <a name="ixa103345"><i>ATM</i></a>
repr&auml;sentiert.
<li>Die zweite Ebene repr&auml;sentiert die <a name="ixa103346"><i>Netzwerkschicht</i></a>.
Sie wird in TCP/IP-Netzen durch das <a name="ixa103347"><i>IP-Protokoll</i></a>
und dessen Kontrollprotokolle (z.B. <a name="ixa103348"><i>ICMP</i></a>)
implementiert.
<li>Die dritte Ebene stellt die <a name="ixa103349"><i>Transportschicht</i></a>
dar. Sie wird durch die Protokolle TCP bzw. UDP repr&auml;sentiert.
<li>Die oberste Ebene steht f&uuml;r die gro&szlig;e Klasse der <a name="ixa103350"><i>Anwendungsprotokolle</i></a>.
Hierzu z&auml;hlen beispielsweise FTP zum Filetransfer, SMTP zum Mail-Versand
und HTTP zur &Uuml;bertragung von Webseiten.
</ul>
<p>
<a name="vierebenenmodell"></a>
<img src="images/IsoOsi4.gif">
<p>

<p><i>
Abbildung 46.2: Das vereinfachte 4-Ebenen-Modell</i></p>

<p>
Die TCP/IP-Protokollfamilie wird sowohl in lokalen Netzen als auch
im Internet verwendet. Alle Eigenarten des Transportweges werden auf
der zweiten bzw. dritten Ebene ausgeglichen, und die Anwendungsprotokolle
merken <i>prinzipiell</i> keinen Unterschied zwischen lokalen und
globalen Verbindungen. Wurde beispielsweise ein SMTP-Mailer f&uuml;r
den Versand von elektronischer Post in einem auf TCP/IP basierenden
Unternehmensnetz entwickelt, so kann dieser im Prinzip auch dazu verwendet
werden, eine Mail ins Internet zu versenden. 
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
TCP ist ein <i>verbindungsorientiertes</i> Protokoll, das auf der
Basis von IP eine sichere und fehlerfreie Punkt-zu-Punkt-Verbindung
realisiert. Daneben gibt es ein weiteres Protokoll oberhalb von IP,
das als <a name="ixa103351"><i>UDP</i></a> (<a name="ixa103352"><i>User Datagram Protocol</i></a>)
bezeichnet wird. Im Gegensatz zu TCP ist UDP ein <i>verbindungsloses</i>
Protokoll, bei dem die Anwendung selbst daf&uuml;r sorgen muss, dass
Pakete fehlerfrei und in der richtigen Reihenfolge beim Empf&auml;nger
ankommen. Sein Vorteil ist die gr&ouml;&szlig;ere Geschwindigkeit
gegen&uuml;ber TCP. In Java wird UDP durch die Klassen <a name="ixa103353"><a href="index_d.html#ixb102500"><font color=#000080><tt>DatagramPacket</tt></font></a></a>
und <a name="ixa103354"><a href="index_d.html#ixb102501"><font color=#000080><tt>DatagramSocket</tt></font></a></a>
abgebildet. Wir wollen uns in diesem Abschnitt allerdings ausschlie&szlig;lich
mit den popul&auml;reren Protokollen auf der Basis von TCP/IP besch&auml;ftigen,
TCP/UDP wird im folgenden nicht weiter behandelt. </td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>


<!-- Section -->
<a name="sectlevel3id046001003"></a>
<h3>46.1.3 Adressierung von Daten </h3>


<!-- Section -->
<a name="sectlevel4id046001003001"></a>
<h4>IP-Adressen </h4>

<p>
Um Daten &uuml;ber ein Netzwerk zu transportieren, ist eine <i>Adressierung</i>
dieser Daten notwendig. Der Absender muss angeben k&ouml;nnen, an
wen die Daten zu senden sind, und der Empf&auml;nger muss erkennen
k&ouml;nnen, von wem sie stammen. Die Adressierung in TCP/IP-Netzen
erfolgt auf der IP-Ebene mit Hilfe einer 32-Bit langen <a name="ixa103355"><i>IP-Adresse</i></a>.

<p>
Die IP-Adresse besteht aus einer <a name="ixa103356"><i>Netzwerk-ID</i></a>
und einer <a name="ixa103357"><i>Host-ID</i></a>. Die Host-ID gibt
die Bezeichnung des Rechners innerhalb seines eigenen Netzwerks an,
und die Netzwerk-ID liefert die Bezeichnung des Netzwerks. Alle innerhalb
eines Verbundes von Netzwerken sichtbaren Adressen m&uuml;ssen eindeutig
sein; es darf also nicht zweimal dieselbe Host-ID innerhalb eines
Netzwerks geben. Sind mehrere Netzwerke miteinander verbunden (wie
es beispielsweise im Internet der Fall ist), m&uuml;ssen auch die
Netzwerk-IDs innerhalb des Verbundes eindeutig sein. 

<p>
Um diese Eindeutigkeit sicherzustellen, gibt es eine zentrale Institution
zur Vergabe von Internet-Adressen und -namen, das <a name="ixa103358"><i>Network Information
Center</i></a> (kurz <a name="ixa103359"><i>NIC</i></a>).
Die zu vergebenden Adressen werden in drei Klassen A bis C eingeteilt
(die zus&auml;tzlichen existierenden Klasse-D- und Klasse-E-Adressen
spielen hier keine Rolle): <a name="tableid046001"></a>

<p>
<table cols=4 border width=66%>

<tr>
<td valign=top align=left width=14%><b>Klasse</b></td>
<td valign=top align=left width=14%><b>Netzwerk-ID</b></td>
<td valign=top align=left width=14%><b>Host-ID</b></td>
<td valign=top align=left width=57%><b>Beschreibung</b></td></tr>
<tr>
<td valign=top align=left>A </td>
<td valign=top align=left>7 Bit </td>
<td valign=top align=left>24 Bit </td>
<td valign=top align=left>Ein Klasse-A-Netz ist f&uuml;r sehr gro&szlig;e
Netzbetreiber vorgesehen. Das erste Byte der Adresse liegt im Bereich
von 0 bis 127, sein h&ouml;chstwertiges Bit ist also immer 0. Ein
Klasse-A-Netz bietet 2<sup>24</sup> verschiedene Host-IDs innerhalb
des Netzes. Insgesamt gibt es aber nur 128 verschiedene Klasse-A-Netze
weltweit (tats&auml;chlich werden seit einigen Jahren keine Klasse-A-Adressen
mehr vom NIC vergeben).</td></tr>
<tr>
<td valign=top align=left>B </td>
<td valign=top align=left>14 Bit </td>
<td valign=top align=left>16 Bit </td>
<td valign=top align=left>Ein Klasse-B-Netz erlaubt immerhin noch
die eindeutige Adressierung von 2<sup>16</sup> unterschiedlichen Rechnern
innerhalb des Netzwerks. Insgesamt gibt es maximal 16384 verschiedene
Klasse-B-Netze weltweit. Das erste Byte der Adresse liegt im Bereich
von 128 bis 191, seine h&ouml;chstwertigen Bits haben also immer den
Bin&auml;rwert 10.</td></tr>
<tr>
<td valign=top align=left>C </td>
<td valign=top align=left>21 Bit </td>
<td valign=top align=left>8 Bit </td>
<td valign=top align=left>Klasse-C-Netze sind f&uuml;r kleinere Unternehmen
vorgesehen, die nicht mehr als 256 unterschiedliche Rechner adressieren
m&uuml;ssen. Insgesamt gibt es maximal 2097152 verschiedene Klasse-C-Netze
weltweit. Das erste Byte der Adresse liegt im Bereich von 192 bis
223, seine h&ouml;chstwertigen Bits haben also immer den Bin&auml;rwert
110. Die meisten an das Internet angebundenen kleineren Unternehmen
betreiben heute ein Klasse-C-Netz.</td></tr>
</table>
<p><i>
Tabelle 46.1: Klassen von IP-Adressen</i></p>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Obwohl damit theoretisch etwa 4 Milliarden unterschiedliche Rechner
angesprochen werden k&ouml;nnen, reichen die Adressen in der Praxis
nicht aus. Durch die starren Grenzen sind bereits viele mittlere Unternehmen
gezwungen, ein Klasse-B-Netz zu betreiben, weil sie die 256-Rechner-Grenze
knapp &uuml;berschreiten oder damit rechnen, sie demn&auml;chst zu
&uuml;berschreiten. Dadurch wird ein fester Block von 65536 Adressen
vergeben. Um diese Probleme in Zukunft zu umgehen, werden Internet-Adressen
demn&auml;chst nach dem Standard <a name="ixa103360"><i>IPv6</i></a>
definiert werden, der eine Adressl&auml;nge von 128 Bit vorsieht.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>


<!-- Section -->
<a name="sectlevel4id046001003002"></a>
<h4>Domain-Namen </h4>

<p>
W&auml;hrend IP-Adressen f&uuml;r Computer sehr leicht zu verarbeiten
sind, gilt das nicht unbedingt f&uuml;r die Menschen, die damit arbeiten
m&uuml;ssen. Wer kennt schon die Telefonnummern und Ortsnetzkennzahlen
von allen Leuten, mit denen er Telefonate zu f&uuml;hren pflegt? Um
die Handhabung der IP-Adressen zu vereinfachen, wurde daher das <a name="ixa103361"><i>Domain
Name System</i></a> eingef&uuml;hrt (kurz <a name="ixa103362"><i>DNS</i></a>),
das numerischen IP-Adressen sprechende Namen wie <i>www.gkrueger.com</i>
oder <i>java.sun.com</i> zuordnet. 

<p>
Anstelle der IP-Adresse k&ouml;nnen bei den Anwendungsprotokollen
nun wahlweise die symbolischen Namen verwendet werden. Sie werden
mit Hilfe von <a name="ixa103363"><i>Name-Servern</i></a> in die zugeh&ouml;rige
IP-Adresse &uuml;bersetzt, bevor die Verbindung aufgebaut wird. Zwar
kann sich hinter ein und derselben IP-Adresse mehr als ein Name-Server-Eintrag
befinden. In umgekehrter Richtung ist die Zuordnung aber eindeutig,
d.h. zu jedem symbolischen Namen kann eindeutig die zugeh&ouml;rige
IP-Adresse (und damit das Netz und der Host) bestimmt werden, zu der
der Name geh&ouml;rt. 

<!-- Section -->

<a name="portsapplikationen"></a>
<h3>46.1.4 Ports und Applikationen </h3>

<p>
Die Kommunikation zwischen zwei Rechnern l&auml;uft oft auf der Basis
einer <a name="ixa103364"><i>Client-Server-Beziehung</i></a> ab. Dabei
kommen den beteiligten Rechnern unterschiedliche Rollen zu: 
<ul>
<li>Der Server stellt einen Dienst zur Verf&uuml;gung, der von anderen
Rechnern genutzt werden kann. Er l&auml;uft im Hintergrund und wartet
darauf, dass ein anderer Rechner eine Verbindung zu ihm aufbaut. Der
Server definiert das Protokoll, mit dessen Hilfe der Datenaustausch
erfolgt.
<li>Ein Client ist der Nutzer von Diensten eines oder mehrerer Server.
Er kennt die verf&uuml;gbaren Server und ihre Adressen und baut bei
Bedarf die Verbindung zu ihnen auf. Der Client h&auml;lt sich an das
vom Server vorgegebene Protokoll, um die Daten auszutauschen.
</ul>

<p>
Ein typisches Beispiel f&uuml;r eine Client-Server-Verbindung ist
der Seitenabruf im World Wide Web. Der Browser fungiert als Client,
der nach Aufforderung durch den Anwender eine Verbindung zum Web-Server
aufbaut und eine Seite anfordert. Diese wird vom Server von seiner
Festplatte geladen oder dynamisch generiert und an den Browser &uuml;bertragen.
Dieser analysiert die Seite und stellt sie auf dem Bildschirm dar.
Enth&auml;lt die Seite Image-, Applet- oder Frame-Dateien, werden
sie in gleicher Weise beim Server abgerufen und in die Seite integriert.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
In der Praxis ist die Kommunikationsbeziehung nicht immer so einfach
wie hier dargestellt. Es gibt insbesondere auch symmetrische Kommunikationsbeziehungen,
die nicht dem Client-Server-Modell entsprechen. Zudem kann ein Server
auch Client eines anderen Servers sein. Auf diese Weise k&ouml;nnen
mehrstufige Client-Server-Beziehungen entstehen.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>

<p>
Auf einem Host laufen meist unterschiedliche Serveranwendungen, die
noch dazu von mehreren Clients gleichzeitig benutzt werden k&ouml;nnen.
Um die Server voneinander unterscheiden zu k&ouml;nnen, gibt es ein
weiteres Adressmerkmal, die <a name="ixa103365"><i>Port-Nummer</i></a>.
Sie wird oberhalb von IP auf der Ebene des Transportprotokolls definiert
(also in TCP bzw. UDP) und gibt die Server-Anwendung an, mit der ein
Client kommunizieren will. Port-Nummern sind positive Ganzzahlen im
Bereich von 0 bis 65535. Port-Nummern im Bereich von 0 bis 1023 sind
f&uuml;r Anwendungen mit Superuser-Rechten reserviert. Jeder Servertyp
hat seine eigene Port-Nummer, viele davon sind zu Quasi-Standards
geworden. So l&auml;uft beispielsweise ein SMTP-Server meist auf Port
25, ein FTP-Server auf Port 21 und ein HTTP-Server auf Port 80. <a href="k100293.html#portnummern">Tabelle 46.2</a>
gibt eine &Uuml;bersicht der auf den meisten UNIX-Systemen verf&uuml;gbaren
Server und ihrer Port-Nummern. <a name="portnummern"></a>

<p>
<table cols=4 border width=100%>

<tr>
<td valign=top align=left width=14%><b>Name </b></td>
<td valign=top align=left width=14%><b>Port</b></td>
<td valign=top align=left width=14%><b>Transport</b></td>
<td valign=top align=left width=57%><b>Beschreibung</b></td></tr>
<tr>
<td valign=top align=left>echo </td>
<td valign=top align=left>7 </td>
<td valign=top align=left>tcp/udp </td>
<td valign=top align=left>Gibt jede Zeile zur&uuml;ck, die der Client
sendet</td></tr>
<tr>
<td valign=top align=left>discard </td>
<td valign=top align=left>9 </td>
<td valign=top align=left>tcp/udp </td>
<td valign=top align=left>Ignoriert jede Zeile, die der Client sendet</td></tr>
<tr>
<td valign=top align=left>daytime </td>
<td valign=top align=left>13 </td>
<td valign=top align=left>tcp/udp </td>
<td valign=top align=left>Liefert ASCII-String mit Datum und Uhrzeit</td></tr>
<tr>
<td valign=top align=left>chargen </td>
<td valign=top align=left>19 </td>
<td valign=top align=left>tcp/udp </td>
<td valign=top align=left>Generiert ununterbrochen Zeichen</td></tr>
<tr>
<td valign=top align=left>ftp </td>
<td valign=top align=left>21 </td>
<td valign=top align=left>tcp </td>
<td valign=top align=left>Versenden und Empfangen von Dateien</td></tr>
<tr>
<td valign=top align=left>telnet </td>
<td valign=top align=left>23 </td>
<td valign=top align=left>tcp </td>
<td valign=top align=left>Interaktive Session mit entferntem Host</td></tr>
<tr>
<td valign=top align=left>smtp </td>
<td valign=top align=left>25 </td>
<td valign=top align=left>tcp </td>
<td valign=top align=left>Versenden von E-Mails</td></tr>
<tr>
<td valign=top align=left>time </td>
<td valign=top align=left>37 </td>
<td valign=top align=left>tcp/udp </td>
<td valign=top align=left>Liefert die aktuelle Uhrzeit als Anzahl
der Sekunden seit 1.1.1900</td></tr>
<tr>
<td valign=top align=left>whois </td>
<td valign=top align=left>43 </td>
<td valign=top align=left>tcp </td>
<td valign=top align=left>Einfacher Namensservice</td></tr>
<tr>
<td valign=top align=left>tftp </td>
<td valign=top align=left>69 </td>
<td valign=top align=left>udp </td>
<td valign=top align=left>Vereinfachte Variante von FTP auf UDP-Basis</td></tr>
<tr>
<td valign=top align=left>gopher </td>
<td valign=top align=left>70 </td>
<td valign=top align=left>tcp/udp </td>
<td valign=top align=left>Quasi-Vorg&auml;nger von WWW</td></tr>
<tr>
<td valign=top align=left>finger </td>
<td valign=top align=left>79 </td>
<td valign=top align=left>tcp </td>
<td valign=top align=left>Liefert Benutzerinformationen</td></tr>
<tr>
<td valign=top align=left>www </td>
<td valign=top align=left>80 </td>
<td valign=top align=left>tcp/udp </td>
<td valign=top align=left>Der Web-Server</td></tr>
<tr>
<td valign=top align=left>pop3 </td>
<td valign=top align=left>110 </td>
<td valign=top align=left>tcp/udp </td>
<td valign=top align=left>&Uuml;bertragen von Mails</td></tr>
<tr>
<td valign=top align=left>nntp </td>
<td valign=top align=left>119 </td>
<td valign=top align=left>tcp </td>
<td valign=top align=left>&Uuml;bertragen von Usenet-News</td></tr>
<tr>
<td valign=top align=left>snmp </td>
<td valign=top align=left>161 </td>
<td valign=top align=left>udp </td>
<td valign=top align=left>Netzwerkmanagement</td></tr>
<tr>
<td valign=top align=left>rmi </td>
<td valign=top align=left>1099</td>
<td valign=top align=left>tcp </td>
<td valign=top align=left>Remote Method Invocation</td></tr>
</table>
<p><i>
Tabelle 46.2: Standard-Port-Nummern</i></p>


<!-- Section -->
<a name="requestforcomments"></a>
<h3>46.1.5 Request for Comments </h3>

<p>
Die meisten der allgemein zug&auml;nglichen Protokolle sind in sogenannten
<a name="ixa103366"><i>Request For Comments</i></a> (kurz <a name="ixa103367"><i>RFCs</i></a>)
beschrieben. RFCs sind Dokumente des <a name="ixa103368"><i>Internet Activity Board</i></a>
(<a name="ixa103369"><i>IAB</i></a>), in denen Entw&uuml;rfe, Empfehlungen
und Standards zum Internet beschrieben sind. Auch Anmerkungen, Kommentare
oder andere informelle Erg&auml;nzungen sind darin zu finden und auch
Humor kommt in den RFCs nicht zu kurz, wie etwa das <i>Hypertext Coffee
Pot Control Protocol (HTCPCP)</i> in RFC 2324 oder das 2004 ver&ouml;ffentlichte
&#187;Allwissenheitsprotokoll&#171;, welches es der US-amerikanischen
Regierung erm&ouml;glichen sollte, alle Arten von Computerkriminalit&auml;t
zu entdecken und mit den Worten &#187;Good Luck&#171; endet. 

<p>
Insgesamt gibt es derzeit &uuml;ber 5000 RFCs, einige von ihnen wurden
zu Internet-Standards erhoben. Alle bekannten Protokolle, wie beispielsweise
FTP, SMTP, NNTP, MIME, DNS, HMTL oder HTTP, sind in einschl&auml;gigen
RFCs beschrieben. Sie sind nicht immer einfach zu lesen, aber oftmals
die einzige verl&auml;&szlig;liche Quelle f&uuml;r die Implementierung
eines bestimmten Protokolls. Es gibt viele Server im Internet, die
RFCs zur Verf&uuml;gung stellen. Zu den bekanntesten z&auml;hlt beispielsweise
der RFC Editor unter <a href="http://www.rfc-editor.org/">http://www.rfc-editor.org/</a>.
<a name="tableid046003"></a>
<p>
<table cols=2 border width=100%>

<tr>
<td valign=top align=left width=20%><b>Protokoll/Dokument </b></td>
<td valign=top align=left width=80%><b>Zust&auml;ndige RFCs</b></td></tr>
<tr>
<td valign=top align=left>IP </td>
<td valign=top align=left>RFC791, RFC1060</td></tr>
<tr>
<td valign=top align=left>ICMP </td>
<td valign=top align=left>RFC792</td></tr>
<tr>
<td valign=top align=left>TCP </td>
<td valign=top align=left>RFC793</td></tr>
<tr>
<td valign=top align=left>UDP </td>
<td valign=top align=left>RFC768</td></tr>
<tr>
<td valign=top align=left>DNS </td>
<td valign=top align=left>RFC1034, RFC1035, RFC2136, RFC974, RFC1101,
RFC1812</td></tr>
<tr>
<td valign=top align=left>ARP / RARP </td>
<td valign=top align=left>RFC826, RFC903</td></tr>
<tr>
<td valign=top align=left>SMTP </td>
<td valign=top align=left>RFC821, RFC822</td></tr>
<tr>
<td valign=top align=left>MIME </td>
<td valign=top align=left>RFC2045 - RFC2049</td></tr>
<tr>
<td valign=top align=left>Content Types </td>
<td valign=top align=left>RFC1049</td></tr>
<tr>
<td valign=top align=left>POP3 </td>
<td valign=top align=left>RFC1939</td></tr>
<tr>
<td valign=top align=left>NNTP </td>
<td valign=top align=left>RFC977</td></tr>
<tr>
<td valign=top align=left>HTML 3.2 </td>
<td valign=top align=left>Internal Draft</td></tr>
<tr>
<td valign=top align=left>HTML 2.0 </td>
<td valign=top align=left>RFC1866</td></tr>
<tr>
<td valign=top align=left>HTTP 1.0 / 1.1 </td>
<td valign=top align=left>RFC1945, RFC2068</td></tr>
<tr>
<td valign=top align=left>FTP </td>
<td valign=top align=left>RFC959, RFC765</td></tr>
<tr>
<td valign=top align=left>TFTP </td>
<td valign=top align=left>RFC1782, RFC1783, RFC1350</td></tr>
<tr>
<td valign=top align=left>TELNET </td>
<td valign=top align=left>RFC854</td></tr>
<tr>
<td valign=top align=left>SNMP </td>
<td valign=top align=left>RFC1157</td></tr>
<tr>
<td valign=top align=left>X11 </td>
<td valign=top align=left>RFC1013</td></tr>
<tr>
<td valign=top align=left>NTP </td>
<td valign=top align=left>RFC1305</td></tr>
<tr>
<td valign=top align=left>FINGER </td>
<td valign=top align=left>RFC1288</td></tr>
<tr>
<td valign=top align=left>WHOIS </td>
<td valign=top align=left>RFC954</td></tr>
<tr>
<td valign=top align=left>GOPHER </td>
<td valign=top align=left>RFC1436</td></tr>
<tr>
<td valign=top align=left>ECHO </td>
<td valign=top align=left>RFC862</td></tr>
<tr>
<td valign=top align=left>DISCARD </td>
<td valign=top align=left>RFC863</td></tr>
<tr>
<td valign=top align=left>CHARGEN </td>
<td valign=top align=left>RFC864</td></tr>
<tr>
<td valign=top align=left>DAYTIME </td>
<td valign=top align=left>RFC867</td></tr>
<tr>
<td valign=top align=left>TIME </td>
<td valign=top align=left>RFC868</td></tr>
<tr>
<td valign=top align=left>Assigned Numbers </td>
<td valign=top align=left>RFC1700</td></tr>
<tr>
<td valign=top align=left>Internet Protocol Standards </td>
<td valign=top align=left>RFC2400</td></tr>
<tr>
<td valign=top align=left>Hitchhikers Guide to the Internet</td>
<td valign=top align=left>RFC1118</td></tr>
</table>
<p><i>
Tabelle 46.3: Liste wichtiger RFCs</i></p>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>

<p>
Die hier aufgelisteten RFCs finden sich auch auf der DVD zum Buch.
Sie liegen als Textdateien im Verzeichnis <font color="#660099">\rfc</font>.
Zus&auml;tzlich findet sich dort eine Datei <font color="#660099">INDEX_rfc.html</font>
mit einer &Uuml;bersicht &uuml;ber alle RFCs (Stand: November 1998).</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#000077">
<tr>
<td><font color="#FFFFFF">&nbsp;Hinweis&nbsp;</font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#000077"><img src="trp1_1.gif"></td>
</tr>
</table>


<!-- Section -->
<a name="sectlevel3id046001006"></a>
<h3>46.1.6 Firewalls und Proxys </h3>

<p>
Nicht alle Server in einem Netzwerk sind f&uuml;r alle Clients sichtbar.
Aufgrund von Sicherheitserw&auml;gungen wird insbesondere die Verbindung
zwischen einem lokalen Unternehmensnetz und der Au&szlig;enwelt (z.B.
dem Internet) besonders gesch&uuml;tzt. Dazu wird meist eine <a name="ixa103370"><i>Firewall</i></a>
verwendet, also ein spezielles Gateway mit Filterfunktion, das Netzwerkverkehr
nur in bestimmten Richtungen und in Abh&auml;ngigkeit von Port-Nummern,
IP-Adressen und anderen Informationen zul&auml;&szlig;t. Mit einer
Firewall kann beispielsweise daf&uuml;r gesorgt werden, dass nicht
<i>von au&szlig;en</i> auf den Mail-Server (Port 25) des Unternehmens
zugegriffen werden kann. Oder es kann verhindert werden, dass die
firmeninternen Anwender bestimmte Web-Server im Internet besuchen
usw. 

<p>
Normalerweise ist es insbesondere nicht erlaubt, IP-Daten zwischen
einem beliebigen Arbeitsplatzrechner und einem au&szlig;erhalb des
Unternehmens liegenden Server hin- und herzusenden. Um dennoch beispielsweise
das Anfordern von Webseiten von beliebigen Servern zu erm&ouml;glichen,
kommuniziert der Web-Browser auf dem Arbeitsplatz mit einem <a name="ixa103371"><i>Proxy-Server</i></a>
(kurz <i>Proxy</i>), der <i>innerhalb</i> der Firewall liegt. Anstatt
die Seitenanfrage direkt an den Server zu schicken, wird sie an den
Proxy &uuml;bergeben, der sie an den Server weiterleitet. Die Antwort
des Servers wird nach Erhalt vom Proxy an den anfordernden Arbeitsplatz
gesendet. Die Firewall muss also lediglich dem Proxy eine HTTP-Verbindung
ins Internet gestatten, nicht allen Arbeitspl&auml;tzen. 

<p>
Ein Proxy ist also eine Art &#187;Handlungsbevollm&auml;chtigter&#171;
(so lautet die w&ouml;rtliche &Uuml;bersetzung), der Aufgaben erledigt,
die dem einzelnen Arbeitsplatz nicht erlaubt sind. Proxys gibt es
auch f&uuml;r andere Zwecke, etwa zum Zugriff auf Datenbanken. Da
beispielsweise ein Applet aus Sicherheitsgr&uuml;nden nur zu dem Server
eine TCP/IP-Verbindung aufbauen darf, von dem es geladen wurde, kann
es auf Daten aus einer Datenbank nur zugreifen, wenn die Datenbank
auf demselben Host liegt wie der Web-Server. Ist dies nicht der Fall,
kann man sich mit einem Datenbankproxy auf dem Web-Host behelfen,
der alle entsprechenden Anfragen an die Datenbank weiterleitet. 
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100292.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100294.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100298.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>