逐梦offer -- 网络基础知识总结

355 阅读16分钟

1. 网络基础

1.1 OSI 7层模型 与 TCP/IP 四层模型

OSI 7层模型

  1. 物理层:负责 0,1 比特流与电压高低、光的闪灭之间的互换
    设备: 中继器:将电缆传过来的电信号与光信号经中继器的波形调整与放大传给另一个。
  2. 数据链路层: 负责数据帧与比特流的转换
    设备: 网桥:通过 MAC 地址连接两个网络。通过CRC(cyclic redundancy check 循环冗余校验)的方式对数据链路层中的 FCS(frame check sequence) 验证。从而确保数据的完整性。
  3. 网络层:负责寻址与路由的选择
    设备: 路由器:根据IP 地址进行处理。
  4. 传输层:管理两个节点之间数据的传输。确保数据被可靠的传送到目标地址,检测是否有数据丢失。
  5. 会话层:负责建立和断开通信连接
  6. 表示层:负责数据格式的转换
  7. 应用层:针对特定应用的协议
    4-7层交换机
    网关:负责从传输层到应用层的数据进行转换和转发的设备。

TCP/IP 四层模型
包为描述数据的全能型单位。

  • 网络接口层
    单位:帧
    相关技术:
    • MAC 地址: 使用网卡(NIC) , 有唯一性
    • 共享介质型网络:半双工通信,只发送或只接收的方式
      1、争用方式(CSMA (carrier sense multiple access) - 载波监听多路访问)
      2、令牌传递方式
    • 非共享介质型网络:双工通信
      每个站直连交换机,由交换机负责转发数据帧。
    • 以太网帧格式: MAC(介质访问控制层)+LLC(逻辑链路控制层)+SNAP+IP+TCP+上层数据+FCS
  • 网络层
    协议:IP / ICMP / ARP(Address Resolution Protocol) / NAT / DHCP / DNS
    相关技术:
    • Hop : 数据链路层以下分层的传输数据帧的一个区间。是主机或路由器网卡不经其他路由器而能直接到达的对象之间的一个区间。
    • MTU (Maximum Transmission Unit): 最大传输单位
    • ARP : 通过 IP 地址 得到 MAC 地址 – RARP : MAC 得到 IP
    • ICMP :确认网络的正常使用,以及异常的排查
      类型3 :目标不可达
      类型5 :重定向
      类型11 :超时
      类型0 :向对方发送消息
      类型8 :接收对方发送的消息
      ping 命令就是 类型0、8 。
      TTL Time To Live 防止IP 包无限制的传递下去
    • NAT(Network Adddress Translator) : 由本地网络中的私有地址转换为全局 IP 地址。
    • DNS :域名命名系统 – 使用 TCP 53号端口
    • DHCP :动态域名控制协议
    • 路由控制
  • 传输层
    协议:TCP / UDP
  • 应用层
    协议:WWW / HTTP / MIME,SMTP、POP、IMPA / FTP / TELNET - SSH / SNMP
    相关技术:
    • FTP :用两条 TCP 连接:
      1、数据控制 , 使用 21号端口
      2、数据传输 , 使用 20号端口
      3、状态码: 1-提供信息,2-连接管理,3-用户相关,4-错误,5-文件系统
    • HTTP : 使用 80 端口
      1、 主要命令:GET.PUT.POST.DELETE.OPTIONS.HEAD.TRACE
      2、 状态码: 1-提供信息,2-肯定应答,3-重写向请求,4-客户端请求内容错误,5-服务器错误
    • HTTPS : 使用 443 端口

1.2 TCP / UDP

SYN (Synchronize Flag) ACK(Acknowledgement Flag) FIN(Fin Flag)
TCP 的三次握手

  1. 客户端 –》 SYN
  2. SYN ACK 《– 服务器
  3. 客户端 –》SYN

四次挥手

  1. 客户端 –》 FIN
  2. ACK 《– 服务器
  3. FIN 《– 服务器
  4. 客户端 –》 ACK

MSS(Maximum Segment Size) 最大消息长度:由三次握手的时候,两端主机会在TCP首部写入 MSS 长度,通过比较,取得其中比较少的值

窗口控制
原先的缺点:TCP 以一个段为单位,每发一个段进行一次确认应答的处理。包的往返时间越长,通信性能越低。
因此引入窗口这个概念。窗口大小是指无需等待确认应答,而可以继续发送数据的最大值。
使用大量的缓冲区,如果有部分数据丢包,发送端主机设置缓存保留这些数据,直至收到它们的确认应答。
如果没有丢包,就滑动窗口到下一个位置

重发控制
窗口在一定程度上较大时,即使有少部分的确认应答丢失也不会进行数据重发。可以通过下一个确认应答确认。
当某一报文段丢失后,发送端会一直收到序号为原数据的确认应答。连续 3 次 同一个确认应答,会进行重发

流控制
TCP 首部中有专门的字段用来通知窗口的大小
接收主机将自己可以接收的缓冲区大小放入这个字段中通知给发送端,这个字段的值越大,说明网络的吞吐量越高

拥塞控制
慢启动:通过拥塞窗口,第一次大小为 1 MSS , 以后每次 收到一次确认应答(ACK),拥塞窗口的值 加 1.
然后比较 两端 窗口的 大小,发送比小值还的小的数。

1.3 路由协议

  • 静态路由 与 动态路由
  • AS (Autonomous System) 与 路由选择域(Routing Domain)
    内部使用 IGP (Interior Gateway Protocol) 外部使用 EGP (Exterior Gateway Protocol).
  • IGP 中可以使用 RIP (Routing Information Protocol) , OSPF(Open Shortest Path First);
    • RIP – 距离向量(Distance-Vector)协议:通过距离与方向决定目标网络或主机位置。
    • OSPF – 链路状态(Link-State)协议:了解网络整体连接状态的基础上生成路由控制表。
      将每条链路赋予一个权重,采用 Dijkstra 算法(最短路径优先算法)生成相应的路由控制表。
      权重,是通过 HELLO 协议, HELLO包在LAN中传递,3 次以上空等后,使用链路状态更新包(Link state update package) 通知状态的改变。
      链路状态更新包 传达 : 网络 LSA(Link State Advertisement 链路状态通告) , 路由器 LSA 信息。 从而让 路由器生成链路状态数据库
  • EGP 中使用 BGP(Border Gateway Protocol)
    • BGP – 路径向量(Path-Vector)协议:
  • 总结 : 路由选择时的度量 , RIP表现为 路由器个数, OSPF则是每个子网的成本, BGP 为 AS 的个数。

1.4 HTTP

1. get与post

Http 定义了服务器交互的不同方法 ,最基本的有四种 :GET查, POST改,PUT增,DELETE删。

  1. get一般用于信息获取,是安全与幂等的。
    安全指。该操作用于获取信息,所以不会对数据有什么破坏。
    幂等意味着 对同一URL 的多个请求返回同样的结果。
  2. post表示可能修改服务器上的资源的请求。

区别:

  1. GET请求的数据会附在URL之后,以 ?分割URL和传输数据,参数之间用&相连。
    post 方式则是将提交的数据放置在 HTTP 包的 包体中。
  2. GET方式提交的数据有限制,是因为特定的浏览器及服务器对它的限制,URL不存在参数上限的问题。HTTP规范中并没有对URL长度进行限制。
    post方式提交的大小是没有限制的,限制的是服务器的处理程序的处理能力。
  3. POST比GET 提交的安全性高,是因为GET提交数据,用户名和密码是明文出现在URL上,POST数据是隐藏到HTTP包的包体中的。抓包时,仍然可以看见。

2. session与cookie

HTTP协议 ( www.w3.org/Protocols/ )是“一次性单向”协议。
服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTP Request,服务端处理请求,并且返回一个HTTP Response给客户端,本次HTTP Request-Response Cycle结束。
Session ID实际上是在客户端和服务端之间通过HTTP Request和HTTP Response传来传去的。

  1. Session对象在浏览器中的有效范围:
    IE中:
    1. Session对象只在建立Session对象的窗口中有效。
    2. 在建立Session对象的窗口中新开链接的窗口也有效。
      Session只会在内存中,他会随着IE窗口的关闭而死亡。
      也就是说单用seesion是不会有产生自动登入的效果的。
  2. Cookie 是在服务器给客户端IE一个命令后在客户端产生并存的,
    它可以存放用户信息,存到客户端硬盘上,在COOKIE记录被删除
    或者失效日期之前,就可以实现自动登入的现象。
  3. Session 和 Cookie 是不同的,但是他们确实是相关的。
    当打开IE登入后,会向服务器发出一个指令请求SESSIONID以
    及页面内容,服务器会返回页面内容和一个没有被使用的
    SESSIONID让此IE使用,当时IE就对返回SESSIONID做存储;而当此IE再访问任何这个站点的JSP程序的时候,都会给服务器这个 SESSIONID,来确认客户端的身份。(在没有Cookie 的情况下session死亡 SESSIONID被取消就需要重新登入)

3. http 与 https 的区别

一、HTTP

1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

1) HTTP协议详解之请求篇

http请求由三部分组成,分别是:请求行、消息报头、请求正文
1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:
Method Request-URI HTTP-Version CRLF
其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
请求方法(所有方法全为大写)有多种,各个方法的解释如下:
GET    请求获取Request-URI所标识的资源
POST    在Request-URI所标识的资源后附加新的数据
HEAD    请求获取由Request-URI所标识的资源的响应消息报头
PUT     请求服务器存储一个资源,并用Request-URI作为其标识
DELETE   请求服务器删除Request-URI所标识的资源
TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT  保留将来使用
OPTIONS  请求查询服务器的性能,或者查询与资源相关的选项和需求
2、请求报头后述
3、请求正文(略)

2) HTTP协议详解之响应篇

在接收和解释请求消息后,服务器返回一个HTTP响应消息。
HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
1、状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
eg:HTTP/1.1 200 OK (CRLF)
2、响应报头后述
3、响应正文就是服务器返回的资源的内容

3) HTTP协议详解之消息报头篇

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。

普通报头 请求报头 响应报头 实体报头
Cache-Control Accept Location(重定向)
Date Accept-Charset Server(服务器用来处理软件的信息
Connection Accept-Encoding Content-Encoding
Accept-Language Content-Language
Authorization WWW-Authenticate Content-Type
Host Last-Modified
User-Agent Expires
二、HTTPS

  HTTPS(Hypertext Transfer Protocol over Secure Socket Layer,基于SSL的HTTP协议)使用了HTTP协议,但HTTPS使用不同于HTTP协议的默认端口及一个加密、身份验证层(HTTP与TCP之间)。提供了身份验证与加密通信方法,现在它被广泛用于互联网上安全敏感的通信。
  客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤。
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。

1.5 RESTful(Representational State Transfer)

(1)每一个URI代表一种资源;
(2)客户端和服务器之间,传递这种资源的某种表现层;
(3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。

(1)客户-服务器:客户-服务器约束背后的原则是分离关注点。通过分离用户接口和数据存储这两个关注点,改善了用户接口跨多个平台的可移植性;同时通过简化服务器组件,改善了系统的可伸缩性。
(2)无状态:通信在本质上是无状态的,改善了可见性、可靠性、可伸缩性.
(3)缓存:改善了网络效率减少一系列交互的平均延迟时间,来提高效率、可伸缩性和用户可觉察的性能。
(4)统一接口:REST架构风格区别于其他基于网络的架构风格的核心特征是,它强调组件之间要有一个统一的接口。

1.6 网络安全

1. CSRF (Cross-Site Request Forgeries)

csrf 跨站点请求伪造 : 冒充用户发起请求。
本质:通过已经认证的用户权限搞事情。
模拟攻击: user – webA – webB

  1. user 浏览 webA
  2. webA 上发送给 user 一个 cookie
  3. user 浏览 webB
  4. webB 要求 user 访问 webA
  5. user 此时带着 cookie 访问 webA
  6. cookie 验证合格,所以 webB 可以 通过 user 的权限操控 webA

    与 xss 区别:
    通常来说 CSRF 是由 XSS 实现的,CSRF 时常也被称为 XSRF(CSRF 实现的方式还可以是直接通过命令行发起请求等)。
    本质上讲,XSS 是代码注入问题,CSRF 是 HTTP 问题。XSS 是内容没有过滤导致浏览器将攻击者的输入当代码执行。CSRF 则是因为浏览器在发送 HTTP 请求时候自动带上 cookie,而一般网站的 session 都存在 cookie里面。

2. XSS (Cross Site Scripting)

xss 跨站脚本攻击 : 通过注入非法的 html 标签 以及 javascript 代码,从而当用户浏览网页时,控制用户的浏览器

xss 主要分为三类:

  1. DOM xss :
    DOM即文本对象模型,DOM通常代表在html、xhtml和xml中的对象,使用DOM可以允许程序和脚本动态的访问和更新文档的内容、结构和样式。它不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析,可以认为完全是客户端的事情。
  2. 反射型 xss :
    反射型XSS也被称为非持久性XSS,是现在最容易出现的一种XSS漏洞。发出请求时,XSS代码出现在URL中,最后输入提交到服务器,服务器解析后在响应内容中出现这段XSS代码,最后浏览器解析执行。
  3. 存储型 xss :
    存储型XSS又被称为持久性XSS,它是最危险的一种跨站脚本,相比反射型XSS和DOM型XSS具有更高的隐蔽性,所以危害更大,因为它不需要用户手动触发。 允许用户存储数据的web程序都可能存在存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当所有浏览者访问某个页面时都会被XSS,其中最典型的例子就是留言板。

跨站脚本攻击可能造成以下影响:

  1. 利用虚假输入表单骗取用户个人信息。
  2. 利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
  3. 显示伪造的文章或图片。

防御:

  • httpOnly: 在cookie 中设置 HttpOnly ,使得 js 脚本无法读取到 cookie 信息。
  • 过滤 :
    • 输入检查
    • HtmlEncode : 对一些标签进行转化,将之转化为文本内容,而非一段可以执行的代码
    • JavaScriptEncode : 对一些字符加上反斜杠

3. DDos

因为自己没有这方面的经验与系统的学习,所以就大概了解了一下,没有过多的分析。
漫画告诉你什么是DDoS攻击?
DDoS的攻击原理与防御方法

1.7 socket编程

请点这里的明显的清楚的链接

结语

都看到这里了,点个关注好不啦。
你的关注,是我最大的动力哦。
不定期干货更新。
一只相当程序员的1米88处女座大可爱。