Dear all,
I'm troubleshooting some problem with NFS server, mountd to be precise. Server is running AIX 5.3. When NFS starts, mountd listens both on TCP and UDP ports:
rpcinfo -p | grep mountd
100005 1 tcp 6666 mountd
100005 2 tcp 6666 mountd
100005 3 tcp 6666 mountd
100005 1 udp 6666 mountd
100005 2 udp 6666 mountd
100005 3 udp 6666 mountd
Port 6666 is fixed in /etc/services. After the start server works fine, clients can mount exported directories without any issues. After some time (not sure how long, perhaps after some idle period) mountd stops listening on TCP and only UDP remains:
rpcinfo -p | grep mountd
100005 1 udp 6666 mountd
100005 2 udp 6666 mountd
100005 3 udp 6666 mountd
The problem is that clients still try to contact TCP port first, despite the fact (I can see that in network trace) that portmap says TCP program is not available. Such requests are retransmitted until they timeout and there is 2 min delay in service because of such retransmits. After timeout client tries UDP port and everything goes fine. Roughly speaking, network conversation goes like this:
Client: GETPORT Call MOUNT TCP
Server: GETPORT Reply PROGRAM_NOT_AVAILABLE
Client: GETPORT Call MOUNT UDP
Server: GETPORT Reply Port: 6666
<...some communication ongoing...>
Client: sends SYN to TCP port 6666
Client: resend SYN
Client: resend SYN
....
Timeout
Client: GETPORT Call MOUNT UDP
Server: GETPORT Reply Port: 6666
Client: MNT Call
...and everything goes ok...
Any ideas why mountd stops listening on TCP? Of course, there is another issue with clients who insist on TCP and ignores answers from portmap, but I thought I'll start with server side. In fact, I tried to read a bit about such client behaviour, too, but found nothing.