网络综合知识1

 1.DHCP 协议 操作流程

 DHCP(Dynamic Host Configuration Protocol),动态主机配置协议,是一个应用层协议。当我们将客户主机ip地址设置为动态获取方式时,DHCP服务器就会根据DHCP协议给客户端分配IP,使得客户机能够利用这个IP上网。

 DHCP的实现

DHCP的实现分为4步,分别是: 
主机新加入网络时,获取IP的流程 

1. 新的client加入网络时,会使用0.0.0.0作为源地址,发送discover广播报文,查询网络上有哪些DHCP server,以及这些DHCP server 能Offer哪些IP地址 

2. DHCP服务器接收到DHCP Discover报文后,回应Offer报文,提供IP地址(可能包含DNS等其他信息)给client 

3. client 根据收到的Offer报文,选择一个DHCP server,并选择它提供的IP地址。然后广播Request报文,向DHCP Server请求该IP地址,同时向本地网络(尤其是其他DHCP Server)公告自己已经选择了某个DHCP Server的某个IP地址。 

4. DHCP Server 回应ACK报文,将IP地址分配给Client端 (特殊情况:DHCP Server在发送Offer报文和接收到Request的短暂时间内把IP分配给了其他主机) 

5. DHCP Client 收到ACK报文后,会针对获得的IP地址发送ARP Request,进行IP地址冲突检测。 

6. 如果IP地址已经被其他主机使用,则Client放弃该IP地址,并向Server发送DHCP DECLINE报文告诉Server该地址不能使用。然后一段时间后(一般10s)再此尝试获取该IP地址 

7. 如果Client仍然无法使用该IP地址,则发送DHCP RELEASE报文,放弃该地址。

2.IP协议的转发流程

仅从网络层去看这整个数据传输的过程

  1. A发出目的地为C的IP数据报,查询本地路由表发现下一跳为E
  2. A将数据报发送给E
  3. E查询本地路由表发现下一跳为F,将数据报发送给F
  4. F查询本地路由表发现目的地C,是和自己直接连接的,然后将数据报发送给C

结合数据链路层和网络层
    第一步:
        A发出目的地为C的IP数据报,查询路由表发现下一跳为E
        A将IP数据报交给数据链路层,并告知下一跳IP地址是E
        数据链路层就会查找ARP表,寻找E对应的MAC地址E1,如果没有找到则会发送ARP请求获取E的MAC地址E1
        数据链路层填充源MAC地址A和目的MAC地址E1
        数据链路层通过物理层将数据发送给E1
    第二步:
        E的数据链路层接收到数据帧,把数据帧传输给网络层
        E查询路由表,发现下一跳为F
        E把数据交给数据链路层并告知下一跳的IP地址为F
        E的数据链路层就去查找E的ARP表,寻找F对应的MAC地址F1,如果没有找到则会发送ARP广播请求获取F的MAC地址F1
        E的数据链路层封装数据帧并发送(此时源MAC地址和目的MAC地址就会发生变化,源MAC地址为E,目的MAC地址为F1)
     第三步:
        F的数据链路层接收到数据帧,把数据帧交给网络层
        F查询路由表,发现下一跳为C
        F把数据交给数据链路层,并告知目的IP地址为C
        数据链路层查找本地ARP缓存表,寻找C对应的MAC地址C1,如果没有找到则发送ARP广播请求获取C的MAC地址C1
        F的数据链路层封装数据帧并发送给C     
   
   从上边的整个过程中可以发现
        数据帧每一跳的MAC地址都在变化(源MAC地址和目的MAC地址)
        IP数据报每一跳的IP地址始终不变     

3.TCP/IP四层模型

1.网络接口层

1).物理层(Physical Layer)

 物理层确保原始的数据可在各种物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器

 2).数据链路层(Data Link Layer)

 该层的作用包括:物理地址寻址、封装成帧、透明传输、差错检验等。    两个重要设备名称:网桥和交换机

2.网际层(网络层(Network Layer))

路径选择、路由及逻辑寻址。网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术

重要的设备:路由器

主要协议:IP、ICMP、IGMP、RIP和OSPF等

3.运输层(传输层(Transport Layer))

传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题

重要设备:网关

主要协议:TCP和UDP

4.应用层

    为操作系统或网络应用程序提供访问网络服务的接口,如:发送文件传输和电子邮件等。主要协议:Telnet、FTP、e-mail和HTTP等

4.TCP三次握手

第一次握手

客户主动(active open)去connect服务器,并且发送SYN 假设序列号为J,服务器是被动打开(passive open)

第二次握手

服务器在收到SYN后,它会发送一个SYN以及一个ACK(应答)给客户,ACK的序列号是 J+1表示是给SYN J的应答,新发送的SYN K 序列号是K

第三次握手

客户在收到新SYN K, ACK J+1 后,也回应ACK K+1 以表示收到了,然后两边就可以开始数据发送数据了

5.TCP四次挥手

1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
2)服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
3)客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)
4)服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
5)客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2*MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
6)服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

6.HTTP协议

转载:https://zhuanlan.zhihu.com/p/45173862

HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则

注意:客户端与服务器的角色不是固定的,一端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起端。HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Socket接口来调用TCP协议实现。

HTTP 是一种无状态 (stateless) 协议, HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务, 提高效率。

然而,在许多应用场景中,我们需要保持用户登录的状态或记录用户购物车中的商品。由于HTTP是无状态协议,所以必须引入一些技术来记录管理状态,例如Cookie

HTTP请求

preview

由上图可以看到,http请求由请求行,消息报头,请求正文三部分构成。

HTTP请求状态行

请求行由请求MethodURL 字段和HTTP Version三部分构成, 总的来说请求行就是定义了本次请求的请求方式, 请求的地址, 以及所遵循的HTTP协议版本例如:

GET /example.html HTTP/1.1 (CRLF)

 HTTP协议的方法有: 

GET: 请求获取Request-URI所标识的资源 

POST: 在Request-URI所标识的资源后增加新的数据 

HEAD: 请求获取由Request-URI所标识的资源的响应消息报头 

PUT: 请求服务器存储或修改一个资源,并用Request-URI作为其标识 

DELETE: 请求服务器删除Request-URI所标识的资源 

TRACE: 请求服务器回送收到的请求信息,主要用于测试或诊断 

CONNECT: 保留将来使用 

OPTIONS: 请求查询服务器的性能,或者查询与资源相关的选项和需求

HTTP请求头

消息报头由一系列的键值对组成,允许客户端向服务器端发送一些附加信息或者客户端自身的信息,主要包括:

preview

HTTP请求正文

只有在发送POST请求时才会有请求正文,GET方法并没有请求正文。

HTTP get方式请求报文

preview

HTTP响应

与HTTP请求类似,先上一张图:

preview

HTTP响应也由三部分组成,包括状态行,消息报头,响应正文

HTTP响应状态行

状态行也由三部分组成,包括HTTP协议的版本,状态码,以及对状态码的文本描述。例如:

HTTP/1.1 200 OK (CRLF)

 HTTP响应状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

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 - 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

HTTP响应状态码说明

preview

preview

preview

previewpreview

HTTP响应报文

preview

HTTP的五大特点

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

非持久连接和持久连接

在实际的应用中,客户端往往会发出一系列请求,接着服务器端对每个请求进行响应。对于这些请求/响应,如果每次都经过一个单独的TCP连接发送,称为非持久连接

反之,如果每次都经过相同的TCP连接进行发送,称为持久连接

preview

非持久连接在每次请求|响应之后都要断开连接,下次再建立新的TCP连接,这样就造成了大量的通信开销。例如前面提到的往返时间(RTT) 就是在建立TCP连接的过程中的代价。

非持久连接给服务器带来了沉重的负担,每台服务器可能同时面对数以百计甚至更多的请求。持久连接就是为了解决这些问题,其特点是一直保持TCP连接状态,直到遇到明确的中断要求之后再中断连接。持久连接减少了通信开销,节省了通信量。

7.HTTPS

HTTP的不足

  • 通信使用明文(不加密),内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

HTTPS介绍

HTTP 协议中没有加密机制,但可以通 过和 SSL(Secure Socket Layer, 安全套接层 )或 TLS(Transport Layer Security, 安全层传输协议)的组合使用,加密 HTTP 的通信内容。

属于通信加密,即在整个通信线路中加密。

HTTP + 加密 + 认证 + 完整性保护 = HTTPS(HTTP Secure )

 previewpreview

 HTTPS 采用共享密钥加密(对称)和公开密钥加密(非对称)两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。

所以应充分利用两者各自的优势, 将多种方法组合起来用于通信。 在交换密钥阶段使用公开密钥加密方式,之后的建立通信交换报文阶段 则使用共享密钥加密方式。

preview

HTTPS握手过程的简单描述如下:

preview

  1. 浏览器将自己支持的一套加密规则发送给网站。
    服务器获得浏览器公钥
  2. 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。 浏览器获得服务器公钥
  3. 获得网站证书之后浏览器要做以下工作:
    (a). 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
    (b). 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码(接下来通信的密钥),并用证书中提供的公钥加密(共享密钥加密)。
    (c) 使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。 浏览器验证 -> 随机密码 服务器的公钥加密 -> 通信的密钥 通信的密钥 -> 服务器
  4. 网站接收浏览器发来的数据之后要做以下的操作:
    (a). 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
    (b). 使用密码加密一段握手消息,发送给浏览器。
    服务器用自己的私钥解出随机密码 -> 用密码解密握手消息(共享密钥通信)-> 验证HASH与浏览器是否一致(验证浏览器)
    HTTPS的不足
  5. 加密解密过程复杂,导致访问速度慢
  6. 加密需要认向证机构付费
  7. 整个页面的请求都要使用HTTPS

猜你喜欢

转载自blog.csdn.net/hdsHDS6/article/details/115373687