网络原理

Posted tetew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络原理相关的知识,希望对你有一定的参考价值。

欢迎指正

网络模型与相关协议

OSI七层模型:

物理层
数据链路层
网络层:IP
运输层: TCP、UDP
会话层
表示层
应用层:DNS、HTTP、SMTP等

TCP/IP四层协议

网络接口层
网际层:IP
运输层:TCP、UDP
应用层:HTTP、SMTP、FTP等

五层协议

物理层:实现相邻计算机之间比特流的透明传递
数据链路层:将IP数据报组装成帧,控制信息在相邻两节点的链路上进行传输
网络层:IP,为不同主机分组交换信息服务
运输层:TCP、UDP,为两台主机之间的通信提供通用的数据传输服务
应用层:HTTP、SMTP、FTP等

数据链路层

交换机与路由器的区别

1、工作层次不同,交换机工作在数据链路层,路由器工作在网络层
2、寻址依据不同,交换机的数据转发依据是利用物理地址或者说MAC地址来确定转发数据的目的地址,而路由器是依据ip地址进行工作的
3、交换机分割冲突域,不划分广播域,即隶属一个交换机的主机属于一个局域网。通过路由器连接的主机可能数据不同的广播域,所以路由器可以划分广播域
4、转发的数据对象不同 ,交换机转发的是数据帧、路由器转发的是分组报文

网络层

IP协议

IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。

IP地址

在数据链路层中我们一般通过MAC地址来识别不同的节点,而在IP层我们也要有一个类似的地址标识,这就是IP地址。

32位IP地址分为网络位和地址位,这样做可以减少路由器中路由表记录的数目,有了网络地址,就可以限定拥有相同网络地址的终端都在同一个范围内,那么路由表只需要维护一条这个网络地址的方向,就可以找到相应的这些终端了。

  • A类IP地址: 0.0.0.0~127.255.255.255
  • B类IP地址:128.0.0.0~191.255.255.255
  • C类IP地址:192.0.0.0~239.255.255.255

IP协议头

八位的TTL字段:规定该数据包在穿过多少个路由之后才会被抛弃。某个IP数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。
这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64。

ARP协议

在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。
ARP是IP地址解析为MAC地址 RARP 将MAC地址解析为IP地址

ARP攻击

①ARP缓存表基于"后到优先"原则,IP与MAC的映射信息能被覆盖;
②ARP攻击基于伪造的ARP回应包,黑客通过构造"错位"的IP和MAC映射,覆盖主机的ARP表(也被称为"ARP毒化"),最终截取用户的数据流;
③一旦遭受ARP攻击,账号密码都可能被窃取(如果通信协议不是加密的);
④通过Wireshark数据包分析,我们掌握了真实网络中ARP底层攻击原理及数据包组成。

ICMP协议

它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

运输层

TCP协议、UDP协议的区别

? TCP提供可靠的、面向连接的运输服务。在传输数据之前必须三次握手建立连接,数据传输结束之后,4次挥手释放连接,而且在数据传递时,又有确认应答、超时重传、滑动窗口、拥塞控制等机制保证传送数据的可靠性。TCP经常用于对网络通信质量有很高要求的地方,如文件传输,邮件发送,远程登录等场景。SMTP、TELNET、HTTP、FTP

? UDP在传送数据之前不需要建立连接,目的主机收到UDP报文后,不需要给出确认。UDP不提供可靠交付,一般用于即时通信,如语音、视频、直播等。RIP(路由选择协议),DNS

技术图片

TCP三次握手

技术图片

1)主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始序列号seq(A)=x。(其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文;序号seq=x,表明传输数据时的第一个数据字节的序号是x);

2)主机B收到请求后,发回连接确认数据包。(其中确认报文段中,标识位SYN=1,ACK=1,表示这是TCP连接响应数据报文,并含主机B的初始序列号seq(B)=y,以及主机B对主机A初始序列号的确认ack(B)=seq(A)+1=x+1)

3)第三次,主机A收到主机B的确认报文后,还需作出确认,即发送一个序列号seq(A)=x+1;确认号为ack(A)=y+1的报文;

为什么要三次握手?
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

TCP四次挥手

技术图片

1、客户端发送请求释放连接报文,FIN=1,seq=u;客户端进入FIN-WAIT-1状态;

2、服务器收到请求,发送确认报文。ACK=1,seq=v,ack=u+1;服务器进入CLOSE-WAIT状态。客户端收到后进入终止等待2FIN-WAIT-2;

3、服务器发送完数据之后,向客户端发送请求释放连接报文,FIN=1,ACK=1,seq=w,ack=u+1;进入LAST-ACK状态

4、客户端收到请求后,发送确认报文,ACK=1,seq=u+1,ack=w+1。客户端进入TIME-WAIT状态,等待2MSL后进如CLOSED状态,服务器收到确认后进如CLOSED状态。

为什么要四次分手?
TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

TIME_WAIT状态为什么要等待2MSL?

因为第四次的确认报文可能丢失,这个状态是用来重发可能丢失的ACK报文。

为什么会有CLOSE_WAIT?

因为服务器可能有数据未发送完毕,这段时间是继续发送数据的。

如果建立连接之后出现故障?

TCP有个保活计时器,通常设置为2小时,两小时内没有收到客户端发送的数据,服务器发送探测报文,每75s发送一次,10次之后探测报文没有反应,认为出现故障,关闭连接。

TIME_WAIT存在的两个理由

1、可靠的实现TCP全双工连接的终止
2、允许老的重复的分节在网络上的消逝(TCP不允许处于TIME_WAIT状态的连接启动一个新的化身,因为TIME_WAIT状态持续2MSL,就可以保证当成功建立一个TC连接的时候,来自连接先前化身的重复分组已经在网络中消逝。)

滑动窗口

TCP通过滑动窗口的概念来进行流量控制,抑制发送端发送数据的速率,以便接收端来得及接收。
窗口:对应一段发送者可以发送的字节序列。这个序列是可以改变的。接收端发给发送端自己的接受能力。然后发送端根据已确认接受的序列号和接受能力滑动窗口,一下子全部发送,等待接收端确认。

拥塞控制和流量控制的区别

拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。

流量控制是点对点通信量的控制,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。
(设置拥塞控制窗口cwnd, 在发送数据时,将拥塞窗口的大小与接收端ack的窗口大小做比较,取较小者作为发送数据量的上限。)

慢开始: 设置拥塞控制窗口cwnd = 1MSS(最大报文段),每收到一个ACK,cwnd++;每过1RTT,cwnd = cwnd * 2;呈指数增长。

拥塞避免:当拥塞窗口 cwnd 达到一个阈值时(cwnd >= ssthresh),窗口大小不再呈指数上升,而是以线性上升,避免增长过快导致网络拥塞。每当过了一个RTT,cwnd = cwnd + 1;

无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(没有收到确认ACK);拥塞窗口设置为1,阈值为拥塞时发送窗口的一半,执行慢开始算法。

快重传:当发送方连续收到三个重复确认时,就立即重传对方尚未收到的报文段。并执行快恢复算法

快恢复:将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

技术图片

ping

ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。
它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。
ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。 ping给出来了传送的时间和TTL的数据。

Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。
原理:它收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器IP。

应用层

浏览器输入url并回车的过程以及相关协议

1、根据域名,进行DNS域名解析。
2、拿到解析的IP地址,建立TCP连接
3、发送HTTP请求
4、服务器处理请求
5、返回HTTP报文
6、关闭TCP链接
7、浏览器解析html
8、浏览器渲染页面

使用的协议:DNS(获取域名的IP的地址);TCP(与服务器建立TCP连接);IP(建立TCP协议时,需发送数据,在网络层用到IP协议);OPSF(IP数据包在路由之间传送,路由选择使用OPSF协议);ARP(路由器与服务器通信时,将IP地址转化为MAC地址,使用ARP协议);HTTP(TCP建立之后,使用HTTP协议访问网页);

DNS寻址

先查找浏览器缓存,如果没命中,查询系统缓存,即hosts文件。
如果没命中,查询路由器缓存。
如果没命中,请求本地域名服务器解析域名,没有命中就进入根服务器进行查询。
没有命中就返回顶级域名服务器IP给本地DNS服务器。
本地DNS服务器请求顶级域名服务器解析,没有命中就返回主域名服务器给本地DNS服务器。
本地DNS服务器请求主域名服务器解析域名,将结果返回给本地域名服务器。
本地域名服务器缓存结果并反馈给客户端。

DNS协议运行在UDP协议之上,使用端口号53。

HTTP1.1与1.0之间的区别:

1、HTTP1.1默认开启长连接,在一个TCP连接上可以传送多个HTTP请求和响应。而1.0不支持长连接。客户端和服务器每进行一次HTTP操作,就建立一次连接。
2、缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
3、Host头处理:1.0请求的url并没有传递主机名(服务器与IP地址绑定),1.1请求和响应都支持Host头域(虚拟主机共享IP地址)

4、1.1新增24个错误状态响应码。409:请求的资源和资源的当前状态冲突,410:服务器资源永久性删除。
5、带宽优化以及网络连接的使用:1.1允许只请求资源的某个部分.

HTTP2.0和HTTP1.X相比的新特性

1、新的二进制格式:1.x的解析是基于文本的,而2.0的协议解析是采用二进制格式。
2、多路复用,即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request。
3、header压缩。
4、服务端推送。

HTTP与HTTPS

1、HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
2、HTTP协议运行在TCP之上,传输的内容都是明文。HTTPS运行在SSL/TLS(运行在TCP之上)之上,内容加密。3、连接端口不一样,http是80,https是443.
4、http连接简单,没有状态,https是ssl加密的传输,身份认证的网络协议,更安全。

HTTPS在传统的HTTP和TCP之间加了一层用于加密解密的SSL/TLS采用对称加密和非对称加密结合的方式来保护浏览器和服务端之间的通信安全。对称加密:加密和解密都是同一个密钥。非对称加密:密钥成对出现,分为公钥和私钥,公钥和私钥之间不能互相推导,公钥加密需要私钥解密,私钥加密需要公钥解密。

SSL四次握手

1、 客户端发出请求
首先,客户端(通常是浏览器)先向服务器发出加密通信的请求,这被叫做ClientHello请求。

2、服务器回应
服务器收到客户端请求后,向客户端发出回应,这叫做SeverHello。

3、客户端回应
客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。

4、服务器的最后回应
服务器收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的"会话密钥"。然后,向客户端最后发送下面信息。
(1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验。

至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过用"会话密钥"加密内容。

HTTP请求有哪些

get:请求特定资源
post:向指定资源提交数据进行处理请求
Put:向指定资源上传最新内容
Delete:请求删除资源。

get和post区别

Get是从指定资源请求数据,而Post是向指定资源提交要被处理的数据。
Get请求刷新无害,而post刷新,数据会被重复提交。
Get请求的数据会附加到URL中,多个参数用&连接,URL编码采用ASCII编码。而POST请求会把请求的数据放到body中。因此get请求的数据会暴露在地址栏中,而post不会。又浏览器和服务器对url的长度有限制,所以get传输数据的大小受到url的限制。
Get请求的资源会被浏览器缓存。
post比get慢,因为post在发送数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据。而get请求直接发送请求头和数据。

状态码

? 304:客户端请求一个有缓存的资源,服务器返回304告诉客户端,自上次请求后,资源并没有更新,原本的缓存可以继续使用。

1xx:指示信息--表示请求已接收,继续处理

100 --客户端必须继续发出请求 101-客户端要求服务器转换HTTP协议版本。

2xx:成功--表示请求已被成功接收、理解、接受

? 200—OK 204--请求收到,但返回信息为空 206--服务器已经完成了部分用户的GET请求

3xx:重定向--信息不完整需要进一步补充

? 300 --- 请求资源在多处可得到。301—永久重定向,隐式重定向。302 临时重定向,显示重定向。

? 304—请求的资源没有改变,可以使用缓存。

4xx:客户端错误--请求有语法错误或请求无法实现

? 401---未授权 403—禁止访问。 404 –找不到。409:对当前资源状态,请求不能完成

5xx:服务器端错误--服务器未能实现合法的请求

? 500内部服务器错误,501未实现, 502网关错误,503服务不可用,504 网关超时。

转发和重定向的区别

转发(forward)是服务器行为,重定向是客户端行为。
转发是服务器直接向目标地址访问URL,将相应内容读取之后发给浏览器,地址栏URL不变,转发页面和转发到的页面可以共享request里面的数据。效率高,可用于用户登录之后将角色转发到相应的模块。
重定向是利用服务器返回的状态码来实现的,如果服务器返回301或者302,浏览器到新的网址重新请求资源。地址栏url会发生改变,而且不能共享数据。效率低,可用于用户注销之后,跳转到其他网站。

Session和Cookie的区别:

? Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端, 然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。

? 客户端发送一个http请求到服务器端
? 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
? 客户端发送一个http请求到服务器端,其中包含Cookie头部
服务器端发送一个http响应到客户端

Cookie的不可跨域名性

? Session保存在服务器上。 客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。 客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。服务器一般把Session放在内存中。 每个用户都会有一个独立的Session。Session在用户第一次访问服务器的时候自动创建, 创建Session的同时,服务器会为该Session生成唯一的session id,session id会以cookie的方式发送个客户端。客户端下次访问时,带上这个session id,就可以跟踪会话了。如果浏览器不支持cookie,可以用url重写的方式,将sessionId写入url传给服务器。

内容来源:
https://www.nowcoder.com/discuss/344311?type=2&order=0&pos=9&page=4
https://mp.weixin.qq.com/s/qn5fw8yHvjBou6Ps2Xo9Lw
https://www.nowcoder.com/tutorial/94/f44157f2ea724754a82dd352f8b82498








































































以上是关于网络原理的主要内容,如果未能解决你的问题,请参考以下文章

Android之网络—第二篇(Https原理)

容器网络原理(有点长)

5G NGC — 关键技术 — 网络切片 — 实现原理

Docker容器间网络互联原理,讲不明白算我输

小白必读神经网络原理

【Tensorflow】深度神经网络原理