tcp四次挥手

TCP三次握手及四次挥手详细图解

戏子无情 提交于 2019-12-01 19:27:38
相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。 因此在这里详细解释一下这两个过程。 1、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。 (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下: (A)URG:紧急指针(urgent pointer)有效。 (B)ACK:确认序号有效。 (C)PSH:接收方应该尽快将这个报文交给应用层。 (D)RST:重置连接。 (E)SYN:发起一个新连接。 (F)FIN:释放一个连接。 需要注意的是: (A)不要将确认序号Ack与标志位中的ACK搞混了。 (B)确认方Ack=发起方Req+1,两端配对。 2、TCP三次握手

TCP协议-相关面试题

核能气质少年 提交于 2019-12-01 19:27:00
一、TCP协议简介 一般问到TCP协议的时候 最常见的是TCP连接建立和断开的过程,也就是三次握手和四次挥手,两张图足矣。 1.1 三次握手 1.2 四次挥手 二、常见面试题 2.1 TCP连接阶段 2.1.1 发送序号和确认序号问题 例: TCP建立连接的过程采用三次握手,已知第三次握手报文的发送序列号为1000,确认序列号为2000,请问第二次握手报文的发送序列号和确认序列号分别为? 答:看答案时请参考上面TCP连接建立的图。 客户端:发送X 服务端:发送Y, 确认X+1 客户端:发送X+1(1000),确认Y+1(2000) 可以反推第二次为1999,确认1000 2.1.2 SYN Flood 攻击原理及防御 SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。 原理: 问题出在TCP连接的三次握手中,恶意的攻击者大量发送SYN报文,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃--

tcpdump抓取HTTP包

心不动则不痛 提交于 2019-12-01 19:26:51
2012-10-11 10:50:35| 分类: rhel_apache |举报|字号 订阅 tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 0x4745 为"GET"前两个字母"GE" 0x4854 为"HTTP"前两个字母"HT" 说明: 通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手 里面的几个概念: SYN: (同步序列编号,Synchronize Sequence Numbers) ACK: (确认编号,Acknowledgement Number) FIN: (结束标志,FINish) TCP三次握手(创建 OPEN) 客户端发起一个和服务创建TCP链接的请求,这里是SYN(J) 服务端接受到客户端的创建请求后,返回两个信息: SYN(K) + ACK(J+1) 客户端在接受到服务端的ACK信息校验成功后(J与J+1),返回一个信息:ACK(K+1) 服务端这时接受到客户端的ACK信息校验成功后(K与K+1),不再返回信息,后面进入数据通讯阶段 数据通讯 客户端/服务端 read/write数据包 TCP四次握手(关闭 finish) 客户端发起关闭请求,发送一个信息:FIN(M) 服务端接受到信息后,首先返回ACK(M+1)

TCP三次握手四次挥手抓包解析

时光总嘲笑我的痴心妄想 提交于 2019-12-01 19:23:01
TCP 三次握手四次挥手抓包解析 上次面试,被问到 TCP 三次握手,是怎么回事,直至呜呜,只说出了个大概的意思,甚是不好意思; 因没有实际根据抓包分析来解读 TCP 三次握手的过程,鉴于此,周末写了个 TCP 服务器、客户端通信程序(),将服务器下载到开发板,客户端 PC 机上运行,通过 wireshark 抓包工具来抓取 TCP 的通信过程。 下图为 TPC 通信三次握手和四次挥手抓包截图:黄色部分为三次握手后抓取的通信数据包: hellobbbbb 从上图中,可知 wireshark 抓取到的数据 封包列表 (Packet List Pane) 格式: 封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 你可以看到不同的协议用了不同的颜色显示。 (高亮代表详细信息在下方说明) 封包详细信息 (Packet Details Pane) 这个面板是我们最重要的,用来查看协议中的每一个字段。各行信息分别为 Frame: 物理层的数据帧概况 Ethernet II: 数据链路层以太网帧头部信息 Internet Protocol Version 4: 互联网层 IP 包头部信息 Transmission Control Protocol: 传输层 T 的数据段头部信息,此处是 TCP Hypertext Transfer Protocol: 应用层的信息

wireshark抓包分析TCP三次握手和四次挥手的过程

孤街醉人 提交于 2019-12-01 19:21:53
1. TCP的通信过程 TCP连接的建立需要经过三次握手,连接的关闭需要经过四次挥手。读TCP/IP协议不是很好理解,通过工具手动抓包分析会对协议有更深刻的理解。因为工作中经常用到wireshark,所以就通过wireshark来分析,记录自己的学习过程。 TCP的整个通信过程如下图所示: 2. TCP的三次握手过程 下图是wireshark抓取的浏览器与web服务器之间的TCP通信过程,Filter是过滤框,图中是过滤的源IP和目的IP为1.192.194.198与客户端的通信。 (1)SYN 同步序列号,用来发起一个TCP连接,会携带一个随机序号seq=i,报文中的Flags值SYN=1,SYN=1的报文段不能携带数据,但是会消耗掉一个序号。此时客户端进入到SYN-SEND状态。 (2)服务器收到SYN之后,如果同意此次连接的建立会回复一个ACK,确认号ack=i+1,同时会选取一个序列号seq=j,报文中的Flags值SYN=1,ACK=1,此时服务器进入到SYN-RCVD状态。 (3)客户端收到服务器的确认后,还会向服务器发出一个确认报文,确认号ack=j+1,序列号seq=i+1,报文中的Flags值ACK=1,ACK报文可以携带数据,如果没有携带数据不会消耗序号,下一个报文的序号仍然是i+1。此时客户端进入到ESTABLISED状态

TCP三次握手和四次挥手的全过程

假装没事ソ 提交于 2019-12-01 19:20:06
三次握手: 第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。 四次挥手 与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”。 第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。 第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。 第三次挥手:被动关闭方发送一个FIN

面试总结:TCP三次握手、四次挥手

给你一囗甜甜゛ 提交于 2019-12-01 19:17:35
TCP三次握手、四次挥手 参考: 1、百度百科 2、 http://www.jellythink.com/archives/705 1、三次握手 三次握手的过程如下: 客户端A 发送SYN(seq = x)报文给服务器B,然后进入SYN_SENT状态; B收到SYN报文,回应一个SYN(seq = y) ACK (ACK = x + 1)报文,进入SYN_RCVD状态; A收到SYN报文后,回应一个ACK(ACK = y + 1),进入ESTABLISHED状态;B收到ACK报文后,进入ESTABLISHED状态 三次握手后,A和B成功地建立了连接,可以开始传输数据了~ 2、四次挥手 四次挥手的过程如下: 客户端A上的某个进程,主动关闭连接,发送FIN(seq = u)报文给B,然后进入FIN_WAIT_1状态; B收到FIN报文,回应一个ACK (ACK = u + 1)报文,进入CLOSED_WAIT状态;A收到FIN报文,进入FIN_WAIT_2状态; B向A发送FIN(seq = v)报文,进入LAST_ACK状态; A收到FIN报文后,向B发送ACK(ACK = v + 1)报文,进入TIME_WAIT状态 四次挥手后,A和B成功地断开了连接~ 来源: CSDN 作者: 两鬓已不能斑白 链接: https://blog.csdn.net/u010429424

TCP通信的三次握手和四次挥手的详细流程(顿悟)

二次信任 提交于 2019-12-01 19:17:11
http://www.cnblogs.com/cy568searchx/p/3711670.html TCP(Transmission Control Protocol) 传输控制协议 三次握手 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge number(确认号码) 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机; 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。 完成三次握手

TCP协议的三次握手、四次挥手过程

对着背影说爱祢 提交于 2019-12-01 19:16:15
一直在秋招的路上累并快乐着,想的是准备一个面试,回想大三时候用过的tcp,简单说一下,部分转载其他博客。 TCP三次握手的过程,需要客户端和服务端总共发送3个包以确认连接的建立: TCP协议提供可靠的连接服务,使用三次握手建立了一个连接。(SYN:同步请求;SYN+ACK:同步请求应答) A与B建立TCP连接时:首先A向B发SYN(同步请求),然后B回复SYN搜索+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了! (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。 (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态

TCP/IP三次握手建立连接和四次挥手终止连接

左心房为你撑大大i 提交于 2019-12-01 19:15:59
(一)三次握手建立连接 (1)首先服务器端进行初始化,由最初的closed状态顺序调用socket、bind、listen后进入listen状态; (2)客户端进行初始化,由最初的closed状态顺序调用socket、connect主动连接服务器套接字进入SYN_SENT状态(向服务器发送将SYN置为1的同步数据段); (3)服务器接收到SYN后向客户端发送将SYN置为1的同步数据段和ACK置为1的确认数据段,此时服务器进入SYN_RECV状态; (4)客户端收到服务器的SYN同步数据段和ACK确认数据段之后进入ESTABILSHED 三次握手图例如下: 注意点: (1)在客户端第一次向服务器发送ACK时,序号为i,在服务器回复客户端时确认号为i+1,表示服务器向客户端说明下一次想收到的下一次数据段序号为i+1; (2)同理,在客户端接收到服务器消息后向服务器返回时,确认号为j+1,表示客户端告诉服务器下一次想收到的数据段的序号为j+1; (二)三次握手中两端同时发起连接的情况 正常情况下,都是由一方主动发起连接,但是我们也不能避免在某一时刻双方同时发起连接,此时就会发生连接碰撞,最终只有一个建立起连接。原因是所有连接都是由其端点标识的,如果第一个连接请求建立起一个由套接字(x,y)标识的连接,而第二个连接也建立起了这样一个连接,在TCP实体内部只有一个套接字表项