TCP - 传输控制协议
是一种面向连接的可靠传输协议。
特点:
-
TCP是面向连接(虚连接)的传输层协议。
-
每一条TCP连接有且只能有两个端点。
-
可靠、有序、无丢弃和不重复。
-
TCP协议提供全双工通讯。
- 发送缓存
- 存放发送方TCP准备发送的数据。
- TCP已发送但是没有收到确认的数据。
- 接收缓存
- 存放发送端发送来的不按照顺序到达的数据。
- 按照顺序到达的数据,但并未被应用程序读取。
- 发送缓存
-
TCP是面向字节流的。TCP将应用层数据仅看成是一串无结构的字节流。
TCP连接的四元组(源IP、源端口、目的IP、目的端口)
套接字 - IP:port
确认序列号: 接收方期望收到发送方发送的下一个字节的序号。(序号+数据大小)1、接收方希望接收到的报文序号;2、该序号之前的数据全部接受。— 累计确认机制
数据偏移:4字节;保留位:6bit;
选项字段:长度可变。MSS数值、窗口扩大因子、时间戳、选择确认机制。
确认位ACK:当ACK=1时,确认号有意义。再连接建立后,所有传输的报文段都必须将该标志位置设为1。
同步位SYN:SYN=1时,代表该数据是一个连接请求报文。
终止位FIN:FIN=1时,表明此报文段发送方数据已发送完毕,要求释放连接。复位RST:表明TCP连接出现严重错误,需要释放连接并重新建立连接。晋级位URG:代表该报文中存在高优先级的数据,尽快处理。需要配合紧急指针使用。
推送位PSH:接收方应尽快将接收到的数据交付给对应应用程序。
TCP的可靠性
确认、重传、排序、流控。
确认机制
在TCP中,当发送端的数据达到接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做ACK(确认应答)。
TCP通过肯定的ACK实现可靠的数据传输。当发送端将数据发出之后会等待对端的确认应答,如果有确认应答,说明数据已经成功到达,如果没有,那么数据有可能丢失了
如下图所示,在一定时间内没有等到确认应答,发送端就可以认为数据已经丢失,就会进行重发。
未收到确认应答也并不意味着数据一定丢失,有时也有可能是因为数据收到,但是ACK却在传输的途中丢了。因此这种情况也会导致发送端因没有及时收到ACK,而认为数据没有到达目的地,从而进行重传
为此就必须要引入一种机制,使其能够识别是否已经接受数据,又能判断是否需要接受。
序列号和确认应答号
序列号:1 确认应答号:1+数据长度。
重传机制
MTU:最大传输单元 - 以太网环境下1500字节 - 数据包大小。
MSS:最大数据段长度RTT - 往返时间(即从发送方发送数据开始,到发送方接收到来自接收方的确认消息所经过的时间。)
RTO - 超时重传时间。RTO略高于RTT。快速重传机制 - 根据接收方的反馈信息进行数据重传。客户端连续接收到三次确认序列号相同的ACK报文,则认为数据丢失,需要进行数据传输。
快速重传机制会导致部分数据重复传输,降低数据传输效率。解决思路:选择确认机制。 - 在TCP首部的选项字段中,添加上未接收到的数据信息。接收方接收到该确认报文后,会根据选项字段内容,重新传输缺少的数据部分。是否执行进行协商 - 根据三次握手的前两次SYN报文中进行协商。RTO数值是动态变化的数值。超时间隔加倍。
流控机制
窗口:窗口的大小时可以指定的,窗口大小指的是无需等待确认报文,而可以直接发送的数据包的最大值。接收窗口(rwnd)- 开始等于整个缓存区大小,浮动变化。
TCP要求发送方依据rwnd发送数据量
TCP连接的建立
TCP连接需要解决的问题:
1、知晓对端的套接字信息
2、允许双方进行参数的协商(窗口值、选择确认机制、是否使用窗口扩大因子)
3、对设备进行资源分配(队列、缓存空间)
探测报文
当TCP连接建立成功,但是客服端突发故障。服务器会等待2小时,若2小时候没收到任何客户端的数据,服务器发送一个探测报文,以后每隔75秒。
TCP连接的释放
1、TCP连接释放实际是释放本地分配给TCP连接的资源
2、本地没有新的数据需要发送
静态路由
方法一:[r1]ip route-static 23.0.0.0 24 12.0.0.2 点到多点
方法二:[r1]ip route-static 23.0.0.0 GE0/0/1 点到点(一条导线上只能有两个节点)ARP代理:当收到ARP报文后,路由器冒充真实应答者回复ARP报文,将自己接口的MAC地址进行回复。限制条件:应答路由器必须是网络可达的静态ARP表项(下一跳)[r1]ARP ststic 12.0.0.1 00e0-fcd3-1943
方法三:[r1]ip route-static 23.0.0.0 24 GE0/0/0/1 12.0.0.2
方法四:[r1]ip route-static 192.168.3.0 24 23.0.0.3(前置条件全部实现) - 下两跳
路由器下一跳写的是我自己,则认为是直连关系;
子网划分和子网汇总
172.16.0.0/16
子网划分:主机位借给网络位,借的位叫子网位,子网位可变
172.16.00000000.0
172.16.10000000.0子网汇总:取相同,去不同
172.16.1.0/24
172.16.2.0/24
172.16.3.0/24172.16.0.0/22
缺省路由 0.0.0.0 1.1.1.1
环路接口的解决解决方法:TTL(生存时间)空接口:NULL0(路由最长掩码匹配规则)修改优先级 pre
静态路由与BFD的联动
[r1]bfd ---激活BFD协议
[r1]bfd aa bind peer-ip 10.1.12.1
[r1-bfd-session-aa]discriminator local 10
[r1-bfd-session-aa]discriminator remote 20
[r1-bfd-session-aa]commit ---提交配置
接着配置r2BFD
[r1]display bfd session all[r1]ip route-static 10.9.9.0 24 10.1.12.1 track bfd-session aa[r1-bfd-session-aa]discriminator remote 20
[r1-bfd-session-aa]commit ---提交配置
接着配置r2BFD
[r1]display bfd session all[r1]ip route-static 10.9.9.0 24 10.1.12.1 track bfd-session aa