设定TCP需要建立一个三次握手的能力,断开需要握手。整步骤,如看到下面的附图:

先来看看怎样建立连接的。

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。

Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

那怎样断开连接呢?简单的步骤例如以下:

【注意】中断连接端能够是Client端,也能够是Server端。

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后。意思是说"我Client端没有数据要发给你了"。可是假设你还有数据没有发送完毕,则不必急着关闭Socket,能够继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了。可是我还没准备好。请继续你等我的消息"。

这个时候Client端就进入FIN_WAIT状态。继续等待Server端的FIN报文。当Server端确定数据已发送完毕,则向Client端发送FIN报文。"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。

Client端收到FIN报文后。"就知道能够关闭连接了,可是他还是不相信网络。怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态。假设Server端没有收到ACK则能够重传。“,Server端收到ACK后,"就知道能够断开连接了"。Client端等待了2MSL后依旧没有收到回复,则证明Server端已正常关闭,那好,我Client端也能够关闭连接了。Ok,TCP连接就这样关闭了!

整个过程Client端所经历的状态例如以下:

而Server端所经历的步骤例如以下:转载请注明:blog.csdn.net/whuslei

【注意】 在TIME_WAIT状态中,假设TCP client端最后一次发送的ACK丢失了,它将又一次发送。

TIME_WAIT状态中所须要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。

等待之后连接正式关闭,而且全部的资源(包含port号)都被释放。

【问题1】为什么连接的时候是三次握手。关闭的时候却是四次握手?

答:由于当Server端收到Client端的SYN连接请求报文后,能够直接发送SYN+ACK报文。

当中ACK报文是用来应答的,SYN报文是用来同步的。可是关闭连接时,当Server端收到FIN报文时,非常可能并不会马上关闭SOCKET。所以仅仅能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。仅仅有等到我Server端全部的报文都发送完了,我才干发送FIN报文,因此不能一起发送。故须要四步握手。

【问题2】为什么TIME_WAIT状态须要经过2MSL(段最大生存时间)能力,返回到CLOSE状态?

答案:虽然按道理。四包被发送到完成,我们可以直接去CLOSE现状,但是,我们有网络的错觉是靠不住的,有可能持续ACK输。

所以TIME_WAIT状态用于重传可能会丢失ACK包。

TCP在三次握手协议和四波(图)的更多相关文章

  1. 如何理解TCP的三次握手协议?

    • TCP是一个面向链接的协议,任何一个面向连接的协议,我们都可以将其类比为我们最熟悉的打电话模型. 如何类比呢?我们可以从建立和销毁两个阶段分别来看这件事情. 建立连接阶段 首先,我们来看看TCP中 ...

  2. TCP的三次握手过程与四次挥手

    TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...

  3. 最简单的理解 建立TCP连接 三次握手协议

     最简单的理解一:建立TCP连接:三次握手协议    客户端:我要对你讲话,你能听到吗:服务端:我能听到:而且我也要对你讲话,你能听到吗:客户端:我也能听到.…….互相开始通话…….. 二:关闭TCP ...

  4. TCP/IP三次握手协议

    一.简介         三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互,OSI参考模型中的网络层,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一 ...

  5. TCP连接三次握手协议,释放连接四次挥手,以及使用 awl伪造mac地址进行多线程syn洪泛攻击。

    这个TCP连接就是一次追女生-谈恋爱-分手,追求比分手简单,但是分手比追求复杂.哥,谈了半年的女朋友,在就快要成功了的时候分了,原因是因为有人在后面该老子背后搞SYN洪泛攻击,最后女朋友丢失了.学会T ...

  6. TCP\IP三次握手连接,四次握手断开分析

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  7. tcp ip三次握手链接和四次挥手断开

      先来个整体的流程图       一 三次握手目的是为了建立连接... 1 核心的就是client端和service端,进行数据"报文" 交换 2 报文,目的是互相通知,确认链接 ...

  8. TCP中三次握手建立和四次握手释放以及相关问题

    本文基于个人所学和网上博文所整理,若有不妥处,欢迎留言指出 TCP连接过程中标志位的意义: 字符缩写 描述 SYN 同步序号,表示此报文是一个连接请求或连接接受报文 ACK 确认位,对接收到的报文的确 ...

  9. socket中TCP的三次握手连接和四次握手释放

    三次握手连接 A: 我进来了啊 B:(有人来了安排个位子)回复:好的你进来吧 A:好的: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户 ...

随机推荐

  1. 【剑指offer】打印单列表从尾部到头部

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/25028525 剑指offer上的第五题,在九度OJ上測试通过. 时间限制:1 秒 内存限制 ...

  2. JS window.open()财产

    一. Window 对象 Window 对象是 JavaScript 顶级对象层次. Window 对象表示一个浏览器窗口或帧. Window 在对象 <body> 或 <frame ...

  3. Python验证码识别处理实例(转)

    一.准备工作与代码实例 1.PIL.pytesser.tesseract (1)安装PIL:下载地址:http://www.pythonware.com/products/pil/(CSDN下载) 下 ...

  4. Android SDK 和 Eclipse ADT 离线安装 教程

    因为google 被限制,就是FQ后,下载的速度依旧非常慢,让人非常崩溃啊,所以这里就分享一下离线安装android SDK 和eclipse ADT 离线安装方法. 安装之前首先已经确保java s ...

  5. define a class for a linked list and write a method to delete the nth node.

    1.问题 define a class for a linked list and write a method to delete the nth node. 2.算法 template <t ...

  6. Java 大数类

    划分结果存在数组.供应商下标0 在剩下的标记1 import java.math.BigInteger; import java.util.Scanner; public class Main { p ...

  7. UVA How Big Is It?

    题目例如以下: How Big Is It?  Ian's going to California, and he has to pack his things, including hiscolle ...

  8. java nio 网络框架实现(转)

    maven项目https://github.com/solq360/common 链式编/解码 链路层链式处理 管道管理socket 多协议处理非常方便 仿netty NioEventLoop 单线程 ...

  9. 1号店Interview小结

    三大范式: 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范 ...

  10. Code Forces 448C Painting Fence 贪婪的递归

    略有上升称号,最近有很多问题,弥补啊,各类竞赛滥用,来不及做出了所有的冠军.这个话题 这是一个长期记忆的主题.这是不是太困难,基本技能更灵活的测试,每次我们来看看这个问题可以被删除,处理然后分段层,贪 ...