Table 3: NBD Data Protocol Per Thread, Per Type of Data Request
| type | caller thread | function | data on the wire | (detail) | 
|  |  |  |  | u32 magic | 
|  |  |  |  | u32 1 | 
| write | nbd_request | nbd_send_request | (<\#174> struct | u64 unique ID | 
|  | (kernel) |  | nbd_request | u32 request offset | 
|  |  |  |  | u32 request length | 
|  |  |  | (<\#174>) char[] | data | 
|  |  |  | (<\#172>) struct | u32magic | 
|  | nbd_do_it | nbd_read_stat | nbd_reply | u32 error | 
|  | (client) |  |  | u64 unique ID | 
|  |  |  |  | u32 magic | 
|  |  |  |  | u32 0 | 
| read | nbd_request | nbd_send_request | (<\#174> struct | u64 unique ID | 
|  | (kernel) |  | nbd_request | u32 request offset | 
|  |  |  |  | u32 request length | 
|  |  |  | (<\#172>) struct | u32magic | 
|  | nbd_do_it | nbd_read_stat | nbd_reply | u32 error | 
|  | (client) |  |  | u64 unique ID | 
|  |  |  | (<\#174>) char[] | data |