TCP在三次握手协议和四波(图)
设定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在三次握手协议和四波(图)的更多相关文章
- 如何理解TCP的三次握手协议?
• TCP是一个面向链接的协议,任何一个面向连接的协议,我们都可以将其类比为我们最熟悉的打电话模型. 如何类比呢?我们可以从建立和销毁两个阶段分别来看这件事情. 建立连接阶段 首先,我们来看看TCP中 ...
- TCP的三次握手过程与四次挥手
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...
- 最简单的理解 建立TCP连接 三次握手协议
最简单的理解一:建立TCP连接:三次握手协议 客户端:我要对你讲话,你能听到吗:服务端:我能听到:而且我也要对你讲话,你能听到吗:客户端:我也能听到.…….互相开始通话…….. 二:关闭TCP ...
- TCP/IP三次握手协议
一.简介 三次握手协议指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互,OSI参考模型中的网络层,在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一 ...
- TCP连接三次握手协议,释放连接四次挥手,以及使用 awl伪造mac地址进行多线程syn洪泛攻击。
这个TCP连接就是一次追女生-谈恋爱-分手,追求比分手简单,但是分手比追求复杂.哥,谈了半年的女朋友,在就快要成功了的时候分了,原因是因为有人在后面该老子背后搞SYN洪泛攻击,最后女朋友丢失了.学会T ...
- TCP\IP三次握手连接,四次握手断开分析
TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...
- tcp ip三次握手链接和四次挥手断开
先来个整体的流程图 一 三次握手目的是为了建立连接... 1 核心的就是client端和service端,进行数据"报文" 交换 2 报文,目的是互相通知,确认链接 ...
- TCP中三次握手建立和四次握手释放以及相关问题
本文基于个人所学和网上博文所整理,若有不妥处,欢迎留言指出 TCP连接过程中标志位的意义: 字符缩写 描述 SYN 同步序号,表示此报文是一个连接请求或连接接受报文 ACK 确认位,对接收到的报文的确 ...
- socket中TCP的三次握手连接和四次握手释放
三次握手连接 A: 我进来了啊 B:(有人来了安排个位子)回复:好的你进来吧 A:好的: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户 ...
随机推荐
- 【JAVA高级】——myEclipse连接mysql启动数据库服务
背景: DRP项目要求使用Oracle数据库,但眼下因为种种原因,临时还装不了Oracle.但也不能闲着啊,就拿mysql来试试.安装完mysql以后,使用myEclipse连接数据库,就一直报错,报 ...
- DateTime.Compare(t1,t2)比較两个日期大小
DateTime.Compare(t1,t2)比較两个日期大小,排前面的小,排在后面的大,比方:2011-2-1就小于2012-3-2返回值小于零: t1 小于 t2. 返回值等于零 : t1 等于 ...
- NYOJ129 决策树 【并检查集合】
树的判定 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 A tree is a well-known data structure that is either e ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (六)
第五部分请看这里 终于到了最后一个部分了! 这里使用SimpleJudge类来实现Judge接口. 首先是SimpleJudge需要的实例变量: 0.final LinkedList<Pilla ...
- sql中 in 、not in 、exists、not exists 使用方法和区别
% 的一类. NOT IN:通过 NOT IN keyword引入的子查询也返回一列零值或很多其它值. 以下查询查找没有出版过商业书籍的出版商的名称. SELECT pub_name FROM pub ...
- mysql回想一下基础知识
创建数据库 creat table test( #整数通常用于int test_id int, #十进制通常使用decimal test_price decimal, #普通文本通常使用.并使用Def ...
- Java 的swing.GroupLayout布局管理器的使用方法和实例(转)
The following builds a panel consisting of two labels in one column, followed by two textfields in t ...
- 我收集的sonar参考资料
sonarQube代码质量管理工具环境筹建笔记 http://www.myexception.cn/open-source/1307345.html 配置sonar.jenkins进行持续审查 htt ...
- 相关Jquery Validator采用
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs& ...
- Metatable和Metamethod(转)
Metatable和Metamethod是用来干啥的?它们可以使得表a和b的表达式“a + b”变得有意义,其中metatable使两个不相关的表a和b之间可以进行操作,而操作的具体行为比如说&quo ...