tcp四次挥手

TCP 3次握手/4次握手

ε祈祈猫儿з 提交于 2019-12-27 17:01:06
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。 (1) 第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。 (2) 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。 (3) 第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。 图1 TCP三次握手建立连接 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。 (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。 (3)服务器B关闭与客户端A的连接

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

偶尔善良 提交于 2019-12-27 10:31:46
Andrew Huang bluedrum@163.com 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。 因此在这里详细解释一下这两个过程。 TCP三次握手 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。 第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。 第二次握手: 服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。 第三次握手. 客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1

python --------------网络(socket)编程

杀马特。学长 韩版系。学妹 提交于 2019-12-26 23:37:38
python --------------网络(socket)编程 一、网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系:我们用socket就是为了完成C/S架构的开发 osi七层 引子: 须知一个完整的计算机系统是由硬件、操作系统、应用软件三者组成,具备了这三个条件,一台计算机系统就可以自己跟自己玩了(打个单机游戏,玩个扫雷啥的) 如果你要跟别人一起玩,那你就需要上网了,什么是互联网? 互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语 如果把计算机比作人,互联网协议就是计算机界的英语。所有的计算机都学会了互联网协议,那所有的计算机都就可以按照统一的标准去收发信息从而完成通信了。 人们按照分工不同把互联网协议从逻辑上划分了层级, 详见网络通信原理:http://www.cnblogs.com/linhaifeng/articles/5937962.html 为何学习socket一定要先学习互联网协议?   首先C/S架构是基于网络通信的   然后网络的核心即一堆网络协议,也就是协议标准。如果你想开发一款基于网络通信的软件,就必须遵循这些标准 socke层 二、socket是什么? socket是应用层与TCP

TCP三次握手和四次挥手&&TCP和UDP对比

百般思念 提交于 2019-12-25 20:03:51
1:TCP三次握手和四次挥手 1.1:TCP的头部结构 主要参数说明: 序号:seq序号 ,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 确认序号:ack序号 ,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。 标志位:共6个 ,即URG、ACK、PSH、RST、SYN、FIN,具体含义如下: (A)URG:紧急指针(urgent pointer)有效。 (B)ACK:确认序号,当ACK=1代表确认序号有效。 (C)PSH:接收方应该尽快将这个报文交给应用层。 (D)RST:重置连接。 (E)SYN:发起一个新连接,当SYN=1代表有效。 (F)FIN:释放一个连接,当FIN=1代表有效。 1.2:三次握手其实就是指建立一个TCP连接时,确认双方的接收能力和发送能力都是正常的。如下图 1.3:三次握手的五个问题 为什么需要三次握手,两次不行吗? 答:弄清这个问题,我们需要先弄明白三次握手的目的是什么,能不能只用两次握手来达到同样的目的。 第一次握手:客户端发送网络包,服务端收到了。 这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。 第二次握手:服务端发包,客户端收到了。 这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

[网络通信与协议]TCP与UDP

自作多情 提交于 2019-12-24 03:52:01
TCP与UDP TCP与UDP的区别 TCP与UDP基本区别 具体编程时的区别 编程区别 编程步骤的区别 TCP TCP编程的服务器端一般步骤是 TCP编程的客户端一般步骤是 UDP UDP编程的服务器端一般步骤是 UDP编程的客户端一般步骤是 UDP应用场景 TCP与UDP的区别 tcp比较可靠、不容易粘包、不容易丢包 udp操作简单、传输速度比较快 TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确性,UDP可能丢包 6.TCP保证数据顺序,UDP不保证 具体编程时的区别 1.socket()的参数不同 2.UDP Server不需要调用listen和accept 3.UDP收发数据用sendto/recvfrom函数 4.TCP:地址信息在connect/accept时确定 5.UDP:在sendto/recvfrom函数中每次均需指定地址信息 6.UDP:shutdown函数无效 7.UDP不需要经过三次握手与四次挥手的过程 编程区别 通常我们在说到网络编程时默认是指TCP编程 SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,也是双向的,即任何一方都可以收发数据

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

女生的网名这么多〃 提交于 2019-12-23 16:14:35
三次握手: 第一次握手:客户端发送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-23 00:38:32
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时,确认序号字段才有效,Ack

TCP 三次握手和四次挥手

别等时光非礼了梦想. 提交于 2019-12-23 00:37:51
目录 1、TCP 的头部报文结构 2、TCP 三次握手 3、TCP 四次挥手 4、为什么要三次握手 5、为什么要四次挥手 TCP(Transmission Control Protocol,传输控制协议):TCP 在传输数据之前必须先建立一个连接。TCP 做了很多工作来提供可靠的数据传输,包括建立、管理和终止连接,确认和重传。同时 TCP 还提供分段和重组,流量控制(Flow Control)等。 1、TCP 的头部报文结构 (1)TCP 协议层是不关心 IP 的,具体 IP 的定位是由网络层来决定的,但是 TCP 层需要确定端口号,所以它会携带 source 和destination 的 port 信息,以便能找到对应的端口号; (2)sequence number 实际中使用的 SEQ,也就是序号,这个序号起了很重要的作用,我们都知道 TCP 和 UDP 最大的区别在于 TCP 是稳定并且有序的,其中 SEQ 就可以保证有序,当 A 向 B 发送一个数据包的时候,SEQ 会叠加,每一个传输方在传送数据的时候都会带上这个信息,另一端能按照这个序号来排序收到信息的顺序,从未保证了信息的传递是有序的,也能通过它来确认有没有出现丢包的情况;另外要注意的是当有数据需要发送的时候,SEQ 会随该序列号为原点,对自己将要发送的每个字节的数据进行编号,比如当前 SEQ =10

第5章 运输层

若如初见. 提交于 2019-12-22 21:31:59
5.1 运输层协议概述 5.1.1 进程之间的通信   主要讲了一个问题:为什么在网络层已经提供数据通信服务(IP数据报)的前提下还需要运输层?   运输层的地位:运输层直接向应用层提供服务,而路由器在进行路由转发的时候不具有运输层和应用层。   运输层的作用:1、为进程提供服务。网络层提供的数据报传输服务只能把数据报从一个主机传送到另一个主机的网络层上,但通信的本质并不是面向主机而是面向进程,只有把信息送到目标主机上一次通信才算完成,这正是运输层需要做的工作:向应用层提供进程和进程之间的通信,屏蔽底层通信细节使整个通信的过程透明化。这种进程之间透明的通信被称为逻辑通信,所谓逻辑通信是指在应用进程看来只需要把信息交给运输层就可以传递到目标进程上。 运输层提供的是进程和进程间的逻辑通信,而网络层提供的是主机要主机的逻辑通信 。      2、提供差错检测。运输层对收到的报文进行差错检测。 5.1.2 运输层的两个主要协议 面向连接的TCP。传输数据前建立连接,数据传输结束后释放连接。可靠但代价大。 不面向连接的UDP。传输数据前不建立连接,目的主机接收到报文后不做确认。不可靠但效率高。    5.1.3 运输层的端口   运输层的复用:进程->运输层->应用层。不同的进程都要通过运输层,这就是运输层的复用。   运输层的分用:网络层->运输层->进程

TCP协议

穿精又带淫゛_ 提交于 2019-12-22 16:59:29
  网络上的计算机之间又是如何交换信息的呢?就像我们说话用某种语言一样,在网络上的各台计算机之间也有一种语言,这就是网络协议,不同的计算机之间必须使用相同的网络协议才能进行通信。   网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和这些格式的意义。大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。一台设备上的第 n层与另一台设备上的第n层进行通信的规则就是第n层协议。在网络的各层中存在着许多协议,接收方和发送方同层的协议必须一致,否则一方将无法识别另一方发出的信息。网络协议使网络上各种设备能够相互交换信息。 1.TCP报文 TCP报文格式 TCP报文格式1.jpg 16位源端口号:16位的源端口中包含初始化通信的端口。源端口和源IP地址的作用是标识报文的返回地址。 16位目的端口号:16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。 32位序号:32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(Initial Sequence Number,ISN),而第一个数据字节是ISN+1。这个序列号(序列码)可用来补偿传输中的不一致。 32位确认序号