TCP 为什么是 三次 握手 不是两次 不是四次
为什么不是两次
(1) 防止 历史 旧数据 连接
客户端连续发送多次 SYN 建⽴连接的报⽂,在⽹络拥堵等情况下:
● ⼀个「旧 SYN 报⽂」⽐「最新的 SYN 」 报⽂早到达了服务端;
● 那么此时服务端就会回⼀个 SYN + ACK 报⽂给客户端;
● 客户端收到后可以根据⾃身的上下⽂,判断这是⼀个历史连接(序列号过期或超时),那么客户端
就会发送 RST 报⽂给服务端,表示中⽌这⼀次连接。
如果是两次握⼿连接,就不能判断当前连接是否是历史连接,三次握⼿则可以在客户端(发送⽅)准备
发送第三次报⽂时,客户端因有⾜够的上下⽂来判断当前连接是否是历史连接:
● 如果是历史连接(序列号过期或超时),则第三次握⼿发送的报⽂是 RST 报⽂,以此中⽌历史连
接;
● 如果不是历史连接,则第三次发送的报⽂是 ACK 报⽂,通信双⽅就会成功建⽴连接;
所以, TCP 使⽤三次握⼿建⽴连接的最主要原因是防⽌历史连接初始化了连接。
(2) 三次握手才能让双方均确认 自己的发送能力 和接受能力 均正常 才能 同步双⽅初始序列号
可⻅,序列号在 TCP 连接中占据着⾮常重要的作⽤,所以当客户端发送携带「初始序列号」的 SYN
报⽂的时候,需要服务端回⼀个 ACK 应答报⽂,表示客户端的 SYN 报⽂已被服务端成功接收,那当
服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样⼀来⼀回,才能确
保双⽅的初始序列号能被可靠的同步。
序列号是可靠传输的⼀个关键因素,它的作⽤:
● 接收⽅可以去除重复的数据;
● 接收⽅可以根据数据包的序列号按序接收;
● 可以标识发送出去的数据包中, 哪些是已经被对⽅收到的;
(3) 避免了资源的浪费
如果只有「两次握⼿」,当客户端的 SYN
请求连接在⽹络中阻塞,客户端没有接收到 ACK 报⽂,就 会重新发送 SYN ,由于没有第三次握⼿,服务器不清楚客户端是否收到了⾃⼰发送的建⽴连接的 ACK 确认信号,所以每收到⼀个 SYN 就只能先主动建⽴⼀个连接,这会造成什么情况呢? 如果客户端的 SYN 阻塞了,重复发送多次 SYN 报⽂,那么服务器在收到请求后就会建⽴多个冗余的 ⽆效链接,造成不必要的资源浪费
为什么不是四次
因为三次握手 就能 保证 双方的 发送 和 接收 能力 正常 。 以及 双方的 初始序列号 可以被同步了
TCP 为什么是 三次 握手 不是两次 不是四次的更多相关文章
- TCP 为什么需要三次握手而不是两次
我的理解: A 发送给B SYN, 然后B回复A ACK, 假设这两次握手已经完成, 但是B不知道A是否收到ACK就开始 recv , 这样就是空等 算是死循环吧??
- TCP/IP协议三次握手与四次握手流程解析
原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...
- TCP协议的三次握手和四次挥手
暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...
- TCP/IP协议 三次握手与四次挥手
一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号 ...
- (转载)TCP/IP的三次握手与四次挥手
TCP三次握手 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包. 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步 ...
- 理解TCP为什么需要进行三次握手(白话)
原文地址:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html 首先简单介绍一下TCP三次握手 在TCP/IP协议中,TCP协议提 ...
- TCP/IP协议 三次握手与四次挥手【转】
一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号 ...
- TCP/IP的三次握手和四次分手以及超时机制
使用INADDR_ANY的时候,往往针对多网卡情况,采用tcp连接方式,需要选择使用哪一个网卡发送,自己猜想应该是使用三次握手机制,如何判断目标地址不可达,应该使用的是超时机制,即握手超时则不可到达. ...
- TCP/IP协议三次握手与四次握手流程解析(转载及总结)
原文地址:http://www.2cto.com/net/201310/251896.html,转载请注明出处: TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详 ...
- TCP连接建立的三次握手过程可以携带数据吗?
前几天实验室的群里扔出了这样一个问题:TCP连接建立的三次握手过程可以携带数据吗?突然发现自己还真不清楚这个问题,平日里用tcpdump或者Wireshark抓包时,从来没留意过第三次握手的ACK包有 ...
随机推荐
- VS code 安装后gdb调试无法显示STL内容的问题
bar {...} std::_Vector_base<TSample<MyTraits>, std::allocator<TSample<MyTraits> &g ...
- EXCEL函数总结
------------------截取"号"之前的字符 =MID(A45,1,FIND("号",A45,1)-1)
- win11装wsl ubuntu操作记录
应用商店安装Windows Subsystem for Linux Preview ubuntu 查看已经安装的WSL版本,以及分发版对应的VERSION wsl -l -v 看到Ubuntu版本是1 ...
- Div的几种选择器
Div 是一个html标签,一个块级元素(单独显示一行),单独使用没有意义,需要结合CSS来使用,主要用于页面的布局. div选择器: 1.元素选择器: 1 <style> 2 div{ ...
- VUE前端请求跨域问题解决
解决方法: vue.config.js文件配置: module.exports = { devServer: { open: true, host: '192.168.1.193', port: 80 ...
- Navie UI
开发文档 一个 Vue 3 组件库, 它比较完整,主题可调,用 TypeScript 写的,快.
- 摩托罗拉IP PBX9000配置指南
400通话时,按数字键进行选择无效 打开IPB通信板界面,SIP终端参数--应用设置--点击RFC2833数值,默认禁用变更为101,(如有多个勾选批量,填写批量数值)--提交--保存修改 未完待续
- oracle pl/sql异常处理
DECLARE colse_result varchar2(100); BEGIN utl_http.set_wallet ('密钥地址', '密码'); select utl_http.reques ...
- gitea 常用命令
gitea 常用命令 配置文件位置 /home/custom/conf/app.ini cd //home启动nohup ./gitea web & [root@iZ4jbz0xj0nx7 ...
- Android studio学习笔记2
Android studio学习笔记2 20201303张奕博 2023.1.14 android studio动态调试apk 1.配置环境 android studio需要安装插件:1,Smalid ...