一、网络分层
1.OSI七层模型,五层模型,TCP/IP四层模型,各层的作用
-
OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
-
五层模型:物理层、数据链路层,网络层、运输层、应用层
-
四层模型:网络接口层、网络层、运输层、应用层
-
各层作用:
- 物理层:实现01比特传输
- 数据链路层:确保相邻节点的链路逻辑无差错
- 网络层:定义数据的传输方式,在网络中如何进行寻址和路由选择。
- 传输层:为两个通信节点之间的数据传输提供端到端的可靠性和透明性,常见的协议有TCP和UDP。
- 会话层:管理进程间的通话,实现断点重连。
- 表示层:解决不同主机格式不统一的问题,实现数据格式转换。
- 应用层:实现特定的网络应用。
2.ARP协议在哪一层?用途?
位于数据链路层,用于将IP地址转换为MAC地址,是地址解析协议(Address Resolution Protocol)。
二、TCP相关
3.TCP三次握手过程&&为什么不二握
- 第一次握手:客户端向服务端发送一个带有SYN标志位的TCP报文段,表示客户端想要请求连接,这个报文段包括客户端的初始序列号seq。
- 第二次握手:服务器端收到第一次握手的TCP报文段后,会发送一个带有SYN和ACK标志位的TCP报文段,表示服务端接受了客户端的请求,同时返回客户端的初始序列号以及确认号(seq+1)。
- 第三次握手:客户端收到了SYN-ACK标志位的TCP报文段之后,会发送一个ACK标志位的TCP报文段,来确认服务器的初始序列号(seq+1)。
为什么不二握?
为了防止已失效的连接请求报文被错误地接受并建立连接。
-
1.比如遇到网络滞留的情况,客户端没有收到服务器的响应,就会认为这个请求发送失败,从而会发送一个重复的请求。如果这个滞留的请求最终到达服务器,就会建立一个失效重复的连接。
而三次握手就能避免这种情况,三次握手需要服务器向客户端发送一个syn+ack标志位的TCP报文段,需要等待客户端确认之后发送一个ack标志位的TCP报文段,连接正式建立。 -
2.为了确保双方都能知道连接的确立:在两次连接的情况下,客户端没有发送确认请求,所以服务器端不知道客户端是否知道它确认了客户端的请求。三次握手会在第三次发送这个确认信息,这个确认信息就是服务器的序列号+1,表示前n个序列的信息已经收到了。
4.TCP四次挥手过程&&为什么不三挥
- 第一次挥手:客户端向服务端发送一个FIN状态的数据包,用于关闭客户端到服务端的连接。
- 第二次挥手:服务器收到请求后,会发送一个ack标志的数据包给客户端,ack确认序号就是收到的序号+1。
- 第三次挥手:客户端发送一个FIN状态的数据包,关闭与客户端的连接。
- 第四次挥手:客户端发送ack确认状态的数据包,确认序号为收到序列号+1。
为什么不三挥?
因为服务器在收到客户端断开连接的请求时,可能还有数据没有传输完。所以先回复ack确认,待数据传输完后再回复Fin数据包,断开服务器到客户端的数据传输。
为什么客户端的TimeWait是2*MSL?
因为第四次挥手的,客户端向服务端发送的ack确认报文段可能会丢失,如果丢失的情况下服务器会重新发起Fin请求,如果客户端在2个MSL时间段内收到了重复的FIN请求,就表示第四次的确认信息丢了,就会重发ack确认信息,来避免服务器重复发起Fin请求。
5.TCP拥塞控制&&流量控制
tcp流量控制的过程
接受数据方根据自己的缓存区接受空间确认接受窗口的大小,将该数据包含在TCP数据报文段的窗口字段里,发送给数据发送方。
发送方根据接受方的窗口大小来确定滑动窗口的大小,将已发送已确认的数据划出窗口,同时根据数据接受方传来的窗口数据,动态调整自己发送窗口的大小,以避免超过数据接受方的数据负荷,避免网络拥塞。
tcp拥塞控制的过程
- 慢开始:发送方在连接刚建立时,以指数级别增加发送窗口的大小,直到达到网络的拥塞点。
- 拥塞避免:一旦到了拥塞点时,发送方进入拥塞避免的状态,发送方从指数级别改为线性级别发送,避免增加发送的数据。
- 快重传:当发送方收到三个确认信息时,立即发送自己丢失的数据报文段,而不是等到超时再重传。
- 快恢复:在快重传结束后,将拥塞窗口减半,继续以线性级别增长的方式发送速率,直到达到拥塞窗口的大小。