博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再读计算机网络
阅读量:2355 次
发布时间:2019-05-10

本文共 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/

你可能感兴趣的文章
softlockup/hardlockup原理详细介绍
查看>>
项目管理学习笔记之八风险管理过程总结
查看>>
项目管理学习笔记之九采购管理过程总结
查看>>
solaris常用命令总结
查看>>
邮件安全证书(S/MIME),如何申请邮件证书
查看>>
Go语言基础入门--简介
查看>>
Go语言基础入门--变量,类型
查看>>
Go语言基础入门--数组,切片,map
查看>>
Go语言基础入门--if,for,range,switch
查看>>
Go语言基础入门--函数,错误处理
查看>>
VIM 学习系列之基本命令,常用命令
查看>>
轻松搭建安全、轻量、极速、简约的博客Eiblog
查看>>
Golang包管理工具Glide,你值得拥有
查看>>
如何降低白噪声对网站用户体验的影响?
查看>>
【BDTC2016】大数据分析与生态系统论坛:大数据存储、处理技术大比评 百花齐放落地实践大展现
查看>>
2017微信公开课PRO版在广州召开 张小龙首次全面解读小程序
查看>>
微信小程序催生新的创业机会 阿拉丁为首批乘风破浪者
查看>>
这里有海量的用户群 CSDN学院诚邀微信小程序技术课程优秀讲师
查看>>
测试用例设计方法例子
查看>>
交叉表 设计测试用例
查看>>