本文共 2195 字,大约阅读时间需要 7 分钟。
1. 三次握手和四次挥手
1.1 三次握手:
客户端主动打开连接服务端,客户端发送SYN=1、seq=c 到服务端且客户端进入SYN_SEND状态,服务端发送确认SYN=1、ACK=1、ack=c+1、seq=s 且服务端进入SYN_RCVE状态,客户端再次对服务端的确认进行确认,ACK=1、ack=s+1、seq=c。自此连接建立。当第三次握手失败时服务端不重传ack报文而是发送RST(异常处理)报文进入closed状态(防止SYN洪泛攻击)。
第一阶段需要消耗一个序号,第二阶段需要消耗一个序号,第三阶段不需要消耗序号。减少SYN洪泛攻击最近使用的策略是使用Cookie推迟资源分配,等到服务器确认IP是合法的以后分配资源。
1.2 连接终止(三向握手)
现在大多数的实现都允许使用在连接终止时的三次握手。如上图客户端发送FIN报文,消耗一个序号(不携带其他数据消耗一个序号),服务端发送FIN+ACK报文,消耗一个序号(不携带其他数据消耗一个序号),客户端发送ACK报文(不消化序号)。
1.3 四相握手
客户端发送FIN报文并进入FIN-WAIT-1状态(如果不传输数据将消耗一个序号),客户端收到来自服务端的确认后进入FIN-WAIT-2状态,此时客户端处于半关闭状态,在客户端收到服务端的FIN报文则进入TIME-WAIT状态。
服务端收到客户端的FIN报文并发送ACK后进入CLOSE-WAIT状态,当服务端进程调用close后,服务端发送FIN报文(消耗一个序号)并进入LAST-ACK状态,服务端收到ACK后进入CLOSED状态。
1.4 半关闭状态:
在tcp中连接一方可以停止数据的发送,但仍然可以接收数据,,服务器或客户都可以发出半关闭请求。半关闭的一种情况:客户端到服务端数据发送完毕,客户端发送FIN,此连接处于半关闭状态。此时服务端发送ACK对客户端的FIN确认,此时服务端仍然能够发送数据到客户端并且能够获取客户端的确认,但是客户端不能在发送数据了。第一个ACK报文和第二个ACK报文不需要消耗序号。
客户端发送FIN报文并且收到ACK报文则进入FIN_WAIT_1状态,此时进入半关闭状态
1.5 连接复位
tcp连接可能会拒绝一个连接请求,也可能异常终止一条连接,也可能终止一条空闲连接,都是发送RST连接请求。
2. tcp转换图
2.1 连接的建立和关闭终止
2.1.1 客户端
客户端主动打开并发送SYN报文(消耗一个序号)并进入SYN-SENT状态,收到ACK报文并发送SYN+ACK报文(不消耗序号)并进入连接建立状态。客户端发送FIN报文(如果不传输其他数据则消耗一个序号)并进入FIN-WAIT状态,客户端收到ACK报文后连接处于半关闭状态并进入FIN-WAIT-2状态。客户端收到FIN报文并发出ACK报文(不消化序号)时进入TIME-WAIT状态(时间一般为2MSL),超时后进入无连接状态。
1. 如果最后一个ACK报文丢失(图一中)
因为进入TIME-WAIT时有2MSL,当最后一个ACK丢失后(在1MSL时间内),可以等到服务端重传下一个FIN报文,收到FIN报文后重新设置定时器为2MSL。1MSL为一个IP报文最大的生存周期。
2. 某个连接中的重复报文可能出现在下一个连接中。
当连接关闭后出现,建立了新的连接。但是在新的连接中收到了上次连接的报文。经过2MSL才能出现这种化身。通过序号可以直接忽略掉。
2.1.2 服务端
服务端被动打开进入LISTEN状态,收到SYN报文后发出SYN+ACK报文(消耗一个序号)并进入(SYN-RCVE)状态,收到ACK报文则进入连接建立状态。
3. 广播(ipv6不支持广播)
3.1 受限的广播
受限的广播地址是255.255.255.255。路由器受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
3.2 指向网络的广播
指向网络的广播地址是主机号为全1的地址,路由器需要转发到对应的网络。
3.3 指向子网的广播
指向子网的广播地址为主机号为全1且有特定子网号的地址。同样依赖子网掩码。
3.4 指向所有子网的广播
指向所有子网的广播地址的子网号及主机号为全1,与指向子网的广播的区别在于是否划分子网。
4. IPv4的划分
4.1 分类编址
类别辨识:
网络标识和主机标识
4.2 无分类编址
首地址为地址和子网掩码与,末地址为地址和(子网掩码取反)或。
全为0的地址:
0.0.0.0/32:当主机启动时没有自己的ip地址,此时主机以0.0.0.0为源地址,以255.255.255.255为目的地址发送给dhcp服务器请求以个ip地址。
全为1的地址:
255.255.255.255/32:受限的广播地址,路由器不会转发受限的广播地址的数据报,这样的数据报仅出现在本地网络中。
本地回环地址:
127.0.0.1 /8:用来测试机器上的软件。
专用地址:
10.0.0.0 /8
172.16.0.0 /12
192.168.0.0 /16
196.254.0.0 /16
以上地址作为专用的地址,不会被全球识别。
4.3 每个地址块特殊的地址
每个地址块首地址定义(后辍全为0)为网络地址,每个地址块后辍全为1的地址称为直接广播地址(只能用作目的地址)。
转载地址:http://byftb.baihongyu.com/