|
| 1 | +<!-- TOC --> |
| 2 | + |
| 3 | +- [前言](#前言) |
| 4 | +- [第一部分:传输层](#第一部分传输层) |
| 5 | + - [1. 说一下OSI七层模型 TCP/IP四层模型 五层协议](#1-说一下osi七层模型--tcpip四层模型--五层协议) |
| 6 | + - [(1)五层协议](#1五层协议) |
| 7 | + - [(2)ISO七层模型中表示层和会话层功能是什么?](#2iso七层模型中表示层和会话层功能是什么) |
| 8 | + - [(3)数据在各层之间的传递过程](#3数据在各层之间的传递过程) |
| 9 | + - [(4)TCP/IP四层模型](#4tcpip四层模型) |
| 10 | + - [2. TCP报头格式和UDP报头格式](#2-tcp报头格式和udp报头格式) |
| 11 | + - [(1)UDP 和 TCP 的特点](#1udp-和-tcp-的特点) |
| 12 | + - [(2)UDP 首部格式](#2udp-首部格式) |
| 13 | + - [(3)TCP 首部格式](#3tcp-首部格式) |
| 14 | + - [3. TCP三次握手?那四次挥手呢?如何保障可靠传输](#3-tcp三次握手那四次挥手呢如何保障可靠传输) |
| 15 | + - [(1)三次握手](#1三次握手) |
| 16 | + - [(2)为什么TCP连接需要三次握手,两次不可以吗,为什么](#2为什么tcp连接需要三次握手两次不可以吗为什么) |
| 17 | + - [(3)四次挥手](#3四次挥手) |
| 18 | + - [(4)四次挥手的原因](#4四次挥手的原因) |
| 19 | + - [(5)TIME_WAIT](#5time_wait) |
| 20 | + - [(6)如何保证可靠传输](#6如何保证可靠传输) |
| 21 | + - [(7)TCP连接状态?](#7tcp连接状态) |
| 22 | + - [4. TCP连接中如果断电怎么办](#4-tcp连接中如果断电怎么办) |
| 23 | + - [5. TCP和UDP区别?如何改进TCP](#5-tcp和udp区别如何改进tcp) |
| 24 | + - [6. TCP滑动窗口](#6-tcp滑动窗口) |
| 25 | + - [7. TCP流量控制](#7-tcp流量控制) |
| 26 | + - [8. TCP拥塞处理(Congestion Handling)](#8-tcp拥塞处理congestion-handling) |
| 27 | + - [(1)慢开始与拥塞避免](#1慢开始与拥塞避免) |
| 28 | + - [(2)快重传与快恢复](#2快重传与快恢复) |
| 29 | + - [(3)发送窗口的上限值](#3发送窗口的上限值) |
| 30 | + - [9. 如何区分流量控制和拥塞控制](#9-如何区分流量控制和拥塞控制) |
| 31 | + - [10. 解释RTO,RTT和超时重传](#10-解释rtortt和超时重传) |
| 32 | + - [11. 停止等待和超时重传](#11-停止等待和超时重传) |
| 33 | + - [12. 从输入网址到获得页面的网络请求过程](#12-从输入网址到获得页面的网络请求过程) |
| 34 | +- [第二部分:应用层(HTTP)](#第二部分应用层http) |
| 35 | + - [1. URL、URI、URN区别](#1-urluriurn区别) |
| 36 | + - [2. HTTP的请求和响应报文](#2-http的请求和响应报文) |
| 37 | + - [(1)请求报文](#1请求报文) |
| 38 | + - [(2)响应报文](#2响应报文) |
| 39 | + - [3. HTTP状态](#3-http状态) |
| 40 | + - [(1)1XX 信息](#11xx-信息) |
| 41 | + - [(2)2XX 成功](#22xx-成功) |
| 42 | + - [(3)3XX 重定向](#33xx-重定向) |
| 43 | + - [(4)4XX 客户端错误](#44xx-客户端错误) |
| 44 | + - [(5)5XX 服务器错误](#55xx-服务器错误) |
| 45 | + - [4. HTTP方法](#4-http方法) |
| 46 | + - [(1)GET](#1get) |
| 47 | + - [(2)HEAD](#2head) |
| 48 | + - [(3)POST](#3post) |
| 49 | + - [(4)PUT](#4put) |
| 50 | + - [(5)PATCH](#5patch) |
| 51 | + - [(6)DELETE](#6delete) |
| 52 | + - [(7)OPTIONS](#7options) |
| 53 | + - [(8)CONNECT](#8connect) |
| 54 | + - [(9)TRACE](#9trace) |
| 55 | + - [5. GET和POST的区别?【阿里面经OneNote】](#5-get和post的区别阿里面经onenote) |
| 56 | + - [6. 如何理解HTTP协议是无状态的](#6-如何理解http协议是无状态的) |
| 57 | + - [7. 什么是短连接和长连接](#7-什么是短连接和长连接) |
| 58 | + - [8. Cookie](#8-cookie) |
| 59 | + - [(1)用途](#1用途) |
| 60 | + - [(2)创建过程](#2创建过程) |
| 61 | + - [(3)分类](#3分类) |
| 62 | + - [(4)JavaScript 获取 Cookie](#4javascript-获取-cookie) |
| 63 | + - [(5)Secure 和 HttpOnly](#5secure-和-httponly) |
| 64 | + - [(6)作用域](#6作用域) |
| 65 | + - [9. Session](#9-session) |
| 66 | + - [10. 浏览器禁用 Cookie](#10-浏览器禁用-cookie) |
| 67 | + - [11. Cookie 与 Session 选择](#11-cookie-与-session-选择) |
| 68 | + - [12. HTTPs安全性](#12-https安全性) |
| 69 | + - [(1)对称密钥加密](#1对称密钥加密) |
| 70 | + - [(2)非对称密钥加密](#2非对称密钥加密) |
| 71 | + - [(3)HTTPs 采用的加密方式](#3https-采用的加密方式) |
| 72 | + - [13. SSL/TLS协议的握手过程](#13-ssltls协议的握手过程) |
| 73 | + - [(1)client hello](#1client-hello) |
| 74 | + - [(2)server hello](#2server-hello) |
| 75 | + - [(3)server certificate](#3server-certificate) |
| 76 | + - [(4)Server Hello Done](#4server-hello-done) |
| 77 | + - [(5)Client Key Exchange](#5client-key-exchange) |
| 78 | + - [(6)Change Cipher Spec(Client)](#6change-cipher-specclient) |
| 79 | + - [(7)Finished(Client)](#7finishedclient) |
| 80 | + - [(8)Change Cipher Spec(Server)](#8change-cipher-specserver) |
| 81 | + - [(9)Finished(Server)](#9finishedserver) |
| 82 | + - [(10-11)Application Data](#10-11application-data) |
| 83 | + - [(12)Alert:warning, close notify](#12alertwarning-close-notify) |
| 84 | + - [(*)demand client certificate](#demand-client-certificate) |
| 85 | + - [(*)check server certificate](#check-server-certificate) |
| 86 | + - [](#) |
| 87 | + - [14. HTTP和HTTPS的区别【阿里面经OneNote】](#14-http和https的区别阿里面经onenote) |
| 88 | + - [15. HTTP2.0特性](#15-http20特性) |
| 89 | + - [(1)二进制分帧](#1二进制分帧) |
| 90 | + - [(2)多路复用](#2多路复用) |
| 91 | + - [(3)服务器推送](#3服务器推送) |
| 92 | + - [(4)头部压缩](#4头部压缩) |
| 93 | + - [16. RESTful API](#16-restful-api) |
| 94 | +- [第三部分:网络层](#第三部分网络层) |
| 95 | + - [1. mac和ip怎么转换](#1-mac和ip怎么转换) |
| 96 | +- [第三部分:网络安全](#第三部分网络安全) |
| 97 | + - [1. 如果客户端不断的发送请求连接会怎样?【阿里面经OneNote】](#1-如果客户端不断的发送请求连接会怎样阿里面经onenote) |
| 98 | + - [2. 怎么知道连接是恶意的呢?可能是正常连接?【阿里面经OneNote】](#2-怎么知道连接是恶意的呢可能是正常连接阿里面经onenote) |
| 99 | + - [3. Web攻击基础](#3-web攻击基础) |
| 100 | + - [(1)跨站脚本攻击XSS](#1跨站脚本攻击xss) |
| 101 | + - [(2)跨站请求伪造CSRF](#2跨站请求伪造csrf) |
| 102 | + - [(3)SQL注入攻击](#3sql注入攻击) |
| 103 | + - [(4)拒绝服务攻击Dos](#4拒绝服务攻击dos) |
| 104 | + - [(5)泪滴攻击](#5泪滴攻击) |
| 105 | +- [附录1:参考面经](#附录1参考面经) |
| 106 | + - [【重口味 ぅヾ】2018秋招面经-后端开发](#重口味-ぅヾ2018秋招面经-后端开发) |
| 107 | +- [附录2:参考资料](#附录2参考资料) |
| 108 | + |
| 109 | +<!-- /TOC --> |
| 110 | + |
1 | 111 | # 前言 |
2 | 112 |
|
3 | 113 | 在本文中,将总结后台开发中的核心网络知识。主要围绕网络层、传输层、应用层,核心为TCP和HTTP两部分知识。 |
@@ -137,7 +247,7 @@ TCP/IP 协议族是一种沙漏形状,中间小两边大,IP 协议在其中 |
137 | 247 |
|
138 | 248 |
|
139 | 249 |
|
140 | | -### (2)为什么TCP连接需要三次握手,两次不可以吗,为什么? |
| 250 | +### (2)为什么TCP连接需要三次握手,两次不可以吗,为什么 |
141 | 251 |
|
142 | 252 | **为了防止已失效的连接请求报文段突然又传送到了服务端,占用服务器资源。 (假设主机A为客户端,主机B为服务器端)** |
143 | 253 |
|
@@ -310,27 +420,39 @@ TCP 主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、 |
310 | 420 | - 虽然 TCP 的窗口基于字节,但是这里设窗口的大小单位为报文段。 |
311 | 421 |
|
312 | 422 |
|
313 | | - <div align="center"> <img src="pics/congest2.png" width="800"/> </div><br> |
| 423 | + <div align="center"> <img src="pics/congest2-3.png" width="700"/> </div><br> |
| 424 | + |
| 425 | + |
314 | 426 |
|
315 | 427 | ### (1)慢开始与拥塞避免 |
316 | 428 |
|
317 | | -发送的最初执行慢开始,令 cwnd=1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 ... |
| 429 | + 发送的最初执行慢开始,令 cwnd=1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 ... |
318 | 430 |
|
319 | | -注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能也就更高。设置一个慢启动阈值 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。 |
| 431 | + 注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能也就更高。设置一个慢启动阈值 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。 |
320 | 432 |
|
321 | | -如果出现了超时,则令 ssthresh = cwnd/2,然后重新执行慢开始。 |
| 433 | + 如果出现了超时,则令 ssthresh = cwnd/2,然后重新执行慢开始。 |
322 | 434 |
|
323 | 435 | ### (2)快重传与快恢复 |
324 | 436 |
|
325 | | -在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。 |
| 437 | + 在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。例如已经接收到 M1 和 M2,此时收到 M4,应当发送对 M2 的确认。 |
| 438 | + |
| 439 | + 在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。 |
| 440 | + |
| 441 | + 在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd/2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。 |
326 | 442 |
|
327 | | -在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。例如收到三个 M2,则 M3 丢失,立即重传 M3。 |
328 | 443 |
|
329 | | -在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd/2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免。慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。 |
330 | 444 |
|
| 445 | +<div align="center"> <img src="pics/congest3-2.png" width="600"/> </div><br> |
| 446 | + |
| 447 | +### (3)发送窗口的上限值 |
| 448 | + |
| 449 | + 发送方的发送窗口的上限值应当取为接收方窗口 rwnd 和拥塞窗口 cwnd 这两个变量中较小的一个,即应按以下公式确定: |
| 450 | + |
| 451 | +- 发送窗口的上限值 = Min {rwnd, cwnd} |
| 452 | + - 当 rwnd < cwnd 时,是接收方的接收能力限制发送窗口的最大值。 |
| 453 | + - 当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。 |
331 | 454 |
|
332 | 455 |
|
333 | | -<div align="center"> <img src="pics/congest3.png" width="600"/> </div><br> |
334 | 456 |
|
335 | 457 |
|
336 | 458 |
|
@@ -1173,8 +1295,6 @@ https://www.nowcoder.com/discuss/61958 |
1173 | 1295 |
|
1174 | 1296 |
|
1175 | 1297 |
|
1176 | | - |
1177 | | - |
1178 | 1298 | IP地址+端口 = 套接字 |
1179 | 1299 |
|
1180 | 1300 |
|
|
0 commit comments