简述tcp协议的工作过程
TCP/IP协议(又名:网络通讯协议)即传输控制协议/互联网协议,是一个网络通信模型,以及一整个网络传输协议家族。这一模型是Internet最基本的协议,也是Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。 其定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。TCP负责发现传输的问题,而IP是给因特网的每一台联网设备规定一个地址。 为了减少网络设计的复杂性,大多数网络都采用分层结构。对于不同的网络,层的数量、名字、内容和功能都不尽相同。在相同的网络中,一台机器上的第N层与另一台机器上的第N层可利用第N层协议进行通信,协议基本上是双方关于如何进行通信所达成的一致。不同机器中包含的对应层的实体叫做对等进程。在对等进程利用协议进行通信时,实际上并不是直接将数据从一台机器的第N层传送到另一台机器的第N层,而是每一层都把数据连同该层的控制信息打包交给它的下一层,它的下一层把这些内容看做数据,再加上它这一层的控制信息一起交给更下一层,依此类推,直到最下层。最下层是物理介质,它进行实际的通信。相邻层之间有接口,接口定义下层向上层提供的原语操作和服务。相邻层之间要交换信息,对等接口必须有一致同意的规则。层和协议的集合被称为网络体系结构。每一层中的活动元素通常称为实体,实体既可以是软件实体,也可以是硬件实体。第N层实体实现的服务被第N+1层所使用。在这种情况下,第N层称为服务提供者,第N+1层称为服务用户。服务是在服务接入点提供给上层使用的。服务可分为面向连接的服务和面向无连接的服务,它在形式上是由一组原语来描述的。这些原语可供访问该服务的用户及其他实体使用。TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。 面向连接的服务(例如 Telnet、 FTP、 rlogin、 X Windows和 SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收 域名数据库),但使用UDP传送有关单个主机的信息。

TCP如何建立/拆除连接的方法
TCP如何建立连接 图 1TCP 首部格式中SYN 标志位仅使用在建立TCP 连接的过程中,TCP 建立连接的过程被称为“三路握手“连接,即一般通信双方共需要传输三个数据包方能成功建立一个TCP 连接。我们通常将建立连接作为使用TCP 协议理所当然的前导过程,但很少去质疑这样一个建立连接过程的必要性。实际上,使用TCP 协议必须首先建立一个连接是保证TCP 协议可靠性数据传输的基本前提(当然由于TCP 协议是一个有状态协议,必须通过某种机制进行通信双方状态上的同步,而建立连接就是这样一种机制)。至于为何需要三个数据包,原因是建立连接过程中信息的交换必须至少使用三个数据包,从下文的分析来看,建立连接最多需要使用四个数据包。需要再次提到的是:SYN 标志位只是用在建立连接的三个(或者四个)数据包中,一旦连接建立完成后,之后发送的所有数据包不可设置SYN 标志位。单从保证数据可靠性传输角度而言,TCP 协议需要在正式数据传输之前首先进行某些信息的交换,这个信息即是双方的初始序列号(另外的一些信息包括最大报文长度通报等)。诚如前文所述,序列号的使用对于 TCP 协议而言至关重要,在正式数据传输之前,双方必须得到对方的初始字节数据的编号,这样才有可能对其所接收数据的合法性进行判断,才有其它的对数据重复,数据重叠等一系列问题的进一步判别和解决。故交换各自的初始序列号必须在正式数据传输之前完成,我们美其名曰这个过程为连接建立过程。至于双方TCP 协议各自状态的更新主要是软件设计上可靠性保证的一个辅助,并非这个所谓的建立过程所主要关注的问题。初始序列号的交换从最直接的角度来说需要四个数据包:1> 主机 A 向主机B 发送其初始序列号。2> 主机 B 向主机A 确认其发送的初始序列号。3> 主机 B 向主机A 发送其初始序列号。4> 主机 A 向主机B 确认其发送的初始序列号。我们将<2><3>两步合为一步,即B 向A 确认其(A 之前发送的)初始序列号的同时发送其(即B 自己的)初始序列号。所谓确认数据包即将数据包的ACK 标志位设置为1 即可。注意这三个(或四个)数据包中SYN 标志位设置为1,而且SYN 标志位也仅在这三个(或四个)数据包中被设置为1。此处有一个问题:即A,B 主机在通报各自初始序列号的同时能否传输一些正常数据,原理上可以(TCP 协议规范上并没有说不可以),但是大多数实现在通报初始序列号时都不附带正常数据,而是将其作为一个单独的过程,由此正式确立建立连接一说。TCP如何拆除连接当前连接的双方都可以发起拆除连接操作,但简单的拆除连接可能会造成数据丢失。为此,TCP采用四次握手的方式拆除连接。四次握手与三次握手类似:①1发拆除请求②2收到请求,并发确认,1收到该确认后,不再发送数据,但任然会接收数据(半连接)③2发拆除请求 ④1收到请求,并确认,到此拆除完成

TCP协议连接的建立与终止的过程
TCP在建立连接时又分三步走: 第一步是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号;第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。 然后才开始通信的第二步:数据处理。这就是所说的TCP三次握手(Three-way Handshake)。简单的说就是:(C:客户端,S:服务端)C:SYN到SS:如成功--返回给C(SYN+ACK)C:如成功---返回给S(ACK)以上是正常的建立连接方式,但如下: 假设一个C向S发送了SYN后无故消失了,那么S在发出SYN+ACK应答报文后是无法收到C的ACK报文的(第三次握手无法完成),这种情况下S一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个C出现异常导致S的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,S将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果S的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使S的系统足够强大,S也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟C的正常请求比率非常之小),此时从正常客户的角度看来,S失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

tcp协议在通信前为什么建立连接
TCP是面向连接的协议,使用TCP前必须先建立连接,建立连接是通过三次握手进行的。在一开始的时候,客户端和服务端都是处于CLOSED状态,先是服务端主动监听某个端口,处于LISTEN状态。客户端会随机初始化序号,将此序号置于TCP首部的序号字段中,同时把SYN标志位置为1,表示SYN报文。接着把第一个SYN报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于SYN_SENT状态。扩展资料:服务端收到客户端SYN报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入TCP首部的序号字段中。其次把TCP首部的确认应答号字段填入client_isn+1,接着把SYN和ACK标志位都置为1,最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD状态。客户端收到服务端报文之后,还要向服务端回应最后一个应答报文,首先该应答报文TCP首部ACK标志位置为1,其次确认应答号字段填server_isn+1,最后把该报文发送给服务端,这次报文可以携带客户端到服务器的数据,之后客户端处于ESTABLISHED状态。
答案:CTCP是面向连接的通信协议,通过三次握手建立连接,通讯时完成时要拆除连接。

三.传输层
传输层的 核心任务 :应用进程 之间提供 端到端 的逻辑通信 服务 回顾:只有 主机 才有传输层,网络核心中的路由器、交换机、集线器等只用到 下三层 的功能记:分复流拥寻差错-可靠一台计算机中,不同应用进程用 进程标识符(进程ID) 来区分网络环境下:TCP/IP 体系结构网络的解决方法:在传输层使用协议端口号,通常简称为端口(port), 在全网范围内利用 IP地址+端口号 唯一标识一个通信端点传输层端口号为16位整数,可以编号65536个(2的16次方)常用端口: 端口号小于256的端口传输层端口号:1、服务器端使用的端口号:熟知端口号和登记端口号2、客户端使用的端口号临时性,在客户进程运行时由操作系统随机选取唯一的未被使用的端口号:多路复用 :在源主机,传输层协议从不同的套接字收集应用进程发送的数据块,并为每个数据块封装上首部信息(包括用于分解的信息)构成报文段,然后将报文段传递给网络层多路分解 : 在目的主机,传输层协议读取报文段中的字段,标识出接收套接字,进而通过该套接字,将传输层报文段中的数据交付给正确的套接字多路复用与多路分解(复用与分解/复用与分用): 支持众多 应用进程共用 同一个传输层协议,并能够将接收到的数据准确交付给 不同的应用进程用户数据报协议(User Datagram Protocol, UDP):Internet提供无连接服务的传输层协议UDP套接字二元组:<目的IP地址,目的端口号>传输控制协议(Transmission Control Protocol, TCP): Internet提供面向连接服务的传输层协议TCP套接字四元组: <源IP地址,源端口号,目的IP地址,目的端口号>基于不可靠信道实现可靠数据传输采取的措施差错检测:利用编码实现数据报传输过程中的比特差错检测确认: 接收方向发送方反馈接收状态。 ACK(肯定确认) ;NAK(否定确认)重传:发送发 重新 发送接收方没有正确接收的数据序号:确保数据按序提交(对数据进行编号,即便不按序到达,可以按序提交)计时器: 解决 数据丢失问题TCP提供可靠数据传输服务UDP不提供可靠数据传输服务最简单的自动重传请求协议是停等协议流水线协议:管道协议,允许发送方在没有收到确认前连续发送 多个 分组最典型的流水线协议: 滑动窗口协议1、 增加分组序号2、发送方和接收方可以缓存多个分组发送方的发送窗口:发送方可以发送未被确认分组的最大数量接收方的接收窗口: 接收方可以缓存到正确到达的分组的最大数量发送:接收:滑动窗口协议:根据窗口的大小,可以具体分为:回退N步协议:GBN协议(Go-Back-N)选择重传协议:SR协议(Selective Repeat)GBN协议:发送窗口>=1; 接收窗口=1 ;发送端 缓存能力高,可以在没有得到确认前发送多个分组接收端 缓存能力很低,只能接收一个按序到达的分组,不能缓存未按序到达的分组GBN发送方响应的3类事件:SR协议: 发送窗口>1 接收窗口>1发送端缓存能力高接收端缓存能力高SR发送方响应事件:用户数据协议(User Datagram Protocal, UDP): Internet传输层 协议,提供 无连接 、不可靠、数据报尽力传输服务0-15-31: 32位二进制UDP首部四个字段: 每个字段长度都是2字节,共8个字节源端口号和目的端口号:UDP实现复用和分解长度:指示UDP报文段中的字节数(首部和数据的总和)校验和:接收方使用检测数据报是否出现差错应用数据字段:应用层数据占用UDP校验和:提供差错检测功能UDP的校验和用于检测UDP报文段从源到目的地传送过程中,其中的数据是否发生了改变UDP校验和计算规则1、所有参与运算的内容按16位对齐求和UDP校验和计算的内容包括3部分:UDP伪首部、应用数据传输控制协议(Transmission Control Protocol ,TCP): Internet 传输层协议提供面向连接、可靠、有序、字节流传输服务第一:应用进程 先建立连接第二:每一条TCP连接只有 两个 端点第三: 可靠交付 :无差错、不丢失、不重复、按序到达第四: 全双工 通信第五:面向 字节流流:字节序列,应用程序和TCP的交互是一个个数据块,TCP把他们看做是无结构字节流1、源端口号字段、目的端口号字段:占16位、复用和分解上层应用的数据2、序号字段、确认序号字段:占32位序号字段:TCP序号是对每个应用层数据的每个字节进行编号确认序号字段:期望从对方接受数据的字节序号,即该序号对应的字节尚未收到9.选项字段长度可变,最短为0字节,最长为40字节TCP连接管理:连接建立与连接拆除以客户端上的一个应用进程与服务器上的一个应用进程建立一条TCP连接为例一、建立连接第一次握手:客户向服务器发送连接请求段:(SYN=1, seq=x)SYN = 1; 建立连接请求控制段seq=x; 表示传输的报文段第1个数据字节的序列号是x,此序列号代表整个报文段的序号客户端进入SYN_SEND (同步发送)第二次握手:服务端发回确认报文段:(SYN=1, ACK=1,seq=y,ack_seq=x+1)SYN=1 同意建立新连接的确认段ack_seq = x + 1; 表示已经收到序列号为x的报文段,准备接受序列号为x+1的报文段seq=y : 服务器告诉客户确认报文段的序列号是y服务器由LISTEN进入SYN_RCVD(同步收到)第三次握手客户端对服务器的同意连接报文段进行确认:(ACK=1,seq=x+1, ack_seq=y+1)seq=x+1 : 客户端此次的报文段的序列号是x+1;ack_seq = y+1 : 客户端期望接收服务器序列号y+1的报文段当客户端发送ACK时,客户端进入ESTABLISHED状态当服务端收到ACK后,也进入ESTABLISHED状态第三次 握手可携带数据二、连接拆除:四次挥手第一次挥手客户端向服务器发送释放连接报文段:(FIN=1, seq=u)FIN=1.发送端数据发送完毕,请求释放连接seq=u 传输的第一个数据字节的序号是u客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态)第二次挥手服务器向客户发送确认段:(ACK=1, seq=v, ack_seq=u+1)ACK=1; 确认字号段有效ack_seq=u+1 : 服务器期望接受客户数据序号为u+1seq=v: 服务器传输的数据序号是v服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待)客户端收到ACK段后,由FIN_WAIT_!进入FIN_WAIT_2第三次挥手服务器向客户发送释放连接报文段:(FIN=1, ACK=1, seq=v+1, ack_seq=u+1)FIN =1: 请求释放连接ACK = 1:确认字号段有效ack_seq=u+1: 表示服务器期望接受客户数据序列号为1seq=v+1 表示自己传输的第一个数据字节的序号是v+1服务器状态由CLOSE_WAIT进入LAST_ACK(最后确认状态)第四次挥手:客户向服务器发送确认段:(ACK=1,seq=u+1,ack_seq=w+1)ACK=1: 确认字号段有效ack_seq=v+1+1 : 表示客户期望接受服务器数据序号为v+1+1seq=u+1 表示客户传输的数据的序号是u+1客户端状态由FIN_WAIT_2进入TIME_WAIT 等待2MSL时间,进入CLOSED状态服务器再收到最后一次ACK后,由LAST_ACK进入CLOSED一、可靠:保证接收方应用进程从缓冲区读出的字节流与发送发发出的字节流是完全一样的二、TCP实现可靠数据传输服务的工作机制1、应用层数据被 分割 成TCP认为最适合发送的数据块2、序号,发送方对发送的数据包进行编号,确保数据按序提交给接收方 采用累积确认3、确认,接收方向发送方反馈接收状态,确认是否正确接收数据4、差错检测,利用差错编码实现数据包传输过程中的比特差错检测(甚至纠正)5、重传,发送方重新发送接收方没有正确接收的数据6、计时器,在发送方引入计时器,解决数据丢失问题最大报文段长度:1500字节报文段中封装的应用层数据的最大长度:1480字节 = 1500 - 最短的首部长度TCP生成ACK的策略流量控制:协调发送方与接收方的数据发送与接收 速度在通信过程中,接收方设置报文段的 接收窗口字段 来将窗口大小通知给发送方一、网络拥塞: 太多的主机``以太快的速度 向网络中发送 太多的数据 ,超出了网络处理能力,导致大量数据分组拥挤在中间设备队列中等待转发, 网络性能 显著下降的现象二、拥塞控制:通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率、数据量、以 避免 拥塞或 消除 已发生的拥塞三、概念补充介绍四、TCP拥塞控制算法阈值之前:慢启动阶段阈值之后:拥塞避免阶段l例如: 发生计时器超时,当前拥塞窗口24MSS,当前阈值为16MSS新的阈值:为当前拥塞窗口的一半,新的阈值=24/2=12MSS新的拥塞窗口:直接调整为1MSS 新的拥塞窗口=1MSS调整好新的阈值和新的拥塞窗口之后,使用 慢启动。拥塞避免 算法增加拥塞窗口大小例如:发送3次重复确认时,当前拥塞窗口为24MSS,当前阈值为16MSS新的阈值:为当前拥塞窗口的一半新的拥塞窗口:调整为新的阈值调整好新的阈值和新的拥塞窗口后,使用 拥塞避免 算法增加拥塞窗口大小五、窗口调整的基本策略(Additive Increase,Multiplicative Decrease, AIMD):网络未发生拥塞时:逐渐"加性"增大窗口网络拥塞时“乘性”减小窗口 六、拥塞预防策略:流量整型技术:规范主机向网络发送数据的流量

本文由 在线网速测试 整理编辑,转载请注明出处。