SunSolve Internal

 Search for in

Printer Friendly Page ] [ E-mail this Document to Someone ]
Was this document useful? Yes or No ]

Jump to
Infodoc ID   Synopsis   Date
12618   Transmission Control Protocol/Internet Protocol (TCP/IP) PSD/FAQ   12 Jul 2000

Description Top
SunService Tip Sheet for Sun TCP/IP
Includes Notes on ndd variables and netstat
 
Revision: 1.9
Date - August 26, 1996
 
1.0: About TCP/IP
2.0: Debugging TCP/IP
  2.1: netstat
  2.2: etherfind and snoop
3.0: Common How Tos
  3.1: How to Tune Network Variables in SunOS
  3.2:  Information on ndd Network parameters and Variables in Solaris 2. 
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.3: Sun Educational Services
  7.4: Solaris Documentation
  7.5: Third Party Documentation
  7.6: RFCs
8.0: Supportability
9.0: Additional Support
1.0: 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
----------------------------
 
Q: What RFCs does Sun TCP/IP follow?
 
A: 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.
 
Q: Will TCP/IP kill idle connections?
 
A: 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
-----------------------
 
Q: Why do ports get stuck in the TIME_WAIT state?
 
A: 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.
 
Q: Why do I get "address already in use" when I try and reuse a port
which a previous program had used.
 
A1: 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.
 
A2: 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
----------------------
 
Q: Why does netstat hang when I run it?
 
A: 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 
---------------------------------------

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

A: 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

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

A: 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 sunsolve.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
---------------------------
 
Solaris 2.3
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

  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
-----------------------------
 
There are no Sun Educational Classes which cover TCP/IP tuning to this
level.
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 SunIntegration or Sales office. You can reach Customer
Relations at 800-821-4643.            
Applies To Hardware
Attachments (none)

Top

SunWeb Home SunWeb Search SunSolve Home Simple Search

Sun Proprietary/Confidential: Internal Use Only
Feedback to SunSolve Team