Web权威指南

推荐序

合格的开发者知道怎么做, 而优秀的开发者知道为什么要这么做

# 第一部分: 网络技术概览

1. 延迟与带宽

了解上网服务商的拓扑结构和速度

> traceroute xxx.com
traceroute: Warning: xxx.com has multiple addresses; using 183.60.209.24
traceroute to xxx.com (183.60.209.24), 64 hops max, 52 byte packets
traceroute to google.com (172.217.25.14), 64 hops max, 52 byte packets
 1  10.0.0.1 (10.0.0.1)  4.473 ms  4.759 ms  3.733 ms
 2  192.168.254.68 (192.168.254.68)  4.206 ms  3.570 ms  4.085 ms
 3  192.168.254.23 (192.168.254.23)  4.441 ms  4.853 ms  3.952 ms
 4  14.152.49.249 (14.152.49.249)  46.490 ms  14.372 ms  16.516 ms
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  10.10.71.2 (10.10.71.2)  24.394 ms  17.472 ms  18.060 ms
11  175.100.203.25 (175.100.203.25)  20.229 ms  20.522 ms  19.824 ms
12  218.189.124.225 (218.189.124.225)  37.908 ms
    218.189.124.241 (218.189.124.241)  21.810 ms  21.892 ms
13  218.189.124.141 (218.189.124.141)  23.584 ms  21.721 ms  21.860 ms
14  218.189.97.249 (218.189.97.249)  24.059 ms  21.550 ms  22.099 ms
15  72.14.222.9 (72.14.222.9)  21.824 ms  20.306 ms  20.880 ms
16  108.170.241.33 (108.170.241.33)  21.993 ms  23.523 ms
    108.170.241.1 (108.170.241.1)  23.155 ms
17  209.85.243.23 (209.85.243.23)  30.519 ms  24.920 ms
    209.85.243.21 (209.85.243.21)  22.920 ms
18  hkg07s24-in-f14.1e100.net (172.217.25.14)  24.537 ms  27.017 ms  22.004 ms

2. TCP的构成

TCP负责在不可靠的传输通道之上提供可靠的抽象层, 向应用层隐藏了大多数网络通信的复制细节

例如丢包重发、按序发送、拥塞控制及避免、数据完整等等

2.1 三次握手

所有TCP连接一开始都经过3次握手

发送端 接收端 SYN(x=rand())-------> <-------SYN ACK(x+1 y=rand()) ACK(y+1 x+1) ------->

SYN: 客户端选择一个随机序列号x, 并发送一个SYN分组 , 其中可能还包括其他TCP标志和选项

SYN ACK: 服务器端给x加1, 并选择自己的一个随机序列号y, 追加自己的标记和选项, 然后返回响应

ACK: 客户端给x和y都加以, 并发送握手期间最后一个ACK分组

三次握手完成后, 客户端与服务器之间就可以通信了

客户端可以在发送了ACK后立即发送数据

而服务器必须要等接收到ack分组之后才能发送数据

三次握手带来的延迟使得每创建一个新TCP都要付出代价, 而这也决定了提高TCP应用性能的关键, 在于想办法重用连接

2.4 队首阻塞

每个TCP分组都会带着一个唯一的序列号被发送

而所有分组必须按顺序传送到接收端

如果中途有一个分组没能到接受端, 那么后续分组必须保持在接收端的TCP缓存区

应用程序一无所知, 只能通过套接字读数据时感觉到延迟交付, 这就叫TCP的队首阻塞

有些程序并不需要可靠的交付或者按顺序的交付, 比如每个分组都是独立的消息, 那么按顺序交付就没任何必要

或者每个消息都会覆盖之前的消息, 那么可靠的交付同样也没必要

可惜的是 TCP不支持这种情况, 所有分组必须按顺序交付

无需按序交付数据或能够处理分组丢失的应用程序, 以及对延迟或抖动要求很高的应用程序, 最好选择UDP等协议

© 404mzk all right reserved,powered by Gitbookhttp://read.404mzk.com 该文件修订时间: 2018-01-01 20:08:48

results matching ""

    No results matching ""