握手协议

TCP三次握手和四次挥手

一世执手 提交于 2019-12-02 23:45:09
三次握手和四次挥手 转载链接: https://blog.csdn.net/hyg0811/article/details/102366854 带着如下问题进行阅读,收获会更大。 请画出三次握手和四次挥手的示意图 1 为什么连接的时候是三次握手? 2 什么是半连接队列? 3 ISN(Initial Sequence Number)是固定的吗? 4 三次握手过程中可以携带数据吗? 5 如果第三次握手丢失了,客户端服务端会如何处理? 6 SYN攻击是什么? 7 挥手为什么需要四次? 8 四次挥手释放连接时,等待2MSL的意义 1. 三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。 刚开始客户端处于 Closed 的状态,服务端处于 Listen 状态。 进行三次握手: 第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SENT 状态。 首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。

服务端与客户端握手规则,心跳逻辑

喜夏-厌秋 提交于 2019-12-01 19:39:53
服务端与客户端通讯,有一个很重要的部分就是握手。 握手的好处就是可以实现服务端与客户端的数据同步,收据收发可控,代码逻辑条理清晰严谨。 握手涉及到的内容包括 1。定时器两个,一个是做数据请求的,即所需数据服务端没有回复,间隔一定时间再去请求,如此反复。还有一个定时器是做超时处理的,即数据一直没请求到,则则相应处理。如弹出错误提示那条数据为请求到,或跳过此条数据,请求下一条数据。所有数据请求完成后,才是UI界面的显示更新。 2。状态转移,一次握手的过程,往往是在程序最开始的时候开始,我们需要记住每条数据的通讯状态,这里下次详细介绍,并提供示例。 3。还有就是心跳,我们需要明确的知道服务端与客户端是一直在通讯着的,一般的实现方式就是,开一个定时器,每隔2秒或多长时间,向服务端发送一条数据,服务端根据商定的协议回复了数据,即表明服务端与客户端是相通的,否则需要做相应处理,如断开服务器,重新握手,或弹出提示,等等 来源: CSDN 作者: lx627776548 链接: https://blog.csdn.net/lx627776548/article/details/51944033

简述TCP的三次握手四次挥手过程及各种过程解析

天大地大妈咪最大 提交于 2019-12-01 19:38:39
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+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手. 完成三次握手,客户端与服务器开始传送数据 A与B建立TCP连接时:首先A向B发SYN(同步请求),然后B回复SYN +ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了! 一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效

详解TCP的3次握手和4次挥手

霸气de小男生 提交于 2019-12-01 19:36:55
为什么有3次握手 每当建立一个TCP/IP连接的时候都要经历3次握手,这是为了保证建立一个可靠的连接。 什么是3次握手 上图中的三次挥手说的是,客户端向服务器发请求,服务器接收请求,服务器接收请求之后发送一个连接标志,客户端接收连接标志之后也向服务器发送一个连接标志,至此连接完成。用打电话类比的话就是: 小明拨打小红的电话 小红按下通话键并说了声,喂 (一次握手) 小明听到小红的回应,也说了声,喂 (二次握手) 小红接收到小明的回应 (三次握手) 4次挥手 为什么有4次挥手呢,4次挥手的作用就是断开连接,之所以要断开连接是因为TCP/IP协议是要占用端口的,而计算机的端口是有限的,所以一次传输完成之后是要断开连接的,断开连接的方式就是4次挥手。 连接是由客户端发起的,所以断开连接也要有客户端发起,因为服务器是被动的。上图的最后一部分就是4次挥手,还是用小明和小红打电话来类比, 小明:我这没事儿了,你还有事儿吗? (1次挥手) 小红:我也没事儿了,你确定没事儿了吗? (2次挥手) 小红:我要挂电话了。 (3次挥手) 小明:好吧,你挂吧。 (4次挥手) 来源: CSDN 作者: kingov 链接: https://blog.csdn.net/kingov/article/details/77155671

TCP三次握手与四次挥手

北战南征 提交于 2019-12-01 19:28:07
TCP三次握手与四次挥手 1、TCP通信 TCP是面向连接的协议。运输连接是用来传送TCP报文的,而运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。可以类比传统的电话网,拨通号码,开始通话,挂断电话。 用户进程和服务器进程 需要完成一次通信都需要完成三个阶段: 1 连接建立 2 数据传送 3 连接释放 TCP协议中,主动发起请求的一端称为客户端,被动连接的一端称为服务端。由于全双工,不管是客户端还是服务端,TCP连接建立完后都能发送和接收数据。 2、序列号、确认号及标志位等 1 序列号seq: 占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生,给字节编上序号后,就给每一个报文段指派一个序号,序列号seq就是这个报文段中的第一个字节的数据编号。 2 确认号ack: 占4个字节,期待收到对方下一个报文段的第一个数据字节的序号,序列号表示报文段携带数据的第一个字节的编号,而确认号指的是期望接受到下一个字节的编号,因此挡墙报文段最后一个字节的编号+1即是确认号。 3 确认ACK: 占1个比特位,仅当ACK=1,确认号字段才有效。ACK=0,确认号无效。 4 同步SYN: 连接建立时用于同步序号。当SYN=1,ACK=0表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使用SYN=1,ACK=1.因此,SYN

用tcpdump来看3次握手4次挥手tcp连接过程以及解析

孤者浪人 提交于 2019-12-01 19:25:17
ser 端代码 cli端代码 命令 tcpdump -i lo -nnA 'port=6000' 这个的意思是监听6000号端口 记得加上lo 不能是ech0网卡 这个是回环地址 由于是本机回环 使用IP都是一样的 端口号不同 用 netstat -pan|grep cli 也可以 19:36:06.190761 IP 192.168.243.128.37147 > 192.168.243.128.6000: Flags [S], seq 946003763, win 65495, options [mss 65495,sackOK,TS val 28598343 ecr 0,nop,wscale 6], length 0 ////////////////////////截出来第一次握手 19:36:06.190820 IP 192.168.243.128.6000 > 192.168.243.128.37147: Flags [S.], seq 3620774452, ack 946003764, win 65483, options [mss 65495,sackOK,TS val 28598344 ecr 28598343,nop,wscale 6], length 0 //////////////////////第二次握手 19:36:06.190862 IP 192

抓包分析TCP的三次握手和四次握手

空扰寡人 提交于 2019-12-01 19:22:44
问题描述: 在上一篇 《如何对Android设备进行抓包》 中提到了,服务器的开发人员需要我bug重现然后提供抓包给他们分析,所以抓好包自己也试着分析了一下。发现里面全是一些TCP协议和HTTP协议。所以要想进行抓包分析,必须先了解TCP的原理。这里介绍了TCP的建立连接的三次握手和断开连接的四次握手。 问题分析: 1、TCP建立连接的三次握手 1、1前言:介绍三次握手之前,先介绍TCP层的几个FLAGS字段,这个字段有如下的几种标示 SYN表示建立连接, FIN表示关闭连接, ACK表示响应, PSH表示有 DATA数据传输, RST表示连接重置。 1、2 三次握手的步骤 第一次握手:主机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则连接建立成功。 完成三次握手,主机A与主机B开始传送数据。

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:14:55
1. 为什么要用三次握手 在《计算机网络》一书中其中有提到,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。如果采用“三次握手”的话就不会出现这种情况,B端收到一个过时失效的报文段之后,向A端发出确认,此时A并没有要求建立连接,所以就不会向B端发送确认,这个时候B端也能够知道连接没有建立。 2. TCP协议三次握手过程分析 TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH

TCP握手协议过程及相关细节参数

╄→гoц情女王★ 提交于 2019-12-01 19:14:45
时间记录:2019-6-2 问题描述:笔者在进行压力测试的时候遇到了奇怪的问题,压力机的环境是win7的环境,在进行压力测试的时候发现了系统的端口一直被占用,无法释放开来,进行了接口的查找发现了大量的端口处于time_wait的状态,处于未被释放的状态,在这里进行总结下,以后续出现相关问题的查找。 从如下的几个问题下进行总结: 握手协议的状态,握手协议的链接过程,相关系统参数的调整以适应要求。 1:握手协议 握手协议包括三次握手和四次握手,三次握手协议是进行连接,四次握手是进行终止的,这里描述的是TCP的连接和断开的握手。 三次握手协议(连接) 指的是在发送数据的准备阶段,服务器端和客户端之间需要进行三次交互 第一次握手:客户端发送 syn 包( syn=j )到服务器,并进入 SYN_SEND 状态,等待服务器确认; 第二次握手:服务器收到 syn 包,必须确认客户的syn( ack=j+1 ),同时自己也发送一个 SYN 包( syn=k ),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态; 第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1) ,此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。 注意: