1.OSI 七层模型是什么?每一层的作用是什么?
- osi七层模型分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;
-
物理层:实现的是相邻计算机节点之间比特流的透明传送;
-
数据链路层:提供介质访问和链路管理;把位单元合并为字节,然后将字节合并到帧中,以使媒体能够通过数据链路层访问;
-
网络层:IP寻址以及路由选择,将收集到的报文转变成IP的数据报;
-
传输层:为两台主机进程间的通信提供通用的数据传输服务;
-
会话层:建立、管理和维护表示层实体的会话;
-
表示层:对数据进行格式转换,以及加密处理;
-
应用层:为应用程序提供服务;例如DNS的域名解析、网页浏览中的http等,
2. TCP/IP 四层模型是什么?每一层的作用是什么?
- TCP/IP四层模型分别是:应用层、传输层、网络层、网络接口层;
- 应用层:位于传输层之上,主要提供两个终端设备上的应用程序之间信息交换的服务,它定义了数据交换的格式,消息会交给下一层传输层来传输;(应用层交换的数据单元称之为报文)
- 传输层:它的主要任务就是负责向两台终端设备进程之间的通信提供通用的数据传输服务;
传输层主要使用以下两种协议进行数据传输:
- 传输控制协议TCP:提供面向连接的,可靠的数据传输服务;
- 用户数据协议UDP:提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性);
- 网络层:负责为分组交换网上的不同主机提供通信服务;在发送数据时,网络层把传输层产生的报文段或用户数据报封装成分组和包进行传送;在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报;
- 网络接口层:他是数据链路层和物理层的合体;功能同OSI模型中的物理层和数据链路层;
3.TCP和UDP协议的区别?
4.什么时候选择TCP?什么时候选择UDP?
- TCP:用于对传输准确性要求特别高的场景;比如文件传输、发送和接收邮件、远程登录等等;
基于TCP的协议:
- HTTP;
- HTTPS;
- POP3/IMAP(邮件接收);
- SMTP(邮件发送);
- FTP;
- SSH;
- Telnet;
- UDP:一般用于即时通信,用于对数据传输的准确性要求不是很高的场景;比如:语音、视频、直播等等;
基于UDP的协议:
- DHCP;
- DNS域名系统;实际上 DNS 同时支持 UDP 和 TCP 协议。
5.请你说一说TCP三次握手和四次挥手;
三次握手:
建立一个TCP连接需要“三次握手”,缺一不可:
- 一次握手:客户端发送带有SYN标志的的数据包到服务端,然后客户端进入SYN_SEND状态,等待服务器的确认;
- 二次握手:服务端发送带有SYN+ACK标志的数据包到客户端,然后服务端进入SYN_RECV状态;
- 三次握手:客户端发送带有ACK标志的数据包到服务端,然后客户端和服务端都进入ESTABLISHED状态,完成三次握手;
四次挥手:
断开一个TCP连接需要四次挥手:
- 第一次挥手:客户端发送一个FIN标志的数据包到服务端,用来关闭客户端到服务端之间的数据传送;然后客户端进入到FIN-WAIT-1状态;
- 第二次挥手:服务端收到这个FIN标志的数据包,然后它发送一个带有ACK标志的数据包到客户端。之后服务器进入CLOSE-WAIT状态,客户端进入到FIN-WAIT-2状态;
- 第三次挥手:服务端关闭与客户端的连接,并发送一个FIN标志的数据包到客户端请求关闭连接;然后服务端进入LAST-ACK状态;
- 第四次挥手:客户端发送ACK标志的数据包到服务端,并且进入TIME-WAIT状态,服务端在收到ACK标志的数据包后进入CLOSE状态;此时,如果客户端等待2MSL(报文在网络上存活的最长时间)后依然没有收到回复,就证明服务端已经正常关闭,随后客户端也可以关闭连接了;
只要四次挥手没有结束,客户端和服务端就可以继续传递数据
6.为什么要三次握手?
- 三次握手的目的是为了建立可靠的通信信道,使得客户端和服务端确认自己与对方的发送与接收是正常的;
- 第一次握手:Client什么都不能确认;Server确认了对方发送正常,自己接收正常;
- 第二次握手:Client确认了自己发送接收正常,对方发送接收正常;Server确认了 对方发送正常,自己接收正常;
- 第三次握手:Client确认了自己发送、接收正常;对方发送接收正常;Server确认了自己发送、接收正常,对方发送、接收正常;
三次握手就能确认双方收发功能都正常,缺一不可;
第二次握手传回了ACK,为什么还要传回SYN?
- 服务端传回发送端所发送的ACK是为了告诉客户端:“我接收到的信息确实就是你所发送的信号了”;这表明从客户端到服务端的通信是正常的。回传SYN是为了建立并确认从服务端到客户端的通信;
7.为什么要有四次挥手?
- TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发送连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认了就完全关闭TCP连接;
- 第一次挥手 : A 说“我没啥要说的了”
- 第二次挥手 :B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话
- 第三次挥手 :于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”
- 第四次挥手 :A 回答“知道了”,这样通话才算结束。
为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手?
- 因为服务端在收到客户端断开连接的请求时,可能还有一些数据没有发完,此时先回复ACK,表示收到了断开连接的请求;等到数据发完之后再发FIN,断开服务端到客户端的数据传送;
如果第二次挥手时,服务端的ACK没有到达客户端,会怎么样?
- 客户端没有收到ACK确认时,会重新发送FIN请求;
为什么第四次挥手客户端需要等待2MSL(报文段最长寿命)时间后才进入CLOSE状态?
- 第四次挥手时,客户端发送给服务器的ACK可能丢失,如果服务端因为某些原因没有收到ACK的话,服务端就会重新发送FIN,如果客户端在2MSL的时间内收到了FIN,就会重新发送ACK并再次等待2MSL,防止Server没有收到ACK而不断发送FIN;
8.TCP如何保证传输的可靠性?
- 基于数据块传输;
- 对失序数据包重新排序以及去重;
- 保持首部和数据校验和;
- 数据包丢失重传;
- TCP利用滑动窗口实现流量控制;
- 拥塞控制;当网络拥塞时,减少数据的发送;
9.TCP如何实现流量控制?
- **TCP利用滑动窗口来实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收;**接收方发送的确认报文中的窗口字段可以用来控制发送方的窗口大小,从而影响发送方的发送速率;
TCP发送窗口可以分为四个部分:
- 已经发送并且确认的TCP段;(已经发送并且确认)
- 已经发送但是没有确认的TCP段;(已经发送未确认)
- 未发送但是接收方已经准备接收的TCP段;(可以发送)
- 未发送并且接收方也并未准备接收的TCP段;(不可发送)
TCP接收窗口可以分为三个部分:
-
已经接受并且已经确认的TCP段;(已经接收并确认)
-
等待接收并且允许发送发送方发送的TCP段;(可以接收未确认)
-
不可接收并且不允许对方发送的TCP段;(不可接收)
10.TCP的拥塞控制是怎样实现的?
TCP的拥塞控制采用了4种算法:
- 慢开始:由小到大逐渐增大拥塞窗口数值;
- 拥塞避免:让拥塞窗口缓慢增大,每经过一个往返时间RTT就把发送的拥塞窗口+1;
- 快重传与快恢复:在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。
11. ARQ协议了解吗?
- ARQ自动重传请求是OSI模型中数据链路层和传输层的错误纠正协议之一。
- 它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。
- 如果发送方在发送后一段时间内没有收到确认信息ACK,他通常会重新发送,直到收到确认或者重试超过一定的次数;
ARQ协议包括停止等待ARQ协议和连续ARQ协议;
12.从输入URL到页面展示到底发生了什么?
- 输入URL;
- DNS解析;(将域名解析为IP地址)
- 浏览器与服务器建立TCP连接;(三次握手)
- 浏览器向服务器发送HTTP请求;
- 服务器处理HTTP请求,并返回HTTP报文;
- 浏览器解析并渲染页面;
- 断开连接;(四次挥手)