1. 在一般情况下, Rlogin和Telnet都是每按下一个键, 就发送这个按键的消息(数据部分长度为1的TCP报文). (Page.263)
2. 当TCP收到一个报文, 不会立刻发送ACK以确定这个报文, 而是等待一定的时间, 期望上层应用在这段时间内有数据需要发送, 以方便捎带上这个ACK(捎带ACK和确认号不额外增加数据), 这个等待时间不是固定的, 一般上限为200ms. (Page.265)
3. 与connect时重传SYN的机制相似, ACK的延后发送实际上并不是由时间决定, 而是在TCP内部一个每200ms触发一次的计时器决定的. 在计时器超时触发之前, TCP等待上层应用数据以捎带ACK, 当计时器触发, 所有未发送的ACK都将被发送. 因此即使在接收到报文200ms内有数据要发送, 但是计时器触发于接受报文和上层数据到达内核缓存之间, 那么ACK也会直接发送而不等待捎带. (Page.267)
4. Nagle算法的基本就是: 如果还有已经发出的报文还未被确认, 那么"小"数据就由TCP收集起来等到之前的报文被确认后再统一发出. (Page.267)
5. TCP可以在上层应用还未读取数据时就发送ACK, TCP的ACK只是代表对方已经正确的接收发送了的数据. (Page.269)
6. Socket API可以通过设置TCP_NODELAY关闭Nagle算法. (Page.270)
7. 当TCP收到不是自己所期待的报文(如丢失中部某个报文), 会立刻发送ACK+确认号告知对方自己所期待的数据, 这个ACK不会被延后. (Page.272)
EX. 以太网帧数据部分最小长度为46个字节, 即一个以太网帧的最小长度为60字节(不包括CRC), IP本身并没有大小限制, 如果IP过小不够以太网帧的最小长度, 以太网驱动自动填充够46个字节. 另外SLIP, 令牌环等其他网络的数据部分的最小长度不一定就是46.