Key points are not available for this paper at this time.
Code to implement network protocols can be either inside the kernel of an operating system or in user-level processes. Kernel-resident code is hard to develop, debug, and maintain, but user-level implementations typically incur significant overhead and perform poorly.
Mogul et al. (Thu,) studied this question.