网络面试题

一、TCP和UDP区别

  A、TCP是面向连接的,需要先建立连接(三次握手和四次挥手)再发送数据。UDP是无连接的,不需要建立连接。

  B、TCP是可靠的,如果丢包会进行重传,并且数据包是有序的。UDP是不可靠的,如果数据包丢失,不会进行重传,并且,UDP传输的数据包是乱序的。

  C、TCP会进行流量控制和拥塞控制,UDP只会不停的发送数据包。

  D、TCP用的是字节流模式,会对数据包进行拆分、合并等处理。UDP使用的是数据报模式,不会对数据包进行拆分、合并处理。

  E、TCP因为每个步骤都要进行特别的管理和确认,所以占用的系统资源比较多。而UDP没有这些,所以占用的系统资源比较小。

  F、TCP数据包的头部因为要填写收件方发件方,以及拆包等信息比较复杂,比较大,至少20个字节。而UDP的头部简单,固定,且比较小,只有8个字节。

二、三次握手和四次挥手

  A、三次握手

    1、客户端发送SYN和SEQ给服务端(第一次握手),客户端收到信息后,返回SYN,ACK(seq+1)和SEQ(第二次握手),客户端收到响应以后,发送SEQ和ACK(seq+1)

  B、如果只有两次握手的情况

    1、客户端发送了SYN和SEQ给服务端,但是迟迟没有收到服务端的响应,便又发送了SYN和SEQ给服务端,这次顺利收到了服务端的响应(SYN,SEQ,ACK),这时候上一次客户端发送给服务端的连接也到达了服务器并顺利返回给客户端,但客户端已经把上次的连接废弃掉了,这样就造成了大量的资源浪费

  C、通信过程中的情况

    1. 如果服务端向客户端发送了SEQ和ACK,但是却没有收到客户端的响应,服务端不会继续等下去,除了间隔小段时间发送报文进行探测,在有限次数内还是没有收到响应,则关闭连接。

  D、四次挥手

    1. 客户端发送FIN、SEQ、ACK给服务端,服务端收到以后发送SEQ和ACK,客户端收到以后就不再发送数据,而是等待数据接收。服务端数据发送完成以后,发送FIN、SEQ、ACK给客户端,客户端收到以后,返回SEQ、ACK,然后关闭连接。服务端接收到以后,关闭连接。

原文地址:https://www.cnblogs.com/DjanFey/p/12337126.html