第1章 tcp协议的十一种状态集转换

1.1 tcp三次握手状态集的转换 5种状态集

服务端和客户端初始状态:closed状态

1. 服务端:开启服务程序,其实创建socket5元组概念),由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控制字段,回复synack字段,有listen状态---syn_rcvd

服务端在listen状态接收到客户端发送的syn请求,会响应syn和ack信息,并且从listen状态变为syn_rcvd状态(三次握手的第二次握手)

4. 客户端:接收synack字段,回复ack字段,由syn_send---established连接建立状态

客户端在syn_send状态接收到syn和ack字段信息,然后回复ack确认信息(三次握手的第三次握手) syn_send状态变为最终建立连接的状态(established)

5. 服务端:接收ack字段,由syn_rcvd状态---established连接建立状态

服务端在syn_rcvd状态接收到了ack字段信息,从syn_rcvd状态变为established

TCP协议的十一种状态集,及子网划分_第1张图片 

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状态

TCP协议的十一种状态集,及子网划分_第2张图片

TCP协议的十一种状态集,及子网划分_第3张图片 

 注意: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  为什么四次挥手过程,ackfin字段要分开发送

TCP协议的十一种状态集,及子网划分_第4张图片 

连接时

服务端在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地址的分类

TCP协议的十一种状态集,及子网划分_第5张图片 

2.2.1 IP的数值范围划分:A B C D E 五类地址

   IP地址的网络部分由IANA(Internet地址分配机构)统一分配,以保证IP地址的唯一性

   常用地址为ABC三类地址:

TCP协议的十一种状态集,及子网划分_第6张图片 

  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 ABC三类地址的默认子网掩码

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

2.5.3 实例

TCP协议的十一种状态集,及子网划分_第7张图片