精华内容
下载资源
问答
  • TCP连接过程

    2019-08-26 09:12:51
    一个正常的TCP连接,都会有三个阶段: 1、TCP三次握手 ; 2、数据传送; 3、 TCP四次挥手 == 和TCP建立连接相关的首部报文信息:SYN、ACK == ==和连接释放相关的报文信息:FIN、ACK == ...

    一个正常的TCP连接,都会有三个阶段:

    1、TCP三次握手 ;
     2、数据传送; 
     3、 TCP四次挥手
    

    == 和TCP建立连接相关的首部报文信息:SYN、ACK ==
    在这里插入图片描述
    ==和连接释放相关的报文信息:FIN、ACK ==
    在这里插入图片描述

    展开全文
  • tcp连接过程

    2019-07-14 10:47:48
  • TCP 连接过程状态简介

    2014-08-04 13:02:03
    Linux中TCP连接过程状态简介 一、Linux服务器上11种网络连接状态:  图:TCP的状态机 通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手 注:以下说明...
    
    

    一、Linux服务器上11种网络连接状态:


    4036295646_eb2b2b957d
          图:TCP的状态机

    通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手

    注:以下说明最好能结合”图:TCP的状态机”来理解。

    SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。表示一个新的TCP连接请求。

    ACK: (确认编号,Acknowledgement Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。

    FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。

    1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN. /* The socket is listening for incoming connections. 侦听来自远方TCP端口的连接请求 */
    2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT. /*The socket is actively attempting to establish a connection. 在发送连接请求后等待匹配的连接请求 */

    3)、SYN_RECV:服务端应发出ACK确认客户端的SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV /* A connection request has been received from the network. 在收到和发送一个连接请求后等待对连接请求的确认 */

    4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。/* The socket has an established connection. 代表一个打开的连接,数据可以传送给用户 */

    5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态./* The socket is closed, and the connection is shutting down. 等待远程TCP的连接中断请求,或先前的连接中断请求的确认 */

    6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT. /* The remote end has shut down, waiting for the socket to close. 等待从本地用户发来的连接中断请求 */

    7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了FIN-WAIT-2 ./* Connection is closed, and the socket is waiting for a shutdown from the remote end. 从远程TCP等待连接中断请求 */

    8)、LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK . /* The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 等待原来发向远程TCP的连接中断请求的确认 */

    9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态。/* The socket is waiting after close to handle packets still in the network.等待足够的时间以确保远程TCP接收到连接中断请求的确认 */

    10)、CLOSING: 比较少见./* Both sockets are shut down but we still don’t have all our data sent. 等待远程TCP对连接中断的确认 */

    11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束./* The socket is not being used. 没有任何连接状态 */
    TIME_WAIT状态的形成只发生在主动关闭连接的一方。
      主动关闭方在接收到被动关闭方的FIN请求后,发送成功给对方一个ACK后,将自己的状态由FIN_WAIT2修改为TIME_WAIT,而必须再等2倍 的MSL(Maximum Segment Lifetime,MSL是一个数据报在internetwork中能存在的时间)时间之后双方才能把状态 都改为CLOSED以关闭连接。目前RHEL里保持TIME_WAIT状态的时间为60秒。当然上述很多TCP状态在系统里都有对应的解释或设置,可见man tcp

    二、关于长连接和短连接:
      通俗点讲,短连接就是一次TCP请求得到结果后,连接马上结束.而长连接并不马上断开,而一直保持着,直到长连接TIMEOUT(具体程序都有相关参数说明).长连接可以避免不断的进行TCP三次握手和四次挥手.
    长连接(keepalive)是需要靠双方不断的发送探测包来维持的,keepalive期间服务端和客户端的TCP连接状态是ESTABLISHED.目前http 1.1版本里默认都是keepalive(1.0版本默认是不keepalive的),ie6/7/8和firefox都默认用的是http 1.1版本了(如何查看当前浏览器用的是哪个版本,这里不再赘述)。Apache,java

      一个应用至于到底是该使用短连接还是长连接,应该视具体情况而定。一般的应用应该使用长连接。

    tcp 四次挥手

      TCP协议有一个优雅的关闭(graceful close)机制,以保证应用程序在关闭连接时不必担心正在传输的数据会丢失。如第4.5节的压缩示例程序所示,这个机制还设计为允许两个方向的数据传输相互独立地终止。关闭机制的工作流程是:应用程序通过调用连接套接字的close()方法或shutdownOutput()方法表明数据已经发送完毕。此刻,底层的TCP实现首先将留存在SendQ队列中的数据传输出去(还要依赖于另一端RecvQ队列的剩余空间),然后向另一端发送一个关闭TCP连接的握手消息。该关闭握手消息可以看作是流终止标志:它告诉接收端TCP不会再有新的数据传入RecvQ队列了。(注意,关闭握手消息本身并没有传递给接收端应用程序,而是通过read()方法返回-1来指示其在字节流中的位置。)正在关闭的TCP将等待其关闭握手消息的确认信息,该确认信息表明在连接上传输的所有数据已经安全地传输到了RecvQ中。只要收到了确认消息,该连接就变成"半关闭(Half closed)"状态。直到连接的另一个方向上收到了对称的握手消息后,连接才完全关闭--也就是说,连接的两端都表明它们再没有数据要发送了。

      TCP连接的关闭事件序列可能以两种方式发生:一种方式是先由一个应用程序调用close()方法(或shutdownOutput()方法),并在另一端调用close()方法之前完成其关闭握手消息;另一种方式是两端同时调用close()方法,它们的关闭握手消息在网络上交叉传输。图6.10展示了以第一种方式关闭连接时,底层实现中的事件序列。关闭握手消息已经发送,套接字数据结构的状态也已经设置为"Closing"(专业术语称为"FIN_WAIT_1"),然后close()调用返回。完成这些工作后,将禁止在该Socket上的任何读写操作(会抛出异常)。当收到关闭握手确认消息后,套接字数据结构的状态则改变为"半关闭"(专业术语称为"FIN_WAIT_2"),这种状态将一直持续,直到接收到另一端的关闭握手消息

      关闭TCP连接的最后微妙之处在于对Time-Wait状态的需要。TCP规范要求在终止连接时,两端的关闭握手都完成后,至少要有一个套接字在Time-Wait状态保持一段时间。这个要求的提出是由于消息在网络中传输时可能延迟。如果在连接两端都完成了关闭握手后,它们都移除了其底层数据结构,而此时在同样一对套接字地址之间又立即建立了新的连接,那么前一个连接在网络上传输时延迟的消息就可能在新连接建立后到达。由于其包含了相同的源地址和目的地址,旧消息就会被错误地认为是属于新连接的,其包含的数据就可能被错误地分配到应用程序中。

      虽然这种情形可能很少发生,TCP还是使用了包括Time-Wait状态在内的多种机制对其进行防范。Time-Wait状态用于保证每个TCP连接都在一段平静时间内结束,这期间不会有数据发送。平静时间的长度应该等于分组报文在网络上存留的最长时间的两倍。因此,当一个连接完全结束(即套接字数据结构离开Time-Wait状态并被删除),并为同样一对地址上的新连接清理道路后,就不会再有旧实例发送的消息还存留在网络中。实际上,平静时间的长度要依赖于具体实现,因为没有机制能真正限制分组报文在网络上能够延迟的时间。通常使用的时间范围是4分钟减到30秒,或更短。

      Time-Wait状态最重要的作用是,只要底层套接字数据结构还存在,就不允许在相同的本地端口上关联其他套接字。尤其是试图使用该端口创建新的Socket实例时,将抛出IOException异常。


    TCP三次握手/四次挥手详解

    1、建立连接协议(三次握手)
    (1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
    (2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
    (3) 客户必须再次回应服务段一个ACK报文,这是报文段3。

    2、连接终止协议(四次挥手)
       由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
     (1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
     (2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
     (3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
     (4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

    CLOSED: 这个没什么好说的了,表示初始状态。

    LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。

    SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。

    SYN_SENT: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

    ESTABLISHED:这个容易理解了,表示连接已经建立了。

    FIN_WAIT_1: 这个状态要好好解释一下,其实FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。

    FIN_WAIT_2:上面已经详细解释了这种状态,实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。

    TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

    CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

    CLOSE_WAIT: 这种状态的含义其实是表示在等待关闭。怎么理解呢?当对方close一个SOCKET后发送FIN报文给自己,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个SOCKET,发送FIN报文给对方,也即关闭连接。所以你在CLOSE_WAIT状态下,需要完成的事情是等待你去关闭连接。

    LAST_ACK: 这个状态还是比较容易好理解的,它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。

    最后有2个问题的回答,我自己分析后的结论(不一定保证100%正确):

    1、 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
    这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

    2、 为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
    这是因为:虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

    转自http://www.cnblogs.com/ggzss/archive/2011/09/25/2190404.html

    展开全文
  • TCP连接过程和状态变化

    千次阅读 2018-06-23 13:18:50
     关于TCP连接过程与状态,其实网上已经有非常多的好文章了,为什么我还要抽时间写一遍,一是对知识的整理,二是近期在换工作,人生第一次跳槽,觉得应该找个博客网站当港湾,养成知识整理的好习惯,因为,长大了就...

    1. 前言

        关于TCP连接过程与状态,其实网上已经有非常多的好文章了,为什么我还要抽时间写一遍,一是对知识的整理,二是近期在换工作,人生第一次跳槽,觉得应该找个博客网站当港湾,养成知识整理的好习惯,因为,长大了就很难有志同道合的朋友促膝长谈了,应该学会自己撩自己,闲话再撩就多了,下面进入正题。

        本篇文章的立意,不研究TCP传输太底层的原理与实现,我们学习TCP更多的是想为我们在应用层的各项工作提供服务,学以致用才是王道,所以本文重点关注TCP与应用层的紧密关联上、TCP状态对应用层的含义,以及不同系统间TCP通讯时重点关注的状态和调优关注点上。

    2. TCP建立连接--三次握手

        TCP建立连接三次握手,必须确认过眼神(“你喜欢我不?”,SYN),确定肯定对方喜欢自己(“Yes, I do.”,ACK),然后才可以放肆互撩(连接建立,ESTABLISHED;传输数据,Write、Read、Write、Read、Write、Read……)。

        其实TCP建立连接的三次握手网上有很多的啦,下面给出我的理解:

    2.1 状态解释

    CLOSED:虚拟出来的状态,实际不存在,你在netstat -ant | grep 端口的时候是找不到的;

    LISTEN:表示Server大门已开,随时准备有Client前来连线;

    SYN_SENT:只在Client端出现,表示Client发送过SYN了,正在焦急地等待Server的ACK;

    SYN_RCVD:只在Server端出现,表示Server收到Client的SYN了,并且已经发给Client自己的ACK和SYN了,正在焦急地等待Client的ACK;

    ESTABLISHED:在Client端出现表示Client把自己的ACK(第3次握手)发出去了,Client已经就绪;在Server端出现表示Server已经收到Client的ACK(第3次握手)了,Server已经就绪;

    注:只有在Client和Server同时为ESTABLISHED时,即同时就绪时才可以进行数据传输

    2.2 Client端口状态转换

    1. 应用层调用connect,发送SYN到对端,等待对端的ACK和SYN;

    2. 等待对端的ACK和SYN到来,接收到ACK和SYN后,发出自己的ACK,状态进入ESTABLISHED;

    3. 等待对端的ACK和SYN期间,端口状态一直为SYN_SENT,超时后进入CLOSED;

    2.3 Server端口状态转换

    1. 应用层启动侦听,端口进入LISTEN状态;

    2. 接收到Client发来的SYN,发送自己的ACK和SYN,进入SYN_RCVD状态,等待Client的ACK;

    3. 等待Client的ACK到来,接收到ACK后,进入ESTABLISHED;等待超时,进入CLOSED;

    3. TCP断开连接--四次挥手

        TCP通讯双方,不管是Client还是Server,都可以主动断开连接(分手很简单,有一方就够了),所以下面我们只以主动方和被动方为标注。(实际情况一般由客户端主动关闭,服务端关闭的也有,看到服务端端口状态为TIME_WAIT时不要奇怪)。

    3.1 状态解释

    FIN_WAIT_1:仅出现在主动方,表示主动方想要断开连接,已经关闭了写通道,并向对端发送了FIN,等待对方的ACK到来;

    CLOSE_WAIT:仅出现在被动方,表示被动方收到FIN后,已经回复ACK,正在等自己的应用层调用close方法关闭写通道,在CLOSE_WAIT状态下,自己只能发送数据,但不能接收数据;

    FIN_WAIT_2:仅出现在主动方,表示主动方已收到对端的ACK,等待对端的FIN,此时无法再发送数据,但是可以接收数据;

    LAST_ACK:仅出现在被动方,表示被动方缓冲区数据已经发送完毕,并且已经发送FIN到对端,等待对端的ACK;如果应用层写的比较垃圾,没有调用close关闭socket,则会一直停留在CLOSE_WAIT;

    TIME_WAIT:仅出现在主动方,表示主动方已经发出ACK了,本次通讯完事了,双方都不能再读写了,但是主动方不确定对方能不能收到最后一个ACK,为了保证这个端口释放后,不被后来的连接马上使用被当成是新连接,通俗地讲,为了不乱套,这个状态会一直等待,等多久呢, 等2×MSL(Maximum Segment Lifetime)个时间,这个MSL是操作系统配置的,有默认参数,可以改。

    3.2 主动方端口状态转换

    1. 应用层调用close方法发起关闭连接;

    2. 发送FIN到对端,关闭写通道,端口进入FIN_WAIT_1状态;

    3. 等待对端的确认ACK到来,接收到ACK后进入FIN_WAIT_2状态;如果在超时时间内没有收到ACK则直接进入CLOSED状态;

    4. 如果在FIN_WAIT_1状态时收到了对端的FIN,则进入CLOSING状态(双发都发出了关闭连接请求,异口同声说“分手”);

    5. 如果在FIN_WAIT_2状态时收到了对端的FIN,则进入TIME_WAIT状态;如果在超时时间内没有收这个FIN则直接进入CLOSED状态;

    6. 在TIME_WAIT状态等待2个MSL(报文最长存活周期)后进入CLOSED状态;

    3.3 被动方端口状态转换

    1. 收到对端的FIN后,关闭读通道,自己进入CLOSE_WAIT状态;

    2. 在CLOSE_WAIT状态等待应用层调用close方法关闭socket连接;

    3. 如果在超时时间内没调用close,则直接进入CLOSED状态;

    4. 如果在超时时间内调用了close,则向对端发送FIN,自己进入LAST_ACK状态,等待对端的ACK;

    5. 等待对端的ACK,如果在超时时间内收到了ACK则直接进入CLOSED状态,否则超时后进入CLOSED状态;

    4. 调优

        上边已经提到了,服务端有时也会主动关闭连接,应该是为了避免有些不地道的Client在撩完以后不关闭socket连接,一直占用服务器资源,所以有些服务器也会无情地主动关闭连接,为了自己不被干倒。

        在高并发场景下,服务器主动关闭连接的情况,在服务端会出现大量的TIME_WAIT状态的端口,会占用操作系统文件句柄资源,导致新的连接可能无法建立,影响高并发性能,而关于TCP参数的调优中,有一大堆,但有一些参数调优对业务是有风险的,所以这里只给出一个相对比较安全的推荐调优,源自《码出高效  阿里巴巴Java开发手册 终极版 (1.3.0)》。

        在Linux服务器上,/etc/sysctl.conf文件中修改time_wait缺省值(默认240秒):

    net.ipv4.tcp_fin_timeout = 30

    注:记得用root修改,修改后执行sysctl -p使参数立即生效。

    5. 闲撩

        实际工作中,在编写网络应用程序时,一般不会自己去封装Socket底层通讯框架,我们往往喜欢站在巨人的肩膀上,这样可以少点重复造轮子,借鉴前人的东西会提升不少工作效率,使用前人的东西为自己深度定制。以Java为例,一般我们使用NIO,但不直接使用JDK的NIO通讯包,目前比较流行的是Netty,有时间再出个Netty的实战例子。

     

    展开全文
  • TCP连接过程(3次握手)   TCP连接要解决的三个问题: 要使通讯的每一方能够感知对方的存在。![在这里插入图片描述]0) 要允许双方协商一些参数包括:窗口的最大值、能否使用窗口扩大选项和时间戳选项及服务...
  • 20170925_TCP连接过程中的一些名词意义
  • #浅析TCP连接过程中server异常处理 基础环境:腾讯云ubuntu虚拟机 前置基础:对TCP连接有一个基本认识,能写进行简单socket编程 先简单介绍一下TCP编程流程TCP简易编程流程1.TCP服务器端编程流程如下: 创建套接...
  • TCP连接过程详解

    2016-06-13 09:46:33
    tcp状态: LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 ...FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2:从远程TCP等待连接
  • Linux中TCP连接过程状态简介 一、Linux服务器上11种网络连接状态:  图:TCP的状态机 通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数据传送; 3、TCP四次挥手 注:以下说
  • 本文主要说明的是TCP连接过程中,各个阶段对套接字的操作,希望能对没有网络编程基础的人理解套接字是什么、扮演的角色有所帮助。如发现错误,敬请指出 背景 1.完整的套接字格式{protocol,src_addr,src_port,...
  • 建立TCP连接过程

    2019-10-04 23:08:23
    1.服务器实例化一个ServerSocket 对象, 表示通过服务器上的端口通信. ...2.服务器调用ServerSocket的Accept方法,该方法一直等待直到客户端连接到服务器上给定的端口. Socketserver=serverSocket.accept(); 3.服...
  • TCP连接过程及报文解析

    千次阅读 2018-08-07 14:39:00
    这篇文章就通过WireShark抓包来了解TCP连接建立和断开的过程。 实验方法: 写一段简单的代码 代码客户端和服务端,分别部署,让客户端主动像服务器发起连接,随后断开。让WireShark抓股这个过程中产生了哪些包,并...
  • tcp 连接过程 详解

    2013-10-27 15:23:27
    TCP连接的建立可以简单的称为三次握手,而连接的中止则可以叫做 四次握手。   建立连接   在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端...
  • TCP连接过程解析

    2017-04-07 18:23:15
    讲解传统Socket在建立连接时发生了什么,connectionTimeout/soTimeout的区别,为什么先建立连接后传输数据,关闭连接时发生了什么,time_wait及解决办法,及一些其他的socket参数和选项
  • TCP连接过程可能出现的错误

    千次阅读 2018-03-30 12:01:51
    连接过程可能出现的错误情况有:(1) 如果客户机TCP协议没有接收到对它的SYN数据段的确认,函数以错误返回,错误类型为ETIMEOUT。通常TCP协议在发送SYN数据段失败之后,会多次发送SYN数据段,在所有的发送都高中...
  • 转自:... 附1:TCP与UDP区别 TCP: 1. 基于字节流 2. 面向连接 3. 可靠传输 4. 缓存发送 5. 全双工 6. 流量控制 UDP: 1. 无连接 2. 不可靠 3. 一...
  • TCP连接过程及状态

    2015-03-09 23:39:11
    概念TCP协议是面向连接的传输层协议,基于字节流。它可以保证数据从网络的一端到另一端不丢失、不重复、不乱序。TCP协议是全双工的协议。三次握手,四次挥手。
  • 应用到scapy建立两台PC的连接过程 sport = random.randint(1024, 65535) ip = IP(src=源IP dst=目的IP) SYN = TCP(sport=sport, dport=80, flags=“S”, seq=1000) SYNACK = sr1(ip / SYN) ACK = TCP(sport=sport, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,839
精华内容 5,935
关键字:

tcp连接过程