怎样生动描述 TCP 的「三次握手」?
不要抖机灵,三次握手即是在最快最省力的情况下做出的选择比如在红军时代,A连和B连分在左右翼,约定在几时几分一同发起打击。这个几时几分的信息就需要人工通过通讯员来走路传递。所以A连指挥官派出通讯员。这是第一次。假设通讯员到达了B连,并且告知了B连指挥官几时几分,B连指挥官一定会让通讯员再回去通知A连指挥官,可怜的通讯员只能冒着危险返回A连,因为A连指挥官看不到通讯员返回的话,不知道几时几分这个信息到底传达到了B连没有。这是第二次。现在B连指挥官开始担心通讯员是否回到了A连,如果没回到,B连指挥官会设身处地的想一想A连指挥官见不到返回的通讯员,肯定是不敢打的,所以B连指挥官最盼望的是再次看到通讯员出现在B连,所以A连指挥官会让通讯员再回B连一次。这是第三次。这就是三次握手
简化三次握手流程 从图片可以得到三次握手可以简化为:C发起请求连接S确认,也发起连接C确认我们再看看每次握手的作用:第一次握手:S只可以确认自己可以接受C发送的报文段第二次握手:C可以确认 S收到了自己发送的报文段,并且可以确认自己可以接受S发送的报文段第三次握手:S可以确认 C收到了自己发送的报文段总结:三次握手,对于每一方来说,可以确认两个信息:1.确认 自己可以接受对方发来的报文段2.确认 对方收到了自己的报文一旦这两个得到确认,连接就建立起来了,后面才开始传送数据关于为什么要三次握手,大家从握手过程也可以看得出。不过书上是这样的解释:谢希仁的《计算机网络》说:防止已失效的连接请求报文段突然又传给server “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送ack包。(此时因为client没有发起建立连接请求,所以client处于CLOSED状态,接受到任何包都会丢弃,谢希仁举的例子就是这种场景)但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。

HTTPS的作用和过程,详解为什么要 三次握手 四次挥手
HTTPS 由HTTP加上 TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。三次握手(TCP的建立)客户端发报文:SYN=1,seq=x;服务器回应报文:SYN=1,ACK=1,seq=y,ack=x+1;客户端回应报文:ACK=1,,seq=x+1,ack=y+1;1、TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;2、TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。3、TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。4、TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。5、当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。为什么TCP客户端最后还要发送一次确认呢?主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。四次挥手(TCP的释放)客户端发送报文:FIN=1,seq=a;服务器响应报文:ACK=1,seq=b,ack=a+1;服务器发送报文:FIN=1,ACK=1,seq=c,ack=a+1;客户端响应报文:ACK=1,seq=a+1,ack=c+11、客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。2、服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。3、客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。4、服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。5、客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗*∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。6、服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。为什么建立连接是三次握手,关闭连接确是四次挥手呢?建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。如果已经建立了连接,但是客户端突然出现故障了怎么办? TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

简述TCP/IP四层体系结构及每层作用。
应该说是Internet四层体系结构 1.数据链路层2.网络层3.传输层4.应用层 ,其中IP是在第二层网络层中,TCP是在第3层传输层中,Internet体系结构最重要的是TCP/IP协议,是实现互联网络连接性和互操作性的关键,它把许多台的Internet上的各种网络连接起来。Internet的其他网络协议都要用到TCP/IP协议提供的功能,因而称我们习惯称整Internet协议族为TCP/IP协议族,简称TCP/IP协议也可称为TCP/IP四层体系结构,1.数据链路层:数据链路层是物理传输通道,可使用多种传输介质传输,可建立在任何物理传输网上。比如光纤、双绞线等2.网络层:其主要功能是要完成网络中主机间“分组”(Packet)的传输。含有4个协议:(1)网际协议IP负责分组数据的传输,各个IP数据之间是相互独立的。(2)互联网控制报文协议ICMPIP层内特殊的报文机制,起控制作用,能发送报告差错或提供有关意外情况的信息。因为ICMP的数据报通过IP送出因此功能上属于网络的第3层。3)地址转换协议ARP为了让差错或意外情况的信息能在物理网上传送到目的地,必须知道彼此的物理地址,这样就存在把互联网地址(是32位的IP地址来标识,是一种逻辑地址)转换为物理地址的要求,这就需要在网络层上有一组服务(协议)能将IP地址转换为相应的网络地址,这组协议就是APP.(可以把互联网地址看成是外识别地址和物理地址看成是内识别地址)(4)反向地址转换协议RARPRARP用于特殊情况,当只有自己的物理地址没有IP地址时,可通过RARP获得IP地址,如果遇到断电或重启状态下,开机后还必需再使用RARP重新获取IP地址。广泛用于获取无盘工作站的IP地址。3.传输层:其主要任务是向上一层提供可靠的端到端(End-to-End)服务,确保“报文”无差错、有序、不丢失、无重复地传输。它向高层屏蔽了下层数据通信的细节,是计算机通信体系结构中最关键的一层。包含以下2个重要协议:(1)TCP :TCP是TCP/IP体系中的传输层协议处于第4层传输层,负责数据的可靠传输(“三次握手”-建立连接、数据传送、关闭连接)。(2)UDP:和TCP相比,数据传输的可靠性低,适合少量的可靠性要求不高的数据传输。4.应用层:应用层确定进程间通信的性质,以满足用户的需要。在应用层提供了多个常用协议。--Telnet(Remote Login):远程登录FTP(File Transfer Protocol):文件传输协议SMTP(Simple Mail Transfer Protocol):简单邮件传输协议POP3(Post Office Protocol 3):第三代邮局协议HTTP(Hyper Text Transfer Protocol):超文本传输协议 NNTP(Network News Transfer Protocol):网络新闻传输协议

简述TCP的三次握手过程。
TCP握手协议 :在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。1、第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers)2、第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;3、第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据。所谓的三次握手(three times handshake;three-way handshaking)即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。
1.TCP协议在七层结构之中的第四层,也就是传输层。它就是著名的“数据传输控制协议”,是网络协议中应用最广泛的协议之一。 2.TCP协议建立连接,产生会话,面向字节流,进行可靠的传输,确保数据从一个节点完整的到另外一个节点。 3.传输数据之前,客户端首先向服务器端发送一个SYN=1(触发标志)的触发数据包,等待服务器端的确认。
1.三次握手建立连接: 第一次握手:客户端发送syn包(seq=x)到服务器,并进入syn_send
建立TCP连接时,被动打开一端在收到对端SYN前所处的状态为( )。

tcp协议中“syn,ack,fin”各有什么作用?
TCP的三次握手是怎么进行的了:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。 *SYN:同步标志同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。*ACK:确认标志确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。*RST:复位标志复位标志有效。用于复位相应的TCP连接。*URG:紧急标志紧急(The urgent pointer) 标志有效。紧急标志置位,*PSH:推标志该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。*FIN:结束标志带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据三次握手Three-way Handshake一个虚拟连接的建立是通过三次握手来实现的1. (B) --> [SYN] --> (A)假如服务器A和客户机B通讯. 当A要和B通信时,B首先向A发一个SYN (Synchronize) 标记的包,告诉A请求建立连接.注意: 一个 SYN包就是仅SYN标记设为1的TCP包(参见TCP包头Resources). 认识到这点很重要,只有当A受到B发来的SYN包,才可建立连接,除此之外别无他法。因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建立连接。2. (B) <-- [SYN/ACK] <--(A)接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作.注意: SYN/ACK包是仅SYN 和 ACK 标记为1的包.3. (B) --> [ACK] --> (A)B收到SYN/ACK 包,B发一个确认包(ACK),通知A连接已建立。至此,三次握手完成,一个TCP连接完成Note: ACK包就是仅ACK 标记设为1的TCP包. 需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位这就是为何连接跟踪很重要的原因了. 没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个好主意). 而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包四次握手Four-way Handshake四次握手用来关闭已建立的TCP连接1. (B) --> ACK/FIN --> (A)2. (B) <-- ACK <-- (A)3. (B) <-- ACK/FIN <-- (A)4. (B) --> ACK --> (A) 注意: 由于TCP连接是双向连接, 因此关闭连接需要在两个方向上做。ACK/FIN 包(ACK 和FIN 标记设为1)通常被认为是FIN(终结)包.然而, 由于连接还没有关闭, FIN包总是打上ACK标记. 没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的

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