TCP协议常见面试问题整理

1.谈一谈对OSI七层模型和TCP/IP四层模型的理解?

        OSI七层模型是OSI组织对计算机网络提出的分层,因为从应用软件到底层的网络传输整个过程中,有着非常多的复杂的操作,为了便于管理整个计算机网络体系,就提出了网络分层;OSI七层模型就是由OSI组提出的互联网标准分层模型。

七层分别为:

应用层:最高层,面对用户,提供计算机网络与最终呈现给用户的界面

表示层:为了使得数据能够被其他的计算机理解,再次将数据转换成另外一种格式,比如文字、视频、图片等。

会话层:负责建立和断开连接

传输层:有了网络层的MAC+IP地址之后,为了确定数据包是从哪个进程发送过来的,就需要端口号,通过端口来建立通信,比如TCP和UDP属于这一层的协议。

网络层:为了区分哪些MAC地址属于同一个子网,网络层定义了IP和子网掩码,通过对IP和子网掩码进行与运算就知道是否是同一个子网,再通过路由器和交换机进行传输。IP协议属于网络层的协议。

数据链路层:首先,把比特流封装成数据帧的格式,对0、1进行分组。电脑连接起来之后,数据都经过网卡来传输,而网卡上定义了全世界唯一的MAC地址。然后再通过广播的形式向局域网内所有电脑发送数据,再根据数据中MAC地址和自身对比判断是否是发给自己的。

物理层:通过网线、光缆等这种物理方式将电脑连接起来。传递的数据是比特流,

TCP/IP四层模型是互联网实际使用的分层模型,他是OSI分层模型的简化版;

四层分别为:

应用层:他是将OSI七层模型中的应用层、表示层、会话层进行了合并

传输层:负责两台主机进程之间的通信,提供可靠的数据传输服务;主要使用的是TCP,UDP协议

网络层:网络层用到的协议是IP协议,互联网非常复杂,两台计算机进行通信时,中间会有很多数据链路,网络层就负责找到合适的网间路由和交换结点, 确保数据及时传送。

网络接口层:他是将OSI七层模型中的数据链路层和物理层进行合并;

2.谈谈TCP协议的3次握手过程?

TCP协议是一种可靠的面向连接的协议;三次握手就是为了创建可靠的连接;

第一次握手:

客户端向服务器发送一个同步数据包;数据包的TCP首部内容为

同步:SYN:1   确认: ACK:0   序号:seq:x

第二次握手:

服务器向客户端发送一个数据包来确认连接;

同步:SYN:1   确认: ACK:1  序号:seq:y  确认号:  ack:x+1

第三次握手:

客户端收到服务端的确认后,客户端向服务器再发送一个数据包;

数据包的TCP首部内容:同步SYN=0,确认ACK=1,序号seq=x+1,确认号ack=y+1

3.TCP协议为什么要3次握手?2次,4次不行吗? 

在建立TCP连接过程中的前两次握手:

①客户端向服务器发出建立连接的请求

② 服务器向客户端确认这个请求,足以证明客户端与服务器之间的网络是畅通的。

如果没有第三次握手,客户端直接向服务器发送数据包,第一次请求连接达到服务器,第二次服务器以为时再次请求连接;服务器会再次发出确认连接的数据包,但是客户端已经收到一个确认数据包;所以不会再回应本次的确认;而服务器一直在等待客户端回应;就造成了无效等待;

所以,三次握手的主要作用是为了避免重复连接,防止旧的重复连接引起连接混乱问题。通过三次握手,可以得到一个确认的可靠初始化序列号seq,用于进行可靠性传输。而如果只有2次握手,则无法初始化序列号seq

4.谈谈TCP协议的四次挥手过程?

TCP协议通过四次挥手来断开两台计算机的连接;

第一次挥手:
首先客户端向服务器发送连接释放的请求报文(数据包),并停止发送数据。
在连接释放报文(数据包)的TCP首部中:终止FIN=1,确认ACK = 0

第二次挥手:
服务器收到连接释放的报文之后,给客户端发送确认报文。从客户端到服务器这个方向上的连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务器,但是服务器还可以发送数据给客户端,客户端仍可以接收
在服务器发送给客户端确认报文的TCP首部中:终止FIN=0,确认ACK=1,序号位seq=v,确认号ack=u+1

第三次挥手:
若服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文。
在确认报文的TCP首部中:确认ACK=1,终止FIN=1

第四次挥手:
客户端收到服务器的连接释放报文段后,向服务器发出确认报文
在确认报文的TCP首部中:确认ACK=1,终止FIN = 0

5.什么是流量控制?

流量控制是为了控制发送方发送速率,保证接收方来得及接收
TCP连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失,从而实现流量控制。
TCP使用的流量控制是利用滑动窗口实现。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。


6.什么是滑动窗口?

解决每个数据包确认应答效率较低的问题,TCP 协议引入了窗口这个概念。即使在往返时间较长的情况下,它也不会降低网络通信的效率。

发送方的窗口的大小是由接收方的TCP首部的窗口字段决定。发送方发送的数据大小不能超过接收方的窗口大小,否则接收方就无法正常接收到数据。发送窗口内的字节都允许被发送。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向前滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态。


7.什么是拥塞控制?

在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延、丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大….

TCP 主要通过四个算法来进行拥塞控制:慢启动(如果产生超时重传就会直接从慢启动开始进行拥塞控制)、拥塞避免、拥塞发生、快速恢复(如果产生快速重传则会使用快速恢复)
发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:
拥塞窗口cwnd是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。
发送方窗口是一块保存有数据字节内容的内存缓冲区。

慢开始:拥塞窗口从1开始,采用加倍计算方式,由小到大逐渐增大。
拥塞避免:慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd加 1,降低拥塞窗口的增长速度。
快重传:在接收方,要求每次接收到报文段后,都应该对最后一个已收到的报文段进行确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
快恢复:快恢复是配套快重传使用,当执行快重传时,就执行“乘法减小(ssthresh × 0.5)”算法,把慢开始门限 ssthresh 减半,同时执行拥塞避免,使拥塞窗口缓慢地线性增大。


8.TCP和UDP有什么区别?

面向连接:TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。
可靠传输:TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。
性能效率:TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。
首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿究院张天师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值