> Hi all, > Is lwip able to reassemble fragmented TCP packets?
If yes, how? > In fact my stack is supposed to receive a HTTP
POST request split
> into 2 TCP fragments. At the TCP level, both fragments are set with
> "Position fragment/Fragment offset" = 0 and "More fragment"=0.
As a
> result, ip_reass is never called. At the TCP level, does a mechanism
> of reassembly exist?
Short answer: yes.
Long answer: You have to be careful with the words
here. On the IP Layer there is "fragmentation" which is only
used when you have an Ethernet packet from a medium that a a bigger MTU
(maximum transfer size). SO when a router gets a big packet and needs to
send it on a physical medium that cannot handle the size of the packet,
it gets fragmented in several IP packets with fragmentation flags. On the TCP layer, there is "segmentation".
Because TCP sees data as a stream, it is of course possible to send data
that is longer than a single Packet is able to handle. The data is then
basically just written into several packets and the other side puts the
data stream back together.
LwIP has both features. For a TCP stream that just
travels over Ethernet with constant MTU (1500), there will be no IP fragmentaton,
only TCP segmentation.
When your application does a recv() you just tell
it how much data you expect and it will return when that ammount has arrived.