tcp的传输链接的三个阶段(TCP传输链接三个阶段)

      最后更新:2023-03-24 02:00:22 手机定位技术交流文章

      TCP连接相关

      为什么要有三次握手,因为如果只有两次握手,那么第一次:客户端发送一个syn包给服务器,里面有一个随机生成的syn,然后客户端处于syn_send状态第二次:服务端收到客户端发来的syn包之后,确认syn包,也就是生成一个ack=syn+1,然后再自己随机生成一个syn包,即syn+ack包,然后返回给客户端,自己变成syn_recv状态第三次:客户端收到服务端发来的syn+ack包之后,确认ack是正确的之后,返回一个ack=syn+1给服务端,此包发送完毕,客户端进入了ESTABLISHED状态,服务端收到ack包后也进入ESTABLISHED状态。SYN攻击,当第二次握手服务端发送了syn+ack包之后,收到客户端发送的ack之前这段时间的tcp链接成为半连接,此时服务端处于syn_recv状态。当大量客户端随机IP疯狂发送tcp链接请求时,客户端以为是不同用户的请求,所以队列中全是半连接,然后导致服务器宕机,正常请求被丢弃。第一个包发送过程丢失A会周期性超时重传,直到收到B的确认第二个包发送过程丢失B会周期性超时重传,直到收到A的确认第三个包发送过程丢失A发送完数据后单方面进入TCP的ESTABLISHED状态,B还处于半链接:TCP协议为什么需要三次握手?第一次:客户端发送一个fin给服务端表示自己要断开连接了,然后进入fin_wait_1状态第二次:服务端收到fin后,发送一个ack=fin+1给客户端,服务端进入close_wait状态,客户端进入fin_wait_2状态第三次:服务端发送一个fin,用来关闭服务端到客户端的数据传输,服务端进入last_ack状态第四次:客户端收到fin后,进入time_wait状态,然后发送一个ack=fin+1给服务端,服务端确认后进入close状态,完成四次挥手TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。如果要正确的理解四次分手的原理,就需要了解四次分手过程中的状态变化。答案解析:浏览器对并发请求的数目限制是针对域名的,即针对同一域名(包括二级域名)在同一时间支持的并发请求数量的限制。如果请求数目超出限制,则会阻塞。因此,网站中对一些静态资源,使用不同的一级域名,可以提升浏览器并行请求的数目,加速界面资源的获取速度。在 HTTP/1.0 中,一个http请求收到服务器响应后,会断开对应的TCP连接。这样每次请求,都需要重新建立TCP连接,这样一直重复建立和断开的过程,比较耗时。所以为了充分利用TCP连接,可以设置头字段 Connection: keep-alive ,这样http请求完成后,就不会断开当前的TCP连接,后续的http请求可以使用当前TCP连接进行通信。第一次访问有初始化连接和SSL开销初始化连接和SSL开销消失了,说明使用的是同一个TCP连接。HTTP/1.1 将 Connection 写入了标准,默认值为 keep-alive 。除非强制设置为 Connection: close ,才会在请求后断开TCP连接。所以这一题的答案就是:默认情况下建立的TCP连接不会断开,只有在请求头中设置 Connection: close 才会在请求后关闭TCP连接。HTTP/1.1 中,单个TCP连接,在同一时间只能处理一个http请求,虽然存在Pipelining技术支持多个请求同时发送,但由于实践中存在很多问题无法解决,所以浏览器默认是关闭,所以可以认为是不支持同时多个请求。HTTP2 提供了多路传输功能,多个http请求,可以同时在同一个TCP连接中进行传输。页面资源请求时,浏览器会同时和服务器建立多个TCP连接,在同一个TCP连接上顺序处理多个HTTP请求。所以浏览器的并发性就体现在可以建立多个TCP连接,来支持多个http同时请求。Chrome浏览器最多允许对同一个域名Host建立6个TCP连接,不同的浏览器有所区别。补充如果图片都是HTTPS的连接,并且在同一域名下,浏览器会先和服务器协商使用 HTTP2 的 Multiplexing 功能进行多路传输,不过未必所有的挂在这个域名下的资源都会使用同一个TCP连接。如果用不了HTTPS或者HTTP2(HTTP2是在HTTPS上实现的),那么浏览器会就在同一个host建立多个TCP连接,每一个TCP连接进行顺序请求资源。参考:[1]. 第8题-浏览器HTTP请求并发数和TCP连接的关系
      TCP连接相关

      传输层TCP协议连接的建立和断开

      什么是TCP呢?由三个单词组成的Transport Control Protocol,字面理解是传输控制协议,可以理解为比特同学要想在网络泳池里游泳,那么他必须学习传输层控制技能,并且要掌握相应的动作——协议,他才能在畅游世界网络这个超大型游泳池。TCP:一个传输层协议,提供Host-To-Host的可靠传输,支持全双工,是一个面向连接的协议。TCP工作在传输层,它的上层是应用层,应用就是人们常用的微信、抖音、王者荣耀等服务工作的协议。两台不同的设备使用微信聊天,发送语音,需要实现Host-To-Host的数据通信,那么就可以直接调用TCP协议进行。调用TCP通信时需要指定通信的端口,不同的端口对应不同应用,不同IP对应不同的主机,也就是不同的设备。这就涉及到网络地址——IP地址,工作在网络层,当然TCP层只负责把对应的IP地址和端口传给网络层即可,具体业务由网络层来实现。互联网层,即Network Layer,提供地址和地址间的通信,只关注地址到地址Address-To-Address间通信,具体设备间通信由数据链路层实现,数据链路层关注MAC地址间通信,具体的物理设备,传输介质由物理层负责。以上就是TCP/IP协议常用的层级分割,最终目的就是为Host-To-Host服务,实现应用到应用的通信服务。什么是连接和会话呢?连接事需要通信双方相互配合来实现的,是双方达成的一种即时的状态约定,保证通信双方都在线,都有能力为接下来的数据传输做出尽快的响应,我们称之为连接。连接是网络行为状态的记录,既然连接需要双方共同努力,那么就需要双方都有一个对象来记忆当前传输的数据类型,对方的端口、已经传输了多少,效率怎么样等等一些关注点。那么与之相关联的另一个名词会话(Session),是什么意思呢,会话是应用的行为。大家每次用微信聊天时都会有一个窗口,用来发送信息,你来我往,这个窗口中会有很多条信息,我们称之为会话,当我们在会话进行中,连接一定是在通信状态的。聊一会,累了,退出微信了,但是一般我们不会删除我们的会话内容,这时会话还在,但是连接已经中断。双工/单工问题想想自己理解的是什么?单工:任何时间,数据只能单向发送,单工至少需要一条线路半全双工:某一时候可以双向发送数据,至少需要一条线路全双工:任何时刻都可以双向发送数据,大于一条线路这里线路不一定真实存在物理线路,可能采用模拟的形式实现TCP是一个全双工协议,数据任何时刻都可以双向发送,这说明服务器和客户端可以根据需要选择任意时刻发送和接收信息,所以呢都可以被称为主机(Host)可靠性的定义TCP可以提供可靠性,那么可靠性具体的实现方式是什么呢?可靠性指数据无损传输。发送主机按照顺序发送数据,数据通过网络传输,收不同网络条件限制,数据不会按照发送时的顺序到达接收方,这时我们就需要一种算法来保证接收方可以还原出发送方的顺序。这里还有一个概念叫多播,发送方同时发送给多个接收方信息,如果接收方中有一个接收到了这条信息,我们的可靠性就必须保证其他接收方也必须接收到相同的信息,这里我们不讨论多播。TCP的握手和挥手TCP是一个面向连接的连接的协议,握手是建立连接的过程,挥手是断开连接的过程。TCP的基本操作以上三种操作以后,另一方必须立即给发起方返回一个ACK(Ackknowledgement),这是TCP保证可靠性的要求。如果一方不回复发送方ACK,发送方则认为接收方没有收到信息,会重新发送。建立连接的过程-三次握手三次握手的形成和TCP要求每次发送方发送信息以后,接收方必须返回ACK确认有直接的关系上图描述了TCP建立连接的过程,分为6步:TCP建立连接的过程如上,那么为什么是三次呢?第二步服务端做准备,因为是首次收到发送数据请求,无需处理,可以立刻进入数据交互状态,所以可以立刻发送给客户端SYN,告诉客户端,我已准备好,所以第三步和第四步可以合并为一次握手——ACK-SYN,然后客户端回应ACK,连接建立完成以上就是三次握手了具体在数据交互过程,ACK和SYN等需要用标识位来标记,在实际应用中,我们一般使用1来表示开启,0表示关闭。那么四次挥手为什么是四次呢,主要是因为,挥手时服务端收到FIN以后,不能马上回复FIN,因为自身还有任务没有处理完,所以上面所说的6步中,第3、4步就不能一起回复,只能先回复ACK,等自身任务处理完毕,才能告诉客户端,我已经准备好,可以关闭连接,这样就需要4次数据交互,如下图:
      传输层TCP协议连接的建立和断开

      简述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 udp 区别

      数据包要在互联网上进行传输,就要符合网际协议(IP)标准,互联网上不同的在线设备都有唯一的地址,地址只是一个数字,这和大部分家庭收件地址类似,你只需要知道一个家庭的具体地址,就可以往这个地址发送包裹,这样物流系统就能把物品送到目的地。计算机的地址就称为 IP 地址,访问任何网站实际上只是你的计算机向另外一台计算机请求信息。如果要想把一个数据包从主机 A 发送给主机 B,那么在传输之前,数据包上会被附加上主机 B 的 IP 地址信息,这样在传输过程中才能正确寻址。额外地,数据包上还会附加上主机 A 本身的 IP 地址,有了这些信息主机 B 才可以回复信息给主机 A。这些附加的信息会被装进一个叫 IP 头的数据结构里。IP 头是 IP 数据包开头的信息,包含 IP 版本、源 IP 地址、目标 IP 地址、生存时间等信息。简化的 UDP 网络三层传输模型UDP:把数据包送达应用程序IP 是非常底层的协议,只负责把数据包传送到对方电脑,但是对方电脑并不知道把数据包交给哪个程序,是交给浏览器还是交给王者荣耀?因此,需要基于 IP 之上开发能和应用打交道的协议,最常见的是“用户数据包协议(User Datagram Protocol)”,简称UDP。UDP 中一个最重要的信息是端口号,端口号其实就是一个数字,每个想访问网络的程序都需要绑定一个端口号。通过端口号 UDP 就能把指定的数据包发送给指定的程序了,所以IP 通过 IP 地址信息把数据包发送给指定的电脑,而 UDP 通过端口号把数据包分发给正确的程序。和 IP 头一样,端口号会被装进 UDP 头里面,UDP 头再和原始数据包合并组成新的 UDP 数据包。UDP 头中除了目的端口,还有源端口号等信息。简化的 UDP 网络四层传输模型UDP 不能保证数据可靠性,但是传输速度却非常快,所以 UDP 会应用在一些关注速度、但不那么严格要求数据完整性的领域,如在线视频、互动游戏等, 《Linux就该这么学》学习更多linux知识。TCP:把数据完整地送达应用程序对于浏览器请求,或者邮件这类要求数据传输可靠性(reliability)的应用,如果使用 UDP 来传输会存在两个问题:数据包在传输过程中容易丢失;大文件会被拆分成很多小的数据包来传输,这些小的数据包会经过不同的路由,并在不同的时间到达接收端,而 UDP 协议并不知道如何组装这些数据包,从而把这些数据包还原成完整的文件。基于这两个问题,我们引入 TCP 了。TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。相对于 UDP,TCP 有下面两个特点:对于数据包丢失的情况,TCP 提供重传机制;TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。和 UDP 头一样,TCP 头除了包含了目标端口和本机端口号外,还提供了用于排序的序列号,以便接收端通过序号来重排数据包。请点击输入图片描述简化的 TCP 网络四层传输模型下面我们再看下完整的 TCP 连接过程,通过这个过程你可以明白 TCP 是如何保证重传机制和数据包的排序功能的。请点击输入图片描述一个TCP连接的生命周期从上图可以看出,一个完整的 TCP 连接的生命周期包括了建立连接、传输数据、关闭连接三个阶段。首先,建立连接阶段。这个阶段是通过“三次握手”来建立客户端和服务器之间的连接。TCP 提供面向连接的通信传输。面向连接是指在数据通信开始之前先做好两端之间的准备工作。所谓三次握手,是指在建立一个 TCP 连接时,客户端和服务器总共要发送三个数据包以确认连接的建立。其次,传输数据阶段。在该阶段,接收端需要对每个数据包进行确认操作,也就是接收端在接收到数据包之后,需要发送确认数据包给发送端。所以当发送端发送了一个数据包之后,在规定时间内没有接收到接收端反馈的确认消息,则判断为数据包丢失,并触发发送端的重发机制。同样,一个大的文件在传输过程中会被拆分成很多小的数据包,这些数据包到达接收端后,接收端会按照 TCP 头中的序号为其排序,从而保证组成完整的数据。最后,断开连接阶段。数据传输完毕之后,就要终止连接了,涉及到最后一个阶段“四次挥手”来保证双方都能断开连接。TCP 为了保证数据传输的可靠性,牺牲了数据包的传输速度,因为“三次握手”和“数据包校验机制”等把传输过程中的数据包的数量提高了一倍。
      tcp udp 区别

      TCP状态转换图、TCP连接3次握手4次挥手

      两将军问题:红蓝两军作战,蓝军战斗力强大,红1军或红2军与其单独作战都打不过蓝军,所以需要红一军与红二军联合对蓝军发起进攻,红军1首先通知红军2明早10点发起总攻,如图1-1,红军2接到消息需要回复“好的红军1,我已经收到你得消息,确认明早10点发动总攻”。因为消息传递路线必须经过蓝军营地,所以双方传递消息的信使很有可能被蓝军俘获。为了确保消息的可靠性,红1、红2双方在发出一个消息之后都想得到对方的消息回执。但是这会导致消息无线循环下去,如图1-2。那么如何解决这个可靠性的问题呢,其实没有办法解决,只要保证双方各自都有一次成功的发送、回执就可以了。两将军问题也存在网络世界里,客户端、服务器建立连接不可能无限的确认下去,只要保证客户端和服务器分别对自己的收、发能力做一次确认即可,如下图。 客户端和服务器分别对自己的收、发能力做一次确认至少需要3次握手。3次握手的具体过程、状态如下:(1)首先客户端和服务器都处于CLOSED状态。(2)服务器处于LISTEN状态,具体为服务器调用Socket、bind、listen函数,进入阻塞状态。(3)客户端发送SYN(同步序列编号),发送完毕客户端进入SYN_SENT状态。(4)服务端收到SYN,发送SYN+ASK,发送完毕进入SYN_RCVD状态。(5)客户端收到服务端发来的SYN+ASK,发送服务端等待的ASK,发送完毕客户端进入ESTABLISHED状态,准备数据传输,到此客户端已经满足了对自己收发能力的一次验证。(6)服务端收到客户端发来的ASK,与客户端一样,到此服务端也已经满足了对自己收发能力的一次验证,所以也进入ESTABLISHED状态,准备数据传输。(7)准备开始传输数据TCP断开连接有两种情况或者说是场景,1 客户端先断开连接,当然也可能是服务器先断开连接,总之是一前一后。 2 双方同时发起断开连接操作。下面分别介绍两种场景:(1)客户端先发起断开连接操作,客户端向服务端发送FIN,发送完毕客户端进入FIN_WAIT_1状态。(2)服务端收到客户端发来的FIN,服务端发送ACK,发送完毕进入CLOSED_WAIT状态。(3)客户端收到服务端的ACK回复,客户端进入FIN_WAIT_2状态,如果后面服务端没有回应客户端,在TCP协议层面来讲,客户端将永远停留在这个状态了,不过还好,操作系统着这块做了处理,有一个超时时间。(4)此时TCP连接进入半关闭状态,即客户端主,服务端从的这条线路已经关闭,不过服务端主,客户端从的这条线路还处于打开状态。(5)服务端向客户端发送FIN,发送完毕,服务端进入LAST_ASK状态。(6)客户端收到服务端的FIN后回复服务端ACK,回复完毕进入TIME_WAIT状态,为什么要进入这个状态?因为第6步是客户端的最后一条回复,服务端很有可能收不到,收不到服务端就会重发,所以客户端还要等待一会。(7)服务端收到客户端的ACK回复之后,不再做响应,回到初始的CLOSED状态,在连接池中等待下一次的复用。(8)客户端保持TIME_WAIT状态,超时之后同样进入CLOSED状态。场景二(1)客户端、服务器双方同时发送FIN,双方同时进入FIN_WAIT_1状态(2)双方都接到了对方的ACK,此时双方都会进入CLOSING状态。(3)双方同时进入TIME_WAIT状态,为什么要进入这个状态而不是直接进入CLOSED状态呢?假设客户端和服务端本次是第X次建立连接、关闭连接。如果立即关闭,随后建立第X+1次连接,建立连接成功之后,第X次的丢包的数据有可能绕了一大圈又回来了,那就会出现数据错误,为了避免这种情况所以要进入TIME_WAIT状态,以保证旧连接的数据不会再回来。(4)TIME_WAIT超时之后,双双进入CLOSED状态。有了上面对TCP连接3次握手4次挥手的介绍,再来理解TCP的状态图就不困难了,无非就是对TCP连接3次握手4次挥手过程的打包概述而已。
      TCP状态转换图、TCP连接3次握手4次挥手

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/59676.html

          热门文章

          文章分类