TCP:转发数据量较多 对可靠性要求比较高 流(数据无间隔)协议 (顺序控制 重发控制 流量控制 拥塞控制)(http 通信必须使用 tcp)
UDP:高速传输和实时性有较高要求的通信或广播/多播通信 细节控制交给应用
udp-lite 校验和错误不希望丢弃所有收到的包,校验和范围可以由应用设定,只针对不允许发生错误的部分(端口号、IP 地址等)进行校验和的检查
端口号 => 识别在传输层上一层的应用层中所要进行处理的具体程序
应用程序 <=> 套接字API(可以设置对端的IP 地址、端口号,并实现数据的发送与接收) <=> TCP
数据链路 => MAC地址(识别同一链路中不同的计算机)
网络层 => IP地址(识别 TCP/IP 网络中互连的主机和路由器)
传输层 => 端口号(=程序地址)(识别同一台计算机中进行通信的不同应用程序)
TCP/IP UDP/IP 通信常采用 5 个信息来识别一个通信:源 IP 地址、目标 IP 地址、源端口号、目标端口号、协议号(TCP or UDP)
数据到达 IP 层后,会检查 IP 首部的协议号,再传给相应协议的模块(tcp=>tcp 模块,udp=>udp 模块)去做端口号的处理
即使是同一个端口,由于传输协议是各自独立地进行处理,因此互相之间不会受到影响
UDP 简单&高效 用途
- 包总量较少的通信(dns snmp 简单网络管理协议)
- 即时通信:视频、音频等多媒体通信
- 限定于 lan 等特定网络中的应用通信
- 广播、多播通信
TCP可靠传输
- 校验和
- 序列号:初始值并非=0,而是随机数,之后每字节+1
- 确认应答:ACK NACK 丢包
- 重发控制:RTT=round trip time 报文段的往返时间 收不到确认应答 指数函数延长再次发送 1 2 4 8 16
- 连接管理:模拟电话对话去理解 3 次握手(syn => ack+syn => ack),4 次挥手(fin => ack, fin => ack)。syn包(请求建立连接),fin包(请求断开连接)
- 窗口控制:用滑动窗口并行处理 不需要等到上一个确认应答即可发送下一个数据包 增大吞吐量
- 流控制:发送端根据接收端的实际接收能力控制发送的数据量 窗口探测包=>窗口更新通知 获取最新窗口大小
- 拥塞控制:慢启动算法 拥塞窗口指数增长 超时重发时 设置为当时拥塞窗口的一半(慢启动阈值)tcp 吞吐量的特点就像在逐步占领网络带宽
即使有少部分确认应答丢失也不会进行数据重发 可以通过下一个确认应答进行确认(高速重发控制:比超时机制更快)
- 延迟确认应答:大可不必为每一个数据段进行一次确认应答 收到数据后延迟一段时间返回确认应答,使客户端接收到较大发送窗口,增加网络利用率。tcp 传输中,绝大多数是每两个数据段返回一次确认应答
- 捎带应答:同一个 tcp 包中既发送数据又发送确认应答的一种机制。提高网络利用率,计算机负荷减轻。接收数据后,将数据传给应用程序处理生成返回数据以后再进行发送请求为止,必须一直等待确认应答的发送。(前提是有延迟确认应答)