LWIP TCP/IP Stack
Download
Report
Transcript LWIP TCP/IP Stack
LWIP TCP/IP Stack
김백규
What is LWIP?
An implementation of the TCP/IP protocol
stack.
The focus of the lwIP stack is to reduce
memory usage and code size
suitable for embedded systems.
uses a tailor made API that does not
require any data copying.
Features of TCP/IP stack
(Traditional version)
Designing in a layered
fashion leads to…
communication
overhead between
layers
Network communication
is similar to IPC or file
I/O
APP can’t aware of the
buffer mechanisms.
(e.g. reuse buffers with
frequently used data.)
<Layered model>
Features of TCP/IP stack
(LWIP version)
Do not maintain a strict layer.
More relaxed scheme for communication between
layers.
(By means of shared memory)
- APP layer can use the buffer handling mechanisms
used by the lower layers.
APP can more efficiently reuse buffers.
Application process can use the same memory as the
networking code
App can read and write directly to the internal buffers.
Saving the expense of performing a copy
Process model of LWIP
All protocols reside in a single process thus
are separated from the OS kernel.
Allow to be portable across different OS.
APP may either reside in the LWIP process or
be in separate processes.
Communicate are done by function calls.
Or a more abstract API.
The operating system emulation layers
OS specific function calls and data structures
are not used directly in the code.
The operating system emulation layer is used.
The OS emulation layer provides
Timers, process synchronization, message
passing mechanisms, and so on.
Porting to a different OS
Only need the operating system emulation layer.
Buffer and memory management
Packet buffers – pbufs
LWIP’s internal representation of a packet,
Designed for the special needs of the minimal
stack.
Types of pbufs
PBUF_RAM, PBUF_ROM, PBUF_POOL
A pbuf chain may consist of multiple types of
pbufs.
PBUF_RAM pbuf
has the packet data stored in memory managed by the pbuf
subsystem.
used when an application sends data that is dynamically
generated.
PBUF_ROM pbuf
Used when an application sends data that is located in
memory managed by the application.
The main use is when the data is located in ROM
Header that are prepended to the data in a PBUF_ROM
pbuf are stored in a PBUF_RAM pbuf.
PBUF_POOL
Consist of fixed size pbufs allocated from a pool of fixed size
pbufs.
Mainly used by network device drivers since the operation of
allocating a single pbuf is fast and is therefore suitable for use
in an interrupt handler
Network interfaces
The network interfaces are
kept on a global linked list.
Reflect the kind of H/W
Ex) Bluetooth => bt
WLAN => wl
The function the device driver
should call when a packet has
been received.
The function in the device driver
that transmits a packet on the
physical network and it is called
by the IP layer when a packet is
to be sent.
Points to device driver specific
state for the network interface and
is set by the device driver.
IP processing(1/3)
Receiving packets
Network device driver calls ip_input() function.
Checking IP version, header length
Computing the header checksum
Checking destination address.
Sending packets
Handled by the function ip_output()
Find the appropriate network interface.
All IP header fields are filled.
IP header checksum is computed.
The source and destination address are passed.
IP processing(2/3)
Forwarding packets
The packet should be forwarded…
When none of the network interfaces has the
same IP address as an incoming packet’s
destination address.
This is done by the function ip_forward()
ttl field is decreased.
If ttl reaches zero, an ICMP error message is
sent.
IP processing(3/3)
ICMP processing
This is for ICMP ECHO message.
Just swapping the IP destination
and source address of the incoming
packet.
UDP processing(1/2)
The udp_pcb structure
The UDP PCBs are kept on a linked list
which is searched for a match when a UDP
datagram arrives.
Called when a
datagram is
received.
UDP processing(2/2)
UDP processing
TCP processing(1/2)
Function to call when a
listener has been
connected.
Next sequence
number
Receiver’s
window
Timer for
TIME-WAIT
state
Used when passing
received data to the
application layer.
TCP processing(2/2)
Application Program Interface
The BSD socket API
Require data that is to be sent to be copied from
application program to internal buffers in the TCP/IP
stack.
Since the two layers reside in different protection
domains.
The LWIP socket API
Utilizes knowledge of the internal structure of LWIP
to achieve effectiveness.
Does not require that data is copied.
Since the application program can manipulate the
internal buffers directly.