TCP的发送量控制:
接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应. 因此TCP支持根据接收端的处理能力, 来决定发送端的发送速度. 这个机制就叫做流量控制(Flow Control);
TCP引入慢启动机制, 先发少量的数据探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据
当TCP开始启动的时候, 慢启动阈值等于窗口最大值;
在每次超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1
拥塞窗口
发送开始的时候, 定义拥塞窗口大小为1;
每次收到一个ACK应答, 拥塞窗口加1;
每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗 口;
像上面这样的拥塞窗口增长速度, 是指数级别的. “慢启动” 只是指初使时慢, 但是增长速度非常快.
为了不增长的那么快, 因此不能使拥塞窗口单纯的加倍. 此处引入一个叫做慢启动的阈值
当拥塞窗口超过这个阈值的时候,不再按照指数方式增长,而是按照线性方式增长
少量的丢包, 我们仅仅是触发超时重传; 大量的丢包, 我们就认为网络拥塞; 当TCP通信开始后, 网络吞吐量会逐渐上升; 随着网络发生拥堵, 吞吐量会立刻下降;
拥塞控制:TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力的折中方案
流量控制 = 接收窗口(对方的接收能力)
拥塞控制 = 拥塞窗口(推断出的交通承载能力)
发送窗口(这段时间内可以发送数据量的最大值)–滑动窗口的大小
发送窗口 = f(接收窗口,发送窗口)= MIN(接收窗口,发送窗口)
发送量控制 = 流量控制 + 拥塞控制
如何确定发送窗口(流量控制 + 拥塞控制)
如何控制—滑动窗口机制
面向字节流
捎带应答
在延迟应答的基础上, 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的. 意味着客户端给服务器说了 “How are you”, 服务器也会给客户端回一个 “Fine, thank you”; 那么这个时候ACK就可以搭顺风车, 和服务器回应的 “Fine, thank you” 一起回给客户端
为什么HTTP协议选择是基于TCP协议实现?
a) HTTP协议对可靠性要求较高,对实时性要求较低。
b) HTTP协议没有广播特性
c) 当时的网络质量不高
用UDP实现可靠传输(经典面试题)
参考TCP的可靠性机制, 在应用层实现类似的逻辑;
例如:
引入序列号, 保证数据顺序;
引入确认应答, 确保对端收到了数据;
引入超时重传, 如果隔一段时间没有应答, 就重发数据
传输层(Transmission Layer)
1、 应用层是传输层的客户
2、 传输层又是网络层的客户
作用应用层的能力:
1、 认识连接管理的知识—netstat/抓包工具
2、 如何划分应用层的包(面向字节流)
3、 TCP的异常处理
作为应用层,选择传输层协议时应该考虑什么?
1.网络环境 2.可靠–>实时
无类别划分(CIDR)
特殊的IP地址
1、 将IP地址中的主机地址全部设为0, 不能分配给主机,而是网络号, 代表这个局域网;
2、 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
3、 127.*的IP地址用于本机环回 (loop back)测试,通常是127.0.0.1
私有IP地址和公网IP地址
1、 10.,前8位是网络号,共16,777,216个地址
2、 172.16.到172.31.,前12位是网络号,共1,048,576个地址
3、 192.168.,前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或 公网IP);
解决IPV4不够用的几种方式
TTL(Time To Live)生存时间
从一个网络节点到另一个网络节点,–跳(hop)
路由过程
路由表
路由表的记录怎么来的?
静态
动态