The formal requirements for the protocols in the TCP/IP stack is specified in a number of RFC documents published by the Internet Engineering Task Force, IETF. Each of the protocols in the stack is defined in one more RFC documents and RFC1122  collects all requirements and updates the previous RFCs.
The RFC1122 requirements can be divided into two categories; those that deal with the host to host communication and those that deal with communication between the application and the networking stack. An example of the first kind is ``A TCP MUST be able to receive a TCP option in any segment'' and an example of the second kind is ``There MUST be a mechanism for reporting soft TCP error conditions to the application.'' A TCP/IP implementation that violates requirements of the first kind may not be able to communicate with other TCP/IP implementations and may even lead to network failures. Violation of the second kind of requirements will only affect the communication within the system and will not affect host-to-host communication.
In our implementations, we have implemented all RFC requirements that affect host-to-host communication. However, in order to reduce code size, we have removed certain mechanisms in the interface between the application and the stack, such as the soft error reporting mechanism and dynamically configurable type-of-service bits for TCP connections. Since there are only very few applications that make use of those features, we believe that they can be removed without loss of generality. Table 1 lists the features that uIP and lwIP implements.
|IP and TCP checksums||x||x|
|IP fragment reassembly||x||x|
|Multiple TCP connections||x||x|
|Variable TCP MSS||x||x|
|TCP flow control||x||x|
|Sliding TCP window||x|
|TCP congestion control||Not needed||x|
|Out-of-sequence TCP data||x|
|TCP urgent data||x||x|
|Data buffered for rexmit||x|