计算机网络八股文学习笔记
总结来自于javaguide,本文章仅供个人学习复习
javaguide计算机网络八股
文章目录
- 计算机网络基础
- 网络分层模型
- OSI七层模型
- TCP/IP四层模型
- HTTP
- 从输入URL到页面展示到底发生了什么?(非常重要)
- HTTP状态码
- HTTP Header中常见的字段有哪些?
- HTTP和HTTPS有什么区别?(重要)
- HTTP/1.0和HTTP/1.1有什么区别?
- HTTP/1.1和HTTP/2.0有什么区别?
- HTTP/2.0和HTTP/3.0有什么区别?
- HTTP是不保存状态的协议,如何保存用户状态?
- Cookie和Session有什么区别?
- GET和POST的区别(爱被问到)
- WebSocket
- 什么是WebSocket?
- WebSocket 和 HTTP 有什么区别?
- WebSocket 的工作过程是什么样的?
- SSE 与 WebSocket 有什么区别?
- PING
- PING命令的作用是什么?
- PING命令的工作原理是什么?
- DNS
- DNS的作用是什么?
- DNS 服务器有哪些?根服务器有多少个?
- DNS解析的过程是什么样的
- DNS劫持
- TCP与UDP
- TCP与UDP的区别(重要)
- **TCP三次握手和四次挥手(非常重要)**
- TCP 如何保证传输的可靠性?
- IP
- IP协议的作用是什么
- 什么是 IP 地址?IP 寻址如何工作?
- 什么是IP地址过滤?
- IPv4和IPv6有什么区别?
- 如何获取客户端真实 IP?
- NAT 的作用是什么?
- ARP
- 什么是 Mac 地址?
- ARP 协议解决了什么问题?
- ARP协议的工作原理?
计算机网络基础
计算机网络基础
网络分层模型
OSI七层模型
OSI七层模型是什么?每一层的作用是什么?
-
应用层,为计算机用户提供服务
-
表示层,数据处理(编解码,加密解密,压缩解压缩)
-
会话层,管理(建立\维护\重连)应用程序之间的会话
-
传输层,为两台主机进程之间的通信提供通用的数据传输服务
-
网络层,路由和寻址
-
数据链路层,帧编码和误差纠正控制
-
物理层,透明地传输比特流传输
-
应用层,你在写一封邮件,内容是“你好,张三!”
-
表示层,为了让信件更安全,你把内容加密,比如把“你好”编码成“xyz123”。
-
会话层,你和邮局的工作人员沟通好,确认对方的地址是有效的,可以投递到目的地。
-
传输层,信封可能太大,需要拆分为多个小信件,每封信都带上编号。
-
网络层,邮局通过地图或导航规划送信路线,比如选择“走高速”或“走省道”。
-
数据链路层,信件在北京邮局内部转运,工作人员检查信件是否完整(错误检测)。
-
物理层,透信件通过邮递员、邮车或者飞机实际运输到目的地。
但是七层模型复杂不实用,有些功能重叠,比如表示层的加密和应用层的加密可能重叠
chatGPT易理解提示词,网络分层模型的描述比较抽象,能不能具象化举个例子
TCP/IP四层模型
TCP/IP四层模型是什么?每一层的作用是什么?
- 应用层(应用层,表示层,会话层)
- 传输层
- 网络层
- 网络接口层(数据链路层,物理层)
TCP/IP四层模型由OSI七层模型演化而来,我们并不能将 TCP/IP 四层模型 和 OSI 七层模型完全精确地匹配起来,不过可以简单将两者对应起来
常见协议
- 应用层
HTTP(超文本传输协议),SMTP(简单邮件发送协议),SSH(安全的网络传输协议),Telnet(远程登陆协议),FTP(文件传输协议),POP3/IMAP(邮件接受协议),RTP(实时传输协议),DNS(域名管理系统) - 传输层
TCP,面向连接的,可靠的
UDP,无连接的,尽最大努力的 - 网络层
IP(网际协议),ARP(地址解析协议),ICMP(互联网控制报文协议),NAT(网络地址转换协议),OSPF(开放式最短路径优先协议),RIP(路由信息协议),BGP(边界网关协议) - 网络接口层(不重要)
CSMA/CD,MAC,差错检测,多路访问,以太网
传输过程
- 应用层,报文
- 传输层,将报文传输,报文段或用户数据报
- 网络层,封装成IP数据报
- 网络接口层,组装成帧,在节点间传送帧,传输比特流
为什么网络要分层?
复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。
比如使用框架开发后端,分为controller\service\mapper
各层之间相互独立,提高了灵活性和可替换性,大问题化小,高内聚、低耦合
传输层有哪些常见的协议?
TCP(传输控制协议),面向连接的,可靠的数据传输服务
UDP(用户数据协议),无连接的,尽最大努力的数据传输服务
HTTP
从输入URL到页面展示到底发生了什么?(非常重要)
从输入URL到页面展示到底发生了什么?
- 在浏览器中输入指定网页的URL
- 浏览器通过DNS协议,获取域名对应的IP地址
- 浏览器根据IP地址和端口号,向目标服务器发起一个TCP连接请求
- 浏览器在TCP连接上,向服务器发送一个HTTP请求报文,请求获取网页的内容
- 服务器收到HTTP请求报文后,处理请求,并返回HTTP响应报文给浏览器
- 浏览器收到HTTP响应报文后,解析响应体中的HTML代码,渲染页面的结构和样式,同时根据HTML中的其他资源的URL(如图片\CSS\JS等),再次发起HTTP请求,获取这些资源的内容,直到网页完全加载显示
- 浏览器在不需要和服务器通信时,可以主动关闭TCP连接,或者等待服务器的关闭请求
HTTP状态码
HTTP状态码有哪些?
- 1XX,接收的请求正在处理
- 2XX,成功
200 OK,成功处理
201 Created,成功处理并创建一或多资源,如post请求创建新的用户
202 Accepted,服务还未处理完毕
204 No Content,成功处理请求,但没有返回任何内容,如发送请求删除一个用户,处理删除操作不会返回任何内容,平时学习/工作中见到的次数并不多 - 3xx,重定向,需要附加操作完成请求
301 Moved Permanently,永久重定向,网站网址更换 - 4xx,客户端错误
400 Bad Request,请求参数不合法
401 Unauthorized,未认证却请求需要认证之后才能访问的资源
403 Forbidden,直接拒绝 HTTP 请求,不处理
404 Not Found,你请求的资源未在服务端找到
409 Conflict,请求的资源与服务端当前的状态存在冲突,多人编辑同一资源时的冲突 - 5xx,服务端错误
500 Internal Server Error,服务端出 Bug 了
502 Bad Gateway,由于网关或代理服务器错误
HTTP Header中常见的字段有哪些?
- host,客户端指定自己想访问的web服务器的域名/IP地址和端口号
- User-agent,浏览器表明自己的身份
- Accept,告诉web服务器自己接收什么介质类型
- Accept-Language,浏览器申明自己接收的语言跟字符集的区别,中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等
- Accept-Encoding,浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)
- Content-Encoding,WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。
- Cookie,这个头信息把之前发送到浏览器的 cookies 返回到服务器。
- Referer,浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL
- Proxy-Authenticate,代理服务器响应浏览器,要求其提供代理身份验证信息
- Content-Type,WEB 服务器告诉浏览器自己响应的对象的类型
HTTP和HTTPS有什么区别?(重要)
- 端口号,HTTP默认是80,HTTPS默认是443
- URL前缀,HTTP的URL前缀是http:// ,HTTPS的URL前缀是http://
- 安全性和资源消耗:HTTP基于TCP,HTTPS基于SSL/TLS(SSL/TLS基于TCP)
所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密.
HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。 - SEO(搜索引擎优化):搜索引擎更青睐使用HTTPS协议的网站,因为HTTPS能够提供更高的安全性和用户隐私保护.在搜索结果中HTTPS的网站会被优先显示.
HTTP/1.0和HTTP/1.1有什么区别?
HTTP/1.1和HTTP/2.0有什么区别?
HTTP/2.0和HTTP/3.0有什么区别?
HTTP是不保存状态的协议,如何保存用户状态?
HTTP是不保存状态的协议,如何保存用户状态?
HTTP是一种不保存状态,即无状态协议,也就是说HTTP协议自身不对请求和响应之间的通信状态进行保存.Session机制的存在就是为了解决这个问题,Session的主要作用就是为了解决这个问题,通过服务端记录用户的状态.
在服务端保存Session的方法很多,最常用的就是内存和数据库(redis).
如何实现 Session 跟踪呢
通过在 Cookie 中附加一个 Session ID 来方式来跟踪(服务端和客户端都有)
Cookie被禁用怎么办?
最常用的就是利用 URL 重写把 Session ID 直接附加在 URL 路径的后面
Cookie和Session有什么区别?
Cookie和Session有什么区别?
Sessoin的主要作用是通过服务端记录用户的状态.
Cookie数据保存在客户端(浏览器端),Session数据保存在服务器端,Session安全性更高.如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。
GET和POST的区别(爱被问到)
GET和POST的区别?
GET | POST |
---|---|
通常是读取操作 | 通常是写入操作创建资源 |
数据放在 URL 查询字符串中 | 数据放在请求体中 |
不适合敏感数据,URL 长度限制 | 数据放在请求体中,相对较安全,无明确长度限制 |
响应可缓存在服务端,所以幂等 | 不可缓存,所以不幂等 |
适用于静态资源和查询 | 适用于动态资源和数据提交 |
WebSocket
什么是WebSocket?
什么是WebSocket?
WebSocket是一种基于TCP连接的全双工通信协议,即客户端和服务端可以同时发送和接收数据
WebSocket在2011年成为国际标准,几乎所有主流的浏览器都支持
WebSocket协议本质上是应用层的协议,用于弥补HTTP协议在持久通讯能力上的不足.客户端和服务器仅需要一次握手,就可以创建持久连接,并双向数据传输
应用场景,视频弹幕,社交聊天
WebSocket 和 HTTP 有什么区别?
WebSocket和HTTP两者都是基于TCP的应用层协议,都可以在网络中传输数据
- Websocket是一种双向实时通信协议,而HTTP是一种单向通信协议,并且,HTTP协议下的通信只能由客户端发起,服务器无法主动通知客户端
- Websocket使用ws://或wss://(使用SSL/TLS加密后的协议)作为协议前缀,HTTP使用http:// 或https://作为协议前缀
- Websocket可以支持扩展,用户可以扩展协议,实现部分自定义的子协议,如支持压缩,加密等
- Websocket通信数据格式比较轻量.用于协议控制的数据包头部相对较小,网络开销小,而HTTP通信每次都要携带完整的头部,网络开销较大(HTTP/2.0使用二进制帧进行数据传输,还支持头部压缩,减少了网络开销)
WebSocket 的工作过程是什么样的?
WebSocket 的工作过程是什么样的?
- 客户端向服务器发送一个HTTP请求,请求头中包含
Upgrade:websocket
和Sec-WebSocket-Key
等字段,表示要求升级协议为Websocket; - 服务器收到这个请求后,会进行升级协议的操作,如果支持WebSocket,它将回复一个HTTP101状态码,响应头中包含,
Connection:Upgrade
和Sec-Websocket-Accept:xxx等字段,表示成功升级到Websocket协议 - 客户端和服务器之间建立了一个WebSocket连接,可以进行双向的数据传输.数据以帧的形式进行传输,WebSocket的每条消息可能会被切分成多个数据帧(最小单位).发送端会将消息切割成多个帧发送给接收端,接收端接收消息帧,并将关联的帧重新组装成完整的消息
- 客户端和服务器可以主动发送一个关闭帧,表示要断开连接.另一方收到后,也会回复一个关闭帧,然后双方关闭TCP连接
另外,建立 WebSocket 连接之后,通过心跳机制来保持 WebSocket 连接的稳定性和活跃性。
SSE 与 WebSocket 有什么区别?
SSE与WebSocket有什么区别?
文本消息和二进制消息
SSE 与 WebSocket 作用相似,都可以建立服务端与浏览器之间的通信,实现服务端向客户端推送消息,但还是有些许不同:
- SSE 是基于 HTTP 协议的,它们不需要特殊的协议或服务器实现即可工作;WebSocket 需单独服务器来处理协议。
- SSE 单向通信,只能由服务端向客户端单向通信;WebSocket 全双工通信,即通信的双方可以同时发送和接受信息。
- SSE 实现简单开发成本低,无需引入其他组件;WebSocket 传输数据需做二次解析,开发门槛高一些。
- SSE 默认支持断线重连;WebSocket 则需要自己实现。
- SSE 只能传送文本消息,二进制数据需要经过编码后传送;WebSocket 默认支持传送二进制数据。
SSE 与 WebSocket 该如何选择?
SSE 好像一直不被大家所熟知,一部分原因是出现了 WebSocket,这个提供了更丰富的协议来执行双向、全双工通信。对于游戏、即时通信以及需要双向近乎实时更新的场景,拥有双向通道更具吸引力。但是,在某些情况下,不需要从客户端发送数据。而你只需要一些服务器操作的更新。比如:站内信、未读消息数、状态更新、股票行情、监控数量等场景,SSE 不管是从实现的难易和成本上都更加有优势。此外,SSE 具有 WebSocket 在设计上缺乏的多种功能,例如:自动重新连接、事件 ID 和发送任意事件的能力。
PING
PING命令的作用是什么?
PING命令的作用是什么
ping命令是一种常用的网络诊断工具,经常用来测试网络中主机之间的连通性和网络延迟.
ping命令的输出结果通常包括以下几部分:
- ICMP Echo Request(请求报文)信息:序列号\TTL值
- 目标主机域名或IP地址
- 往返时间(RTT)
- 统计结果:发送/接收的ICMP请求数据包数量.丢包率.往返时间的最小\平均\最大和标准偏差值
如何检测问题?
无法响应,连通性问题
往返时间过高,网络延迟大
PING命令的工作原理是什么?
PING命令的工作原理是什么?
PING基于网络层的ICMP(互联网控制报文协议),其主要原理就是通过在网络上发送和接收ICMP报文实现
ICMP报文中包含了类型字段,大致分为两种:
- 查询报文类型:向目标主机发送请求并期望得到响应
ping用到的ICMP Echo Request(类型为8)和ICMP Echo Reply(类型为o)属于查询报文类型 - 差错报文类型:向源主机发送错误信息,用于报告网络中的错误情况
ping命令向目标主机发送ICMP Echo Request
如果两个主机的连通性正常,目标主机会返回一个对应的ICMP Echo Reply.
DNS
DNS的作用是什么?
DNS域名管理系统,是当用户使用浏览器访问网站之后,使用的第一个重要的协议.主要解决域名和IP地址映射的问题
目前DNS的设计采用的是分布式\层次数据库结构.DNS是应用层协议,它可以在UDP和TCP协议之上运行,端口为53
本地或路由器可能缓存DNS,如果没有就要访问DNS服务器
DNS 服务器有哪些?根服务器有多少个?
DNS 服务器有哪些?根服务器有多少个?
- 根DNS服务器.根DNS服务器提供TLD服务器的IP地址
- 顶级域DNS(TLD服务器).顶级域指域名的后缀,如com\org\cn
- 权威DNS服务器.在因特网上具有公共可访问主机的每个组织必须提供公共可访问的DNS记录.这些记录将这些主机的名字映射为IP地址
- 本地DNS服务器.每个ISP(互联网服务提供商)都有一个自己的本地的DNS服务器.当主机发出DNS请求时,该请求被发往本地DNS服务器.它起着代理的作用.并将该请求转发到DNS层次结构中.严格说,不属于DNS层级结构
DNS解析的过程是什么样的
DNS解析的过程是什么样的?
- 迭代查询
- 递归查询
具体过程查看javaguide总结
DNS劫持
DNS劫持了解吗?如何应对?
DNS劫持是一种网络攻击,它通过修改DNS服务器的解析结果,使用户访问的域名指向错误的IP地址,从而导致用户无法访问正常的网站,或者被引导到恶意的网站.DNS劫持有时也被成为DNS重定向\DNS欺骗或DNS污染
TCP与UDP
TCP与UDP的区别(重要)
TCP与UDP的区别(重要)
是否面向连接:UDP在传送数据之前不需要先建立连接.而TCP提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接
是否是可靠传输:远地主机在收到UDP报文后,不需要给出任何确认,并且不保证数据不丢失,不保证是否顺序到达.TCP提供可靠的传输服务,TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认\窗口\重传\拥塞控制机制.通过TCP连接传输的数据,无差错\不丢失\不重复\并且按序到达
是否有状态:这个和上面的"是否可靠传输"相对应.TCP传输是有状态的,这个有状态说的是TCP会去记录自己发送消息的状态比如消息是否发送了\是否被接收了等等.为此,TCP需要维持复杂的连接状态表.而UDP是无状态服务,简单来说就是不管发出之后的事情
传输效率:由于使用TCP进行传输的时候多了连接\确认\重传等机制,所以TCP的传输效率要比UDP低很多.
传输形式:TCP是面向字节流的,UDP是面向报文的
首部开销:TCP首部开销(20-60字节)比UDP首部开销(8字节)要大
是否提供广播或多播服务:TCP只支持点对点通信,UDP支持一对一\一对多\多对一\多对多
什么时候选择TCP,什么时候选UDP?
- UDP一般用于即时通信,比如:语音\视频\直播等等,这些场景对传输数据的准确性要求不是特别高,比如你看视频即使少个一两帧,实际给人的感觉区别不大
- TCP用于对传输准确性要求特别高的场景:比如文件传输\发送和接收邮件\远程登录等
HTTP基于TCP还是UDP?
- 队头阻塞
HTTP/3.0之前是基于TCP协议的,而HTTP/3.0将弃用TCP,改用基于UDP的QUIC协议(此协议可提高数据可靠性)
此变化解决了HTTP/2中存在的队头阻塞问题.队头阻塞是指在HTTP/2.0中,多个HTTP请求和响应共享一个TCP连接,如果其中一个请求或响应因为网络阻塞或丢包而被阻塞,那么后续的请求或响应也无法发送,导致整个连接的效率降低.这是由于HTTP/2.0在单个TCP连接上使用了多路复用,受到TCP拥塞控制的影响,少量的丢包就可能导致整个TCP连接上的所有流被阻塞.HTTP/3.0在一定程度上解决了队头阻塞问题,一个连接建立多个不同的数据流,这些数据流之间独立互不影响,某个数据流发生丢包了,其数据流不受影响(本质上是多路复用+轮询) - 连接延迟
在HTTP/2.0中,如果要建立一个安全的HTTPS连接,需要经过TCP三次握手和TLS握手:
TCP三次握手:需要1.5个RTT(往返时间)
TLS握手:交换密钥和证书,建立一个TLS加密层,至少1个RTT
HTTP/2.0的连接建立就至少需要2.5个RTT或者3.5个RTT.而在HTTP/3.0中使用的QUIC协议连接建立仅需0-RTT(先前缓存证书和密钥)或者1-RTT.这意味这quic在最佳情况下不需要任何的额外往返时间就可以建立新链接
使用TCP的协议有哪些?使用UDP的协议有哪些?
- 基于TCP
HTTP协议(HTTP/3.0之前):为Web浏览器与Web服务器之间的通信而设计
HTTPS协议:更安全的超文本传输协议
FTP协议:一般网站管理员用来将本地的文件传输到远程服务器
SMTP协议:简答邮件传输协议,发送邮件(发邮件是单向的,所以不需要用HTTP)
POP3/IMAP协议:邮件接收,IMAP有邮件搜索\标记\分类\归档等功能
Telnet协议:用于通过一个终端登陆到其他服务器,Telnet协议的最大缺点之一是所有数据均明文发送,现在一般都不用了
SSH协议:SSH目前较Telnet协议更可靠.远程文件传输\命令执行(持久的连接能力) - 基于UDP
HTTP/3.0
DHCP协议:动态主机配置协议,动态配置IP地址
DNS
TCP三次握手和四次挥手(非常重要)
为什么要三次握手?
三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的
- 第一次握手: 客户端什么都不能确认,服务端确认了对方发送正常,自己接收正常
- 第二次握手:客户端确认了:自己发送\接收正常,对方发送接收正常;服务端确认了:对方发送正常,自己接收正常
- 第三次握手:客户端确认了:自己发送\接收正常,对方发送接收正常;服务端确认了:对方发送接收正常,自己发送\接收正常;
三次握手就能确认双方收发功能都正常,缺一不可
第 2 次握手传回了 ACK,为什么还要传回 SYN?
ACK和SYN都是都是带标志的数据包,硬要理解的话SYN就是询问,ACK是回答
服务端传回发送端所发送的ACK是为了告诉客户端:“我接收的信息确实就是你发送的信号”,表明从客户端到服务端的通信是正常的.回传SYN则是为建立并确认从服务端到客户端的通信
也是为了第三次握手服务端确认:对方接收正常,自己发送正常;
为什么要四次挥手?
双方都告知对方自己同意结束,双方都知道对方知道自己同意结束
TCP是全双工通信,可以双向传输数据.任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态.当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接
就像通话
- 第一次:A说"我没啥说的了"
- 第二次:B回答"知道了",但B可能还有要说的
- 第三次:B说"我也没啥说的了"
- 第四次:A回答"知道了",这样通话才能结束
为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?
因为服务端收到客户端断开连接的请求时,可能还有一些数据还没发完,这时先回复ACK,表示接收到了断开连接的请求.等到数据发完后再发FIN,断开服务端到客户端的数据传送
如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?
客户端没有收到ACK确认,会重新发送FIN请求
为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?
第四次挥手时,客户端发送给服务端的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。
如果不等,客户端发完第四次的ACK就会单方面关闭通道,如果这个ACK丢失了,服务端永远也不能正常关闭,还会不断重发FIN
TCP 如何保证传输的可靠性?
TCP 如何保证传输的可靠性?
可靠性是指,防篡改,防阻塞,数据传输完整,
- 基于数据块传输:
应用数据被分割成TCP认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段 - 对失序数据包重新排序以及去重:
TCP为了保证不发生丢包,就给每个包一个序列号,有了序列号就能将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重 - 校验和
TCP将保持它首部和数据的检验和.这是一个端到端的校验和,目的是检验数据在传输过程中的任何变化.如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认到此报文段 - 重传机制
在数据包丢失或延迟的情况下,重新发送数据包,知道收到对方的确认应答(ACK).TCP重传机制主要有:基于计时器的重传\快速重传(基于接收端的反馈信息来引发重传)\SACK(在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器)\D-SACK(重复SACK,在SACK的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了) - 流量控制:
TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据.当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失.TCP使用的流量控制协议是可变大小的滑动窗口协议(TCP利用滑动窗口实现流量控制) - 拥塞控制:
当网络拥塞时,减少数据的发送.TCP在发送数据的时候,需要考虑两个因素:一是接收方的接收能力,二是网络的阻塞程度.接收方的接收能力由滑动窗口表示,表示接收方还是多少缓冲区可以用来接收数据.网络的拥塞程度由拥塞窗口表示,它时发送方根据网络状况自己维护的一个值,表示发送方认为可以在网络中传输的数据量.发送方发送数据的大小是滑动窗口和拥塞窗口的最小值,
流量控制和拥塞控制这里可以比拟成
从公司下班,公司在三环,家在六环,我在公司停了汽车\摩托\大巴,今天开最多能在路上开大巴,但是我家里只放的下摩托.所以我只能开摩托
IP
IP协议的作用是什么
IP协议的作用是什么?
IP(Internet Protocol,网际协议)是TCP\IP协议中最重要的协议之一,属于网络层的协议,主要作用是定义数据包的格式\对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地
分为两种:IPv4(4字节)\IPv6(16字节)
什么是 IP 地址?IP 寻址如何工作?
什么是 IP 地址?IP 寻址如何工作?
每个连入互联网的设备或域都被分配一个IP地址,作为唯一标识符,每个IP地址都是一个字符序列
当网络设备发送IP数据包时,数据包中包含了源IP地址和目的IP地址.源IP地址用于标识数据包的发送方设备或域,而目的IP地址则用于标识数据包的接收方设备或域.类似一封邮件中同时包含了目的地地址和回邮地址
这种基于IP地址的寻址方式是互联网通信的基础,它允许数据包在不同的网络中传递,实现全球范围内的网络互联互通
什么是IP地址过滤?
什么是IP地址过滤?
简单来说就是限制或阻止特定IP地址或IP地址范围的访问.例如你有一个图片服务突然被某一个IP地址攻击,那我们就可以阻止这个IP地址访问图片服务
IP地址过滤是一种简单的网络安全措施,实际应用中一般会结合其他网络安全措施,如认证\授权\加密等一起使用.单独使用ip地址过滤并不能完全保证网络的安全
IPv4和IPv6有什么区别?
IPv4是目前广泛使用的IP地址版本,192.168.1.1,其格式是四组由点分隔的数字.4个字节作为地址,共有42亿个可用IP
少不够用
IPv6,2001:0db8:85a3:0000:0000:8a2e:0370:7334,使用单或双冒号分隔.有2^128个IP
除了更大的地址空间之外,ipv6的优势还包括:
- 无状态地址自动配置:主机可以直接通过根据接口标识和网络前缀生成全局唯一的IPv6地址,而无需依赖DHCP服务器,简化了网络配置和管理
- NAT(网络地址转换)成为可选项,IPv6地址资源充足,可以给全球每个设备一个独立的地址
- 对标头结构进行了改进,IPv6标头结构相较于IPv4更加简洁和高效,减少了处理开销,提高了网络性能
- 可选的扩展头,允许在IPv6标头中添加不同的扩展头,用于实现不同类型的功能和选项
- ICMPv6:IPv6中的ICMPv6相较于IPv4中的ICMP有了一些改进,如邻居发现,路径MTU发现等功能的改进,从而提升了网络的可靠性和性能.
如何获取客户端真实 IP?
如何获取客户端真实 IP?
主要分为应用层方法\传输层方法\网络层方法
- 应用层方法:
通过X-Forward-For请求头获取,简单方便.但是这种方法无法保证获取到的是真实IP,可能被伪造
X-Forwarded-For: client1, proxy1, proxy2//其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。 - 传输层方法:
利用TCP Option字段承载真实源IP信息,这种方法适用于任何基于TCP的协议,不受应用层的限制.不过,这并非是TCP标准所支持的.所以需要通讯双方都进行改造.对于发送方来说,需要有能力把真实源 IP 插入到 TCP Options 里面。对于接收方来说,需要有能力把 TCP Options 里面的 IP 地址读取出来。
也可以通过 Proxy Protocol 协议来传递客户端 IP 和 Port 信息。这种方法可以利用 Nginx 或者其他支持该协议的反向代理服务器来获取真实 IP 或者在业务服务器解析真实 IP。 - 网络层方法:
隧道+DSR模式.这种方法可以适用于任何协议,就是实施起来会比较麻烦,也存在一定限制,实际应用中一般不会适用这种方法
什么是反向代理?
反向代理(Reverse Proxy)是一种服务器配置,其中代理服务器接收客户端的请求,并将这些请求转发给后端服务器进行处理。然后,代理服务器将后端服务器的响应返回给客户端。反向代理的作用是隐藏后端服务器的实际情况,客户端只与代理服务器交互,而不直接与后端服务器进行通信。
反向代理与正向代理的区别?
正向代理:客户端通过代理服务器访问互联网,代理服务器代表客户端向互联网请求资源。
反向代理:客户端向代理服务器发起请求,代理服务器代表客户端向后端服务器请求资源,客户端并不直接与后端服务器通信。
之所以叫反向是因为
正向代理是代理客户端,比如客户端向阿里镜像服务器请求一些国外资源
反向代理是代理服务端,nginx代理后端接收请求,客户端不知道后端的存在
NAT 的作用是什么?
NAT 的作用是什么?
NAT主要用于在不同网络之间转换IP地址.它允许将局域网中的IP地址映射为互联网中的IP地址或者反向映射,从而实现局域网内的多个设备通过单一公有IP地址访问互联网
NAT不光可以缓解IPv4地址资源短缺的问题,还可以隐藏内部网络的实际拓扑结构,使得外部网络无法直接访问内部网络中的设备,从而提高内部网络的安全性
ARP
什么是 Mac 地址?
什么是 Mac 地址?
MAC地址全称是媒体访问控制地址.别称LAN地址\物理地址
MAC 地址是一个网络设备真正的身份证号,永久性
IP 地址只是一种不重复的定位方式,可以理解为住址,会改变
MAC地址6字节,由IEEE统一管理,不同的网卡厂商从IEEE那里购买
MAC 地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全 1 地址),该地址表示广播地址。
还有一点要知道的是,不仅仅是网络资源才有 IP 地址,网络设备也有 IP 地址,比如路由器。但从结构上说,路由器等网络设备的作用是组成一个网络,而且通常是内网,所以它们使用的 IP 地址通常是内网 IP,内网的设备在与内网以外的设备进行通信时,需要用到 NAT 协议。
ARP 协议解决了什么问题?
ARP 协议解决了什么问题?
ARP全称地址解析协议,解决的是网络层地址和链路层地址之间的转换问题.因为一个IP数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但IP地址属于逻辑地址,而MAC地址才是物理地址,ARP协议解决了IP地址转MAC地址的一些问题.
ARP协议的工作原理?
ARP表记录ip-MAC地址映射关系,该映射关系以 <IP, MAC, TTL> 三元组的形式存储。TTL 为该映射关系的生存周期
ARP协议的工作原理
关键词,ARP表\广播问询\单播响应
同一局域网内的 MAC 寻址
中间要有交换机
- 假设有一主机A要给同一内网的主机B发送IP数据报(A只知道B的IP)
- A检索自己的ARP表,有就直接发
- 如果没有映射,A构造一个ARP查询分组,广播到所在局域网(不知道是谁,只能都问)
- 每一个设备都会收到该查询分组,B验证是对其问询,B构造ARP响应分组只发给A
- B趁机构造一条主机 A 的 IP-MAC 映射记录,发回去后,A趁机构造一条主机 B 的 IP-MAC 映射记录
不同局域网的MAC寻址
主机A在本子网对目标路由器的本子网接口查询
路由器通过路由表查到与主机B所在子网相连的接口
之后就是主机B子网对主机B的MAC地址的查询