第1章 tcp协议的十一种状态集转换
1.1 tcp三次握手状态集的转换 (5种状态集)
服务端和客户端初始状态:closed状态
1. 服务端:开启服务程序,其实创建socket(5元组概念),由closed状态--listen监听状态
服务端从closed状态转换为listen状态(在服务端开启相应服务),只有在listen状态才可以接收客户端建立连接请求
closed--listen状态,实际上就是创建了一个socket条目信息
socket条目包含五元组概念: 连接协议信息(tcp/udp)、目标IP地址信息、目标端口信息、源IP地址信息、源端口信息
netstat -an|grep -i es --- 可以看到socket条目信息
[root@wuhuang ~]# netstat -an|grep -i es Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 64 10.0.0.201:22 10.0.0.1:53793 ESTABLISHED Active UNIX domain sockets (servers and established) |
2. 客户端:发送syn控制字段,由closed状态---syn_send
客户端发送syn信息给服务端,然后客户端从closed状态变为syn_send状态(三次握手的第一次握手)
3. 服务端:接收syn控制字段,回复syn和ack字段,有listen状态---syn_rcvd
服务端在listen状态接收到客户端发送的syn请求,会响应syn和ack信息,并且从listen状态变为syn_rcvd状态(三次握手的第二次握手)
4. 客户端:接收syn和ack字段,回复ack字段,由syn_send---established连接建立状态
客户端在syn_send状态接收到syn和ack字段信息,然后回复ack确认信息(三次握手的第三次握手) syn_send状态变为最终建立连接的状态(established)
5. 服务端:接收ack字段,由syn_rcvd状态---established连接建立状态
服务端在syn_rcvd状态接收到了ack字段信息,从syn_rcvd状态变为established
1.2 tcp四次挥手状态集的转换(6种状态集)
服务端和客户端挥手前的状态:established状态
6. 客户端:发送fin字段,established状态变为fin_wait1状态(等待服务端发送ack确认)
客户端在established状态发送fin字段信息给服务端(四次挥手过程第一次挥手)
然后客户端状态转变为fin_wait1(第一次等待:服务端的确认ack信息)
7. 服务端:接收fin字段,established状态变为close_wait状态,会发送ack确认字段
服务端在established状态接收到客户端发送的fin字段信息,从established状态变为close_wait
服务端在close_wait发送ack确认字段(四次挥手的第二挥手)
8. 客户端:接收ack字段,由fin_wait1状态---fin_wait2(等待服务端发送fin字段)状态
客户端在fin_wait1状态接收服务端的ack信息,进入到fin_wait2(第二次等待:)
没有等来ack字段,fin_wait1状态等来了fin字段,由fin_wait1变为closing状态
9. 服务端:再次发送fin字段,由close_wait状态---last_ack状态
服务端在close_wait发送fin断开连接字段给客户端(四次挥手的第三次挥手)
服务端从close_wait变为last_ack状态
10. 客户端:接收服务端fin字段,发送最后的ack确认字段,由fin_wait2状态---time_wait状态
客户端在fin_wait2状态接收服务端的fin信息,然后响应ack信息,并将自己的状态转变为time_wait状态(四次挥手的第四次挥手)
11. 服务端:接收客户端ack字段,由last_ack状态---closed状态
服务端在last_ack状态接收到客户端发送的ack字段信息之后,就会最终变为closed状态
客户端:等一定时间(2分钟),时间等待完成之后。才会由time_wait---closed状态
注意:SYN***
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN***就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN***时一种典型的DDOS***,检测SYN***的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN***了,使用如下命令可以让之现行:
netstat -nap | grep SYN_RECV
[root@wuhuang ~]# netstat -nap | grep SYN_RECV |
1.3 问题
1.3.1 为什么四次挥手过程,ack和fin字段要分开发送
连接时:
服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
关闭连接时:
当收到客户端的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,服务端会向上层(应用层)汇报是否还有数据发送,并回应ACK给客户端,然后会等数据传输完毕后,再发送FIN报文给对方来表示同意现在关闭连接,因此,服务端ACK和FIN一般都会分开发送。
1.3.2 客户端为什么要有time_wait
为了确保服务端能收到ack,客户端会在time_wait不断给服务端发送ack。
1.3.3 closing状态的由来
在第二次挥手的时候,客户端没收到服务端发送的ack,但收到了fin字段信息,理论上收到fin后应该转换为time_wait,所以加了colsing起一个缓存时间(过程很快)
第2章 IP地址及子网划分
2.1 什么是IP地址
1. IPv4:由32位二进制(32bit)组成,一般用点分十进制来表示,将其分为4段,每段8位二进制
2. IPv6:由128位二进制组成
2.2 IP地址的分类
2.2.1 按IP的数值范围划分:A B C D E 五类地址
IP地址的网络部分由IANA(Internet地址分配机构)统一分配,以保证IP地址的唯一性
常用地址为ABC三类地址:
A类地址(1-126):网络部分+主机部分+主机部分+主机部分
B类地址(128-191):网络部分+网络部分+主机部分+主机部分
C类地址(192-223):网络部分+网络部分+网络部分+主机部分
D类地址为组播地址:每一个地址都作为一个网段
E类地址为科学研究使用
2.2.2 按IP地址的用途分类:公网地址,私网地址
公网地址:是互联网上可以识别的地址信息,并且公网IP地址全球唯一
私网地址:是局域网内可以识别的地址信息,并且私网IP地址局域网内唯一,跨越不同的局域网可以
重复使用,因此私网地址有效的缓解了地址枯竭问题
私有地址包括:
A类: 10.0.0.0-10.255.255.255
B类: 172.16.0.0-172.31.255.255
C类: 192.168.0.0-192.168.255.255
169.254.0.1——169.254.255.254,子网掩码为255.255.0.0 微软内部保留地址
2.2.3 特殊地址
127.0.0.1
又称为本机回环地址,通常利用在本机上ping此地址来检查TCP/IP协议安装是否正确
0.0.0.0
主机位全为0的称为是网络地址
255.255.255.255
主机位全位1的称为是广播地址,即向所有人发出信息
2.3 ABC三类地址可用主机数计算
主机部分为全0表示的是网络地址,即网段
主机部分为全1表示的是广播地址
因此0和255作为主机的地址,是不能进行分配使用的,只有1-254之间的地址可以进行分配为主机地址使用(即主机部分不为全0,不为全1的是可用IP)
可以分配的主机地址个数=2的N次方-2
注:N为主机位的个数
-2就表示减去网络地址和广播地址,剩余的就是可分配的主机地址
2.4 子网掩码
2.4.1 作用:用来确定IP的网络地址
掩码作用
1. 利用掩码快速得知是A类地址 还是B类 或是C类
2. 利用掩码定位网络位信息
掩码表现形式
用十进制表示 分为四组 也是32位的二进制数,分为四组,对应IP地址的网络部分用1表示
,对应IP地址的主机部分用0表示
2.4.2 A、B、C三类地址的默认子网掩码
A类:255.0.0.0或/8
B类:255.255.0.0或/16
C类:255.255.255.0或/24
2.5 子网划分
2.5.1 划分子网原因
1. 会出现大量的局域网地址,同时向一个网关发送请求,引起网关设备的负载过高
2. 会引起局域网内的大量广播数据传送,形成广播风暴
3. 而且会非常的浪费地址空间,有可能只有两台主机或者一台,就分配一个B类地址
2.5.2 优点
1. 将一个大的广播域划分成几个小的广播域环境
2. 减少网关设备所承载的负载量
3. 有效的避免ip地址的浪费,使一个大的地址空间更加弹性和更加灵活的进行分配
子网掩码及相关参数对应表(C类)
子网掩码 |
子 网 数 |
主 机 数 |
可用主机数 |
/25 |
2 |
128 |
126 |
/26 |
4 |
64 |
62 |
/27 |
8 |
32 |
30 |
/28 |
16 |
16 |
14 |
/29 |
32 |
8 |
6 |
/30 |
64 |
4 |
2 |