Notes On TCP/IPv1 CH.20

1. 对于TCP的延迟确认机制, TCP收到一个报文, 如果这是没有启用延迟确认, 那么标记打开, 等待是否在若干时间内(200ms)是否有数据发送可以捎带ACK; 如果延迟确认已经在启用, 那么就关闭这个机制, 直接发送ACK. 利用滑动窗口协议, ACK是可以累积发送的. (Page.277)

2. 在发送了最后一个数据后关闭连接, 有一定机会看到FINPSH同时打开, 既说明SYN, FIN, PSH, RST是可以同时打开的, 也说明在TCP连接终止时, 主动关闭的一方发送的FIN可以由最后的报文捎带. (Page.279)

3. TCP的滑动窗口可以关闭(收到ACK, 并且窗口值减少量等于ACK确认的报文的长度和), 打开(收到ACK, 但是窗口值的减少少于ACK确认的报文的长度和), 收缩(窗口减小, 强烈不建议). (Page.280)

4. 如果收到一个ACK的确认号比当前已经确定的确认号小, 那么说明这个ACK报文在网络延误了或者被复制了, 这个确认号将被忽略. (Page.281)

5. 如果窗口不断关闭, 那么窗口会变成一个0窗口. 这时发送方回停止发送数据等待窗口重新打开. (Page.281)

6. 一个适合大小的发送缓存和接收缓存能够提高网络的吞吐量. (Page.282)

7. PSH标记的作用是, 告知TCP不要把这个数据放在缓存太久, 要尽快把缓存中的这个数据及其前面还没发送的数据发送/读取. 不过其实这个标记在很多实现中都被忽略, 不少实现为了兼容会自动打开这个标志. (Page.284)

8. 在贝克利派生出的实现中, 如果发送完一个报文后发送缓存就会被清空, 那么这个报文就会被标记PSH. 因为往往应用程序的每个写操作所产生的数据在放入缓存后就会马上被发送(除非是用于窗口关闭或Nagle算法等原因报文被继续缓存), 所以一般每次写操作产生的报文都会被打开PSH. (Page.284)

9. Socket API不提供设置PSH或查看PSH的状态的途径, 这些都由系统自动操作. (Page.284)

10. 许多实现中, 在以下情况下会发送窗口更新(就是一个没有数据的TCP): 窗口值增加了两倍MSS, 窗口值增加了最大窗口的50%. (Page.285)

11. 慢开始通过设置一个拥塞窗口(congestion window, cwnd), 把发送端能够发送的最大长度限制为min(cwnd, rwin). 开始时cwnd大小设置为一个MSS, 而每收到一个ACK, cwnd加大一个MSS(文中未说明如果一个ACK对应多个报文时的处理, 也未介绍cwnd减小的情况, 当应为每确认一个报文就增大一个MSS). (Page.285)

12. 发送一个包需要的时间主要由两个因素决定: 传播延时(prpagation delay)和发送延时(transmission delay). 传播延时一般是固定的, 由材料决定, 如光纤, 电缆等; 而发送延时是不固定的, 由发送的数据大小和媒介/带宽(如以太网, SLIP, PPP)决定: 数据大小/媒介速度. (Page.289)

13. 带宽的定义是: 一个媒介一秒钟可以发送多少个位(bit). (Page.289)

14. 带宽延迟积(bandwidth-delay product)是两个端点中间的管道(pipe)的容量, 也就是发送方最多可以发送多少数据在网络上并且没有收到ACK. 计算公式是 容量=带宽*RTT, 其实这个容量也是接收方如果想要充分利用网络必须设置的最小窗口值, 因为如果小于这个值, 发送方就不能发送这么多数据在网络上而不接收ACK. (Page.289)

15. 拥塞发生的原因: 输入的速度大于输出的速度, 要么是输入的网络速度快于输出的网络速度(如以太网输向SLIP), 要么是过多的输入同时输向同一个路由, 而路由的输出能力来不及处理. (Page.291)

16. 通过打开URG标志和使用紧急指针, TCP可以进入"紧急模式", 但是这个紧急模式只是对应用程序产生一个通知, 具体要怎么处理还是由程序来决定. (Page.292)

17. TCP收到打开URG的报文后就会进入紧急模式, TCP并没有说明紧急数据是从哪里开始, 所以直到读取到紧急指针指向的数据, 紧急状态才会结束. (Page.293)

18. 即使对方的窗口以及关闭(零窗口), 仍然可以向对方发送打开URG带有紧急指针的没有数据的TCP, 以迫使对方进入紧急模式, 尽快处理数据打开窗口. (Page.293)

19. 一个TCP链接就只有一个紧急指针, 如果在TCP没有结束紧急模式(就是读取到紧急指针指向的数据), 又收到对方发送过来的打开URG的报文, 那么紧急指针原来的值会被新值覆盖. 所以一种常见的处理是在紧急数据前加入标记. (Page.293)

posted on 2011-06-21 21:05  Qwertycen  阅读(207)  评论(0编辑  收藏  举报

导航