orm@doc-tcpip.org | Erstellt: November 2000 - Letzte Modifikation: September 2003 |
Dieser IP-Trace ist das Ende der Verbindung, die auf der Mount-Seite geöffnet wurde. Der User auf der Clientseite setzt das umount-Kommando gegen das gemountete Verzeichnis ab. Darauf werden folgende Pakete bzw. RPCs ausgetauscht.
Packet Number 1 TCP: th_off=6, flags< SYN > Packet Number 2 TCP: th_off=6, flags< SYN | ACK > Packet Number 3 TCP: th_off=5, flags< ACK >
Das TCP Handshake habe ich gekürzt.
Packet Number 4 ETH: ====( 194 bytes received on interface en0 )==== 10:05:42.358729384 ETH: [ 08:00:5a:93:bc:ea -> 08:00:5a:ba:da:a6 ] type 800 (IP) IP: < SRC = 172.16.1.3 > (nfsclient) IP: < DST = 172.16.1.2 > (nfsserver) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=180, ip_id=40665, ip_off=0 IP: ip_ttl=60, ip_sum=8545, ip_p = 6 (TCP) TCP: < source port=32782, destination port=2049(shilp) > TCP: th_seq=2627c0ec, th_ack=78875282 TCP: th_off=5, flagsTCP: th_win=60000, th_sum=e49d, th_urp=0 RPC: Record Marker: Size = 136, Last Fragment (0x80000088) RPC: **CALL** XID=993839065 RPC: Program=100003 (NFS_PROGRAM) Version=3 Procedure=4 (NFSPROC3_ACCESS) RPC: AUTH_UNIX RPC: Cred: RPC: Time=0x3f5649b7 (Wed Sep 3 22:06:15 2003) RPC: Machine=nfsclient Uid=0 Gid=0 Group List Length=7 RPC: Groups= ( 0 2 3 7 8 10 11 ) NFS: Fhandle: NFS: 000a0004 00000003 000a0000 04661f82 NFS: 1d020000 000a0000 04661f82 1d020000 NFS: Access: (0002) LOOKUP
Auf dem Client hat der Root-User einen Umount gegen das per NFS gemountete Filesystem abgesetzt. Das clientseitige NFS prüft jetzt ersteinmal, ob noch Zugang und Berechtigung besteht. Dazu dient die Prozedur NFSPROC3_ACCESS. Mit einer Bit-Maske wird die zu prüfende Berechtigung dem Server mit dem Filehandle übermittelt (LOOKUP). Folgende Zugriffsarten sind möglich; die damit an den Server gestellte Frage lautet immmer Darf ich:
0001 READ - Daten oder Inhalt aus Files bzw. Verzeichnissen lesen.
0002 LOOKUP - Den Namen eines Files in einem Verzeichnis lesen.
0004 MODIFY - Ein File modifizieren oder Verzeichnis-Einträge ändern.
0008 EXTEND - Neue Daten in ein File schreiben oder Verzeichnis-Einträge generieren.
0010 DELETE - Verzeichnis-Einträge löschen.
0020 EXECUTE - Das File ausführen.
Packet Number 5 ETH: ====( 178 bytes transmitted on interface en0 )==== 10:05:42.360152194 ETH: [ 08:00:5a:ba:da:a6 -> 08:00:5a:93:bc:ea ] type 800 (IP) IP: < SRC = 172.16.1.2 > (nfsserver) IP: < DST = 172.16.1.3 > (nfsclient) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=164, ip_id=24496, ip_off=0 IP: ip_ttl=60, ip_sum=c47e, ip_p = 6 (TCP) TCP: < source port=2049(shilp), destination port=32782 > TCP: th_seq=78875282, th_ack=2627c178 TCP: th_off=5, flagsTCP: th_win=61180, th_sum=8ec0, th_urp=0 RPC: Record Marker: Size = 120, Last Fragment (0x80000078) RPC: **REPLY** XID=993839065 RPC: 100003(NFS_PROGRAM) 4(NFSPROC3_ACCESS) RPC: Reply Stat: MSG_ACCEPTED RPC: Accepted Reply Stat: SUCCESS NFS: Stat: (0) NFS3_OK NFS: File Attributes: NFS: Type=2(NFDIR) Mode=240755 Nlink=2 Uid=0 Gid=0 Rdev=(0,1535) NFS: Size=512 Used=4096 NFS: Fsid=655364 Fileid=1126 NFS: Access Time: Sec=1061817176 Nsec=284071923 NFS: Modify Time: Sec=1046945738 Nsec=252802649 NFS: Create Time: Sec=1046945738 Nsec=252802650 NFS: Access: (0002) LOOKUP
Der Server antwortet mit den allgemeinen Angaben zu diesem File (hier ein Verzeichnis) und wiederholt die Anfrage zur Berechtigung, wenn es in Ordnung ist. Die letzte Zeile bedeutet also: Du darfst im referenzierten Verzeichnis Einträge nachsehen (LOOKUP).
Packet Number 6 TCP: th_off=5, flags< ACK >
Ein ACK dafür.
Packet Number 7 ETH: ====( 194 bytes received on interface en0 )==== 10:05:46.719276412 ETH: [ 08:00:5a:93:bc:ea -> 08:00:5a:ba:da:a6 ] type 800 (IP) IP: < SRC = 172.16.1.3 > (nfsclient) IP: < DST = 172.16.1.2 > (nfsserver) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=180, ip_id=40671, ip_off=0 IP: ip_ttl=60, ip_sum=853f, ip_p = 6 (TCP) TCP: < source port=32782, destination port=2049(shilp) > TCP: th_seq=2627c178, th_ack=788752fe TCP: th_off=5, flagsTCP: th_win=60000, th_sum=e391, th_urp=0 RPC: Record Marker: Size = 136, Last Fragment (0x80000088) RPC: **CALL** XID=993839066 RPC: Program=100003 (NFS_PROGRAM) Version=3 Procedure=4 (NFSPROC3_ACCESS) RPC: AUTH_UNIX RPC: Cred: RPC: Time=0x3f5649bb (Wed Sep 3 22:06:19 2003) RPC: Machine=nfsclient Uid=0 Gid=0 Group List Length=7 RPC: Groups= ( 0 2 3 7 8 10 11 ) NFS: Fhandle: NFS: 000a0004 00000003 000a0000 04661f82 NFS: 1d020000 000a0000 04661f82 1d020000 NFS: Access: (0001) READ
Wenig später möchte der Client dann noch wissen, ob er auch Daten lesen darf in diesem Verzeichnis. Warum er dafür fast 4 Sekunden braucht, ist mir unklar.
Packet Number 8 ETH: ====( 178 bytes transmitted on interface en0 )==== 10:05:46.719851465 ETH: [ 08:00:5a:ba:da:a6 -> 08:00:5a:93:bc:ea ] type 800 (IP) IP: < SRC = 172.16.1.2 > (nfsserver) IP: < DST = 172.16.1.3 > (nfsclient) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=164, ip_id=24497, ip_off=0 IP: ip_ttl=60, ip_sum=c47d, ip_p = 6 (TCP) TCP: < source port=2049(shilp), destination port=32782 > TCP: th_seq=788752fe, th_ack=2627c204 TCP: th_off=5, flagsTCP: th_win=61040, th_sum=8e44, th_urp=0 RPC: Record Marker: Size = 120, Last Fragment (0x80000078) RPC: **REPLY** XID=993839066 RPC: 100003(NFS_PROGRAM) 4(NFSPROC3_ACCESS) RPC: Reply Stat: MSG_ACCEPTED RPC: Accepted Reply Stat: SUCCESS NFS: Stat: (0) NFS3_OK NFS: File Attributes: NFS: Type=2(NFDIR) Mode=240755 Nlink=2 Uid=0 Gid=0 Rdev=(0,1535) NFS: Size=512 Used=4096 NFS: Fsid=655364 Fileid=1126 NFS: Access Time: Sec=1061817176 Nsec=284071923 NFS: Modify Time: Sec=1046945738 Nsec=252802649 NFS: Create Time: Sec=1046945738 Nsec=252802650 NFS: Access: (0001) READ
Der Server antwortet, die Anfrage ist in Ordnung, der Client darf im referenzierten Verzeichnis Daten aus Files oder Einträgen lesen.
Packet Number 9 ETH: ====( 214 bytes received on interface en0 )==== 10:05:46.721434752 ETH: [ 08:00:5a:93:bc:ea -> 08:00:5a:ba:da:a6 ] type 800 (IP) IP: < SRC = 172.16.1.3 > (nfsclient) IP: < DST = 172.16.1.2 > (nfsserver) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=200, ip_id=40672, ip_off=0 IP: ip_ttl=60, ip_sum=852a, ip_p = 6 (TCP) TCP: < source port=32782, destination port=2049(shilp) > TCP: th_seq=2627c204, th_ack=7887537a TCP: th_off=5, flagsTCP: th_win=60000, th_sum=b254, th_urp=0 RPC: Record Marker: Size = 156, Last Fragment (0x8000009c) RPC: **CALL** XID=993839067 RPC: Program=100003 (NFS_PROGRAM) Version=3 Procedure=17 (NFSPROC3_READDIRPLUS) RPC: AUTH_UNIX RPC: Cred: RPC: Time=0x3f5649bb (Wed Sep 3 22:06:19 2003) RPC: Machine=nfsclient Uid=0 Gid=0 Group List Length=7 RPC: Groups= ( 0 2 3 7 8 10 11 ) NFS: Fhandle: NFS: 000a0004 00000003 000a0000 04661f82 NFS: 1d020000 000a0000 04661f82 1d020000 NFS: Cookie: 0 DirCount: 4096 MaxCount: 8192 NFS: Cookie Verifier: NFS: 00000000 00000000 00000000 |........ |
Jetzt setzt der Client eine in NFSv3 neue Prozedur ab, NFSPROC3_READDIRPLUS. In diesem Fall erhält der Client pro Eintrag im Verzeichnis den Namen, die FileID, Attribute und den Filehandle. Es wird auch ein Cookie angefordert, maximal 4096 Bytes an Verzeichnis-Information soll gesandt werden (da zählen Attribute und Filehandles nicht dazu). Die Antwort darf höchsten 8192 Byte groß sein, inklusive des Overhead durch RPC und XDR. Der Cookie ist in der ersten Anfrage auf Null gesetzt, da er ja vom Server erzeugt wird.
Packet Number 10 ETH: ====( 502 bytes transmitted on interface en0 )==== 10:05:46.756850829 ETH: [ 08:00:5a:ba:da:a6 -> 08:00:5a:93:bc:ea ] type 800 (IP) IP: < SRC = 172.16.1.2 > (nfsserver) IP: < DST = 172.16.1.3 > (nfsclient) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=488, ip_id=24498, ip_off=0 IP: ip_ttl=60, ip_sum=c338, ip_p = 6 (TCP) TCP: < source port=2049(shilp), destination port=32782 > TCP: th_seq=7887537a, th_ack=2627c2a4 TCP: th_off=5, flagsTCP: th_win=60880, th_sum=715c, th_urp=0 RPC: Record Marker: Size = 444, Last Fragment (0x800001bc) RPC: **REPLY** XID=993839067 RPC: 100003(NFS_PROGRAM) 17(NFSPROC3_READDIRPLUS) RPC: Reply Stat: MSG_ACCEPTED RPC: Accepted Reply Stat: SUCCESS NFS: Stat: (0) NFS3_OK NFS: Directory Attributes: NFS: ------------------------------------------------ NFS: Type=2(NFDIR) Mode=240755 Nlink=2 Uid=0 Gid=0 Rdev=(0,1535) NFS: Size=512 Used=4096 NFS: Fsid=655364 Fileid=1126 NFS: Access Time: Sec=1062662746 Nsec=753823787 NFS: Modify Time: Sec=1046945738 Nsec=252802649 NFS: Create Time: Sec=1046945738 Nsec=252802650 NFS: Cookie Verifier: NFS: 00000000 00000000 00000000 |........ | NFS: ------------------------------------------------ NFS: EOF: (1) TRUE NFS: Directory list: NFS: ------------------------------------------------ NFS: File Name: . NFS: FileId: 1126 Cookie: c NFS: NFS: File Attributes: NFS: Type=2(NFDIR) Mode=240755 Nlink=2 Uid=0 Gid=0 Rdev=(0,1535) NFS: Size=512 Used=4096 NFS: Fsid=655364 Fileid=1126 NFS: Access Time: Sec=1062662746 Nsec=753823787 NFS: Modify Time: Sec=1046945738 Nsec=252802649 NFS: Create Time: Sec=1046945738 Nsec=252802650 NFS: Fhandle: NFS: 000a0004 00000003 000a0000 04661f82 NFS: 1d020000 000a0000 04661f82 1d020000 NFS: ------------------------------------------------ NFS: File Name: .. NFS: FileId: 2 Cookie: 200 NFS: NFS: File Attributes: NFS: Type=2(NFDIR) Mode=240755 Nlink=21 Uid=0 Gid=0 Rdev=(0,11) NFS: Size=1024 Used=4096 NFS: Fsid=655364 Fileid=2 NFS: Access Time: Sec=1062660142 Nsec=793821806 NFS: Modify Time: Sec=1062659310 Nsec=603811543 NFS: Create Time: Sec=1062659310 Nsec=603811543 NFS: Fhandle: NFS: 000a0004 00000003 000a0000 00023e67 NFS: 083e0000 000a0000 04661f82 1d020000 NFS: ------------------------------------------------
Die Rückgabe des Servers listet alle Einträge im Verzeichnis mit Attributen und Filehandle auf. Jeder Eintrag hat einen Cookie. Dieses Verzeichnis ist leer, es sind nur die beiden Verzeichnisreferenzen . und .. vorhanden.
Packet Number 11 TCP: th_off=5, flags< ACK >
Der ACK des Client wg. langer Denkzeit.
Packet Number 12 ETH: ====( 98 bytes received on interface en0 )==== 10:06:29.056971696 ETH: [ 08:00:5a:93:bc:ea -> 08:00:5a:ba:da:a6 ] type 800 (IP) IP: < SRC = 172.16.1.3 > (nfsclient) IP: < DST = 172.16.1.2 > (nfsserver) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=84, ip_id=40729, ip_off=0 IP: ip_ttl=30, ip_sum=a35a, ip_p = 17 (UDP) UDP: < source port=736, destination port=111(sunrpc) > UDP: [ udp length = 64 | udp checksum = e592 ] RPC: **CALL** XID=1062367155 RPC: Program=100000 (PMAPPROG) Version=2 Procedure=3 (PMAPPROC_GETPORT) RPC: AUTH_NULL Opaque Authorization Base 0 Opaque Authorization Length 0 PMP: Prog=100005 Vers=1 Prot=17 Port=0
Jetzt fragt der Client den Portmapper des Servers nach dem Port des Service 100005, also der mountd. Das Ganze erfolgt über UDP.
Packet Number 13 ETH: ====( 70 bytes transmitted on interface en0 )==== 10:06:29.059025433 ETH: [ 08:00:5a:ba:da:a6 -> 08:00:5a:93:bc:ea ] type 800 (IP) IP: < SRC = 172.16.1.2 > (nfsserver) IP: < DST = 172.16.1.3 > (nfsclient) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=56, ip_id=24499, ip_off=0 IP: ip_ttl=30, ip_sum=e2dc, ip_p = 17 (UDP) UDP: < source port=111(sunrpc), destination port=736 > UDP: [ udp length = 36 | udp checksum = 72c4 ] RPC: **REPLY** XID=1062367155 RPC: 100000(PMAPPROG) 3(PMAPPROC_GETPORT) RPC: Reply Stat: MSG_ACCEPTED RPC: Accepted Reply Stat: SUCCESS PMP: Returning 32870
Der NFS-Server gibt den Port 32870 zurück.
Packet Number 14 ETH: ====( 154 bytes received on interface en0 )==== 10:06:29.060853877 ETH: [ 08:00:5a:93:bc:ea -> 08:00:5a:ba:da:a6 ] type 800 (IP) IP: < SRC = 172.16.1.3 > (nfsclient) IP: < DST = 172.16.1.2 > (nfsserver) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=140, ip_id=40730, ip_off=0 IP: ip_ttl=30, ip_sum=a321, ip_p = 17 (UDP) UDP: < source port=736, destination port=32870 > UDP: [ udp length = 120 | udp checksum = 70c5 ] RPC: **CALL** XID=1062367142 RPC: Program=100005 (MOUNTPROG) Version=1 Procedure=3 (MOUNTPROC_UMNT) RPC: AUTH_UNIX RPC: Cred: RPC: Time=0x3f5649e6 (Wed Sep 3 22:07:02 2003) RPC: Machine=nfsclient Uid=0 Gid=0 Group List Length=7 RPC: Groups= ( 0 2 3 7 8 10 11 ) MNT: Path: /download
Jetzt kennt der Client den richtigen Port und sendet auch sofort einen RPC. Angefragt wird die Prozedur 3 des mountd, das ist MOUNTPROC_UMNT, also ein NFS-umount. Es werden die Credentials übermittelt und dann das abzuhängende Verzeichnis.
Packet Number 15 ETH: ====( 66 bytes transmitted on interface en0 )==== 10:06:29.067724991 ETH: [ 08:00:5a:ba:da:a6 -> 08:00:5a:93:bc:ea ] type 800 (IP) IP: < SRC = 172.16.1.2 > (nfsserver) IP: < DST = 172.16.1.3 > (nfsclient) IP: ip_v=4, ip_hl=20, ip_tos=0, ip_len=52, ip_id=24501, ip_off=0 IP: ip_ttl=30, ip_sum=e2de, ip_p = 17 (UDP) UDP: < source port=32870, destination port=736 > UDP: [ udp length = 32 | udp checksum = 7348 ] RPC: **REPLY** XID=1062367142 RPC: 100005(MOUNTPROG) 3(MOUNTPROC_UMNT) RPC: Reply Stat: MSG_ACCEPTED RPC: Accepted Reply Stat: SUCCESS
Der Server antwortet gleich den Erfolg der Aktion. Das Filesystem ist jetzt abgehängt, die /etc/rmtab wird modifiziert (Clienteintrag ist modifiziert):
# cat /etc/rmtab #fsclient:/download
++++++ END OF REPORT ++++++ processed 15 packets Summary of RPC CALL packets reqid=1062367142 prog=100005 vers=1 proc=3 caller=172.16.1.3 reqid=1062367155 prog=100000 vers=2 proc=3 caller=172.16.1.3 reqid=993839067 prog=100003 vers=3 proc=17 caller=172.16.1.3 reqid=993839066 prog=100003 vers=3 proc=4 caller=172.16.1.3 reqid=993839065 prog=100003 vers=3 proc=4 caller=172.16.1.3
Und die Liste der RPCs zur Vollständigkeit.
[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]
Copyright 2001-2021 by Orm Hager - Es gilt die GPL