计算机网络常见面试题:传输层篇

传输层主要工作在什么地方?

传输层主要工作在终端设备(手机、计算机、笔记本、平板电脑等)上。

传输层最重要的两个协议是什么?

TCP协议和UDP协议。

端口是什么,端口有什么作用?端口在协议中一般占用几个字节?

端口是为了标记不同的使用网络的进程,端口使用16个比特为表示。

UDP协议的中文全称是什么?UDP协议有什么特点?请分点说明。

UDP全称是用户数据报协议(User Datagram Protocol),U是一个非常简单的传输层协议,不能保证可靠的交付数据。UDP具备如下特点:
报文结构简单:UDP不像TCP那样有错误重传、滑动窗口等机制对数据传输进行精细控制;
面向非连接 :传输数据之前和终端无建立连接,当想传输数据时,就简单的抓取来自应用程序的数据,并尽可能快地将其放到网路上,在发送端UDP发送数据的速度仅仅受应用程序生产数据的速度,计算机的能力和传输带宽的限制,在接收端UDP将每个接收段放在队列中,应用程序每次从队列中读取一个消息段;
不维护连接状态:支持同时向多个客户端传输相同的消息;
首部开销很小,数据包包头只有8个字节;
吞吐量只受限于数据生成速率、传输速率以及机器性能;
尽最大努力交付
不保证可靠性交付
面向报文,不要对应用程序提交的报文进行拆分或者合并。

TCP协议的中文全称是什么?TCP协议有什么特点?请分点说明。

TCP全称是传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议,可以提供可靠的数据传输服务。TCP具备如下特点:
面向连接:通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。完成数据交换后,双方必须断开此连接,以释放系统资源。
可靠传输
1. 发送应答机制:TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功。
2. 超时重传:发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
3. 错误校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
4. 流量控制和阻塞管理:流量控制用来避免主机发送得过快而使接收方来不及完全收下。

TCP报文头部的序号和确认号都占据4个字节,序号有什么用?确认号呢?

序号用于传输数据的编号,在TCP报文中一个字节一个序号。确认号表示期待收到的数据的首字节序号。

TCP报文头部的数据偏移字段有什么用?他和TCP报文的结构有什么关系?

数据偏移字段表示传输数据偏移TCP首部的距离,如果TCP报文中包含可选数据,则数据偏移字段起作用。

TCP报文头部的标记占用6个比特位,每个比特位的值可以为1或0,他们分别有什么意义?

6个比特位分别是URG、ACK、PSH、RST、SYN、FIN。
URG: Urgent,紧急位,URG=1表示紧急数据URG;
ACK: Acknowledgement,确认位,ACK=1时确认号才生效;
PSH: Push,推送位,PSH=1表示尽快地把数据交付给应用层;
RST: Reset,重置位,RST=1时,重新建立连接;
SYN: Synchronization, 同步位,SYN=1 表示连接请求报文;
FIN: Finish,终止位,FIN=1 表示释放连接。

TCP报文头部的窗口占用2个字节,窗口字段有什么作用?

窗口指明允许对方发送的数据量,用于控制TCP连接中数据传输的速率。

TCP协议一个重要的特点是可靠传输,可靠传输是怎么实现的?请简要描述可靠传输的基本原理。

可靠传输依赖于超时重传,即接收方需要发送确认消息给发送方,如果一定时间内发送方没有收到确认消息,则认为消息没有到达接收方,重新发送数据。

TCP协议的流量控制和TCP报文头部的什么字段有关系?流量控制具体是怎么工作的?请简要描述流量控制的主要过程。

TCP的流量控制和TCP头部的窗口字段是密切相关的,流量控制根据TCP报文中窗口的大小来进行数据的传输,当窗口较大时,增加数据发送速度,当窗口较小时,降低数据发送速度。

TCP协议具备拥塞控制的功能,拥塞控制和流量控制有什么区别?拥塞控制是怎么实现的?

拥塞控制和流量控制是不一样的。
流量控制强调TCP连接双方的发送-接收速率,考虑的是点对点的通信量的控制。
拥塞控制强调网络环境的状态,是对整个网络的全局性考虑。
TCP连接的发送方可以感知网络环境的状态并做出反应。发送端常用的拥塞控制方法有:慢启动算法、拥塞避免算法、快重传算法、快恢复方法。

TCP协议的三次握手是非常重要的知识点,TCP协议的三次握手和TCP报文头部的哪些字段有关系?

序号、确认号、TCP标记ACK、SYN、FIN。

请简述TCP协议三次握手的过程。

第一次握手:​客户端向服务端发出连接请求报文,这时报文首部中的同步位SYN=1,同时随机生成初始序列号 seq=x,此时,客户端进程进入了 SYN-SENT(同步已发送)状态,表示客户端想要和服务端建立连接。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
第二次握手:服务端收到请求报文后,如果同意连接,则发出确认报文,该确认报文的确认位 ACK=1,同步位SYN=1,确认号为ack=x+1,同时也要为确认报文本身随机初始化一个序列号 seq=y。此时,TCP服务端进程进入了SYN-RCVD(同步已接收)状态,这样就表示:服务端告知客户端,服务端同意与客户端建立连接,并询问客户端是否已经准备好。这个报文也不能携带数据,但是同样要消耗一个序号。
第三次握手:客户端收到来自服务端的确认后,还要向服务端发送确认报文给出确认,以便告知服务端 “我客户端确实已经准备好了” 。确认报文的ACK=1,ack=y+1,seq=x+1,此时,客户端就进入了ESTABLISHED(已建立连接)状态,而服务端在接收到该确认报文后也进入ESTABLISHED(已建立连接)状态。至此,TCP连接就建立完成。

TCP协议的三次握手是TCP建立可靠通信的基础,请问为什么TCP连接建立的过程叫做三次握手,请陈述三次握手的必要性,两次握手为什么不行?

两次握手不能保证连接正确建立,TCP被连接的一端有可能响应失效的请求报文而无法确认。

TCP协议的四次挥手是非常重要的知识点,TCP协议的四次挥手和TCP报文头部的哪些字段有关系?

序号、确认号、TCP标记ACK、SYN、FIN。

请简述TCP协议四次挥手的过程,并说明清楚每一次挥手后,双方进入的状态。

第一次挥手 :数据传输完成后,客户端发出连接释放报文,用来请求释放从客户端到服务端方向的连接。该释放报文的终止位FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
第二次挥手:服务端收到这个来自客户端的连接释放报文后,发回一个确认报文进行确认,该确认报文的确认位ACK=1,确认号ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。在此之后,TCP服务端通知高层的应用进程,客户端向服务端方向的连接就释放了,但这个这时候处于半关闭状态,因为服务端向客户端方向的连接还没有释放,也就是说,客户端已经没有数据要发送了,但是服务端若发送数据,客户端依然要接收。这个状态还要持续整个CLOSE-WAIT(关闭等待状态)的时间。客户端收到服务器的确认请求后,就进入FIN-WAIT-2(终止等待2)状态,等待服务端发送连接释放报文(在这之前还需要继续接收服务端尚未发送完毕的数据)。
第三次挥手:服务端发送连接释放报文到客户端,用来请求释放服务端到客户端方向的连接。 该释放报文的FIN=1,ACK=1,ack=u+1,假定序列号seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手:客户端收到这个来自服务端的连接释放报文后,发回一个确认报文进行确认,该确认报文的确认位ACK=1,确认号ack=w+1,并且带上自己的序列号seq=u+1。此时,客户端就进入了TIME-WAIT(时间等待)状态。服务器在收到了客户端发出的确认之后,便立即进入CLOSED状态。注意:此时整个TCP连接还没有释放,必须经过2MSL(两倍最长报文段寿命)、到达时间等待计时器定时器的定时时间后,客户端才会进入CLOSED(关闭)状态。至此,整个TCP连接就结束了。

TCP连接释放的过程中有一个重要概念叫做2MSL,什么是2MSL,它有什么作用?

MSL指的是最长报文段寿命(Max Segment Lifetime),2MSL保证ACK报文可以正确到达对方。

TCP协议有四个重要的定时器,分别是什么定时器?请简述这些定时器的作用。

重传计时器:当TCP发送报文段时,就为这个特定报文段创建了一个重传计时器。若在计时器定时时间到达之前收到对报文段的确认,则撤销计时器;若在收到对特定报文段的确认之前计时器超时,则重传该报文,并把计时器复位。
坚持计时器:当发送端当接收到窗口为0的消息时,则启动坚持定时器。当到达坚持定时器的截止时间时,发送端就发送一个探测报文段,提醒接收端确认已丢失,必须重传。
时间等待计时器:常用于连接终止的时候。当TCP关闭一个连接时,它并不认为这个连接马上就终止了,而是在一个时间等待期间内仍处于一种中间过渡状态。这个时间等待期间就由时间等待计时器设置,其值通常设置为最长报文段寿命的2倍(记为2MSL),这样的话,当客户端最后一个响应FIN请求的ACK报文丢失时,客户端仍然拥有充足的时间等待下一个FIN的到来。如果在2MSL时间内,一个新的FIN到达了,客户端就重发一个ACK,并且重新启动时间等待计时器。
保活计时器:每当服务器收到客户的信息,就将保活计时器复位,超时通常设置2小时,若服务器超过2小时还没有收到来自客户端的信息,就发送探测报文段,若发送了10个探测报文段(每75秒发送一个)还没收到客户端响应,则终止连接。

发布了18 篇原创文章 · 获赞 46 · 访问量 4282

猜你喜欢

转载自blog.csdn.net/qq_42554780/article/details/105340119