Above we read merely about the theory of networking, about the basic ideas, about communication protocols and standards. Now, let us see, how all of this is being handled by the Linux Kernel 2.6:
Everything related is found under /net/. But drivers, for the network devices, are of course found /drivers/.
NOTE:
The main interface between the kernel and userspace is the set of system calls. There are about
system calls. Network related system calls include:
writes to socket write() on a socket and all the data is copied from the process space into the send socket bufferset_sockopt())cat /proc/sys/net/core/rmem_default or cat /proc/sys/net/core/wmem_default/proc/sys/net/core/netdev_max_backlog). Once it is full, it waits for being totally empty to allow again an enqueue() (netif_rx(), net/core/dev.c).
/proc is the POSIX complient mount point for the Virtual Filesystem for the processes.
/proc/cpuinfo: processor information/proc/meminfo: memory status/proc/version: kernel version and build information/proc/cmdline: kernel command line/proc/<pid>/environ: calling environment/proc/<pid>/cmdline: process command lineSee Procfs or http://www.comptechdoc.org/os/linux/howlinuxworks/linux_hlproc.html or proc.txt
See → http://gettys.wordpress.com/2010/11/29/home-router-puzzle-piece-one-fun-with-your-switch/ for some "fun" with all the queues.
So you can install hardware capable of Ethernet (usually a network card or more precisely an Ethernet card) on two hosts, connect them with a standardized cable, like a Category 5 cable and communicate with one another over Ethernet as far as your software supports Ethernet
Sooner or later the sausage will get to the Ethernet thingy of the network stack, this will prepare the data conforming to the Ethernet standard, then will deliver the frames to the network card drivers and this will make the hardware, the network card, transmit the data.
The NIC on the other side will receive the signal, relay it to the Ethernet thingy of the network stack, this will create one huge data out of the Ethernet frames and relay it to the software.
When a packet is enqueued on an interface with dev queue xmit (in net/core/dev.c), the enqueue operation of the packet scheduler is triggered and qdisc wakeup is being called (in net/pkt_sched.h) to send the packet on that device.
A transmit queue is associated with each device. When a network packet is ready for transmission, the "networking code" will call the driver's hard_start_xmit()-function to let it know, a packet is waiting. The driver will then put that packet into the transmit queue of the hardware.
You find the sources for the whole TCP/IP protocol suite implementation