OSI模型及TCP协议三次握手四次挥手

OSI七层模型

从下到上依次为:

物理层(bit流)

定义设备标准,如网线的接口类型、各种传输介质的传输速率等

物理层定义的规范有:RS—232、RJ—45等

数据链路层(数据帧frame)

这一层定义了如何让格式化数据进行传输,通常还提供错误检测和纠正,以确保数据的可靠传输

在这一层中工作的协议有:ARP、IEEE 802.3、STP等

网络层(数据包packet)

将数据传输到目标地址,主要实现寻找地址和路由选择。网络层还可以实现拥塞控制、网际互联等功能

在这一层中工作的协议有:IP、ICMP、RIP等

传输层(数据段segment)

提供端到端的服务,可以实现流量控制、负载均衡。

传输层信息包括端口、控制字和校验和

在这一层中工作的协议有:TCP、UDP等

会话层(报文)

负责建立和断开通信连接,记忆数据的分隔等数据传输相关的管理

表示层(报文)

主要负责数据格式的转换,例如将来自下一层的数据转换为上层能够处理的格式。

表示层的数据转换包括数据的加密压缩等

应用层(报文)

直接面向用户的程序或服务

在这一层中工作的协议有:HTTP、FTP、SMTP等

五层模型是把最上面三层合并为一层------应用层

TCP三次握手

缩写含义:

SYN:同步序列编号(用于发起一个连接)(标志位)

FIN:用于结束一个连接

ack:32位确认序号

seq:32位序号

ACK:1位(0或1)

1、客户端(client)发送 SYN (标志位)= 1 ,seq = 随机值(t)给服务端(server),然后进入SYN_SENT状态等待服务器确认

2、服务端(server)收到后产生 ack = t+1 以及 ACK = 1
服务端将 SYN 置 1,并产生一个 seq = 随机值(k),然后将这些信息发送给客户端后进入SYN_RCVD状态等待客户端确认

3、客户端(client)发送 ACK = 1,ack = k+1给服务端并建立连接

为什么要三次握手而不是两次?

因为服务端不能知道客户端是否收到了第二步中服务端给客户端的回应

四次挥手

1、客户端发送FIN = 1,和一个随机值 seq = t 给服务端,然后客户端进入FIN_WAIT_1状态

2、服务端收到后,发送 ACK = 1, ack = t + 1给客户端,然后服务端进入FIN_WAIT_2状态

3、服务端再次发送 FIN = 1, 和一个随机值 seq = k 给客户端

4、客户端收到后发送 ACK = 1, ack = k + 1 给服务端,然后客户端进入TIME_WAIT状态,服务端收到后就关闭连接。
此时,客户端等待2MSL后依然没有收到回复,则证明服务端已经正常关闭,然后客户端关闭连接

这里的 MSL(Maximum Segment Lifetime)为报文最大生存时间
2MSL即为 2 倍的报文最大存活时间

为什么需要等待 2MSL?

因为在最后一步中,客户端发送ACK包后无法确认服务端是否收到,所以2MSL的时间可以保证如果对方没收到此包,会重新发送第三步中的FIN包,且这个包有足够的时间发送回来。
如果在这个时间内还没收到重发的FIN包,则可以证明对方已经收到该ACK包

能否将中间的两次合并,将四次变成三次?

不能。
因为在关闭连接时,服务端可能还有报文没有发送完毕,只能先回复一个ACK包,告诉客户端 “你发的FIN包我收到了”。只有等到服务端将报文全部发送完毕,准备好可以断开连接,然后才发送FIN包给客户端。
所以不能合并。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值