| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP的三次握手与四次挥手 -> 正文阅读 |
|
[网络协议]TCP的三次握手与四次挥手 |
TCP报头6位标志位 :
URG
:
紧急指针是否有效,需配合16位紧急指针使用
ACK
:
确认号是否有效
PSH
:
提示接收端应用程序立刻从
TCP
缓冲区把数据读走
RST
:
对方要求重新建立连接
SYN
:
请求建立连接
FIN
:
通知对方
,
本端要关闭了
TCP通讯流程?三次握手第一次握手:client端将报头的SYN标志位设置为1,产生一个序号值X,将X存入32位序号中,将该数据发送给server。 第二次握手:server端将报头的SYN标志位设位1,ACK的标志位设置为1,将X+1存入32位确认序号(表示X和X之前的数据都已经收到了,下次请求序号应该为X+1),如果server端也发送消息,就将其产生的序号值Y,存入32位序号,将该数据发送给client。 第三次握手:将ACK标志位设为1,将Y+1存入32位确认序号,将该数据发送给server。 连接建立 四次挥手第一次挥手:将FIN标志位设为1,将序号值X存入32位序号(client端发送数据到序号X就结束了,且之后也不会在有数据),将该数据发送给server。 第二次挥手:将ACK标志位设为1,将序号值X+1存入32位确认序号,将该数据发送给client。 第三次挥手:将FIN将FIN标志位设为1,将序号值Y存入32位序号(server端发送的最后一个字节的序号为Y),将该数据发送给client。 第四次挥手:将ACK标志位设为1,将序号值Y+1存入32位确认序号,将该数据发送给server。 断开连接 为什么是三次握手 ? 第一次握手表明client端具有发送数据的能力,第二次握手表明server端具有接受数据和发送数据的能力,第三次握手表明client端具有接受数据的能力。 所以三次握手是可以验证client端和server端的接受和发送能力的最小握手次数。 如果只有一次握手,那么client端无法确认server端是否收到了消息,因此client端可能会多次发送报文。同样,如果只有两次握手,那么server端无法确认client端是否收到报文,从而使server端多次发送报文。(造成SYN洪水) 如果进行三次以上的握手就会造成资源的浪费。 为什么是四次挥手? 断开链接的本质:双方达成断开链接的共识
如果不返回ACK信息,那么那么server/client端不知道对方是否收到了要断开链接的消息。只有返回ACk确保双方收到了消息,才能保证链接的安全性。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 20:38:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |