The ROUTING TABLE is a table maintained in the kernel that determines how packets are routed to other systems. A number of programs may add or delete routes from the routing tables, including route, ifconfig, in.routed and in.rdisc. The routing table consists of three types of routes: HOST ROUTES are checked first and define a route to just one host. NETWORK ROUTES are checked second and define a route to all the hosts on one network. DEFAULT ROUTES are used as a catch-all, when no host or network routes are found to a destination. They usually send to a more knowledgeable routing machine, which has a better chance of being able to find a host or network route to the destination.
ARP, the ADDRESS RESOLUTION PROTOCOL. ARP is the protocol which converts the IP address to an address appropriate to the hardware type (ie, Ethernet addresses on an ether network). After normal routing protocols have done their work, ARP springs in to action. It's what actually gets packets from one machine to another. Usually, you should not have to worry about ARP at all. Except in special setups, it should work totally transparently.
Solaris and SunOS each have a specific order which they use to start up routing: If an /etc/defaultrouter file exists, only static routing will be used, and a static default route will be created to the machine listed in the defaultrouter file. If there is no /etc/defaultrouter file, and the machine is a router, both in.routed and in.rdisc will be started, and they will advertise routing information. SunOS machines will only start up in.routed, as in.rdisc is not available under SunOS. If there is no /etc/defaultrouter file, and the machine is a host, in.rdisc is initially started. If any machines on the same network advertise via Routing Discovery, in.rdisc will be used as the dynamic routing program if there are no machines advertising via Routing Discovery, in.rdisc will quickly quit. SunOS skips this step. Finally, if there is no /etc/defaultrouter file, and either the machine is running SunOS, or in.rdisc has failed, then in.routed is started. It will listen for other in.routed programs advertising via RIP packets. This is the default manner in which most out-of-the-box Suns will operate.
All IP ADDRESSES are divided into two portions: the NETWORK ADDRESS, and the HOST ADDRESS. The network portion of the IP address defines the level at which routing is done this means that all machines with the same network address are on the same network. For example, if we had the IP address a.b.c.d, we might learn that the network portion of that address was a.b, and the host portion of that address was c.d. In that case, all machines with the IP address a.b.*.* would be on the same network. We would typically see a route to the network a.b.0.0. By default, Internet IP addresses are divided into 3 Classes. Each of these ranges has a different portion of the IP address reserved as the network and host addresses. Class IP Range Network Host
Class A 1.*.*.* to 127.*.*.* a b.c.d
Class B 128.*.*.* to 191.*.*.* a.b c.d
Class C 192.*.*.* to 223.*.*.* a.b.c d
Multicast: Class D 126.96.36.199 to 188.8.131.52.
Reserved: Class E 240.0.0.0 to 247.255.255.255
It is always best to start investigating routing problems by making sure that your interfaces are set up correctly. By running ifconfig, you can see your current interface setup: # ifconfig -a lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232 inet 127.0.0.1 netmask ff000000 le0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500 inet 184.108.40.206 netmask ffffff00 broadcast 220.127.116.11 ether 8:0:20:10:78:d When an interface is brought up, it automatically creates a route. This route will be to the local network for multipoint interfaces (ether, FDDI, TR, etc), or to a host for point-to-point interfaces (PPP). If your main interface (le0 in the above example) is not UP and RUNNING, clearly no routing will be occurring through it. If the interface is UP, you will also want to examine the inet and netmask entries of your main interface, and make sure they are set correctly. If the inet is set wrong, check your /etc/hostname.interfacename file (ie, hostname.le0) and your /etc/hosts file. If the netmask is set wrong, check your /etc/netmasks file