计算机网络基础要点摘记

1.因特网是什么:被五层协议规范的一系列软硬件组成的让应用程序间通信的世界范围内计算机网络的集合。

计算机网络作用:资源共享(硬件如打印机、软件)、通讯(文字图片)、网络管理集中化。

官方发布的一系列的规则文档,基本的互联网通信协议都有在RFC文件内详细说明

  1. 国际标准化组织ISO制定了OSI 7层协议,让计算机拥有共通的通信协议,划分层次是为了对各层业务解耦,方便扩展与更新,任何一次两个用户间的通信都需要经过七层数据转换(即为逐层加协议对应数据头打包与逐层拆包解析的过程)
  2. 软件点击发送邮件之后才是应用层接收此邮件,为特定应用程序提供数据传输服务,规定了应用程序间传输报文的格式与交换方式(比如http的客户服务器模式、状态码控制具体行为)  SMTP\HTTP\FTP\DNS\DHCP
  3. 表示层又称翻译层,将数据格式(编码、文件格式)进行统一
  4. 会话层建立\断开\同步与服务器的会话
  5. 传输层,(通过套接字)为进程之间提供数据传输服务,报文按TCPUDP协议格式进行分组和重组为报文段建立连接、保证数据送达TCP\UDP
  6. 网络层为局域网之间提供数据传输服务,通过定长且具有分层结构的IP地址进行包交换(数据包封装,将数据由大变小份)\路由选择(由路由选择算法实现,通过数据自带的地址让路由器进行路径选择) IP\ICMP\RIP\OSPF\ARP\RARP\NAT

7. 数据链路层(又叫做MAC层,为同一局域网的主机提供数据帧传输服务,用mac地址),物理层(物理传输媒介\信道\线揽)(传比特流),一般物理设备(网卡\交换机,一般是电脑网卡->交换机)是两个二层设备,具有此二层能力。 以太网协议

  1. 网络接口层是TCP/IP的四层,因为TCP/IP分层着重强调上三层,忽略最下一层,只是描述了一下局域网接口,是一个纯软件的协议没有网络应有的局域网最根基的电缆、网卡等物理设备而 OSI 则补足了这个缺失对硬件设备进行了描述
  2. 没有哪一个硬\软件具有7层功能,一般来说,软件上两层,协议中三层,设备下两层。
  3. 邮件,分小->+TCP信息->+IP信息->+以太网帧头

 

物理层

①线缆与接口

②光纤

③无线

  1. 以太网有线介质的拓扑:①总线拓扑②星型拓扑(所有主机直连交换机)③树形拓扑

 

链路层

  1. 又叫做MAC层,为同一链路(如局域网)的主机提供数据传输服务。
  2. MAC层在局域网内用广播信道,交换机可以减少广播,MAC地址寻址,让所有主机收到消息,直到对应主机响应,所以互联网不能用它,只能用IP地址。广播到了路由器会被截断。
  3. 用交换机(网桥即桥接)替代集线器的星型以太网碰到未知MAC地址只需要广播一次就会自学习到交换表减少广播,加大带宽利用率。已没有总线。

网络层

  1. 网络寻址:在网络中,每个网络段被赋予了一个定长且具有分层结构的可以进行路由选择的ip地址。
  2. IP地址也有广播机制,即网络号相同(在同一个局域网\子网下)时,直接广播。
  3. IP网络地址X.X.0.0

A类:前一字节为网络号(前一段为1-126),给大型网络用

中间的127是环回地址,指向本机本身

B类:前二字节为网络号(前一段为128-191)

C类:前三段为网络号(段)(前一段为192-223),后一段为主机号(减去全为0的自身网络地址以及全为1的广播地址最大地址,如MAC向全是F地址发就会广播),最多253个)

D类:前一段为(224-239),组(多)播地址(区别于单播,广播),在组里广播,加入组就播给你。

E类:保留

  1. 子网ip中最小和最大地址不能用,如0与255,前者为网络号,后者广播号。
  2. 路由器的连接互联网的那端(WAN口)一定是一个合法ip,连接局域网的那一端(LAN口),如果局域网内主机是纯路由接上的那么每个主机需要合法ip,那么每个主机都是互联网的一部分,大部分时候局域网内主机用非法地址(也就是ip保留地址),用路由+NAT(网络地址转换,篡改ip数据包头的源地址)进行ip转换通信或代理服务器(每个软件都得设,用得不多)。
  3. 主机上的网关码相当于指向处理目的ip不在本子网的数据的路由器的LAN口ip即一个内网地址,相当于主机上的缺省路由记录的目的地表项指向的方向,不设就只能在局域网内通信。
  4. 路由表项:目的子网ip(某个子网网络号ip,最后段是0的)、下一跳(哪个口)、跳数。

如果网络号是自己的WAN口或LAN口接的,方向就是接口的ip,这叫直连路由无需自己写表项。如果网络号是非直连的网络号,则写下一跳路由器的WAN口ip(与自己的WAN口ip在同一网段)。0.0.0.0是缺省路由记录,意思是非直连路由一概通往某下一跳。

  1. 将大的网络ip划分子网后,通过使用掩码,把子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码子网掩码用来描述ip,与操作是ip的子网部分,取反与操作是ip的主机部分。
  2. ip地址编址方式有3个历史阶段:分类(< 网络号 >, < 主机号 >)->子网划分(需要子网掩码< 网络号 >, < 子网号 >, < 主机号 >通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址需要子网掩码)->无分类编址CIDR写法(< 网络前缀号 >(即子网ip), < 主机号 >/网络前缀长度)
  3. 在路由表中的项目由目的网络地址”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个跳到更具体的网段
  4. NAT转换表把传输层的端口号也用上了于是在局域网内主机访问同一外部ip时传回不会混淆。

https://blog.csdn.net/gui951753/article/details/79593307#ip%E5%9C%B0%E5%9D%80%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86

 

 

互联网可以划分为许多较小的自治系统 AS,一个 AS 可以使用一种和别的 AS 不同的路由选择协议。可以把路由选择协议划分为两大类:

自治系统的路由选择协议:RIP 和 OSPF

自治系统的路由选择协议:BGP

13.路由选择协议都是自适应动态路由,让路由器之间相互学习路由表,生成表条目

①基于距离向量路由选择协议算法是Bellman-Ford算法。用动态规划思想,O(V*E),遍历边。

基于链路状态的路由选择协议算法基础是Dijkstra算法用泛洪向AS所有路由器广播,链路权重由网络管理员配置。触发更新机制。迪杰斯特拉算法要求权值为正,用贪心思想,为O(v2)

OSPF与RIP区别,主要是收敛快,可设置链路权重,结构没变时不用发节省带宽,网络规模可大https://blog.csdn.net/m0_37345402/article/details/85447393

  1. ARP攻击:主机和路由器内都有ARP表,是动态的,如果ip对应的解析行为已经发生过一次在表里产生了一条记录,就在一段时间内不广播请求mac了,大概180s过后就超时。正常表中有一个网关ip的MAC记录,ARP攻击者通过对外宣称自己主机ip是网关对应的ip,于是局域网内其他主机将数据投递给他的mac(因为局域网内以mac为引导),导致其他主机无法上网,这也叫ARP客户欺骗。最好事先把局域网内所有设备的mac记下,或者记下网关mac,然后设置静态mac,但有时arp病毒自己宣称的ip与某台主机一样,导致路由器在arp表上ip处对应他的mac,此时路由器被欺骗发送数据给他,让ip所属的主机上不了网,所以需要在路由器表项静态添加arp项。

14.RARP也就是ARP的逆过程,很少使用。

15. ICMP 是为了提供路由期间的一些信息为了更有效地转发 IP 数据报和提高交付成功的几率它封装在 IP 数据报中分为差错报告报文和询问(请求)报文。

Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。

Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。发送的 IP 数据报封装的是无法交付的TTL短的 UDP 数据报,并由目的主机发送终点不可达差错报告报文

 

传输层

1.TCP连接的端点叫做套接字(socket)。套接字(socket) = (IP地址:端口号)

每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:

TCP 连接 = {socket1, socket2} = {(IP1: port1), (IP2: port2)}

注:socket多种不同的意思:

应用编程接口API称为socketAPI

socketAPI 中使用的一个函数名也叫作socket。

调用socket函数的端点称为socket。

调用socket函数时其返回值称为socket描述符,可简称为socket。

2. 凭借socket机制TCP/IP 协议的传输层里面复杂的操作,抽象为几个简单的API,供应用层调用使主机上的两个进程通过网络进行通信一般用在客户端和服务器之间。

①可以传输数据的套接字对象由相关五元组构成,协议、本地地址、本地端口、远程地址、远程端口。

②服务器:socket指定协议创建一个套接字、bind、listen、accept、write\read、close  客户端:socket、bind、connect、write/read、close

通常服务器处于一个无限循环,等待客户端的连接。

connect三次握手建立连接。

accept()函数功能是,从连接队列取出一个established 状态的连接,如果这个队列没有已经完成的连接,accept()函数就会阻塞,直到取出队列中已完成的用户连接为止。服务器listen之后就accept阻塞等待。

write、read数据请求数据应答。

③UDP服务器:socket()创建一个udp socket; bind()绑定IP地址、端口等信息到socket上; recvfrom()循环接收数据; close关闭连接;

客户端:socket创建一个udp socket;bind绑定端口ip信息;sendto设置对方的ip和端口并发送数据;close关闭连接。

3.一个服务器的固定小于1024的端口一般对应具体协议的服务如DHCP\FTP,即流行的应用都被分配了固定的端口号,如80端口对应HTTP,大于1024的就叫随机端口,没有限制,qq用的4000,用户的端口号都大于1024。谁在连接谁的什么服务,端口代表服务(哪怕是非法ip)

4.握手机制可能被利用导致DoS攻击,syn 攻击:(一般先伪造大量不同ip)只发三次握手的前两次,在主机上形成大量的未完成的半连接在SYNRCVD,每个连接都在TCP连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络瘫痪

但是DDos中,利用客户/服务器技术,攻击者主机(指挥)使用主控程序调用多个不同位置的主机上的代理程序,控制这些主机(已成为僵尸网络)用代理程序发动攻击,一般是syn攻击。

UDP flood:以UDP协议为主,一般请求回应的流量远远大于请求本身流量的大小。攻击者通过流量被放大的特点以较小的流量带宽就可以制造出大规模的流量源,从而对目标发起攻击。

DNS的DDos:控制僵尸网络向服务器发送大量DNS请求。

DDos解决:屏蔽ip。过滤掉一些不必要的服务和端口以达到预防攻击的目的。设置相关防火墙,拦截不合法(无效)包。

DNS劫持攻击亦称为DNS重定向是一种网络攻击,攻击者劫持用户的DNS请求,错误地解析网站的IP地址,用户试图加载,从而将其重定向到网络钓鱼站点。使用公共的DNS服务器,定期检查DNS设置。

5.P2P(软件)分享,资源不用在同一服务器获取(下载用户越多带宽有限越慢),个人用P2P协议下载文件时,下载者变成资源提供者,将自己下载到的这部分进行共享,下载源变多,最大程度降低服务器负载,但结果是一台主机在下载时会与外部生成很多条会话连接,在局域网内会消耗路由器的内存cpu资源(很多时候不是带宽占完),可能使其他人网变慢。BitTorrent(比特流)是流行的p2p协议。

6.UDP用户数据报协议的数据报比TCP传输控制协议的报文快,牺牲质量换速度。TCP是面向连接可靠的,所以数据比UDP大,UDP的报头信息少,包小,无连接,无三次握手\滑动窗口,传输时无确认,中间丢包无重传(音视频无所谓,要是文件丢一个包就白下了,所以要选择)

7.抓包分析网络性能、安全问题,如网络上是否充斥着广播(.255)消耗带宽,连接到哪个ip与端口号,哪种服务,是否安全,哪种类型的报文(UDP\TCP\ICMP(虽然是传输层协议但抓包时与udptcp header是并列关系)),分析当前网络在进行哪些行为。

 

应用层

  1. http/1.0, http/1.1(目前主流),http 2.0(30%多)。
  2. URI(Uniform Resource Identifier)统一资源标识符,用于唯一标识某互联网资源。URL(Uniform Resouce Location)统一资源定位符,描述一台服务器上某资源的特定位置。URI(一个通用概念)包括URL(通过描述资源的位置来标志资源,实现了URI)和URN(通过名字来识别资源,与当前所处的位置无关,但没有得到广泛的推广应用)。
  3. URL格式:协议(身份信息)主机(端口可以有默认的80 443)路径查询参数片段标识符

如:http://user:[email protected]:80/home/index.html;type=d?age=11#mask

①http:协议方案名

②user:pass:身份信息

③www.example.com:服务器地址,即服务器主机ip

④80:默认端口号(需要服务器上的哪个服务)

⑤/home/index.html:文件路径(定位服务器上的特定资源

⑦?age=11:查询参数,针对已指定文件路径内的资源,传入任意参数,以健值对的形式,&隔开(即如数据库服务,可以进行查询,缩小请求资源的范围,如点击网站中的第几页)

⑧#mask:片段标识符,可标记出已获取资源中的某一个位置,让浏览器获取资源后跳转到这个位置。(客户端不能将片段传给服务器,仅能由浏览器这样的客户端使用,http服务器只处理整个对象)

  1. 下层选UDP的套接字称为UDP套接字,TCP的称为TCP套接字,两个协议为调用它们的应用程序提供了不同的传输特性的选择。
  2. 应用层协议往往与应用程序的体系结构、下一层协议相对应,如http对应服务器-客户结构和TCP协议。
  3. http一般作为web的应用层协议,是纯文本协议,报文是文本不用解析①承载于TCP之上,可靠。②请求和响应的工作模式,客户端主动请求,服务器被动应答,契合客户/服务器体系架构。③可添加任何头字段、状态码,灵活可扩展。④http可传输任何数据(不像其他应用协议只关注很小的应用领域)⑤无状态。点对点通信传输html超文本,http定义了报文结构、解析规则和报文交换方式,让客户端程序和服务器程序通过HTTP报文进行会话。HTTP 是一个应用层协议,寻址、路由、数据完整性等传输细节对它透明

HTML超文本标记语言描述超文本页面资源是HTTP协议传输的主要内容之一用“标签”定义文字、图片等资源排版布局(客户端发现图片标签后就向服务器请求图片对象资源),最终由浏览器“渲染”出可视化页面。Web页面由一个HTML基本文件和几个资源对象组成,HTTP请求报文中包括了请求的资源(URL字段的参数部分带有资源的更具体标识,post就是在body里)。

10. HTTP报文请求报文请求行(包括http请求方法(表示对资源的操作)、资源URL、协议版本号)和响应报文的状态行(包括版本号、状态码、文字原因)

请求body主体(POST才有)中是提交的数据(用户名密码(身份信息)、请求的资源、查询参数),响应body中是HTML文本或请求对象(音视频图片)数据。

头部(请求头与响应头)包括:

通用头字段(connection开启/断开长连接,http1.0用connection:keep-alive,http1.1是默认长连接,断开需要由客户端或服务器提出connection:close、date报文创建时间)

请求头字段(user-agent请求方是什么浏览器(方便返回最适合的web页面)、host请求资源所在的服务器(http1.1规定必须有,为什么已经connect建立连接还要?因为虚拟主机技术,让一个ip能有多个域名,根据域名确定服务)、cookie、range请求资源的一部分返回206、if-modified-since(在状态行中回应304))

响应头字段(set-cookie)

关于body的响应头字段(content-length、content-type、last-modified资源最后修改日期时间)

11. 安全是指请求方法不会修改从而可能破坏服务器资源

GET从服务器获取资源(html文本、图像、视频等)

HEAD与GET类似,但响应报文没有body,只有响应行和响应头(资源类型、是否存在),也就是资源的基本信息。

POST 用于向URL的指定资源(查询参数放在body)提交数据即上传body(当然也可以用于请求和更新资源(需要服务端的php或jscp写请求处理逻辑))。

PUT 用于向服务器提交数据,更新或创建指定资源,是幂等的,但会修改数据不够安全,一般不用。

DELETE 删除指定资源,太危险一般不用。

15.关于POST和GET的区别

GET一般用于从服务器获取资源,使用URL传递请求资源、查询参数,所以只能用ASCII码,对中文需要编码如%20代表空格,对所发送信息的数量也有限制因为url长度有限POST一般用于用于向URL的指定资源(参数放在body中)提交数据即上传body(也可以请求资源,但规定它的语义是上传数据)支持标准字符集对所发送的信息没有限制。

GET 用于获取信息,是无副作用的(所以可以后退、刷新),是幂等的,且可缓存(收藏为书签、参数被浏览器历史保存)POST 提交数据,有副作用(可能重复添加很多行数据),非幂等,不可缓存POST用body安全性稍高。

大多浏览器或框架,GET产生一个TCP数据包POST产生两个TCP数据包。对于GET方式的请求,浏览器会把请求行、首部行发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送请求行、首部行,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(是请求资源则返回数据)。

16.重复执行多次没有副作用就叫幂等性。GET,HEAD,PUT 和 DELETE

17.状态码 返回服务器处理请求的结果,方便客户端进行下一步动作,

分为五类,第一位表示分类。

1XX(信息状态码)如100 Continue,一切正常,客户端可以继续发送请求或者忽略这个响应;

2XX(成功状态码,请求正常处理完毕)如200 OK(通常body带有返回资源),204 no content没有body数据,206 partial content范围请求被满足,body里是资源的一部分;

3XX(重定向状态码,客户需要重新发送请求才能得到资源)如301 moved permanently(永久重定向,在location头部字段发回新的URL),302 Found(与301一样但是临时重定向,浏览器收到后不会做缓存,以后还是访问原来的地址),304 not modified(请求报文带有首部字段if-modified-since时返回,用于缓存控制,如果改动了则返回资源和200 ok);

4XX(客户端错误)如400 bad request(语法),403 forbidden(服务器禁止访问此资源),404 not found(未找到资源);

5XX(服务器错误)如500 internal server error(执行请求时发生错误),502 bad gateway(服务器作为反向代理时返回的错误码,服务器自身工作正常,访问后端服务器时收到无效响应),503 Service Unavailable(服务器因为超负载或维护中,无法接受请求),504 gateway-time out(服务器作为代理服务器连接后端服务器时超时)

  1. web缓存/代理服务器,缓存资源,既是服务器又是客户,可降低客户端获取资源的延迟,减少网络流量,降低网络的负载。代理服务器发送if-modified-since服务器返回带有304状态行的空body报文,或200和资源。另外客户端浏览器也可缓存。
  2. 正向代理:靠近客户端,代表客户端向服务器发送请求;反向代理:靠近服务器端,代表服务器响应客户端的请求;

10.负载均衡:①布置一些冗余服务器,按照哈希或轮询等方法把访问请求尽量平均分配到多台服务器,均摊高并发时的请求压力。②所谓的“四层负载均衡”就是指工作在传输层上,基于 TCP/IP 协议的特性,例如 IP 地址、端口号等实现对后端服务器的负载均衡。所谓的“七层负载均衡”就是指工作在应用层上,看到的是 HTTP 协议,解析 HTTP 报文里的 URI、资源类型等数据,实现对后端服务器的负载均衡。

11.HTTP是无状态的,每个请求应答过程都是互相独立、毫无关联的,协议不要求客户端或服务器记录通信过程中变化的信息优点:减轻服务器负担,让其处理更多事务。缺点:服务器无记忆,在进行连续多个步骤的事务时,每次都要确认身份,麻烦且费流量。Cookie在客户端浏览器记录信息保存用户状态(如个性化设置或身份信息)Session在服务器端记录信息保存用户状态

cookie是服务器发送到用户浏览器并保存在本地的文本数据块,它会在浏览器向同一服务器再次发起请求时被携带上。服务器把set-cookie(一些状态参数)发给客户浏览器保存后,客户下次请求报文的cookie头字段内容中带上这些参数,但cookie存在本地,这是它固有的不安全性。

使用Session来记录用户状态每个来访者对应一个Session对象,所有该客户的状态信息都保存在这个Session对象里对象存储在服务器中Session对象是在客户端第一次请求服务器的时候创建的步骤:客户提交身份信息->服务器校对成功将redis中的session ID放在响应报文的set-cookie首部->客户每次请求都在cookie首部加上session ID->服务器根据ID继续客户业务。为了安全性,Session ID需要服务器经常重新生成。session存在服务器端更安全,但增加了服务器的存储压力

③但http是不安全的,cookie和session还是要在https的ssl中传输。

④禁用cookie后只能Session ID 作为 URL 的参数进行传递。

⑤选择:Cookie 只能存储 ASCII 码字符串,而 Session 则可以存储任何类型的数据,因此在考虑数据复杂性时首选 Session;对于大型网站,如果用户所有的信息都存储在 Session 中,那么开销是非常大的,因此不建议将所有的用户信息都存储到 Session 中cookie安全性稍差。

12.CYC只用看七http1.0的缺陷和五的连接管理

13.http2.0新特性

http2.0将报文分成小块header帧和data帧,再通过帧头标识在接收端重组,一个 TCP 连接的客户服务端报文就可以通过帧机制双向交错发送提高传输效率。

http2.0支持服务器主动推送数据,如:在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。

HTTP2.0对首部进行压缩,既避免了重复header的传输只需传输变化的header客户端和服务端分别缓存一份头字段如果请求不包含首部,如:对同一资源的轮询请求,那请求响应头开销为零字节如果首部发生变化,那只需发送变化的头字段在Headers帧里面,新增或修改的首部帧会被同步头字段

14.HTTP1.1新特性

①状态码100有什么用,节省带宽

这个状态码实际上是对如下场景的一种优化:客户端有一个较大的文件需要上传并保存,但是客户端不知道服务器是否愿意接受这个文件,所以希望在消耗网络资源进行传输之前,先询问一下服务器的意愿。实际操作为客户端将POST请求行请求头发出响应报文的头部应包含Expect: 100-continue

②分块传输编码允许HTTP由网页服务器发送给客户端应用(通常是网页浏览器)的数据可以分成多个部分让浏览器逐步显示界面。

③流水线即在一个TCP连接内,多个HTTP请求(报文)可以并行,下一个HTTP请求在上一个HTTP请求的应答完成之前就发起。需要服务器和客户端(浏览器)都支持。

④支持长连接

⑤支持虚拟主机技术。使得一台服务器拥有多个域名,逻辑上可以看成多个服务器服务器根据host中的域名确认客户要获取哪个虚拟主机的服务

18.总结:每个协议对应一种报文名称(如ARP查询报文)。

 

计算机网络安全

  1. 加密算法以明文报文和密钥为输入,输出密文,解密算法同理。报文以比特流表现。
  2. ①对称密钥体系,它是指消息发送方和消息接收方必须使用相同的密钥,该密钥必须保密。优点,运算速度快,缺点,很难安全地传输密钥给通信方

②非对称密钥体系又叫公钥密码体系,它使用两个密钥:一个公共密钥PK和一个私有密钥SK。这两个密钥在数学上是相关的,并且不能由公钥计算出对应的私钥,同样也不能由私钥计算出对应的公钥。优点,使通信双方在没有预先商定的对称密钥的条件下进行加密通信,缺点,运算速度慢

  1. 典型如AES算法,DES算法,AES处理速度更快且更安全(密钥长度更长)。

4.非对称密钥体系,RSA算法是个典型,对大量密文进行幂运算非常耗时,所以常和对称密钥体系配合使用,用RSA对将要传递的对称密钥(也称会话密钥)进行加密。ECC算法相同的密钥长度下更安全更抗攻击,且处理速度更快,多用在移动设备。

5.MD5散列摘要算法保证不同报文不可能有相同散列值(报文摘要),且不可逆,H(m)长度较短且固定16字节。同时发送明文和散列值(即扩展报文)可以验证报文完整性。

SHA算法报文摘要比MD5长两个字节,安全性较好一些。

6.用RSA+MD5进行客户端认证:

客户端程序对报文进行MD5散列处理-->RSA私钥对MD5散列值进行加密(成为数字签名)-->客户端把报文与数字签名发送到服务器-->服务器用公钥还原MD5散列值-->后端对明文再做一次MD5散列处理-->比较客户端发过来的和服务器算出的MD5散列值是否一致,如果不一致则认为报文内容不一致,访问无效。

  1. 但是服务器将公钥发给服务器时可以伪造身份,还是不能确定是谁,于是就需要CA(认证官方)生成一个将服务端身份信息和他的公钥绑定数字证书,服务器端将证书(用CA私钥加密后才叫证书)发送,客户端使用CA提供的公钥解密,根据证书是否可信任验证身份。CA是独立于软件商和使用者(消费者)的第三方认证机构,用自身的信誉来保证证书的可靠性小一点的 CA 可以让大 CA 签名认证,但链条的最后,也就是 Root CA,就只能自己证明自己了,这个就叫根证书”,你必须相信,否则整个证书信任链就走不下去了
  2. SSL数字证书+数字签名同时身份认证(机密性)和检测报文完整性。

过程建立连接后①客户端发出加密请求hello报文,包括一个随机数和自己的加密算法列表②服务器将自己的数字证书、选定的加密算法、一个随机数回应③客户用CA公钥查看数字证书的可靠性(浏览器已保存可信赖的CA),用服务器的公钥加密一个随机数,将之前所有通信数据生成数字签名发送,供服务端验证完整性。用三个随机数和加密算法计算出对称密钥用于之后的通信。④服务端用三个随机数和加密算法计算出对称密钥。将之前所有通信数据生成数字签名发送,供客户端验证完整性。随后的通信都用生成的对称密钥进行。

  1. HTTPS=HTTP+SSL(机密性+身份认证+完整性),语法、语义仍然是 HTTP,但把下层的协议由 TCP/IP 换成了介于应用层和TCP层之间 SSL(安全套接字层)/TLS用多种先进的加密技术对数据加密,保证通信安全

缺点:加密影响速度,证书费用高。端口443

HTTP用明文通信,无身份认证,不安全。端口号80。

IO模型

任何IO过程都包含了两个步骤:等待和拷贝。而一般情况下,等待消耗的时间往往远大于数据拷贝的时间。那么如果我们减少了等待的时间,那么IO过程消耗的时间就会更少。

  1. d_set 其实就是一个整形数组,更严格地说,是一个“位图”,使用位图中对应的位来表示要监视的文件描述符。(下标表示文件描述符)
  2. Select每次调之前要手动设置一遍参数,select和poll执行一次都要将全部fd拷贝入内核进行遍历,select和poll具体优缺点见chrome收藏。
  3. 表面上看epoll的性能最好,但是在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。
  4. 都是单个进程监视多个文件描述符的读写或者异常状态。
  5. 创建一个epoll句柄,epoll 只需要将描述符从进程缓冲区向内核缓冲区拷贝一次,并且进程不需要通过轮询来获得事件完成的描述符传入的epoll_event作为返回的就绪事件集合,返回值说明就绪集合中事件个数。

长连接

普通的http1.0连接是短连接,客户端连接上服务端,然后结束请求后,由客户端或者服务端进行http连接的关闭。但是一旦客户端发送connection:keep-alive请求首部给服务端,且服务端也接受这个keep-alive的话,两边对上暗号,这个TCP连接就可以复用了,一个http请求处理完之后,另外一个http请求的数据直接从这个连接走了。减少新建和断开TCP连接的消耗。而http1.1是默认长连接,断开需要由客户端或服务器提出connection:close

 

你可能感兴趣的:(计算机网络基础要点摘记)