计算机网络-理论部分(二):应用层
网络应用体系结构
- Client-Server客户-服务器体系结构:如Web,FTP,Telnet等
- Peer-Peer:点对点P2P结构,如BitTorrent
应用层协议定义了:
- 交换的报文类型,请求or响应
- 报文类型的语法
- 字段的含义
- 如何发报文,以及响应规则
常见的应用类型有:Web,电子邮件,目录服务,流式视频、P2P
其中目录服务就是DNS解析,将网址转换为IP地址。
Web服务
Web采用的应用协议有
- HTTP(HyperText Transfer Protocol,超文本传输协议)
- HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)。
HTTP以明文方式发送内容且没有提供任何形式的数据加密功能,在涉及敏感信息(如信用卡号、密码等支付相关内容)时存在安全隐患。HTTPS在HTTP基础上引入了SSL(Secure Sockets Layer)协议,并通过证书验证服务器身份以确保通信过程中数据得到合理保护和加密处理。
HTTP协议不保存任何Client相关信息,是无状态协议。如果要确认验证信息,可以加入Cookie来解决
发展
初始版本1.0,是非持续连接,每次请求都要建立连接,TCP连接建立和释放影响性能,所以改进提出了HTTP1.1,也是目前主流的HTTP协议。
非持续连接:每个请求/响应都是经单独的TCP发送
持续连接:每个请求/响应都是经过同一个TCP连接发送
持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。如果某个 HTTP 长连接超过一定时间没有任何数据交互,服务端就会主动断开这个连接。
不过目前都是使用HTTPS协议以保证安全。后续还更新了HTTP2.0和HTTP3.0,HTTP/2.0协议是基于HTTPS的,更加安全,但是目前使用的网站不太多。
Web缓存器
一个Web缓存器,也叫代理服务器,可以将请求过的数据缓存下来,供再次使用。Client可以先向代理服务器请求,如果代理服务器没有缓存,代理服务器就将请求发到服务器并缓存服务器的响应。如果有缓存则直接发给Client。
Web缓存器一般是有局部ISP购买安装,使用Web缓存器可以大大减少请求响应时间以及局部ISP链接到主干网的通信量。由此也催生出了提供CDN(Content Distribution Network)内容分发网络服务的服务商。
面试常见问题
- HTTP的报文
- 请求报文:请求行(请求方法、URL、协议版本)、请求头、空行、实体体。
- 常见请求头:Host,User-Agent
- 常见请求方法:POST,DELETE,PUT,GET
- 相应报文:状态行(协议版本、状态码、状态码描述)、响应头、空行、实体体。
- 常见响应头:Date,Content-Type,Content-Length
- 常见响应状态码:五个范围,1xx是提示收到,需要继续请求;2xx是成功;3xx是资源重定向;4xx是客户端错误;5xx是服务器错误
- 请求报文:请求行(请求方法、URL、协议版本)、请求头、空行、实体体。
- 四种请求方法各自作用和区别
- GET用于请求数据,对服务器资源无影响,浏览器一般会缓存GET请求结果;请求参数在URL中,安全性比较低。多个参数用&隔开,URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
- POST用于提交数据,对服务器资源有影响,一般不会缓存;POST通过请求体传参,安全性较高。由于浏览器对URL有长度限制,所以GET请求数据大小限制严于POST请求。
- PUT是向服务端发送数据,请求修改服务端资源;但是不会新增资源。
- DELETE是请求删除服务端资源,
- HTTP和HTTPS区别
- HTTP1.1是明文传输,HTTPS有SSL加密,HTTP2.0是建立在HTTPS基础上的。
- HTTPS先建立连接,然后服务端发送证书给客户端;确认信任该证书后服务端再要求客户端发送证书并验证(双向身份验证)
DNS服务
DNS提供IP地址查询服务,全球有非常多的DNS服务器,形成层次结构。
除了上述DNS服务器外,局域ISA中还会提供本地DNS服务器,本地DNS服务器会维护一个DNS缓存,Client需要查询网站IP时,先找本地DNS服务器,如果本地DNS缓存中没有,本地DNS服务器会去找根服务器,根服务器根据域名情况返回对应的DNS服务器IP,本地DNS服务器再找对应DNS查询具体网站IP,最终返回IP地址。
DDoS攻击的原理即:向DNS服务器发送大量DNS请求,使得正常的DNS请求无法得到回复。
Socket套接字
传输层向应用层提供的接口。
通信需要两个信息:
- IP地址,用于查找目标终端
- 端口号,用于查找通信的进程