tcp四次挥手为什么要等待2MSL】的更多相关文章

之前所说了解有两个原因: 1.防止客户端最后一次发给服务器的确认在网络中丢失以至于客户端关闭,而服务端并未关闭,导致资源的浪费. 2.等待最大的2msl可以让本次连接的所有的网络包在链路上消失,以防造成不必要的干扰. 但对于第二条造成不必要的干扰之前没有做过多的解读,今天在网上查了下,顺便给大家分享下: 如果client直接closed,然后又向server发起了一个新连接,我们不能保证这个新连接和刚关闭的连接的端口号是不同的.假设新连接和已经关闭的老端口号是一样的,如果前一次滞留的某些数据仍然…
这是一个很有意思的问题~ 首先,我们要知道TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息.而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不能给A发,即不同时,为半双工. 单工为只能A给B发,B不能给A发: 或者是只能B给A发,不能A给B发. 我们假设A和B是通信的双方.我理解的握手实际上就是通信,发一次信息就是进行一次握手. 第一次握手: A给B打电话说,你可以听到我说话吗? 第二次握手: B收到了A的信息,然后对A说: 我可以听得到…
TCP四次挥手. 数据传输结束后,通信的双方都可释放连接.现在A和B都处于ESTABLISHED状态.A的应用程序先向TCP发出连接释放报文段,主动关闭TCP连接.A把连接释放报文段的首部FIN置为1,序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1.这时A进入FIN-WAIT-1状态,等待B的确认. B收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1.然后B就进入CLOSE-WAIT状态.TCP…
在讲述TCP四次挥手,即断开TCP连接的过程之前,需要先介绍一下TCP协议的包结构. TCP协议包结构: 这里只对涉及到四次挥手过程的字段做解释 (1) 序号(Sequence number) 我们通过 TCP 协议将数据发送给对方,就比如 hellotcp,这一串字节流,假设被拆分成了三个 TCP 报文段,第一个报文段携带了 hel,第二个报文段携带了 lot,第三个报文段携带了 cp,这三个报文段不一定是按照顺序送到对端的,那么对端收到这三个段是如何确定他们的顺序的呢?此时序号的意义就体现在…
目录 1.TCP四次挥手详情 2.为什么会有TIME-WAIT状态 3.为什么需要四次握手才能断开连接 4.服务器出现大量CLOSE_WAIT的原因 五.TCP四次挥手 1.TCP四次挥手详情 (1)一开始双方都属于已连接状态 (2)客户端发送一个报文段:FIN=1,seq=u.FIN表示连接关闭请求,seq是之前最后一个发送的数据的标号+1.客户端进入关闭等待状态1(FIN-WAIT-1) (3)服务端接收到关闭连接请求之后,通知程序需要关闭连接,然后返回一个报文段:ACK=1,seq=v,a…
对于TCP四步挥手时的各种状态转换,网上有很多资料.但是有很多描述不是很容易理解,甚至是描述错误,不如这篇文章里http://www.cnblogs.com/Jessy/p/3535612.html#3428191 说: 对此我表示不以为然.而且很容易误导初学者.在这里我贴出一个网上画的比较好的TCP四步挥手时的状态转换图:…
TCP 四次挥手      TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake).客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作.…
参考资料: http://www.jellythink.com/archives/705 示例代码: https://github.com/gordonklg/study,socket module A. TCP 四次挥手 下图描述了 TCP 整个生命周期从建立连接到断开连接的逻辑: 下面的测试代码完美模拟了上图 gordon.study.socket.basic.wireshark.TcpLifecycle.java public class TcpLifecycle { @SuppressW…
摘要:收到个读者的问题,他在面试的时候,被搞懵了,因为面试官问了他这么一个网络问题. 本文分享自华为云社区<TCP 四次挥手收到乱序的 FIN 包会如何处理?>,作者:小林coding . 收到个读者的问题,他在面试的时候,被搞懵了,因为面试官问了他这么一个网络问题: 不过这道网络题可能是提问的读者表述有问题,因为如果 FIN 报文比数据包先抵达客户端,此时 FIN 报文其实是一个乱序的报文,此时客户端的 TCP 连接并不会从 FIN_WAIT_2 状态转换到 TIME_WAIT 状态. 因此…
最长报文寿命 在TCP协议中,当发送方发送释放连接报文收到确认报文后,只是在一个方向上断开了TCP连接,然后,接收方发送释放连接的报文,发送方回复确认.此时,连接还没有释放,发送方要等待2MSL(maximum segment lifetime——最大的生命周期)后关闭连接. 问题 主动发起关闭连接的操作的一方将达到TIME_WAIT状态,而且这个状态要保持Maximum Segment Lifetime的两倍时间.为什么要这样做而不是直接进入CLOSED状态? 原因: 保证TCP协议的全双工连…
1.TCP建立连接,三次握手 建立的TCP连接可靠的连接,必须经过三次握手建立连接才能正式通信彼此传输数数据. 客户端请求服务端建立连接 第一次握手:客户给服务发送一个请求报文SYN, 客户端的状态置SYN_SENT状态 第二次握手:服务端在收到客户端发过来的SYN请求报文后,开始给客户端发送ACK报文和SYN报文,状态置为SYN_RECE 第三次握手:客户端口收到服务端口过来的SYN报文和ACK报文后,状态由原来的SYN_SENT状态变为ESTABLISHED:并且给服务发送一个ACK报文告知…
1.正常情况下,调用close(),产生的其中一个效果就是发送FIN,只有双方都调用close(),才会出现正常的四次挥手. 2.如果是服务器,发起四次挥手是在关闭accept()返回的套接字,而不是socket()返回的套接字 3.Initiator=client,Receiver=server 情况:如果是服务器进入CLOSE_WAIT,而不发送FIN的话(也就是不调用close()),重新创建服务器需要等待一段时间bind才能成功,这个时间就是客户端FIN_WAIT_2的超时时间,超时后客…
TCP的四次挥手(Four-Way Wavehand)1.前言对于"三次握手"我们耳熟能详,因为其相对的简单.但是,我们却不常听见“四次挥手”,就算听过也未必能详细地说明白它的具体过程.下面就为大家详尽,直观,完整地介绍“四次挥手”的过程.2.“四次挥手”的详解所谓的四次挥手即TCP连接的释放(解除).连接的释放必须是一方主动释放,另一方被动释放.以下为客户端主动发起释放连接的图解: 挥手之前主动释放连接的客户端结束ESTABLISHED阶段.随后开始“四次挥手”: (1)首先客户端想…
客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态. 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状 态. 客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态. 等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态. 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入…
福哥答案2020-05-26:…
1.TCP是什么 关于OSI的七层模型 TCP在第四层——Transport层,第四层的数据叫Segment->报文 IP在第三层——Network层,在第三层上的数据叫Packet->数据包 ARP在第二层——Data Link层:在第二层上的数据,我们把它叫Frame->帧 数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端,就是每个数据都会经过数据的封装和解封装的过程. wireshark抓到的包与对应的协议层如下图所示 Frame 36441: 物理…
TCP是TCP/IP的传输层控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 首先需要了解几个名词:tcp标志位,有6种分别为:SYN(synchronous建立联机) .ACK(acknowledgement 确认) .PSH(push传送) .FIN(finish结束). RST(reset重置) .URG(urgent紧急);URG 紧急指针,告诉接收TCP模块紧要指针域指着紧要数据.ACK 置1时表示确认号(为合法,为0的时候表示数据段不包含确认信息,确认号被忽略. PSH…
转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-).有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题. 因此在这里详细解释一下这两个过程. TCP三次握手 所谓三次握手…
TCP三次握手   所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包.   三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时.将触发三次握手.         第一次握手:客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段…
重要性:必考 一.TCP与UDP的优缺点 ①TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端的可靠传输.对可靠性要求较高的应用层协议,如FTP.Telnet.SMTP.HTTP.POP3 ②UDP---用户数据报协议,是一个简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去…
相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. TCP三次握手   所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包.   三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时.将触发三次握手. 第一次握…
TCP断开连接的过程:TCP四次挥手. 数据传输结束后,通信的双方都可释放连接.现在A和B都处于ESTABLISHED状态.A的应用进程先向TCP发出连接释放报文段,主动关闭TCP连接.A把连接释放报文段的首部的终止控制位FIN置为1,序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1.这时A进入FIN-WAIT-1(终止等待1)状态,等待B的确认. B收到连接释放报文段后即发出确认(发出的不是连接释放报文段),确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已传送过…
TCP协议是TCP/IP体系中核心一个协议,该协议比起IP协议,ICMP协议,UDP协议都更复杂,因此这篇文章主要分析TCP协议在建立连接和断开连接的时候,状态转移以及报文段的内容. 下面,先放一张TCP的状态转移图: TCP协议之三次握手 三次握手的过程是TCP在客户端和服务端建立连接的过程.简单的来说三次握手过程,就是客户端先发送一个连接请求给服务端,这是第一次握手.服务端接收到客户端发来的链接请求,然后在将确认的消息发给客户端,这是第二次握手.客户端对服务端发来的确认消息进行确认,然后将确…
TCP数据包格式 顺序号(32位):用来标识从TCP源端向TCP目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号.如果将字节流看作在两个应用程序间的单向流动,则TCP用顺序号对每个字节进行计数.序号是32bit的无符号数,序号到达2^32-1后又从0开始.当建立一个新的连接时,SYN标志为1(该报文段不携带数据,但是要消耗一个序号),顺序号字段包含由这个主机选择的该连接的初始顺序号ISN(Initial Sequence Number). 确号(32位):包含发送确认的一端所…
TCP/IP协议三次握手与四次握手流程解析 一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1. (3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含…
TCP三次握手和四次挥手 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 一.TCP报文格式 如下图: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.(3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含义如下:               (A)URG:紧急指针(urgent…
如果对网络工程基础不牢,建议通读<细说OSI七层协议模型及OSI参考模型中的数据封装过程?> 下面就是TCP/IP(Transmission Control Protoco/Internet Protocol )协议头部的格式,是理解其它内容的基础,就关键字段做一些说明 Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号:用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能…
TCP的概述 TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为端口号拼接到 IP 地址即构成了套接字,例如,若 IP 地址为 192.3.4.16  而端口号为 80,那么得到的套接字为 192.3.4.16:80 . 但凡是基于 TCP 协议通信的,在通信之前,客户端与服务端之间都会在逻辑层面上建立一个双向通路.注意这里是逻辑层面上,在物理层面上仅仅只是一条通信的介质. 假设在 A.B 之间修路,我现在在 A 点,我要告诉 B…
1. TCP/IP模型 我们一般知道OSI的网络参考模型是分为7层:“应表会传网数物”——应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.而实际的Linux网络层协议是参照了OSI标准,但是它实现为4层:应用层,传输层,网络层,网络接口层.OSI的多层对应到了实际实现中的一层.我们最为关注的是传输层和网络层.一般而言网络层也就是IP层,负责IP路由寻址等等细节,而传输层TCP/UDP负责数据的可靠/快速的传输功能. t 网络的实际运行过程就是发送方,从高层向底层,根据协议对数据进行一…
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: SYN:同步序列编号(Synchronize Sequence Numbers)第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态: 第三次握手:客户端收到服务器的SYN+AC…