TCP三次握手及关闭时的2MSL分析
TCP/IP三次握手四次挥手,是非常重要的,这个链接与关闭过程也是很简单的,但为什么是三次握手?以及为什么要等待2MSL的状态?大部分人也许听到这个问题就蒙了,这篇博客就综合《TCP/IP详解:卷一》来分析一下原因:
下面看TCP三次握手四次挥手的原理图:
1.为什么要三次握手?
为了避免已失效的连接报文段又到达可服务器。考虑这样一个正常的情况:
假设TCP连接是两次握手。当客户端发送了一个请求连接的报文时,由于网络原因这个报文丢失了,那么客户端一段时间内没有收到服务器的确认就会再次发送请求连接报文,这次服务器收到了,双方都建立了连接,然后数据传输,最后关闭连接。
但是考虑一下,上文中的丢失数据包若没有丢失,只是在一个网络节点长时间滞留了,这时双方都已经关闭了连接,此时服务器又收到了丢掉了的数据包,认为客户端又要建立连接,因为是两次握手所以服务器向客户端发送了确认报文,并变 为 建立连接状态。
可想而知客户端并没有发起连接所以会忽略服务器的确认,这样就浪费了服务器的资源。
2.为什么要等待2MSL时间?
1. 当客户端的最后一次确认连接的报文丢失(第四次挥手发送的),服务器会再次发送FIN报文,等待客户端的确认,客户端在2MSL内收到服务器重传的报文再次确认(防止此时客户端已经关闭)。
2. 2MSL 的时间可以使所有已失效的报文都消失(防止对新建的连接造成影响),若在不等待2MSL,马上建立新的连接,那么在关闭连接前发送的失效报文段很可能影响本次连接。
然而,TCP规定处于2MSL状态的的插口对(客户端IP/端口和服务器IP和端口)不能再次被使用。 若在2MSL状态下新建连接可以使用这个插口对,当已失效的数据包再次到达这个新连接,判断插口一致就会接受这个报文,但实际上这不是新建连接交互的数据,因此不能使用此无效数据包。
TCP三次握手及关闭时的2MSL分析相关推荐
- TCP三次握手(建立连接)/四次挥手(关闭连接)
相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试, ...
- TCP三次握手建立连接和四次挥手关闭连接
TCP三次握手 是指建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据. 第一次握手:客户端发送第一个包,其中S ...
- 内网PC通过NAT server公网地址访问内部服务器时TCP三次握手不成功
公网地址访问内部服务器时TCP三次握手不成功 一. 背景 在上图所示的网络中,PC 及Server属不同LAN,都是zone trust.为了让Internet用户能够访问到Server,FW上 ...
- TCP三次握手和四次挥手的解释
基础知识 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN ...
- mysql三次握手_一文彻底搞懂 TCP三次握手、四次挥手过程及原理
原创文章首发于公众号:「码农富哥」,欢迎收藏和关注,如转载请注明出处! TCP 协议简述 TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接. 无论 ...
- 三次握手和四次挥手图解_图解 TCP 三次握手和四次挥手
人到中年,难免长胖发福. 大家好,我是你们有点严肃的胖福(hu), 这里我们聊学习和工作. - 内容提要 - TCP 有 6 种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) ...
- 淘宝二面,面试官居然把TCP三次握手问的这么详细
TCP 的三次握手和四次挥手,可以说是老生常谈的经典问题了,通常也作为各大公司常见的面试考题,具有一定的水平区分度.看似是简单的面试问题,如果你的回答不符合面试官期待的水准,有可能就直接凉凉了. 本文 ...
- TCP 三次握手、四手挥手,这样说你能明白吧!
TCP协议全称为:Transmission Control Protocol,是一种面向链接.保证数据传输安全.可靠的数据传输协议.为了确保数据的可靠传输,不仅需要对发出的每个字节进行编号确认,还需要 ...
- 硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题
来自:小林coding 每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 T ...
最新文章
- ACM 竞赛高校联盟 练习赛 第二场 BC
- STM32-内存管理
- 推特千赞Demo袭来!简笔画变照片的GauGAN,编故事的GPT-2,浏览器皆可玩
- Leetcode 141. Linked List CycleJAVA语言
- python文件读取方法read(size)的含义是_在Python中可使用read([size])来读取文件中的数据,如果参数size省略,则读取文件中的()。(4.0分)_学小易找答案...
- springmvc与mybatis整合之实现商品列表
- 关于面向对象以及三大特征的解释
- 数据结构----排序
- 【caffe】 Check failed: error == cudaSuccess (30 vs. 0) unknown error
- ABP源码分析二十八:ABP.MemoryDB
- Linux 进程服务查看(服务启动时间或运行时间查看)
- 对华为HG255D路由器进行JTAG调试的进一步研究
- Bootstrap-table固定表头并美化表头
- pyltp进行词性标注
- 基于easyX实现俄罗斯方块
- DSP TMS320C6455 中断解析
- linux adb 驱动 home,Ubuntu下adb驱动问题
- java8 Stream详解
- 关于小学生学习编程语言C++的经历经验分享,五问五答
- CUDA编译(一)---使用nvcc编译cuda
热门文章
- dede 验证码不显示 vdimgck.php,Dede后台验证码不显示解决方法详解(dedecms 5.7)
- python readlines慢_为什么readline()比Python中的readlines()慢得多?
- python入门经典书籍知乎_知乎问题回答 - 《Python100天从新手到大师》 - 开源书籍(oscbook.com)...
- java display属性_JavaScript中的style.display属性操作
- 华为模拟器-三次交换机、链路捆绑、单臂路由综合实验
- 卡巴斯基安全浏览器_360安全DNS正式推出DoH安全解析服务,打造安全上网“金钟罩”...
- C语言 十六进制整数字符串转十进制整数
- java形状_形状等于()
- php包括web前端,web前端包括什么技术?
- python磁盘io_python监控磁盘io