0%

TCP-IP协议

一、概述

1.基本理论和基本机制

(1)复用/分用

(2)可靠数据传输机制

(3)流量控制机制

(4)拥塞控制机制

2.传输层 vs 网络层

(1)网络层:提供主机之间的逻辑通信机制

(2)传输层:提供应用进程之间的逻辑通信机制,依赖于网络层服务

3.TCP与UDP

(1)TCP:拥塞控制、流量控制、连接建立

(2)UDP:没有做(可靠性方面的)扩展

(3)两种服务均不保证:延迟、带宽

二、复用与分用

1.概念

(1)多路分用:把网络层发过来的数据分发给不同的进程(socket)

(2)多路复用:不同的进程(socket)的报文利用网络层发出去

2.多路分用的实现

(1)基本原理:

① 数据报中携带了源端口号和目的端口号

② 传输层协议提取IP地址和端口号信息,把段导向相应的Socket

(2)无连接分用

① UDP的Socket用二元组标识:(目的IP地址,目的端口号)

② 主机收到UDP段后

1)检查段中的目的端口号

2)将UDP段导向绑定在该端口号的Socket

(3)面向连接的分用

① TCP的Socket用四元组标识

1)源IP地址

2)源端口号

3)目的IP地址

4)目的端口号

三、UDP

1.工作内容:

(1)复用/分用

(2)简单的错误校验

2.特点

(1)易丢失

(2)非按序到达

(3)无连接

3.存在的意义

(1)无需建立连接 (减少延迟)

(2)实现简单:无需维护连接状态

(3)头部开销少

(4)没有拥塞控制: 应用可更好地控制发送时间和速率

4.应用场合

(1)流媒体应用(容忍丢失、速率敏感)

(2)DNS、SNMP

5.在UDP上实现可靠数据传输

(1)在应用层增加可靠性机制

(2)应用特定的错误恢复机制

6.UDP数据报: img

7.UDP校验和

(1)将段的内容视为16-bit整数计算所有整数的和

(2)计算所有整数的和,进位加在和的后面,将得到的值按位求反,得到校验和

四、可靠传输原理

1.可靠性

(1)概念:不错、不丢、不乱

(2)实现思想:校验和 + 序列号 + ACK + 重传 + 定时控制

2.流量控制

(1)概念:单主机多组同时发,但又要处理得过来

(2)实现思想:流水线机制(多组同时发)、滑动窗口协议(最多等多少个消息)

3.拥塞控制

(1)概念:多主机同时发多数据,但又要处理的过来

(2)实现思想

① 端到端拥塞控制:端判断拥塞,若拥塞,发送端降低自己发送速率

② 网络辅助的拥塞控制:与①不同的是,判端部分由路由器完成

五、TCP概述

1.点对点

(1)一个发送方,一个接收方

2.可靠的、按序的字节流

3.流水线机制

(1)TCP拥塞控制和流量控制机制设置窗口尺寸

4.发送方/接收方缓存

5.全双工(full-duplex)

(1)同一连接中能够传输双向数据流

6.面向连接

(1)通信双方在发送数据之前必须建立连接。

(2)连接状态只在连接的两端中维护,在沿途节点中并不维护状态。 §

(3)TCP连接包括:两台主机上的缓存、连接状态变量、socket等

(4)流量控制机制

7.TCP段结构

img

8.序列号和ACK

(1)序列号

① 是segment中第一个字节的编号,而不是segment的编号

② 建立TCP连接时,双方随机选择序列号

(2)ACK

① 希望接收到的下一个字节的序列号

② 累计确认:该序列号之前的所有字节均已被正确接收到

六、TCP可靠数据传输

1.TCP发送方事件

(1)从应用层收到数据

① 创建Segment

② 序列号是Segment第一个字节的编号

③ 开启计时器

④ 设置超时时间(TimeoutInterval)

(2)超时

① 重传引起超时的Segment

② 重启定时器

(3)收到ACK

① 如果确认此前未确认的Segment

1)更新SendBase

2)如果窗口中还有未被确认的分组,重新启动定时器

2.超时时间

(1)TimeoutInterval = EstimatedRTT(平均) + 4*DevRTT(浮动)

3.快速重传机制

(1)在定时器超时之前即进行重传(收到对同一数据的3个ACK)

4.TCP流量控制

(1)Receiver通过在Segment的头部字段将RcvWindow 告诉Sender

(2)Sender限制自己发送的的数据不超过接收方的RcvWindow

(3)当Receiver告知Sender RcvWindow=0,Sender会定期的发送窗口探寻,时间间隔成指数上升,但当达到一定时间时,会断开连接

七、TCP连接管理

1.三次握手

(1)第一步

① client发送syn到server发起握手;

② client发送client初始序列号J

(2)第二步

① server收到syn后回复syn+ack给client;

② server分配缓存,发送server的初始序列号K

(3)第三步

① client收到syn+ack后,回复server一个ack

(4)流程图
img

(5)SYN攻击

① 两次握手后,不给server回复ack,

② 第二步会分配缓存资源,并保存一段时间,大量的请求,会导致缓存不足,服务器瘫痪

(6)为什么要三次握手

① 防止网络阻塞,请求重发,造成server的多次响应

2.四次挥手

(1)第一次挥手

Client发送一个FIN,Client进入FIN_WAIT_1状态。

(2)第二次挥手

Server收到FIN后,发送ACK给Client,Server进入CLOSE_WAIT状态。

(3)第三次挥手

Server发送一个FIN,Server进入LAST_ACK状态。

(4)第四次挥手:

Client收到FIN后,进入TIME_WAIT状态(等待2MSL后关闭),发送ACK给Server,Server进入CLOSED状态,完成四次挥手。

(5)流程图
img

(6)为什么要四次挥手?

① 因为是全双工的,主动断开的一方只是说明“我不发了”。只有当被动的一方也说明“我也不发了”,才能断开连接。

八、TCP拥塞控制

1.TCP拥塞的根源

(1)网络容量小:在路上堵住了

(2)接收者容量小:在目的地堵住

2.解决思路

(1)拥塞检测:假定超时是由拥塞

(2)拥塞控制:减慢数据率,动态维护窗口大小(滑动窗口协议)

3.具体方案

(1)慢速启动算法

① 按指数增长趋势定义拥塞窗口大小cwnd

② 拥塞窗口增长到阈值时,改为线性增长

③ 超时,阈值减为拥塞时的拥塞窗口的一般

④ 重新慢速启动或快速启动(直接从阈值开始线性增长)

(2)当收到ICMP抑制分组(网络层的拥塞控制信号),当做作超时处理

(3)拥塞控制四大机制

① 慢开始

② 拥塞避免

③ 快重传

④ 快恢复

九、C/S模型

img

img