tcp四次挥手

42道计算机网络面试高频题

北城以北 提交于 2019-12-01 07:56:24
1、谈下你对五层网络协议体系结构的理解? 2、简单说下五层网络体系中每一层对应的网络协议有哪些? 3、ARP 协议的工作原理? 4、谈下你对 IP 地址分类的理解? 5、TCP 的主要特点是什么? 6、UDP 的主要特点是什么? 7、TCP 和 UDP 的区别? 8、TCP 和 UDP 分别对应的常见应用层协议有哪些? 9、 详细说下 TCP 三次握手的过程? 10、为什么两次握手不可以呢? 11、为什么不需要四次握手? 12、Server 端收到 Client 端的 SYN 后,为什么还要传回 SYN? 13、传了 SYN,为什么还要传 ACK? 14、详细说下 TCP 四次挥手的过程? 15、为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢? 16、为什么第二次跟第三次不能合并, 第二次和第三次之间的等待是什么? 17、 保活计时器的作用? 18、TCP 协议是如何保证可靠传输的? 19、谈谈你对停止等待协议的理解? 20、谈谈你对 ARQ 协议的理解? 21、谈谈你对滑动窗口的了解? 22、谈下你对流量控制的理解? 23、谈下你对 TCP 拥塞控制的理解? 使用了哪些算法? 24、什么是粘包? 25、TCP 黏包是怎么产生的? 26、怎么解决拆包和粘包? 27、你对 HTTP 状态码有了解吗? 28、HTTP 状态码 301 和 302 代表的是什么? 有什么区别

TCP和UDP的区别和优缺点及应用场景

社会主义新天地 提交于 2019-12-01 07:49:38
1. TCP和UDP的区别和优缺点及应用场景 https://www.cnblogs.com/GuoXinxin/p/11657676.html ①TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后通过四次挥手结束连接。而UDP是无连接的 ②TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠性,但是UDP不保证按序到达,甚至不保证到达,只是努力交付,即便是按序发送的序列,也不保证按序送到。 ③TCP有流量控制和拥塞控制,而UDP没有,所以UDP即使网络拥堵客户端的发送速率也不会有影响 ④TCP协议所需资源多,TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节。 ⑤TCP只支持一对一通信,而UDP支持一对一,一对多,多对多通信 ⑥TCP是面向字节流,可靠的服务,,发送的是一个流数据。UDP是面向报文,不可靠的服务,一个一个的发,一个一个的收。 ⑦TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般 采用 TCP 传输协议的 MSN 比采用 UDP 的 QQ 传输文件 慢 但并 不能说 QQ的通信是不安全的,因为程序员可以 手动 对UDP的 数据收发进行验证 , 比如发送方对每个数据包进行编号然后由接收方进行验证什么的。 2. TCP三次握手及原因 3.

TCP四次挥手及原因

帅比萌擦擦* 提交于 2019-12-01 05:08:58
一、TCP四次挥手 MSL是TCP报文里面 最大生存时间 ,它是任何报文段被丢弃前在网络内的最长时间。 第一次挥手:A->B,A向B发出释放连接请求的报文,其中FIN(终止位) = 1,seq(序列号)=u;在A发送完之后,A的TCP客户端进入 FIN-WAIT-1 (终止等待1)状态。此时A还是可以进行收数据的 第二次挥手:B->A:B在收到A的连接释放请求后,随即向A发送确认报文。其中ACK=1,seq=v,ack(确认号) = u +1;在B发送完毕后,B的服务器端进入 CLOSE_WAIT (关闭等待)状态。此时A收到这个确认后就进入 FIN-WAIT-2 (终止等待2)状态,等待B发出连接释放的请求。此时B还是可以发数据的。 (如果 B 直接跑路,则 A 永远 处与这个状态。TCP 协议里面并没有对这个状态的处理, 但 Linux 有,可以调整 tcp_fin_timeout 这个参数,设置一个超时时间 。) 第三次挥手:B->A:当B已经没有要发送的数据时,B就会给A发送一个释放连接报文,其中FIN=1,ACK=1,seq=w,ack=u+1,在B发送完之后,B进入 LAST-ACK (最后确认)状态。 第四次挥手:A->B;当A收到B的释放连接请求时,必须对此发出确认,其中ACK=1,seq=u+1,ack=w+1;A在发送完毕后,进入到 TIME-WAIT

面试官,不要再问我三次握手和四次挥手

∥☆過路亽.° 提交于 2019-12-01 02:46:08
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官:请介绍下三次握手 求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。面试官:然后呢?求职者:这就是三次握手的过程,很简单的。面试官:。。。。。。(番外篇:一首凉凉送给你) 记住猿人谷一句话: 面试时越简单的问题,一般就是隐藏着比较大的坑,一般都是需要将问题扩展的 。上面求职者的回答不对吗?当然对,但距离面试官的期望可能还有点距离。 希望大家能带着如下问题进行阅读,收获会更大。 请画出三次握手和四次挥手的示意图 为什么连接的时候是三次握手,关闭的时候却是四次握手? 什么是半连接队列? ISN(Initial Sequence Number)是固定的吗? 三次握手过程中可以携带数据吗? 如果第三次握手丢失了,客户端服务端会如何处理? SYN攻击是什么? 挥手为什么需要四次? 四次挥手释放连接时,等待2MSL的意义? 1. 三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

TCP/IP 数据包报文格式(IP包、TCP报头、UDP报头)

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-01 01:56:58
一、IP包格式 IP数据包是一种可变长分组,它由首部和数据负载两部分组成。首部长度一般为20-60字节(Byte),其中后40字节是可选的,长度不固定,前20字节格式为固定。数据负载部分的长度一般可变,整个IP数据包的最大长度为65535B。 1、版本号(Version) 长度为4位(bit),IP v4的值为0100,IP v6的值为0110。 2、首部长度 指的是IP包头长度,用4位(bit)表示,十进制值就是[0,15],一个IP包前20个字节是必有的,后40个字节根据情况可能有可能没有。如果IP包头是20个字节,则该位应是20/4=5。 3、服务类型(Type of Service TOS) 长度为8位(bit),其组成:前3位为优先级(Precedence),后4位标志位,最后1位保留未用。优先级主要用于QoS,表示从0(普通级别)到7(网络控制分组)的优先级。标志位可分别表示D(Delay更低的时延)、T(Throughput 更高的吞吐量)、R(Reliability更高的可靠性)、C(Cost 更低费用的路由)。 TOS只表示用户的请求,不具有强制性,实际应用中很少用,路由器通常忽略TOS字段。 4、总长度(Total Length) 指IP包总长度,用16位(bit)表示,即IP包最大长度可以达216=65535字节。在以太网中允许的最大包长为1500B

tcp的三次握手四次挥手

为君一笑 提交于 2019-12-01 01:52:45
三次握手: 第一次握手:A的TCP客户进程也是首先创建传输控制块TCB,然后向B发出连接请求报文段, 第二次握手:B收到连接请求报文段后,如同意建立连接,则向A发送确认连接报文 第三次握手:TCP客户进程收到B的确认后,要向B给出确认报文段 为什么要进行三次握手? 也就是说为什么要在A最后还要再发送一次确认? 是为了防止已经失效的请求报文端,再次传到B,因而产生错误。 四次挥手: 第一次挥手:A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。 第二次挥手:B收到连接释放报文段后即发出确认报文段,B进入CLOSE-WAIT(关闭等待)状态。A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。 第三次挥手:B没有要向A发出的数据,B发出连接释放报文段,B进入LAST-ACK(最后确认)状态,等待A的确认。 第四次挥手:A收到B的连接释放报文段后,对此发出确认报文段,A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。 为什么连接的时候是三次握手,关闭的时候却是四次握手? 答:因为在开启连接时,当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文

tcp工作原理和状态

倖福魔咒の 提交于 2019-11-30 22:16:44
1、三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK、SYN、FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说明: 1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值) 2、由服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。 3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1) 2、四次挥手 四次挥手过程说明: 1、客户端发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中的FIN字段置为1,表示需要断开TCP连接。(FIN=1,seq=x,x由客户端随机生成) 2

(转)面试官,不要再问我三次握手和四次挥手

﹥>﹥吖頭↗ 提交于 2019-11-30 22:10:30
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官:请介绍下三次握手 求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。 面试官:然后呢? 求职者:这就是三次握手的过程,很简单的。 面试官:。。。。。。 (番外篇:一首凉凉送给你) 记住猿人谷一句话: 面试时越简单的问题,一般就是隐藏着比较大的坑,一般都是需要将问题扩展的 。上面求职者的回答不对吗?当然对,但距离面试官的期望可能还有点距离。 希望大家能带着如下问题进行阅读,收获会更大。 请画出三次握手和四次挥手的示意图 为什么连接的时候是三次握手? 什么是半连接队列? ISN(Initial Sequence Number)是固定的吗? 三次握手过程中可以携带数据吗? 如果第三次握手丢失了,客户端服务端会如何处理? SYN攻击是什么? 挥手为什么需要四次? 四次挥手释放连接时,等待2MSL的意义? 1. 三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包

TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手

牧云@^-^@ 提交于 2019-11-30 22:04:49
  这是一个很有意思的问题~   首先,我们要知道 TCP是全双工 的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息。而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不能给A发,即不同时,为半双工。 单工为只能A给B发,B不能给A发; 或者是只能B给A发,不能A给B发。   我们假设A和B是通信的双方。我理解的握手实际上就是通信, 发一次信息就是进行一次握手 。 第一次握手: A给B打电话说,你可以听到我说话吗? 第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗? 第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!    在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 这样,就可以开始正常通信了。   注意: HTTP是基于TCP协议的,所以每次都是客户端发送请求,服务器应答,但是TCP还可以给其他应用层提供服务,即可能A、B在建立链接之后,谁都可能先开始通信。        如果两次,那么B无法确定B的信息A是否能收到,所以如果B先说话,可能后面的A都收不到,会出现问题 。   如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息; B可以给A发信息,B可以收到A的信息。

三次握手和四次挥手面试常问

痞子三分冷 提交于 2019-11-30 21:00:47
三次握手和四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: 面试官:请介绍下三次握手 求职者:第一次握手就是客户端给服务器端发送一个报文,第二次就是服务器收到报文之后,会应答一个报文给客户端,第三次握手就是客户端收到报文后再给服务器发送一个报文,三次握手就成功了。 面试官:然后呢? 求职者:这就是三次握手的过程,很简单的。 面试官:。。。。。。 (番外篇:一首凉凉送给你) 记住猿人谷一句话:面试时越简单的问题,一般就是隐藏着比较大的坑,一般都是需要将问题扩展的。上面求职者的回答不对吗?当然对,但距离面试官的期望可能还有点距离。 希望大家能带着如下问题进行阅读,收获会更大。 请画出三次握手和四次挥手的示意图 为什么连接的时候是三次握手? 什么是半连接队列? ISN(Initial Sequence Number)是固定的吗? 三次握手过程中可以携带数据吗? 如果第三次握手丢失了,客户端服务端会如何处理? SYN攻击是什么? 挥手为什么需要四次? 四次挥手释放连接时,等待2MSL的意义? 1. 三次握手 三次握手(Three-way Handshake)其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包