史上最强大网络总结--面试必备,码住!!!

一、TCP/IP五层(四层)模型。

在这里插入图片描述
其中,网络接口层可扩展为数据链路层和物理层。
在这里插入图片描述

二、URL

http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1
在这里插入图片描述

三、HTTP协议、UDP协议、TCP协议、IP协议、MAC帧

1.HTTP协

①HTTP请求
第一行:请求行:方法+url+版本。
请求Header:请求的属性,每个属性是用冒号分割的键值对,属性之间用\n隔开。
空行:分隔报头和正文。
请求body:可以为空,不为空时在报头中有content-length表名正文长度。
②HTTP应答:
第一行:状态行:版本号+状态码+状态码解释
应答Header:应答的属性,格式同请求
空行:分割报头和正文。
应答body:可以为空,不为空长度为content-length,若服务器返回一个html页面,页面内容就在body中。
③请求方法
GET:获取资源。
POST:传输实体主体
PUT:传输文件
HEAD:获取报头资源
DELETE:删除文件。
OPTION:询问支持的方法。
TRACE:追踪路径。
CONNECT:要求用隧道协议连接代理。
LINK:建立和资源之间的联系。
UNLINK:断开连接关系。
④报头属性
content-Length:正文长度。
Content-Type:数据类型。
Host:客服端告诉服务器,请求的资源在哪个主机的哪个端口上。
Use-Agent:声明用户的操作系统版本和浏览器版本。
Refer:当前页面是从哪个页面传过来的。
Location:搭配3** 状态码使用,告诉客户端接下来去哪里访问。
Accept:请求资源后,可以接受的资源。
Cookie:在客户端存储少量信息,实现会话功能。
Connection:keep-alive:该链接保持长连接。
⑤状态码
1**:接受的请求正在处理,信息性状态码
2**:请求正确处理完毕,成功状态码
3**:需要进行附加操作才可完成请求,重定向状态码
4**:服务器无法处理请求,客户端错误状态码
5**:服务器处理请求出错,服务器错误状态码。

2.UDP

在这里插入图片描述
①分离和交付
分离:8字节定长
交付:16位目的端口号
②16位UDP长度
UDP能传输的数据最大长度为64K,如果超过64K,则要在应用层手动分包,多次发送,接收端拼接。
③无连接:知道对端IP和端口号则直接发,不建立连接。
不可靠:无可靠机制(确认应答、超时重传等),如果传输失败,也不给应用层返回错误信息。优点:简单、高效。
面向数据报:不能灵活控制数据传输次数和数量。应用层交给UDP多长的报文,UDP原样发送,不拆分也不合并。

3.TCP协议。
在这里插入图片描述
①分离和交付
分离:4位首部长度。
交付:16位目的端口号。
②首部字段
序号:对每个字节进行编号。按序到达、去重。
确认序号:告诉发送端收到了哪些数据,下次从哪个序号开始。明确知道收到了哪些数据,哪些数据丢失了。
4位首部:报头有多少个4字节,4位最大15,所以报头最大60字节。20定长+40可变。
URG:紧急指针是否有效。
ACK:确认好是否有效
PSH:告诉接收端,尽快将数据从接受缓冲区拿走。
RET:对方要求重新建立连接。复位报文段。
SYN:请求建立连接。同步报文段。
FIN:通知对方,本端要关闭了,结束报文段。
16位窗口大小:流量控制需要知道接收端的窗口大小。
16位校验:发送端填充,校验头部与数据部分。
16位紧急指针:要高优先级被处理的数据的偏移量。

③可靠性

1.确认应答(可靠的核心)
没收到一组数据,返回一个ACK应答,表明现在收到了哪些数据,下一组数据从哪里开始发。
2.超时重传
客户端在一定时间后仍没有收到服务器返回的ACK,就要触发重传机制。
数据包丢,重传。
ACK丢,重传后重复的数据,TCP会根据序号进行去重。
重传时间:500ms*2^n。n:重传次数。达到一定时间,TCP认为网络或对端主机异常,强制关闭连接。
3.按序到达
TCP根据序号排序。
4.去重
当遇到ACK丢失的情况,服务器会受到重复的数据,TCP根据序号去重。
5.流量控制
16位窗口大小字段。
TCP根据接收端的处理能力,来决定发送端的发送速度。
接收端将自己的接收缓冲区大小放入TCP首部的16位窗口大小通过ACK通知告诉发送端。
情况:接收端接收缓冲区快满:将自己的窗口大小设置为一个更小的值发送给发送端,发送端收到后会减慢自己的发送速度。
接收端接收缓冲区为0:发送端不发送,而是定期发一个窗口探测数据段,让接收端告诉他窗口大小。
6.拥塞控制
“慢启动”先发少量数据,探查当前网络拥堵状态,再决定按照多大的速度传输数据。TCP协议想尽快将数据传给对方,但要避免给网络造成太大压力。
“慢启动”增长速度为指数级别,初始时慢,但增长速度非常快,为了不这么快,引入慢启动阈值,到达阈值后改为线性增长。TCP刚启动时,阈值等于窗口最大值,当增长遇到网络堵塞要超时重发时,慢启动阈值会变为上次拥塞窗口的一半,同时拥塞窗口置为1.
7.面向连接
①三次握手
在这里插入图片描述
为什么三次: 往下拉、面试题9有详细解答哦~
如果一次握手,客户端知道客户端IP和端口号向服务器发送请求,但是服务器找不到客户端。
只发ACK是不会受到ACK确认的。
②四次挥手
在这里插入图片描述
为什么第二次和第三次不一起发:因为ACK是由内核控制的,而FIN是由用户调用close时发出。
TIME_WAIT:主动断开连接的一方会进入TIME_WAIT,等待2ML,意义:1.保证俩个传输方向的所有报文段都消失。2.确保最后一个ACK到达,如果最后一个ACK丢失,还有机会重传。(服务器的FIN会超时重传。)
CLOSE_WAIT:服务器准备关闭连接。收到第一个FIN的一方进入CLOSE_WAIT,是为了等待代码中调用关闭方法。如果发现大量的CLOSE_WAIT,是因为代码未调用close方法。

④TCP的性能

滑动窗口:滑动窗口大小:无需等待ACK的到来而可以继续发送的数据的最大值。一次发送多个数据段,收到一个段数据段的ACK后,滑动窗口向后移动继续发送第五个数据段,以此类推。操作系统为了维护滑动窗口,需要开辟发送缓冲区来记录还有哪些数据没有应答,应答的从缓冲区删掉。
·丢包:1.ACK丢,这个无需担心,可以根据后续的ACK进行确认。(确认序号会告诉发送端哪些数据收到了)。2.数据包丢:快重传:连续收到三次同样的ACK,则进行重传,只把丢了的进行重传而不用重传后面所有的。
延时应答:保证让发送方发送更多的数据。处理端处理数据很快,缓冲区的数据很快就可以消费掉。稍等一会再应答,返回的窗口大小会更大。2个包应答一次,200ms应答一次。
捎带应答:ACK+想发送的数据,接收端给发送端返回想回答的数据时加上ACK。
⑤其他
面向字节流:怎么收由用户决定。由于TCP发送和接受缓冲区的存在,读写不需要一一匹配。
粘包:粘的是应用层的包,应用层多读或少读。TCP没有如UDP一样的“UDP报文总长度”字段,应用层不知道缓冲区中的数据那部分是一个完整地数据包。解决:包与包之间划分明确的边界。对于粘包问题请看面试题10呀
·定长:保证每次按固定长度读取。
·变长:在报头给值标明报文总长度。定义明确的分隔符,分隔符不如正文冲突。
TCP异常
·进程终止:四次挥手完毕
·机器重启:同进程终止。
·机器掉电/网线断开。A.接收方掉电,发送方超时重传,一定次数后还不行就重新建立连接,还不行就强制释放。B.发送方断电:接受方接受不到数据,一定时间后,给对方发送“心跳包”,如无心跳则重新建立连接,建立失败则释放。

4.IP协议。

在这里插入图片描述
①分离与交付:
分离:4位首部长度
交付:8位协议。
②IP首部
4位首部长度:同TCP。
16位标识ID:唯一的标识主机发送的报文,如报文在数据链路层被分片,id相同的属于同一分片。
3位标志:第一位保留。第二位:禁止分片DF,DF=1标识禁止分片。第三位:更多分片MF:MF=1后面还有分片,MF=0是最后一个分片。
13位片偏移:分片后的数据在原数据中的相对位置,实际偏移的字节数是这个值*8。除最后一个报文外,其他报文长度必须是8的整数倍。
8位生存时间:数据报到达目的地的最大的报文跳数,一般是64,每经过一个路由器,TTL-=1,到0还未到达则丢弃,也是为了防止路由循环。
8位协议:上层协议类型。
16位首部效验和:效验头部是否损坏。

5.MAC帧

在这里插入图片描述
①分离和交付:
分离:首部定长。
交付:2位类型。类型:0800 IP,0806 ARP,8035 RARP。
②头部:
目的地址:下一跳MAC地址
源地址:上一跳MAC地址。
	ARP数据报的格式
------------------- 上图:ARP数据报的格式
源MAC地址和目的MAC地址在以太网首部和ARP请求中各出现一次,对于数据链路层局域网为以太网是对于的,对于其他网是必要的。
③头部信息
硬件类型:链路层网络类型。1:以太网。
协议类型:要转换的地址类型。0x0800:IP地址
硬件地址长度:以太网6字节。
协议地址长度:IP地址4字节
Op:为1:ARP请求,2:ARP应答。

四、端口号。

端口号唯一标识一台主机上的一个进程。
作用:传输层到应用层分用。
端口号是传输层概念。

1.知名端口号:

ftp:21
Ssh:22
Telnet:23
http:80
https:446
查看命令:cat /etc/services。

2.面试题:ping是什么端口?

Ping命令基于ICMP,在网络层,而端口号是传输层的内容,ICMP中不关注端口号这样的信息。

五、命令:

1.传输层
netstat:用来查看网络状态(连接)的重要工具。-n,-l,-t,-u,-p,-a。
pidof:查看所起网络服务进程。查看服务器的进程id
Pidof [进程名] 通过进程名查看进程IP。
ps avx | grep tcpsever。
cat /etc/services:查看知名端口号。
route:查看路由表。
arp -a:查看ARP缓存包:IP和MAC映射关系。
cat /ets/hosts:查看hosts文件。Hosts:存IP和域名的对应关系。是基于UDP的应用层协议DNS(域名解析协议)的。
ping:验证网络的连通性,统计响应时间和TTL。是网络层协议ICMP的,ICMP:定位网络不连通的问题。
traceroute:查看ICMP的TTL过程。基于ICMP实现,打印出可执行程序逐级到目标逐级之前经历了多少路由器。

六、协议

1.ARP:是一个介于数据链路层和网络层之间的协议。

作用:建立了主机 IP地址 和 MAC地址 的映射关系。
通讯前获取目的主机硬件地址的必要性:数据包首先是被网卡接受再去处理上层协议的,如果接受的数据包的硬件地址与本机不符,则直接丢弃。
原理:源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”。并将这个请求广播到本地网络。目的主机收到ARP请求,对比发现其中IP地址与本机相符,则返回一个ARP应答包,将自己的硬件地址写在其中。
ARP缓存表:arp -a查看。定期更新,因为IP一直在变。

2.DNS:域名解析协议,应用层协议。主机中有一个hosts文件存主机名和IP地址的关系。

有新的计算机接入网络,则将这个信息注册到数据库中。用户输入域名的时候,会自动查询DNS服务器,有DNB服务器检索数据库,拿到对应的IP地址。

3.ICMP:网络层协议。定位网络不连通的问题。

功能:a.确认IP包是否成功到达目标地址。B.通知在发送过程中IP包被丢弃的原因。C.ICMP也是基于IP协议工作的。D.ICMP搭配ipv4使用,ipv6位ICMPv6

4.NAT:将私有IP和全局IP转化的的技术方法。

子网内的主机需要与外网进行通信,路由器将IP首部的源IP地址替换为路口器的WAN口IP,逐级替换称为一个公网IP。NAT路由器收到数据,将目的地址替换为路由器LAN口IP。NAT路由器内部生成一张地址转化的表。

5.NAPT:

局域网内多个主机同时访问同一个外网,那么服务器返回的数据中,目的IP是相同的,那么如何判定这个数据发给哪个局域网哪个主机。NAPT解决这个问题,使用IP+port建立关联关系。

6.DHCP:

自动给子网内新增节点分配IP地址,避免手动管理不便。

七、网段划分

在这里插入图片描述
CIDR子网掩码,防止IP浪费。
子网掩码区分网络号和主机号。是一个32位正整数,通常一串0结尾。
网络号 = IP地址 & 子网掩码
子网的地址范围:网络号从计算出的到全1的范围。
140.252.20.68/24。表示IP地址为140.252.20.68,子网掩码高24位是1,也就是255.255.255.0.
在这里插入图片描述

八、特殊的IP地址:

主机号全0,表示网络号,代表这个局域网。
主机号全1,表示广播地址
主机号为1,表示子网的路由器。
127.*,用户本机环回,127.0.0.1.

九、IP不够用:

1.动态分配IP地址,共享IP:只给接入网络的设备分配IP地址,因此一个MAC设备有可能有多个IP。
2.NAT:将私有IP转为公有IP。
3.IPV6,16字节128位。

十、路由、路由表、查找策略。

1.路由:在复杂网络结构中找出一个通往目的主机的路径。路由是一跳一跳问路的过程。一跳区间是链路层的一个区间,是源MAC地址到目的MAC地址之间的帧传输区间。

2.路由表:查找路由表,决定将报文传给哪个节点。
情况:
A.路由表不知道:传给默认路由。
B.路由表知道:下一跳
C.到达指定局域网,直接给目的主机,不需要路由器转发。
3.查找策略
在这里插入图片描述
A.这台主机有俩个网络接口,一个接口连接到192.168.10.0/24网络,一个接口连接到192.168.56.0/24网络。
B.Destination表示目的网络,Gateway表示网关,Genmask表示子网掩码,Iface表示发送接口。Flags中U表示此条目有效,G表示下一跳地址是某个路由器,没有G的条目表示目的网络是与本机接口直接相连的网络,不必经路由器转发。
例1:要发送数据包的目的地址是192.168.56.3.
·将第一行的子网掩码与目的地址进行按位与操作,得到192.168.56.0,与本条的目的网络不符。
·再与第二行子网掩码进行按位与,得到192.168.56.0,发现等于目的网络,因此从eth1接口发出去。
·由于192.168.56.0/24刚好是与eth1接口直接相连的网络,因此可以直接发到目的主机,不必经路由器转发。

例2:202.10.1.2
一次与路由表前几项比发现都不匹配,按缺省路由条目,直接从eth0接口发西湖区,去往192.168.10.1路由器。有192.168.10.1根据他的路由表决定下一跳地址。

十一、 网上捞的面试题

1、对比IP和MAC。

1.长度不同:IP地址为32位4字节。MAC为48位6字节。
2.寻址协议层不同,IP作用于网络层,MAC作用于数据链路层,在数据链路层标识唯一的主机。
3.可变性:IP可以改变(但必须唯一),MAC是由制造商出厂烧录好的不可改变。
4.分配方式:IP为拓扑结构,MAC是制造商分配。
5.数据链路层将数据从一个节点传输到相同网络的另一相邻节点上。而网络层从一个网络到另一个网络上。

2、对比TCP、UDP

1.UDP无连接不可靠面向数据报
TCP有连接可靠面向字节流
2.UDP报头定长8字节。
TCP报头20-60字节。
3.UDP没有发送缓冲区有接收缓冲区。
TCP有发送缓冲区和接受缓冲区。
4.UDP能传输的数据最大长度为64k,包括首部。
TCP无大小限制。
5.TCP是点到点的,UDP支持一对一,多对一,一对多,多对多。
6.TCP用于可靠传输的情况,应用于文件传输、重要状态,传送单个大数据包等场景。
UDP用于对高速传输和实时性要求较高的通信领域。

3、HTTP和HTTPS

1.HTTP是客户端和服务器用来传递消息的一种超文本传输协议,是一个客户端和服务器端请求和应答的标准(TCP)。
2.HTTPS是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,要比HTTP安全。
3.区别
①端口号:HTTP80,HTTPS443。
③费用不同:https需要申请CA证书,免费较少,所以需要一定费用。
③安全性:http协议是很简单,无状态的,明文传输的。HTTPS协议是HTTP+SSL构建的可进行加密传输、身份认证的网络协议,比http更安全。
④数据传递方式不同:HTTP是明文传输,HTTP支持加密传输。
⑤性能:HTTPS在握手阶段比HTTP协议费时,所以页面响应比HTTP慢。
4.HTTP缺点:
①HTTP使用明文传输,内容可能被窃听。
②不验证通信放身份,因此有可能遭遇伪装。
③无法验证报文完整性,所以有可能报文被篡改但是不知道。
5.HTTPS优点:
①使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器。
②HTTPS采用HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,要比HTTP安全,可防止数据不被窃听,篡改,确保数据完整性。
③HTTPS是先行架构下最安全的解决方案,虽然不是绝对安全,单也增加了中间人攻击的成本。
④HTTPS更流行。
6.HTTPS缺点:
①HTTPS协议握手阶段比较费时,会使页面的加载时间延长50%,增加10%到20%之间的耗电。
②HTTPS连接缓存不如HTTP高效,会增加数据和开销。
③SSL证书需要钱
④SSL证书一般要绑定IP,不能同一个IP绑定多个域名,IPV4资源不可能支撑起这个消耗。

4、如何让UDP可靠

1.引入序列号,确保数据顺序到达。
2.引入确认应答,确保对方收到数据。
3.引入超时重传,长时间未回复则重新发送。
4…

5、在浏览器输入url发生的事情。
6.get 和 post 请求有哪些区别?

get 请求会被浏览器主动缓存,而 post 不会。
get 传递参数有大小限制,而 post 没有。
post 参数传输更安全,get 的参数会明文限制在 url 上,post 不会。

7、http 响应码 301 和 302 代表的是什么?有什么区别?

301:Moved Permanently:永久重定向。请求的资源已被分配了新的url,以后使用资源现在所指的url。
302:Found:暂时重定向。资源已临时指向新的url(已移动的资源对应的url将来有可能会改变)。
它们的区别是,301 对搜索引擎优化(SEO)更加有利;302 有被提示为网络拦截的风险。

8、forward 和 redirect 的区别?
forwadredirect
含义转发重定向
地址栏的url显示不发生改变发生改变
本质服务器的行为客户端的行为
数据共享共享request里面的数据不能共享
请求次数1次2次
效率更高更低
场景用户登录的时候,根据角色转发到相应的模块用户注销登录时,返回页面或跳转其他网址

转发过程:客户端浏览器发送http请求–>web服务器接受请求–>调用内部的一个方法在容器内部完成请求处理和转发动作–>将目标发送给客户。forward是服务器内部的重定向,服务器直接访问目标地址的url,将内容读取出来,但是客户端不知道服务器这个行为,因此地址栏是不会发生变化的。
重定向过程:客户端浏览器发送http请求–>web服务端接受请求并发送302状态码响应及对应的location给客户浏览器–>客户浏览器发现是302响应,则会自动再发送一个新的http请求,请求新的location地址–>服务器根据此请求寻找资源并发送给客户。
关于数据共享:整个重定向过程中使用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用,所以可以共享。

9. tcp 为什么要三次握手,两次不行吗?为什么?

如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务器端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用三次握手,服务器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。
来观察一下俩次握手:
在这里插入图片描述
俩次握手,举个例子。A和B在打电话,A问B:小B,小B,你能听到我说话么?B回答小A:我听到了,你呢?—如果此时B的麦坏了,A听不见回答也就收不到回复,B以为A收到了,就会一直等A说话。

10、说一下 tcp 粘包是怎么产生的?

tcp 粘包可能发生在发送端或者接收端,分别来看两端各种产生粘包的原因:
发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包;
接收方粘包:接收方不及时接收缓冲区的包,造成多个包接收。

11. OSI 的七层模型都有哪些?

物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
数据链路层:负责建立和管理节点间的链路。
网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
会话层:向两个实体的表示层提供建立和使用连接的方法。
表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。

12. 如何实现跨域?

实现跨域有以下几种方案:
服务器端运行跨域 设置 CORS 等于 *;
在单个接口使用注解 @CrossOrigin 运行跨域;
使用 jsonp 跨域;

13 /jsonp:

JSON with Padding,它是利用script标签的 src 连接可以访问不同源的特性,加载远程返回的“JS 函数”来执行的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值