计算机网络

网络模型

模型结构

  • 模型

    • OSI七层模型:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层;其中,物理层用于传输比特流,数据链路层用于根据MAC地址转发数据帧,网络层用于进行主机之间的通信,运输层用于进程之间的通信,会话层管理两个主机之间的会话进程,表示层处理两个通信系统中交换信息的表示方式,应用层是用户与网络之间的界面

    • 五层模型:物理层、数据链路层、网络层、运输层、应用层

    • TCP/IP四层模型:网络接口层、网际层、运输层、应用层

  • 协议

    • 应用层:HTTP/FTP/TFTP/DNS/Telnet/SMTP,TFTP使用的传输层协议是UDP

    • 运输层:TCP(可靠性要求高)/UDP(可靠性要求低)

    • 网络层:IP/ICMP/RIP/ARP/RARP

TCP三次握手

  • 过程

    1. 客户端发送连接请求(SYN=1, seq=x),状态由CLOSED转为SYN-SEND

    2. 服务器端收到连接请求,并对请求进行确认(ACK=1,ack=x+1,SYN=1,seq=y),状态由LISTEN转为SYN-RCVD

    3. 客户端对服务器的确认进行确认(ACK=1,ack=y+1,seq=x+1),状态由SYN-SEND转为ESTABLISHED

    4. 服务器接收到确认之后状态转为ESTABLISHED,连接建立

  • 可以保证建立可靠连接

    • 如果两次握手,客户端发送的请求连接报文延时了,客户端重新发送了一次报文,后来收到确认,建立连接,完成数据传输并建立了连接。这事,服务器受到了延时的报文,如果只有两次握手,服务器会再次建立连接,如果是三次握手,客户端知道这个连接已经失效了,不会再确认,也就不会再建立连接

TCP四次挥手

  • 过程

    • 客户端发送完所有数据,发送请求关闭连接的报文(FIN=1,seq=u),状态由ESTABLISHED转为FIN-WAIT-1

    • 服务器端接收到请求连接关闭的报文后发送确认报文(ACK=1,ack=u+1,seq=v),状态由ESTABLISHED转为CLOSE-WAIT,客户端的状态由FIN-WAIT-1变为FIN-WAIT-2,此时处于半关闭状态,因为服务器可能还有数据需要发送

    • 服务器端发送完所有数据后,向客户端发送断开连接的报文(ACK=1,ack=u+1,FIN=1,seq=w),服务器端状态由CLOSE-WAIT转为LAST-ACK

    • 客户端接收到连接关闭报文后,发送确认报文(ACK=1,ack=w+1,seq=u+1),客户端状态由FIN-WAIT-2变为TIME-WAIT

    • 服务器端接收到确认报文后,状态由LAST-ACK变为CLOSED

    • 客户端等待2MSL(报文最大生存时间)后,状态由TIME-WAIT变为CLOSED

  • 等待2MSL的原因:(1)保证客户端发送的最后一个ACK报文能到达B。这个ACK报文可能会丢失,B等待1 MSL后没有收到ACK报文会重发FIN报文,A收到FIN报文后会再次发送ACK报文,并将计时器重置为2MSL;(2)防止已失效的连接请求报文段再次出现在本次连接中,2MSL可以使本连接持续时间内产生的所有报文都从网络中消失。

三握四挥常见问题

  • 【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?

    答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

  • 【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

    答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

  • 【问题3】如果已经建立了连接,但是客户端突然出现故障了怎么办?

    TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

TCP可靠的原因

  • 三次握手、超时重传、滑动窗口、拥塞控制

  • 设置滑动窗口是为了实现流量控制,流量控制是让发送发的发送速率不要太快,要让接收方来得及接收,流量控制是端到端的一个过程。拥塞控制是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不过载,拥塞控制是一个全局性的过程。

TCP拥塞控制

主要包括慢开始、快重传、快恢复三个步骤

  • 慢开始:开始时拥塞窗口设置为1,之后每传输一轮拥塞窗口呈指数规律增长,拥塞窗口大小超过提前设定的阈值ssthresh时,拥塞窗口变为按线性规律增长
  • 快重传:当收到三个重复的ACK报文时则认为发生了网络拥塞,当判断发生网络拥塞之后开始重传报文,之所以叫快重传,是因为此时虽然发生网络拥塞了,但是拥塞程度还不是非常严重,否则不会有三个ACK报文可以传回来,在这个时候就开始拥塞控制,可以避免加重网络拥塞程度
  • 快恢复:当判断发生拥塞时将发送方的拥塞窗口设置为当前拥塞窗口的一半,之后从新的拥塞窗口开始线性增长

使用TCP的应用场景

  • 需要保证传输可靠性的场景

  • HTTP/HTTPS/FTP等传输文件的协议,POP/SMTP等邮件传输协议

HTTP和HTTPS的区别

  • HTTP是简单的明文传输,使用80端口

  • HTTPS是安全的加密传输协议,使用443端口,需要申请证书,有一定的经济成本

HTTPS加密

  • 使用对称加密和非对称加密相结合的方式进行加密传输,对称加密简单,但是安全性比较低,密钥传输过程中容易暴露,非对称加密安全性高,但是加密解密过程太复杂。HTTPS结合了两者的优点,采用非对称加密的方式创建对称加密方式的密钥,再使用该密钥进行对称加密的传输过程

  • 过程

    1. 客户端向服务器端发送加密通信请求,同时发送自己的SSL版本、支持的加密方式并发送一个随机数

    2. 服务器端确认SSL版本和加密方式,然后发送自己的数字证书,再发送一个随机数

    3. 客户端验证服务器端的证书,再发送一个用服务器端公钥加密后的随机数,再使用前三个随机数生成对话密钥

    4. 服务器端用私钥解密第三个随机数,再根据三个随机数得到对话密钥

    5. 使用对称加密的方式通信

HTTP1.0、HTTP1.1和HTTP2.0的区别

HTTP1.0和HTTP1.1

  • 缓存策略:1.1提供了IF-MATCH,IF-NOT-MATCH等缓存头控制缓存策略

  • 带宽优化:1.1在请求头引入range机制,允许请求资源的某部分,不必传输全部资源,可以充分利用带宽和连接

  • 错误通知:增加了24种错误状态响应码,409表示请求资源与当前资源冲突,410表示请求资源被永久删除

  • Host头:1.1请求消息和相应消息的host头域传递主机名,因为一台服务器可能有多个虚拟机在运行

  • 支持长连接:1.1的一个TCP连接上可以传送多个HTTP请求和响应,减少了连接建立的开销和时间

HTTP2.0

  • HTTP2.0在HTTP1.*的基础上加了web优化,减少了网络延迟

浏览器从接收到一个URL到展示页面经历的过程

  • DNS域名解析->建立TCP连接->发送HTTP请求->服务器处理请求并返回HTTP响应->浏览器解析渲染页面

ICMP协议

  • 是TCP/IP协议族的一个子协议,用于在IP主机和路由器之间传递控制信息,这些控制信息包括网络通不通、主机是否可达、路由是否可用等网络本身的信息

路由器和交换机的区别

  • 工作层次不同:交换机工作在数据链路层,路由器工作在网络层

  • 转发的数据对象不同:交换机根据MAC地址转发数据帧,路由器根据IP地址转发IP数据包

  • 用途不同:交换机用于构建局域网,路由器用于连接主机和外网

  • 工作原理不同:交换机用硬件实现数据帧转发功能,路由器主要由软件实现比较复杂的路由算法

  • 安全性能不同:路由器一般具有防火墙的功能,可以过滤一些网络数据包;路由器具有交换机的功能,三层交换机具有路由器的功能,路由器速度较慢且价格较贵,三层交换机具有转发数据帧的功能,也具有路由功能,因此得到了广泛使用

DNS寻址过程

大多数DNS寻址过程,客户主机和本地DNS之间采用递归的方式寻址,本地DNS其它DNS之间采用迭代的方式寻址

  1. 浏览器缓存或者本地host文件有该网址的映射关系,直接返回映射关系,完成域名解析

  2. 否则,查找本地DNS服务器缓存,如果有该网址的映射关系,则直接返回

  3. 否则,查找本地服务器

    • 域名包含在本地配置区域资源中,则直接返回解析结果,结果具有权威性

    • 域名不包含在本地资源配置区域中,但本地DNS保存了该网址的映射关系,则调用这个地址映射,完成域名解析,结果不具有权威性

  4. 否则

    • 本地DNS服务器未采用转发模式,即迭代方式,发送请求给跟DNS,跟DNS无法解析则返回相应的顶级域名DNS给本地DNS,本地DNS继续发送请求,直到得到映射,将解析结果返回给本地DNS,本地DNS完成域名解析

    • 本地服务器采用转发模式,即递归方式,本地DNS将请求转发至上一级DNS服务器,如果上一级DNS服务器无法解析,则继续向上请求,最终将解析结果依次返回本地DNS,再返回客户机,查询完成

反向代理负载均衡技术

  • 反向代理是指以代理服务器接收Internet上的连接请求,然后将请求转发给内部网络的服务器,并将服务器的处理结果返回给请求连接的客户端,代理服务器对外充当了服务器的角色

  • 反向代理负载均衡技术是指将Internet的连接请求动态地转发给内部网络上的多台服务器,从而达到负载均衡的目的

  • 优点:反向代理负载均衡技术可以用软件实现,也可以用硬件实现

    • 将优化的负载均衡策略和反向代理的高速缓存技术结合起来,提高静态网页的访问速度

    • 网络外部用户不能访问到真正的服务器,具备额外的安全性

  • 缺点

    • 处理第七层应用层,需要为每一种应用服务专门开发一个反向代理服务器,限制了应用范围

    • 每次都需要建立对外和对内两个连接,在并发连接请求数据量非常大的时候,代理服务器本身会变为服务瓶颈

  • 用处:连接数量不是特别大,每次连接都需要消耗大量处理资源的站点进行负载均衡,如search

TIME_WAIT和CLOSED_WAIT

  • TIME_WAIT用来重发可能丢失的ACK报文

  • TIME_WAIT是主动关闭,CLOSE_WAIT是被动关闭

HTTP响应码

  • 1**:信息,请求收到,继续处理

  • 2**:成功;200:一切正常

  • 3**:重定向,为了完成请求,必须执行进一步的操作;302:文件临时移出;304请求的网页自上次修改后没有再修改过,服务器返回此响应时不会返回网页的内容,进而节省带宽和网络资源

  • 4**:客户端错误;404:notfind;409:请求资源与当前资源冲突;410:请求资源被永久删除

  • 5**:服务器端错误;502应答码表示作为网关或者代理工作的服务器从上游服务器接收到无效的响应;504应答码表示作为网关或者代理工作的服务器未能及时从上游服务器接收到响应

TCP/IP保证可靠性

  • 序号:对收到的报文段进行排序并检测重复性

  • 校验和:检测报文段的错误

  • 确认和计时器:检测丢包和延时

TCP和UDP

  • TCP是面向连接的可靠传输,UDP是无连接的不可靠传输方式

  • TCP面向字节传输,UDP面向报文传输

  • UDP的可靠性由应用层保证

  • TCP传输速度较慢,因此有实时性要求的应用程序需要使用UDP,如聊天、视频会议等

域名劫持

互联网攻击的一种方式,通过攻击域名解析服务器或伪造域名解析服务器,把目标网站域名解析到错误的IP地址,从而让用户无法访问目标网站或恶意要求用户访问指定网站

session和cookie

  • session和cookie用于跟踪用户会话,弥补了HTTP无状态的缺点
  • cookie存储在客户端,因此安全性更差一些,session存储在服务器端(文件、内存、数据库),安全性更好
  • cookie有大小限制,session没有大小限制
  • cookie可以设置生存时间,不设置则默认此次会话结束就销毁,session随会话结束而销毁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值