Skip to content

Commit 4fe7412

Browse files
authored
Update 计算机网络面试题.md
1 parent 9577319 commit 4fe7412

File tree

1 file changed

+96
-38
lines changed

1 file changed

+96
-38
lines changed

docs/计算机网络面试题.md

Lines changed: 96 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,84 @@
1-
## OSI与TCP/IP都有哪些协议(五层协议)?
1+
## TCP/IP四层网络模型⭐
22

3-
- **应用层** :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。
4-
- **传输层** :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
5-
- **网络层** :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
6-
- **数据链路层** :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
7-
- **物理层** :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
3+
**第一层 网络接口层**
84

9-
## 简述 tcp 和 udp的区别⭐
5+
网络接口层包括用于协作IP数据在已有网络介质上传输的协议。
6+
7+
协议:ARP,RARP
8+
**第二层 网间层**
9+
10+
网间层对应于OSI七层参考模型的网络层。负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。
11+
12+
协议:本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),ICMP协议。
13+
**第三层 传输层**
14+
15+
传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。
16+
17+
其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。
18+
**第四层 应用层**
19+
20+
应用层对应于OSI七层参考模型的应用层和表达层。
21+
22+
因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。
23+
24+
## OSI七层网络模型⭐
25+
26+
**第一层 物理层**
27+
28+
作用:负责最后将信息编码成电流脉冲或其它信号用于网上传输。它由计算机和网络介质之间的实际界面组成,可定义电气信号、符号、线的状态和时钟要求、数据编码和数据传输用的连接器。所有比物理层高的层都通过事先定义好的接口而与它通话。
29+
30+
协议:如最常用的RS-232规范、10BASE-T的曼彻斯特编码以及RJ-45就属于第一层。
31+
**第二层 数据链路层**
32+
33+
作用:数据链路层通过物理网络链路提供可靠的数据传输。
34+
35+
协议:ATM,FDDI等。
36+
**第三层 网络层**
37+
38+
作用:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。
39+
40+
协议:IP,IPX等
41+
**第四层 传输层**
42+
43+
作用:传输层向高层提供可靠的端到端的网络数据流服务。传输层的功能一般包括流控、多路传输、虚电路管理及差错校验和恢复。流控管理设备之间的数据传输,确保传输设备不发送比接收设备处理能力大的数据;多路传输使得多个应用程序的数据可以传输到一个物理链路上;虚电路由传输层建立、维护和终止;差错校验包括为检测传输错误而建立的各种不同结构;而差错恢复包括所采取的行动(如请求数据重发),以便解决发生的任何错误。
44+
45+
协议:TCP,UDP,SPX。
46+
**第五层 会话层**
47+
48+
作用:会话层建立、管理和终止表示层与实体之间的通信会话。通信会话包括发生在不同网络应用层之间的服务请求和服务应答,这些请求与应答通过会话层的协议实现。它还包括创建检查点,使通信发生中断的时候可以返回到以前的一个状态。
49+
50+
协议:RPC,SQL等
51+
**第六层 表示层**
52+
53+
作用:这一层的主要功能是定义数据格式及加密。
54+
55+
协议:FTP,加密
56+
**第七层 应用层**
57+
58+
作用:应用层是最接近终端用户的OSI层,这就意味着OSI应用层与用户之间是通过应用软件直接相互作用的。应用层的功能一般包括标识通信伙伴、定义资源的可用性和同步通信。
59+
协议:telnet,HTTP,FTP,WWW,NFS,SMTP等。
60+
61+
## 简述 TCP 和 UDP 的区别⭐
1062

1163
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
1264
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
13-
- Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
1465
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
1566
- 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
1667
- TCP对系统资源要求较多,UDP对系统资源要求较少。
17-
### tcp和udp的优点⭐
1868

19-
- TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
20-
- UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击…… UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。 基于上面的优缺点,那么: 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输。什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP。
69+
### TCP 特点⭐
70+
71+
- 基于链接,点对点传输,在传输数据前要先建立好连接,再进行传输。
72+
- 一旦建立连接就可以是双向通信
73+
- 传输是基于字节流而不是报文,将数据根据大小进行变好,接收端通过 ack 大小进行编号,从而保证接收数据的有序性和完整性。
74+
- TCP 还可提供流量控制能力,通过滑动窗口来控制数据的发送速率,滑动窗口的本质就是动态缓冲区
75+
- 通过慢启动,拥塞避免,拥塞发生,快速恢复四个算法实现了拥塞控制
2176

77+
**选择**
2278

23-
## TCP 三次握手和四次挥手(重点)
79+
什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输。什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP。
80+
81+
## TCP 三次握手和四次挥手(重点)⭐
2482

2583
先介绍各单词的含义:
2684

@@ -30,7 +88,7 @@
3088
- **ACK:确认序号标志**
3189
- PSH:push标志
3290
- RST:重置连接标志
33-
- SYN:同步序列号,用于建立连接过程
91+
- SYN (Synchronize Sequence Numbers) :同步序列号,用于建立连接过程
3492
- FIN:finish标志,用于释放链接
3593

3694
握手是为了建立连接,流程如下图 :
@@ -41,68 +99,68 @@ seq:为自己的标记缓存的初始序号
4199
ack:确认号
42100

43101
**第一次握手**
44-
一开始都是close状态,假设主动客户端主动打开,服务端进入listen监听状态,等待请求,客户端发出连接请求报文(SYN包),报文头为SYN=1,seq为任意正整数,此时进入同步发送状态(SYN_SEND),等待服务器确认。
102+
一开始都是close状态,客户端主动打开,服务端进入listen监听状态,等待请求,客户端发出连接请求报文(SYN包),报文头为SYN,seq为任意正整数x,此时进入同步发送状态(SYN_SEND),等待服务器确认。
45103
**第二次握手:**
46-
如果服务端同意接收信息,会发出确认报文(SYN+ACK包 ),报文头seq为另外一个正整数,ack为x+1,服务端进入同步收到的状态(SYN_RCVD);
104+
如果服务端同意接收信息,会发出确认报文(SYN+ACK包 ),报文头seq为另外一个正整数y,ack为x+1,服务端进入同步收到的状态(SYN_RCVD);
47105
前两步都不携带数据,都需要消耗一个序列号。
48106
**第三次握手:**
49-
客户端接收到确认报文(SYN+ACK包 ),还要向服务端给出确认,发出确认报文(ACK包),两端都进入ESTABLISHED状态,完成三次握手。
107+
客户端接收到确认报文(SYN+ACK包 ),进入ESTABLISHED状态,还要向服务端给出确认,发出确认报文(ACK包 ack=y+1 ),两端都进入ESTABLISHED状态,完成三次握手。
50108
**此后,双方就建立了链接,可以开始通信了。**
51109

52-
## 为什么需要三次握手?
110+
## 为什么需要三次握手?
53111

54-
简单说就是: **为了双方确认自己与对方的发送与接收是正常的。**
112+
简单说就是: **为了双方确认自己与对方的发送与接收是正常的。**两次握手的话至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认,不能建立起双向通信。
55113

56114
**为了初始化Sequence Number 的初始值**: 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。
57115

58116
## 首次握手的隐患–SYN超时
59117

60118
**原因:**
61-
Server收到Client的SYN ,回复SYN- ACK的时候未收到ACK确认
62-
Server不断重试直至超时, Linux默认等待63秒才断开连接
63-
黑客可能利用这个漏洞进行恶意攻击
119+
Server收到Client的SYN ,回复SYN- ACK的时候未收到ACK确认,导致 Server 一直在 SYN_RCVD 状态,
120+
Server不断重试直至超时, 影响正常数据发送,但 Linux 默认等待63秒才断开连接
121+
所以黑客可能利用这个漏洞进行恶意攻击
64122

65123
**防护措施:**
66124
SYN队列满后,通过tcp_ syncookies参数回发SYN Cookie
67-
若为正常连接则客户端会回发SYN Cookie 告诉服务端已经接收到请稍等,直接建立连接。
125+
若为正常连接则客户端会回发 SYN Cookie 告诉服务端已经接收到请稍等,直接建立连接。
68126

69127
## 建立连接后,Client出现故障怎么办
70128

71129
保活机制
72130
一直发送探测报文,直到达到设定次数还无响应就中断连接
73131

74-
## TCP四次挥手(重点)
132+
## TCP四次挥手(重点)
75133

76134
目的:为了中止连接
77135

78136
流程图:
79137
<div align="center"> <img src="https://github.com/lvminghui/Java-Notes/blob/master/docs/imgs/4次握手.png"/> </div><br>
80138

81-
82139
**第一次挥手:**
83-
最开始两方都处于ESTABLISHED状态,客户端主动关闭,发出连接释放报文(FIN)并且停止发送数据,报文头:FIN和seq,然后进入**FINWAIT1**状态。
140+
最开始两方都处于ESTABLISHED状态,客户端主动关闭,发出连接释放报文(FIN)并且停止发送数据,报文头:FIN和seq =u(等于前面已经传送过来的数据的最后一个字节的序号加1),然后进入**FINWAIT1**状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
84141
**第二次挥手:**
85-
服务器收到报文,发出确认报文(ACK),进入**CLOSEWAIT**状态。
86-
CLOSEWAIT状态:半关闭状态,客户端没有数据需要发送,服务器如果要发送数据客户端也可以接收
142+
服务器收到报文,发出确认报文(ACK,ack=u+1,序列号seq=v),进入**CLOSEWAIT**状态。
143+
CLOSEWAIT状态:半关闭状态,服务器端不接收数据但可能还要发送数据
87144
**第三次挥手:**
88-
客户端收到报文进入**FINWAIT2**状态,等待服务器发送第三次挥手,这段时间可以接收数据。服务端数据发送完后,会发送释放报文,然后进入**LASTACK**状态。
145+
客户端收到报文进入**FINWAIT2**状态,等待服务器发送第三次挥手,这段时间可以接收数据。服务端数据发送完后,会发送释放报文(FIN),但服务器很可能又发送了一些数据,序列号会变化,假定此时的序列号为seq=w ,此时进入**LASTACK**状态。
89146
**第四次挥手:**
90-
客户端收到报文后必须发送确认报文,进入**TIMEWAIT**,但连接没有释放。
91-
服务端收到确认直接进入**CLOSED**状态
147+
客户端收到报文后必须发送确认报文(ACK,ack=w+1,seq=u+1),进入**TIMEWAIT**,但连接没有释放,等待2MSL(2倍最大报文段寿命)来保证连接的可靠关闭才进入**CLOSED**状态。服务端收到确认直接进入**CLOSED**状态。
92148

93149
**为什么什么有TIME_WAIT状态**
94150

95-
确保有足够的时间让对方收到ACK包,所以才设置为2MS
96-
避免新旧连接混淆
151+
* 保证全双工链接可靠关闭
152+
* 保证重复的数据段消失,方式端口被重用时产生数据混淆
97153

98-
#### 为什么需要四次握手才能断开连接
154+
### 为什么连接的时候是三次握手,关闭的时候却是四次握手⭐
99155

100-
因为全双工,发送方和接收方都需要FIN报文和ACK报文
156+
因为在连接时当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,因为可能还有数据需要传输回去,并不能立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了,但我还有一些数据没有发完"。只有等到我Server端所有的报文都发送完了,才会发送FIN报文,因此不能一起发送。所以需要四步握手。
101157

102158
tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输
103159

104160
#### 服务器出现大量CLOSE_ WAIT状态的原因
105161

162+
被动关闭的一方可能存在代码问题没有正确关闭链接导致的
163+
106164
对方关闭socket连接,我方忙于读或写,没有及时关闭连接
107165
**解决:**
108166
检查代码,特别是释放资源的代码
@@ -117,7 +175,7 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
117175
尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
118176
面向报文,不对应用程序提交的报文信息进行拆分或者合并
119177

120-
## 在浏览器中输入url地址 ->> 显示主页的过程
178+
## 在浏览器中输入url地址 ->> 显示主页的过程
121179

122180
总体来说分为以下几个过程:
123181

@@ -128,15 +186,15 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
128186
5. 浏览器解析渲染页面
129187
6. 连接结束,四次挥手
130188

131-
## HTTP状态码
189+
## HTTP状态码
132190

133191
1xx :指示信息–表示请求已接收,继续处理
134192
2xx :成功–表示请求已被成功接收、理解、接受
135193
3xx :重定向–要完成请求必须进行更进一步的操作
136194
4xx :**客户端错误**–请求有语法错误或请求无法实现
137195
5xx :**服务器端错误**–服务器未能实现合法的请求
138196

139-
## **get 和 post 请求有哪些区别?**
197+
## **get 和 post 请求有哪些区别?**
140198

141199
- GET在浏览器回退时是无害的,而POST会再次提交请求。
142200
- GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
@@ -147,7 +205,7 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
147205
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
148206
- GET参数通过URL传递,POST放在Request body中。
149207

150-
## Cookie ,Session区别
208+
## Cookie ,Session区别
151209

152210
Cookie数据存放在客户的浏览器上, Session数据放在服务器上
153211
Session相对于Cookie更安全

0 commit comments

Comments
 (0)