TCP/IP PSD/FAQ
1.0: TCP/IP

1.1: About TCP/IP
2.0: Debugging TCP/IP

2.1: netstat 
2.2: etherfind and snoop
3.0: Common How Tos

3.1.1: config Variables
3.1.2: in_proto.c Variables 
3.2: Information on ndd Network parameters and Variables in Solaris 2.
3.2.1: IP Variables
3.2.2: TCP Variables
3.2.3: UDP Variables
3.2.4: ARP Variables
4.0: Some Frequently Asked Questions

4.1: Miscellaneous Questions 
4.2: Questions on Ports 
4.3: netstat Questions 
4.4: Web Server TCP/IP Optimization
5.0: Patches

5.1: SunOS TCP/IP Patches
5.2: Solaris TCP/IP Patches
6.0: Known Bugs & RFEs

6.1: RFEs
7.0: References

7.1: Important Man Pages 
7.2: Sunsolve Documents 
7.2.1: FAQs 
7.2.2: Infodocs 
7.2.3: SRDBs;
7.3: Sun Educational Services 
7.4: Solaris Documentation 
7.5: Third Party Documentation 
7.6: RFCs
8.0:Supportability
9.0: Additional Support
 
1.1: About TCP/IP  

This Tip Sheet documents a wide variety of information concerning TCP/IP. It is mainly concerned with information on the tuning options available in Sun TCP/IP, as well as a few of the most common questions. Unless you are doing really low level work with TCP/IP, this Tip Sheet probably will not be of too much use to you. However, if you are doing low level work, this Tip Sheet will give you some ideas on what you can do with Sun's TCP. A lot of the topics in this Tip Sheet fall under the category of Performance Tuning. This is an area that is normally not covered by SunService. Hopefully, this Tip Sheet will get you started tuning things on your own. If it is insufficient, you should consult Sections 8.0 and 9.0 for how to get help from Sun Consulting Services. 2.0 Debugging TCP-IP 

2.1: netstat 

 The netstat program may be used to examine a wide variety of network information. In its most basic form, when run without arguments, netstat will show currently active connections: # netstat TCP Local Address Remote Address Swind Send-Q Rwind Recv-Q State -------------------- -------------------- ----- ------ ----- ------ ------- localhost.32791 localhost.32796 8192 0 8148 0 CLOSE_WAIT psi.3139 sockem.listen 8760 0 8760 0 ESTABLISHE psi.login sun-soft.1020 4096 0 9112 0 ESTABLI The most important bits of information here are the local address (local name + local port), the remote address (remote name + remote port) and the State. In many cases, the port number is replaced by a port name, defined by the /etc/services file. The possible states are all defined in the netstat man page. Of particular note is the TIME_WAIT state connections will always wait in that state for a designated amount of time (called the 2MSL time) before the connection is totally shut down. This is to prevent new programs from reusing a port during a period in which packets destined for an older application might arrive there. netstat -a also shows information as above, but includes all server processes, which are usually waiting in a LISTEN state (netstat without options only lists active processess, not passively LISTENing processes). netstat is commonly used in debugging to examine network performance problems which may relate to programs getting stuck in certain states. This is done by examining the states noted in the netstat output above. There are a number of other uses for netstat: netstat -i will show interface information, netstat -p will show arp information and netstat -r will show routing information. 

2.2: etherfind and snoop  

You can use etherfind (SunOS) and snoop (Solaris) to examine every single packet which goes across the network. They can be useful if you are looking for retransmissions, duplicate ACKs, or other similar problems. The etherfind and snoop man pages explain how to use those utilities to examine the network. SunService also has a seperate Tip Sheet (the Miscellaneous Programs Tip Sheet) which outlines some basic uses of etherfind and snoop. 3.0 Common How Tos 

3.1: How to Tune Network Variables in SunOS  

3.1.1: config Variables 

 Four variables may be modified in the config file for your kernel (eg /sys/sun4c/conf/GENERIC). Each of these may be changed by adding a line as follows: options OPTIONNAME =value For example: options IPFORWARDING =-1 The legal options are: DIRECTED_BROADCAST Determines whether to forward broadcasts directed to a specific net or subnet, if that net or subnet is directly connected to the machine. The default value is 1 (True). IPFORWARDING Determines if the workstation will route packets. This variable can be one of three selections: -1 Never forward 0 Only forward when two or more interfaces are up 1 Always forward The default value is 0. IPSENDREDIRECTS Determines whether host should send ICMP redirects when it routes packets. The default value is 1 (True). SUBNETSARELOCAL Determines if remote subnets on the same network should be considered local. The default value is 1 (True). After making any of these changes, config the kernel, and remake it. 

3.1.2: in_proto.c Variables 

 Other Network variables may be modified under SunOS by modifying the file /sys/netinet/in_proto.c. These are each standard C declarations. After modifying them, the kernel must be rebuilt. tcp_default_mss Determines the Maximum Segment Size for nonlocal packets (ie, packets to be sent to different networks or subnets). The Definition of local may differ, depending on how SUBNETSARELOCAL is set. The default value for tcp_default_mss is 536 bytes. tcp_keepidle Determines how frequently to test if an idle connection is still alive. The default value is 2 hours. tcp_keepintvl Determines how frequently to check an idle connection, if the first check has failed. The default value is 75 seconds. tcp_keeplen Compatibility variable that must be set to 1 for BSD4.2 compatibility. The default value is 1. tcp_nodelack Determines whether ACKs can be delayed. Default is 0 (Allow ACKs to be delayed). A value of 1 will turn off delayed ACKs. tcp_recvspace Determines the maximum value of the TCP receive window. The default value is 4096 (4k). tcp_sendspace Determines the maximum value of the TCP transmit window. The default value is 4096 (4k). tcp_ttl Determines the default Time To Live for TCP packets. The default value is 60. udp_cksum Determines whether to checksum UDP packets. The default value is 0 (False). This should usually be changed to 1 (True) if you are having any troubles with UDP services (ie, NFS, NIS) udp_ttl Determines the default Time To Live for UDP packets. The default value is 60. udp_recvspace Determines the maximum value of the UDP receive window. The default value is 18000 bytes. udp_sendspace Determines the maximum value of the UDP transmit window. The default value is 9000 bytes. 

3.2: Information on ndd Network parameters and Variables in Solaris 2. 

 Most TCP, IP, UDP and ARP tuning in Solaris is done via the ndd command. You can list all of the appropriate variables by supplying ndd with the driver name and a ?, ie: %% ndd /dev/arp \? %% ndd /dev/ip \? %% ndd /dev/tcp \? %% ndd /dev/udp \? Note: Under Solaris 2.5 or higher, you will need to be root to display or set these variables. You can change ndd variables by supplying the -set option, the variable name, and the value, ie: %% ndd -set /dev/ip ip_forwarding 0 If you wish an ndd variable to get set upon every boot, you should put a line for it in the file /etc/rc2.d/S69inet: %% cat /etc/rc2.d/S69inet ... # # Set configurable parameters. # ndd -set /dev/tcp tcp_old_urp_interpretation 1 or a preferred method is to create a separate startup script. Once you have refined which parameters you require for individual drivers it is recommend that the complete 'ndd' commands are included in a new start-up script /etc/init.d/net-tune which is linked to /etc/rc2.d/S68net-tune. example: #!/sbin/sh # /etc/rc2.d/S68net-tune -> /etc/init.d/net-tune PATH=/usr/bin:/usr/sbin case "$1" in 'start') echo "Setting local Solaris kernel changes - ndd Tuning " ndd -set /dev/ip ip_path_mtu_discovery 0 ndd -set /dev/tcp tcp_rexmit_interval_max 60000 ndd -set /dev/tcp tcp_recv_hiwat 32768 ndd -set /dev/tcp tcp_xmit_hiwat 32768 ndd -set /dev/tcp tcp_slow_start_initial 2 'stop') echo "No kernel parameters changed." ;; *) echo "Usage: $0 {start|stop}" ;; esac exit 0 Many variables have two options: 1 (True) and 0 (False). Note: in all of the following examples, OS versions may differ, and can always be discovered by typing: # ndd device variable ie: # ndd /dev/ip ip_forwarding 0 WARNING concerning the ndd variables: ndd is/was not designed to be a general tuning mechanism for customers. Setting any parameters will affect your entire machine and always involves tradeoffs. In general, the defaults set by Solaris are optimal for most situations. They should be considered quite volatile, and might totally change from one release of Solaris to another.Only the variables that are the most useful, or the least likely to change, are listed below, but even these could be potentially modified in new releases of the OS. Unlisted variables, which can be viewed with the ndd command, should be considered even less static. Always make sure you understand what you are changing and for what reason. Make a comment in the startup script if you choose to add it permanently so that others know why this change was done. The parameters not listed are usually reserved for in-dept debugging and for developers. 

3.2.1: IP Variables 

 ip_addrs_per_if limit on IP addresses per interface The Number of multiple logical interfaces that can be associated with a physical network interface. (le0:0, le0:2 ... , le0:255,). 2.5.1 and 2.6 Default value = 256 ip_enable_group_ifs 2.6 parameter that enables ip load balancing over physical interfaces. see ifconfig 2.6 man page INTERFACE GROUPS " rotate source address selection when the source address is unspecified, and in the case of multiple physical interfaces in the same group, to scatter traffic across different IP addresses on a per-IP-destination basis. Default value is 0 (Default =1 before patch 105786-05) ip_forwarding Determines if the workstation will route packets. ( forward packets between interfaces) This variable can be one of three selections: 0 Never forward 1 Always forward 2 Only forward when two or more interfaces are up The default value is 2 on 2.4, 2.5 and 2.5.1 systems. if_forwarding value of 2 was removed in Solaris 2.6 /* RFC1122 Conformance */ see /etc/rc2.d/S69inet ip_forward_src_routed Determines whether to forward packets that are source routed, (packets which have a specific machine listed as part of route. setting to 0 prevents a router from generating source routed packets, or from participating as a source router. The default value is 1 ip_ire_status List current IREs (Internet Routing Entries). This is the cache of addresses ip is actually using . similar output version of " netstat -rvan " used for debugging ( Read Only ) ip_ire_cleanup_interval how long to keep a route that is not being used. This is the length of time that a specific route is allowed to exist without being used. The default is 30000 ms (30 seconds). ip_ire_flush_interval maxmimum length a specific route may be kept, even if it is being used. This is the period after which all specific routes are thrown away. The default is 1200000 ms (20 minutes). ip_path_mtu_discovery Determines whether to use the Path MTU Discovery algorithms, in order to prevent excessive packet fragmentation. The default value is 1 (True). see RFC 1191 Note: using FDDI , TR , ATM , on Solaris between networks with different MTU sizes, you may need to off ip path mtu discovery to enable fragmentation, if implementing routers that do not support RFC 1191. ex:# /usr/sbin/ndd -set /dev/ip ip_path_mtu_discovery 0 ip_send_redirects Determines whether the host should send ICMP redirects when it routes packets. The default value is 1 (True). ip_strict_dst_multihoming Determines whether to use Strict Destination Multihoming. If this variable is set to True, andip_forwarding is turned off, then the machine will not except packets destined for a different interface. see RFC1122 The default value is 0 

3.2.2: TCP Variables

tcp_close_wait_interval Despite the misleading name, this variable actually sets the time wait interval (the 2MSL value). The default value is 240000 ms (4 minutes). tcp_conn_req_max **replaced. This value is well-known as it normally needs to be increased for Web servers in older releases of Solaris 2 which sets the maximum size a listener's backlog. Sets maximum number of pending connection requests queued for a listening endpoint. It no longer exists in Solaris 2.6, or 2.5.1 w/patch 103582-12. **The change is part of a fix that prevents denial of service from SYN flood attacks. There are now two separate queues of partially complete connections instead of one. tcp_conn_req_max_q The maximum number of completed connections waiting to return from an accept call as soon as the right process gets some CPU time. # of conn reqs in SYN_RCVD - "fully-established" connections - those which have finished the 3-way handshake and are waiting to be picked up by an "accept()" call. (default value 128) tcp_conn_req_max_q0 The maximum number of connections with handshake incomplete. A SYN flood attack could only affect this queue, and a special algorithm makes sure that valid connections can still get through. "half-open" connections - those which have responded to a SYN request and are waiting for the final ack to come back to finish the 3-way handshake (default value 1024) tcp_keepalive_interval Determines how frequently to test if an unresponsive connection is still alive if the server application has KEEPALIVES enabled. see setsockopt SO_KEEPALIVE Probes are sent after tcp_keepalive_interval and probe again at tcp_rexmit_interval_max until tcp_ip_abort_interval, with no client response the connection is killed. The default value is 7200000 ms (2 hours as specified in rfc1122) tcp_ip_abort_cinterval Abort timeout at connect time. This is the 3-way handshake abort timer. The default value is 180000 (3 MIN) tcp_ip_abort_interval Abort interval used after connected (abort timeout for an established connection) This is the maximum time TCP retransmits will be tried for a connection in the ESTABLISHED state should be tried before a RESET segment is sent. Default 480000 (8*MINUTES) tcp_ip_notify_cinterval The timeout value when tcp is performing active open after which TCP notifies IP to find a new route Default 10000 (10 SEC) tcp_ip_notify_interval The timeout value for an ESTABLISHED connection after which TCP notifies IP to find a new route. Default 10000 (10 SEC) tcp_largest_anon_port Largest TCP port number that may be used for anonymous connections. The default value 65535 tcp_max_buf Specifies the maximum buffer size a user is allowed to specify with the SO_SNDBUF or SO_RCVBUF options. Attempts to use larger buffers fail with EINVAL. The default is 256K. It is unwise to make this parameter much larger than the maximum buffer size your applications require, since that could allow malfunctioning or malicious applications to consume unreasonable amounts of kernel memory. tcp_mss_def Determines the Default Maximum Segment Size for TCP nonlocal packets (ie, packets to be sent to different networks or subnets). The default value is 536 bytes. tcp_mss_max Determines the Maximum Segment Size for TCP nonlocal packets Maximum negotiated MSS. Default 65495 tcp_old_urp_interpretation **removed TCP Urgent Data Pointer 0 = Old BSD style RFC 793 (Pointer points at urgent data +1). 1 = Modern Style RFC 1122 (Pointer points at urgent data). The default value is 1 ** older Solaris 2 see S69inet: ndd -set /dev/tcp tcp_old_urp_interpretation 1 tcp_recv_hiwat This parameter specifies the default value for a connection's receive buffer space; that is, the amount of buffer space allocated for received data (and thus the maximum possible advertised receive window). In most cases, tcp_recv_hiwat should be identical to tcp_xmit_hiwat. The default value is 8192 (8k). tcp_rexmit_interval_initial initial retransmit timeout interval. ( first retransmit ) Default value is 3000 ( 3*SECONDS ) changed from 500*MS tcp_rexmit_interval_max maximum retransmission interval. This is the maximum wait interval between two consequitive retransmissions The Default value is 240000 (240*SECONDS ) Changed from 6000 (1*MINUTES) tcp_rexmit_interval_min minimum retransmission interval This is the minimum wait interval after the initial retransmit before retransmitting The Default Value is 200 ms tcp_slow_start_initial workaround to use on solaris where the clients are not compliant with the current TCP slow-start standard (RFC2001). Included in 2.5.1 103582-15 and above Default Value is 1 . ( to implement workaround change to 2 ) Note: TCP Slow-start Initial Value Can Be Changed see bugid: 4054780 4057676 Non-Solaris clients may experience somewhat slower network performance on short-lived connections, such as http connections, when served by Solaris servers. This problem occurs because of Solaris' strict adherence to the TCP Slow-start specification (RFC2001). You can now modify the initial value that TCP Slow-start uses by tuning an ndd variable. For detailed information on how to modify this variable and an explanation of this behavior, go to the section titled "Sun Performance Information" under "Sun On the Net" at http://www.sun.com. tcp_smallest_anon_port Determines the smallest TCP port number that may be used for an anonymous connection. Solaris allocates ephemerical ports above 32768 The default value is 32768. tcp_xmit_hiwat This parameter specifies the default value for a connection's send buffer space; that is, the amount of buffer space allocated for sent but unacknowledged data. In most cases, tcp_xmit_hiwat should be identical to tcp_recv_hiwat. The default value is 8192 (8k). tcp_xmit_lowat Determines the minimum value of the TCP transmit buffers. The default value is 2048 (2k). Solaris 2.6 TCP large windows ndd configuration parameters: TCP large windows provides the support described in RFC1323. This support is designed to improve performance over large bandwidth or delay networks such as ATM or satellite networks by using windows that exceed the normal 65535 limit. 2.6 TCP large windows tcp_wscale_always If this parameter is nonzero, a window scale option is always sent when connecting to a remote system. Otherwise, the option will be sent if-and-only-if the user has requested a receive window larger than 64K. The default is zero. Regardless of the value of this parameter, a window scale option is always included in a connect acknowledgment if the connecting system has used the option. tcp_tstamp_always If this parameter is nonzero, a timestamp option is always sent when connecting to a remote system. The default is zero. Regardless of the value of this parameter, a timestamp option is always included in a connect acknowledgment (and all succeeding packets) if the connecting system has used the option. tcp_tstamp_if_wscale If this parameter is nonzero, the timestamp option is sent when connecting to a remote system if the user has requested a receive window larger than 64K (that is, if a window scale option with a nonzero scale is being used). The default is zero. tcp_host_param This parameter is a table of IP addresses, networks, and subnetworks, along with default values for certain TCP parameters to be used on connections with the specified hosts. ( Read Only )

3.2.3: UDP Variables

 udp_def_ttl Determines the default Time To Live for UDP packets. The default value is 255. udp_do_checksum Determines whether checksums should be done for UDP packets. The default value is 1 (True). udp_recv_hiwat Determines the maximum value of the UDP receive buffer. This is the amount of buffer space allocated for UDP received data. The default value is 8192 (8k). udp_smallest_anon_port Determines the smallest UDP port number that may be used for an anonymous connection. The default value is 32768. udp_xmit_hiwat Determines the maximum value of the UDP transmit buffer. This is the amount of buffer space allocated for UDP transmit data The default value is 8192 (8k). udp_xmit_lowat Determines the minimum value of the UDP transmit buffer. The default value is 1024 (1k).

3.2.4: ARP Variables

 arp_cleanup_interval This is the time that ARP will hold on to unsolicited information in case IP needs it. The default is 300000 ms (5 minutes).

4.0 Some Frequently Asked Questions 

4.1: Miscellaneous Questions

 QUESTION: What RFCs does Sun TCP/IP follow? 

ANSWER: Sun follows RFC 793 for TCP, RFC 768 for UDP, RFC 791 for IP, and RFC 1122 overall. RFC 1323 is implemented in 2.6 and above. See section 6.1 for more information. 

QUESTION: Will TCP/IP kill idle connections? 

ANSWER: No. If a connection goes idle for an extended amount of time, probes will be sent out to verify that the remote machine or connection has not gone down. However, provided that everything is still running, TCP/IP connections should stay live forever. 

4.2: Questions on Ports 

 QUESTION: Why do ports get stuck in the TIME_WAIT state? 

ANSWER: This is due to the 2MSL timeout value, which is a part of the TCP specification. After a connection has been closed by both the client and the server, the port becomes unavailable for a certain amount of time, so that a new program does not inadvertantly get packets that were intended for the old program. On Solaris machines, the 2MSL value may be modified by adjust the /dev/tcp tcp_close_wait_interval ndd variable. See Section 3.2.2. 

QUESTION: Why do I get "address already in use" when I try and reuse a port which a previous program had used. 

ANSWER 1: It could be that the port is still in the TIME_WAIT state (see above). You may confirm this by running netstat, and examining the port in question. If this is the case, you must simply wait the couple of minutes it will take for the port to get out of the TIME_WAIT state. 

ANSWER 2: It could be that the program you are using does not correctly list the port as one that may be reused. You should verify that your program is setting the SO_REUSEADDR socket option. 

4.3: netstat Questions

 QUESTION: Why does netstat hang when I run it? 

ANSWER: This is usually due to an error in name resolution. Run netstat with the -n option to verify that this is the case: % netstat -n % netstat -rn If you find that netstat does not hang when you run with the -n option, you should investigate your naming services (DNS, NIS, NIS+) for further problems. 

4.4: Web Server TCP/IP Optimization

QUESTION: How do I increase the listen backlog described in my HTTPD documentation? 

ANSWER: This may be modified only on Solaris machines. On these machines, you will want to adjust the /dev/tcp tcp_conn_req_max variable. Section 3.2 explains how to set ndd variables temporarily or permanently. On Solaris 2.4 or lower, you can use ndd normally to set the listen backlog up to 32, from the default of 5: ndd -set /dev/tcp tcp_conn_req_max 32 By modifying your kernel, you can increase the backlog even higher. echo "tcp_param_arr+14/W 0t128" adb -kw /dev/ksyms /dev/mem ndd -set /dev/tcp tcp_conn_req_max 128 You must make sure that you have at least patch 101945-36 installed before you try this. Values higher than 128 are not suggested. These lines should both go into /etc/rc2.d/S69inet to make the change permanent. On Solaris 2.5 , you can set the listen backlog up to 1024 normally: ndd -set /dev/tcp tcp_conn_req_max 1024 2.5.1 w/ tcp patch and 2.6 have 2 queues that replace the tcp_conn_req_max Starting in Solaris 2.5.1 w/patch 103582-11 or higher and Solaris 2.6, tcp_conn_req_max no longer exists. The ndd tcp_conn_req_max parameter has been replaced with two enhanced parameters: tcp_conn_req_max_q and tcp_conn_req_max_q0 The default values of these new parameters are equivalent (in performance terms) to the value of 1024 in tcp_conn_req_max (before tcp patch 103582-11) These two variable were created by Solaris 2.5.1 patch: 103582 (Version 11 on up) and built-in to Solaris 2.6. This Solaris patch addressed the TCP SYN attack threat which was a CERT advisory and bug 1182957. To increase maximum connections w/patch 103582-11 or higher, use this: /usr/sbin/ndd /dev/tcp -set tcp_conn_req_max_q 1024 

QUESTION: What else can I do to increase Web Server Performance? 

ANSWER: You should adjust the listen backlog up, as is suggested in your Web Server documentation. You will probably also want to increase the size of the send, receive and congestion windows: ndd -set /dev/tcp tcp_cwnd_max 65535 ndd -set /dev/tcp tcp_xmit_hiwat 65536 ndd -set /dev/tcp tcp_recv_hiwat 65536 Note that under Solaris 2.5 and higher, tcp_cwnd_max is already set to 65535 by default. Also note that these ndd settings only apply to Solaris. A2: Upgrade to Solaris 2.6, faster CPU's, more memory, Fastethernet ... 

5.0: Patches 

The following is the list of all of the TCP/IP related patches for 4.1.3, 4.1.3_u1, 4.1.4, 5.3 and 5.4. If you are having TCP/IP problems, installing the patches is a good place to start, especially if you recognize the general symptoms noted below. In order for a machine to be stable, all of the recommended patches should be installed as well. The list of recommended patches for your operating system is available from sunsolve1.sun.com. 

5.1: SunOS TCP/IP Patches

Patch-ID# 100584 SunOS 4.1.1,4.1.2,4.1.3: TCP socket and reset problems 

101790-01 SunOS 4.1.3_U1: TCP socket and reset problems Fix some problems regarding TCP resets, and the usage of the getsockopt function. 

100584-08 SunOS 4.1.3: TCP Interface Jumbo Patch 

102010-02 SunOS 4.1.3_U1: TCP interface Jumbo Patch. Fix a wide variety of problems having to do with TCP connections. 

5.2: Solaris TCP/IP Patches   

101318-81   SunOS 5.3: Jumbo patch for kernel (includes libc, lockd) Solaris 2.4 

101945-42   SunOS 5.4: jumbo patch for kernel Solaris 2.5 

103447-10   SunOS 5.5: tcp patch 

103093-22   SunOS 5.5: kernel update 

103399-02   SunOS 5.5: /kernel/strmod/sockmod patch Solaris 2.5.1 

103582-16   SunOS 5.5.1: /kernel/drv/tcp and /usr/bin/netstat patch 

103597-04   SunOS 5.5.1: /kernel/strmod/sockmod patch 

103640-20   SunOS 5.5.1: kernel patch 

105097-01   SunOS 5.5.1: usr/lib/libsocket.a and usr/lib/libsocket.so.1 patch Solaris 2.6 

105529-03   SunOS 5.6: /kernel/drv/tcp patch 

105214-01   SunOS 5.6: /kernel/fs/sockfs patch 

NOTE:  These patches fix a large number of TCP/IP and other network problems. They should be installed on every networked machines. 

6.0: Known Bugs and RFEs The following bugs & rfes represent known open issues regarding TCP/IP 

6.1: RFEs  

1179428 Request for implementation of RFC 1323 for tcpip performance This RFE requests that RFC 1323 be implemented under Solaris, so that performance on satellite or delayed links can be improved. 

 7.0 References 

7.1: Important Man Pages

arp etherfind ip ndd (Solaris Only) netstat snoop tcp udp 

7.2: Sunsolve Documents

The following SunSolve documents may contain some additional information, which is not covered in this Tip Sheet. 

7.2.1: FAQs 

1048 IP interface questions and answers 1202 TCP/IP applications have slow response over asynchronous commu 

7.2.2: Infodocs 

 2194 Internet Protocol Overview (IP and ICMP) 2195 Transmission Control Protocol (TCP) 

7.2.3: SRDBs 

 5819 how to set socket keep alive timeout length 6729 UDP checksums for NFS 11416 what are the ARP values set by ndd? 

7.3: Sun Educational Services  

 Sun Educational Class which covers TCP/IP tuning is TCP/IP Network Administration SA-389. 

7.4: Solaris Documentation  

There is no Solaris Documentation which covers TCP/IP tuning to this level. 

7.5: Third Party Documentation  

TCP/IP Illustrated, Volume 1_, by W Richard Stevens, published by Addison-Wesley, ISBN 0-201-63346-9 This is a superb book covering TCP/IP. It explains the majority of the terms which are outlined in the above document, and gives a really good overview of networking as a whole. 

7.6: RFCs

 There are a huge number of RFCs which cover TCP/IP and other networking protocols. RFCs are the internet-written documents that define the specifications of many common networking programs. RFCs can be retrieved from nic.ddn.mil, in the /rfc directory. 

8.0: Supportability 

 SunService is not responsible for the initial configuration of your TCP/IP environment. In addition, SunService can not diagnose your TCP/IP performance problems, nor suggest TCP/IP tuning guidelines. We can help resolve problems where TCP/IP is not behaving correctly, but in such cases the contact must be a system administrator who has a good understanding of TCP/IP. 

9.0: Additional Support

 For initial configuration, or TCP/IP performance tuning guidelines, please contact your local SunService office for possible consulting offerings. Sun's Customer Relations organization can put you in touch with your local Sun Integration or Sales office.