一.谈谈对OSI七层模型和TCP/IP四层模型的理解?
1.首先OSI七层是指:应用层、表示层、会话层、传输层、网络层、链路层、物理层。
TCP/IP四层是指:应用层(应用层、表示层、会话层)、传输层、网络层、网络接口层(链路层、 物理层)
2.之所以这样划分,每一层都负责处理自己的操作,并接收由它的下一层所提供的特定服务和负责为自己的上一层提供特定的服务。
3.就想发送快递一样,我们把物件交给快递小哥,快递小哥把物件打包成包裹并运到配送站地点,配送站点再根据发送地址和其他因素安排具体的运送车辆。每个角色都有自己的业务。
二.谈谈TCP协议的3次握手过程?
1.第一次握手
客户端先向服务器端发送一个同步数据包(报文段)
数据包的TCP首部内容:同步 SYN=1,确认 ACK=0,序号 seq=x
根据TCP首部内容,表示这是一个请求建立连接的数据包,其中seq=x为 所传送数据的第 一 个字节的序号
2.第二次握手
服务器收到客户端发送的第一个数据包后,判断出为主动建立连接的数据包。
若服务器同意连接,则服务器发送一个数据包进行回应。
数据包的TCP首部内容:同步SYN=1,确认ACK=1,序号seq=y,确认号ack=x+1
3.第三次握手
客户端收到服务器的确认之后,再给服务器发送一个数据包。
数据包的TCP首部内容:同步SYN=0,确认ACK=1,序号seq=x+1,确认号ack=y+1
SYN=0,表示双方已同意建立连接;
确认ACK=1,表示收到服务器的确认数据包;
序号seq=x+1,表示发出的数据包就是数据的第x+1个字节;
确认号ack=y+1,表示收到服务器发送y
字节数据,并告诉服务器下次应从数据的第y+1 个字节开始发送。
4.举例:就像打电话一样
小红:我是小红,你是小黄吗?
小黄:小红,我是小黄。
小红:我想给你说个事。
......
三.TCP协议为什么要3次握手?2次,4次不行吗?
在建立TCP连接过程中的前两次握手:①客户端向服务器发出建立连接的请求、② 服务器向客户端确认这个请求,足以证明客户端与服务器之间的网络是畅通的。
如果没有最后一个数据包确认(第三次握手),假设一个特殊场景:客户端先发出一个建立连接的请求数据包,由于网络原因,客户端在设定的超时时间内,还未收到服务器的确认数据包。于是发出第二个建立连接的请求数据包,这次网路通畅,数据包很快到达服务器,服务器的确认数据包也很快就到达客户端。于是客户端与服务器开始传输数据。但是客户端第一次发出的建立连接的请求数据包到达服务器,服务器以为是再次建立连接,所以又发出一个确认数据包。由于客户端已经收到了一个确认数据包,所以会忽略服务器发来的第二个确认数据包,但是服务器发出确认数据包之后就要一直等待客户端的回复,而此时的客户端永远也不会回复服务器。由此服务器无效等待,造成资源浪费。如果过于频繁会导致服务器停止响应。
所以,三次握手的主要作用是为了避免重复连接,防止旧的重复连接引起连接混乱问题。另外,通过三次握手,可以得到一个确认的可靠初始化序列号seq,用于进行可靠性传输。而如果只有2
次握手,则无法初始化序列号seq。
综上所述,TCP协议最少需要通过3
次握手建立连接。当然, TCP连接也通过4
次握手或5
次握手建立连接,实现 TCP连接的稳定性,但3
次握手是最节省资源的连接方式。
四.谈谈TCP协议的四次挥手过程?
1.第一次挥手
首先客户端向服务器发送连接释放的请求报文(数据包),并停止发送数据。
在连接释放报文(数据包)的TCP首部中:终止FIN=1,确认ACK = 0
终止FIN=1,意味着客户端要主动释放客户端—>服务器的TCP连接;序号位seq为u,u 值由客户端指定。随后等待B的确认。
2.第二次挥手
服务器收到连接释放的报文之后,给客户端发送确认报文。从客户端到服务器这个方向上的 连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务器,但是服务器 还可以发送数据给客户端,客户端仍可以接收。
在服务器发送给客户端确认报文的TCP首部中:终止FIN=0,确认ACK=1,序号位seq=v, 确认号ack=u+1
确认ACK=1表示收到了客户端发送的数据包,同意客户端释放连接;
3.第三次挥手
若服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发 送确认报文。
在确认报文的TCP首部中:确认ACK=1,终止FIN=1
确认ACK=1,表示服务器已经把需要发给客户端的数据发完了;
终止FIN=1,表示服务器要释放服务器—>客户端的TCP连接;
此后服务器不再向客户端发送数据,但能接收数据。
4.第四次挥手
客户端收到服务器的连接释放报文段后,向服务器发出确认报文。
在确认报文的TCP首部中:确认ACK=1,终止FIN = 0
确认ACK=1,表示收到服务器的确认报文,并同意服务器释放连接
五.什么是流量控制?
流量控制是为了控制发送方发送速率,保证接收方来得及接收。
TCP
连接的每一方都有固定大小的缓冲空间,TCP
的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失,从而实现流量控制。
TCP
使用的流量控制是 利用滑动窗口实现。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。
六.什么是滑动窗口?
滑动窗口:发送端窗口 和 接收端窗口
发送端窗口:发送窗口 和 可用窗口
发送窗口:存放已发送但未收到ACK确认的数据
可用窗口:未发送但大小在接收方处理范围之内的数据
发送端窗口的大小是由接收端处理接收数据的能力来决定的,发送方的窗口的大小是由接收方的TCP首部的窗口字段决。发送方发送的数据大小不能超过接收方的窗口大小,否则接收方就无法正常接收到数据。
七.什么是拥塞控制?
拥塞控制:防止大量数据涌入网络,导致数据包延迟,丢失等情况发生。因此TCP协议通过四个算法:慢开始、拥塞避免、拥塞发生、快速恢复,来对拥塞进行处理或者预防。
慢开始:当主机不能开始发送数据时就发送大量的数据容易导致网络拥塞。所以令cwnd(拥塞窗口)=1,发送方只能发送 1
个报文段;当收到确认后,将 cwnd加倍,因此之后发送方能够发送的报文段数量为:2,4,8...
拥塞避免:当cwnd慢启动的门限值时,就会进入拥塞避免,每轮只能将cwnd加1。
拥塞发生:
当网络出现拥塞,会发生数据包重传,重传机制主要有两种:
超时重传:慢启动门限值=cwnd/2 cwnd=1 重新进入慢启动
快速重传:慢启动门限值=cwnd/2 cwnd=cwnd/2 重新进入快速恢复
快速恢复:cwnd=慢启动门限值+3;重传丢失的数据包。
八.TCP和UDP有什么区别?
- 面向连接:TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。
- 可靠传输:TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;
UDP
不保证可靠性传输。 - 性能效率:TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。
- 首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节。