TCP/IP+HTTP+APR+DNS常见网络协议

TCP/IP协议:

传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。

链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。
网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。
运输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。
应用层:主要负责应用程序的协议,例如HTTP协议、FTP,HTTPS,SFTP协议等。

TCP/IP+HTTP+APR+DNS常见网络协议

协议分类

java.net 包中提供了两种常见的网络协议的支持:

UDP:用户数据报协议(User Datagram Protocol)。

UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。

UDP协议消耗资源小,通信效率高,不能保证数据的完整性

数据报(Datagram):网络传输的基本单位

TCP:传输控制协议 (Transmission Control Protocol)。

TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。

三握四挥

三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。

  • 第一次握手,客户端向服务器端发出连接请求,等待服务器确认。
  • 第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。
  • 第三次握手,客户端再次向服务器端发送确认信息,确认连接。整个交互过程如下图所示。

TCP/IP+HTTP+APR+DNS常见网络协议

四次挥手:即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。

(1) TCP客户端发送一个FIN报文,用来关闭客户到服务器的数据传送

(2) 服务器收到这个FIN报文,它发回一个ACK报文,确认序号为收到的序号加1。和SYN一样,一个FIN报文将占用一个序号。

(3) 服务器关闭客户端的连接,发送一个FIN给客户端。

(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

TCP/IP+HTTP+APR+DNS常见网络协议

HTTP

  • 概念:Hyper Text Transfer Protocol 超文本传输协议

    • 传输协议:定义了,客户端和服务器端通信时,发送数据的格式

    • 特点:

      1. 基于TCP/IP的高级协议
      2. 默认端口号:80
      3. 基于请求/响应模型的:一次请求对应一次响应
      4. 无状态的:每次请求之间相互独立,不能交互数据
    • 历史版本:

      • 1.0:每一次请求响应都会建立新的连接

      • 1.1:复用连接

      • 2.0:HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS

        HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE

TCP/IP+HTTP+APR+DNS常见网络协议

HTTP 请求报文:

TCP/IP+HTTP+APR+DNS常见网络协议

**请求行:**请求方式 请求url 请求协议/版本

**请求头:**客户端浏览器告诉服务器一些信息

  • User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
  • Referer:告诉服务器,我(当前请求)从哪里来?

**请求空行:**空行,就是用于分割POST请求的请求头,和请求体的。

**请求体(正文):**封装POST请求消息的请求参数的

HTTP 响应报文:

TCP/IP+HTTP+APR+DNS常见网络协议

**响应行:**组成:协议/版本 响应状态码 状态码描述

**响应状态码:**服务器告诉客户端浏览器本次请求和响应的一个状态。

  • 1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码

  • 2xx:成功。代表:200

  • 3xx:重定向。代表:302(重定向),304(访问缓存)

  • 4xx:客户端错误。

    • 404(请求路径没有对应的资源)
    • 405:请求方式没有对应的doXxx方法
  • 5xx:服务器端错误。代表:500(服务器内部出现异常)

响应头:

  • Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式
  • Server:服务器名称

响应空行

响应体:传输的数据

HttpServlet:对http协议的一种封装,简化操作

基于Servlet接口的抽象类

  1. 定义类继承HttpServlet
  2. 复写doGet/doPost方法

APR协议和攻击 - 网络层

地址解析协议。ARP欺骗:IP和MAC都是可以被伪造的。

DNS域名系统

1.输入www.baidu.com域名,会先看host文件是否有这个域名的ip映射,如果有,浏览器根据ip地址发送请求。

2.如果host文件没有这个ip映射,则查找本地DNS解析器缓存,如果有,则。。。

3.如果都没有,首先会找TCP/IP参数中设置的首选DNS服务器,本地DNS服务器会根据域名查找IP,本地DNS会将映射放到缓存中,以后如果要查询直接根据缓存。

4.如果还没有,本地DNS发请求到13台根服务器DNS,根服务器会收到这个请求后会判断这个域名后置(.com)是谁授权管理,将负责的下一级服务器ip发给本地DNS,联系管理.com的DNS服务器。根据域名得到ip。

从客户端到本地DNS服务器再到各级DNS服务器属于递归和迭代。。