TCP(传输控制协议)
三次握手
- SYN
客户端选择一个随机序列号x,并发送一个SYN分组 - SYN ACK
服务器给x加1,并选择自己的一个随机序列号y,追加自己的标志和选项 - ACK
客户端给x和y加1,并发送给我收期间的最后一个ACK分组。流量控制
流量控制是一种预防发送端过多想接收端发送数据的机制。
通告接受窗口(rwnd)RFC窗口缩放
慢启动
- cwnd拥塞窗口大小
发送端对从客户端接受确认(ACk)之前可以发送数据量的限制
拥塞预防
必须调整窗口大小,以避免造成更多的包丢失。
PRR:TCP比例降速带宽延迟积(BDP)
数据链路的容量与其端到端延迟的乘积队首阻塞
针对TCP优化建议
- TCP三次握手增加了整整一次往返时间
- TCP慢启动将被应用到每个新连接
- TCP流量及拥塞控制会影响所有连接的吞吐量
- TCP的吞吐量由当前拥塞窗口大小控制
服务器配置调优
- 增大TCP的初始化拥塞窗口
加大起始窗口,可以让TCP在第一次王反就传输较多数据。 - 慢启动重启
在连接空闲时禁用慢启动可以改善损失发送数据的长TCP连接的性能 - 窗口缩放(RFC 1323)
启用窗口缩放可以增大最大接收窗口大小 - TCP快速打开
UDP(用户数据报协议)
分组
分组可以用来只带任何格式化的数据块数据报
数据包通常只用来描述那些通过不可靠的服务传输的分组,既不保证送达,也不发送失败通知。WebRTC(Web实时通信)
P2P(Peer-to-Peer,端到端)
无协议服务
四个字段:源端口、目标端口、分组长度、校验和
UDP首部-8字节- 不保证消息交付
不确认、不重传,不潮湿 - 不保证交付顺序
不设置包序号,不重拍,不会发生队首阻塞 - 不跟踪连接状态
不必建立连接或重启状态机 - 不需要拥塞控制
不内置客户端或网络反馈机制
UDP是一个简单、无状态协议,数据报必须封装在IP分组中,应用程序必须读取完整的消息,数据报不能分片
- cwnd拥塞窗口大小
NAT(网络地址转换器)-- RFC 1631
表中包含本地IP和端口到全球唯一(外网)IP的端口和映射
NAT穿透
实现端到端的双向通信
必须知道外网IP地址和目标端口,NAT转换表中也要有一个条目可以将其转换为内部主机的IP地址和端口号
穿透技术(STUN、TURN、ICE)
STUN
可以让应用程序发现网络中的地址转换器,发现之后进一步取得为当前连接分配的外网 IP 地址
和端口(图 3-5)。
这个协议需要一个已知的第三方 STUN 服务器支持,该服务器必须架设在公网上。
TURN
TURN 可以在最坏的情况下跳过 UDP 而切换到 TCP。
TURN 中的关键词当然是中继(relay)。这个协议依赖于外网中继设备(图 3-6)在
两端间传递数据。
ICE
5245)。ICE 规定了一套方法,致力于在通信各端之间建立一条最有效的通道(图 3-7):能直连就直连,必要时 STUN 协商,再不行使用 TURN。