IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> OSI模型及TCP协议三次握手四次挥手 -> 正文阅读

[网络协议]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包给客户端。
所以不能合并。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 16:36:12  更:2021-07-15 16:37:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:44:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码