1.TCP面向字节流
1.TCP面向字节流
csharp
1).实现可靠, 有序的交付
TCP为每个传输的字节都分配了一个隐形的序列号, 这个序列号是基于字节的
a.发送端告诉接收端: "我现在要发送从序列号N开始的N个字节"
b.接收端确认: "我已经成功收到了直到序列号K的所有字节"
通过这种方式, 即使网络底层的数据包是乱序, 重复或丢失的, TCP协议栈也能在内部根据序列号将这些字节重新组成成正确
的, 连续的字节流, 再交付给应用层; 应用层完全感知不到底层网络的混乱
2).灵活的流量控制和拥塞控制
a.流量控制: 接收方通过滑动窗口机制告诉发送方: "我的缓冲区还能接收多少字节", 发送方就根据这个"窗口"大小来发送
相应数量的字节, 防止接收方被淹没
b.拥塞控制: TCP根据网络状态动态调整它能在网络中"飞行"的字节数量
这两种控制机制的核心度量单位都是字节, 面向字节流的设计使得这种精细的控制成为可能
csharp
注: 使用TCP开发网络游戏(或任何应用)时, 必须在应用层自己建立"消息协议"来区分不同的消息("长度前缀法")