面试基础知识——计算机网络篇

计算机网络体系结构

计算机网络大体上分为两种模型,分别是OSI七层协议和TCP/IP五层协议。OSI自顶向下的七层协议分别是应用层,表示层,会话层,传输层,网路层,数据链路层,物理层。TCP/IP自顶向下的五层协议分别是应用层,传输层,网络层,数据链路层,物理层。

各层对应的协议

  1. 应用层 ,TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet;
  2. 传输层 ,TCP,UDP;
  3. 网络层 ,IP,ICMP,RIP.OSPF,BGP,IGMP;
  4. 数据链路层 ,SLIP,CSLIP,PPP,ARP,RARP,MTU;
  5. 物理层 ,ISO2110,IEEE802;

HTTP协议

HTTP的特性

  • HTTP构建在TCP/IP的传输协议之上,默认端口为80
  • HTTP是无连接无状态的

HTTP报文的结构

HTTP协议是以ASCII码传输,建立在TCP/IP协议之上的应用层规范。主要分为状态行,请求头,消息主体。HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而 HTTP 中的GET,POST,PUT,DELETE就对应着对这个资源的查,增,改,删4个操作。

GET用于信息获取,而且应该是安全的 和 幂等的。

所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。

幂等的意味着对同一URL的多个请求应该返回同样的结果。

GET 可提交的数据量受到URL长度的限制,HTTP 协议规范没有对 URL 长度进行限制。这个限制是特定的浏览器及服务器对它的限制
理论上讲,POST 是没有大小限制的,HTTP 协议规范也没有进行大小限制,出于安全考虑,服务器软件在实现时会做一定限制
参考上面的报文示例,可以发现 GET 和 POST 数据内容是一模一样的,只是位置不同,一个在URL里,一个在 HTTP 包的包体里
POST 提交数据的方式
HTTP 协议中规定 POST 提交的数据必须在 body 部分中,但是协议中没有规定数据使用哪种编码方式或者数据格式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。

但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type 和消息主体编码方式两部分。下面就正式开始介绍它们:

application/x-www-form-urlencoded
这是最常见的 POST 数据提交方式。浏览器的原生 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。上个小节当中的例子便是使用了这种提交方式。可以看到 body 当中的内容和 GET 请求是完全相同的。

multipart/form-data
这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 表单的 enctype 等于 multipart/form-data。

上面提到的这两种 POST 数据的方式,都是浏览器原生支持的,而且现阶段标准中原生 表单也只支持这两种方式(通过 元素的 enctype 属性指定,默认为 application/x-www-form-urlencoded。其实 enctype 还支持 text/plain,不过用得非常少)。

随着越来越多的 Web 站点,尤其是 WebApp,全部使用 Ajax 进行数据交互之后,我们完全可以定义新的数据提交方式,例如 application/json,text/xml,乃至 application/x-protobuf 这种二进制格式,只要服务器可以根据 Content-Type 和 Content-Encoding 正确地解析出请求,都是没有问题的。
HTTP的响应报文与请求类似。常见的状态码有如下几种:

  • 200 OK 客户端请求成功
  • 301 Moved Permanently 请求永久重定向
  • 302 Moved Temporarily
    请求临时重定向
  • 304 Not Modified 文件未修改,可以直接使用缓存的文件。
  • 400 Bad Request
    由于客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized
    请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
  • 403 Forbidden
    服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
  • 404 Not Found
    请求的资源不存在,例如,输入了错误的URL
  • 500 Internal Server Error
    服务器发生不可预期的错误,导致无法完成客户端的请求。
  • 503 Service Unavailable
    服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

关于HTTP与HTTPS的区别

HTTPS是一种以安全为目标的HTTP通道。即在HTTP下加入SSL层。HTTPS协议的作用主要有两种,一个是建立一个信息安全通道,来保护数据传输的安全;另一种就是确认网站的真实性。
HTTPS的工作原理:
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤,如图所示。

(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。

(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)Web服务器利用自己的私钥解密出会话密钥。

(6)Web服务器利用会话密钥加密与客户端之间的通信。
  在这里插入图片描述

TCP协议

  • TCP是一种面向连接的可靠的字节流传输服务。
  • TCP是一种点对点的协议,并不支持广播以及多播。
  • TCP 使用校验和,确认和重传机制来保证可靠传输。
  • TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复

TCP三次握手与四次挥手

TCP建立连接时的三次握手机制(Three-way Handshake)是一中保证连接的机制,具体如图:
在这里插入图片描述
三次握手机制的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。

TCP连接的拆除依靠的是四次挥手机制(Four-way handshake)。具体操作如图:
在这里插入图片描述
其中,拆除连接之所以比建立连接多了一次原因,是因为服务器在第二次挥手之后,表示自己就收到了客户端关闭连接的请求,但还没有准备好关闭连接。此时的服务器还可以继续接收数据,客户端接收到这个确认包之后,进入FIN_WAIT_2状态,等待服务器关闭连接。服务器端准备好关闭连接时,会再次向客户端发送结束连接请求,并将FIN设置为1。

SYN攻击

在三次握手过程中,服务器发送 SYN-ACK 之后,收到客户端的 ACK 之前的 TCP 连接称为半连接(half-open connect)。此时服务器处于 SYN_RCVD 状态。当收到 ACK 后,服务器才能转入 ESTABLISHED 状态.

SYN 攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。

SYN 攻击是一种典型的 DoS/DDoS 攻击。

  • 检测SYN攻击
    检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。在 Linux/Unix 上可以使用系统自带的 netstats 命令来检测 SYN 攻击。
  • 防御SYN攻击
    SYN攻击不能完全被阻止,除非将TCP协议重新设计。我们所做的是尽可能的减轻SYN攻击的危害,常见的防御 SYN 攻击的方法有如下几种:
    • 缩短超时(SYN Timeout)时间
    • 增加最大半连接数
    • 过滤网关防护
    • SYN cookies技术
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值