计算机网络协议分析 第12课 TCP
第7章 传输控制协议TCP
7.1 TCP报文段
TCP的特点
- 面向连接
- 面向字节流
- 全双工
- 可靠传输
- 流量控制
- 拥塞控制
TCP报文格式
首部长度
Q1:首部长度字段的取值范围是多少?
答:5~15字节
Q2:为什么IP首部有总长度字段而TCP首部没有?
答:因为以太网需要填充一些数据以达到最小长度46字节,IP长度可能会小于这个长度,所以需要总长度字段来确定IP数据部分的内容
Q3:为什么TCP首部有首部长度字段,而UDP首部中却没有?
答:因为UDP首部没有选项字段,长度固定
序号与确认号
TCP报文段的序号=该TCP报文段第一个数据字节的编号
确认号是对收到的数据字节的确认,表示期望收到的下一个报文段中第一个数据字节的编号
确认号 = 收到的最后一个字节编号 +1
例子:主机A收到B发送过来的TCP报文段中包含200字节数据,且ACK=1,序号=3670,确认号=5643.
Q1:A发给B的TCP报文段中序号和确认号是多少?
答:序号=5643,确认号=3670+200=3870
Q2:表示B已收到5643字节的数据?
答:表示B收到(初始序号+1 ~ 5642)的所有字节,需要注意的是初始序号从0~(2^32 - 1)中随机选择
控制字段
- URG:紧急指针有效
- ACK:确认有效
- PSH:请求推送
- RST:连接复位
- SYN:同步
- FIN:终止连接
窗口尺寸
窗口尺寸:指接收缓存空闲空间的大小,由接收方指定
TCP检验和
TCP检验和是强制的,UDP检验和是可选的
7.2 TCP连接
Q1:标识一个TCP连接的参数有哪些?
A1:源IP,源端口,目的IP,目的端口
Q2:广播和组播应用可以使用TCP吗?
A2:TCP连接是一对一的
建立TCP连接(三握手)
初始序号会随时间而改变,因此每个连接都将具有不同的初始序号,且同一次连接中x,y的值是没有关系的。目的是在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它做错误的解释。
三次握手的其中一个重要功能是客户端和服务端交换初始序号,以便让对方知道接下来接收数据的时候如何按序列号组装数据。如果初始序号是固定的,攻击者很容易猜出后续的确认号
IP欺骗
B被控制的状态
- H封装B的IP地址向A发送SYN报文段
- A想B回应SYN+ACK报文段
- B发现错误,向A发RST报文段
- A发现错误,连接不成功
or B关机状态
- H封装B的IP向A发送SYN报文段,初始序号seq=X
- A向B回应SYN+ACK(ack=x+1,seq=y)
- H假冒B回应ACK给A(ack=y+1)
H成功的前提:必须知道y的值
SYN洪泛攻击
- 攻击者发送大量SYN报文段,且伪造源IP
- 服务器分配资源,设置计时器,返回SYN+ACK报文段,等待第三个握手报文
- 服务器在等待的时间里需要保持大量资源
TCP端口扫描
源主机向目标主机的某个TCP端口发送一个SYN报文段,若源主机:
- 收到一个SYN+ACK报文段,表示目标主机的该端口处于监听状态
- 收到一个是RST报文段,表示目标主机的该TCP端口关闭
- 什么也没收到,表示该SYN报文段被防火墙过滤,无法到达目标主机
释放TCP连接
三次挥手即把四次挥手中的服务器端的确认和释放连接合并在一起
拒绝TCP连接
- 客户端发送SYN报文段请求建立连接
- 请求的端口未开放,服务器返回一个RST+ACK报文段
异常终止TCP连接
- 客户端崩溃,服务器发送10个探测报文后发送RST报文段
- 或者发现TCP连接的另一端已经空闲了很长时间了
上一课:第11课 DNS
下一课:第13课 TCP第二部分