php面试题-网络协议篇

栏目: PHP · 发布时间: 7年前

内容简介:传输控制块 TCB(Transmission Control Block)存储了每一个连接中的一些重要信息这主要是为了防止已失效的连接请求报文段突然又传到了 TCP 服务器,避免产生错误

计算机网络体系结构

php面试题-网络协议篇

各层作用

  • 应用层:应用层协议定义的是应用进程间通信和交互的规则
  • 运输层:运输层的任务就是负责向 两台主机中进程之间的通信 提供 通用的数据传输 服务
  • 网络层:把运输层产生的报文段或用户数据报封装成 分组 或 包 进行传送
  • 数据链路层:将网络层交下来的 IP 数据报组装成帧,并在两个相邻结点间的链路上传送
  • 物理层:利用物理媒体以 比特 形式传送数据

UDP 的主要特点

  • UDP 是 无连接的 ,即发送数据之前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延
  • UDP 使用 尽最大努力交付 ,即不保证可靠交付,主机不需要维持复杂的连接状态表
  • UDP 是 面向报文 的,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是 保留这些报文的边界
  • UDP 没有拥塞控制 ,网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的
  • UDP 支持一对一、一对多、多对一和多对多的交互通信
  • UDP 的 首部开销小 ,只有8个字节,比 TCP 的20个字节的首部要短

TCP 的主要特点

  • TCP 是 面向连接的运输层协议 。应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接
  • 每一条 TCP 连接只能有两个 端点 ,每一条 TCP 连接只能是 点对点 的(一对一)
  • TCP 提供 可靠交付 的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复,并且按序到达
  • TCP 提供 全双工通信 。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接受缓存,用来临时存放双向通信的数据
  • 面向字节流 。TCP 中的“流”指的是 流入到进程或从进程流出的字节序列

简述三报文握手建立 TCP 连接

  • 服务器进程先创建传输控制块 TCB,并处于监听状态,等待客户端的连接请求
  • 客户端创建传输控制块 TCB,并向服务器发出连接请求报文段
  • 服务器收到连接请求报文段后,如同意建立连接,则发送确认报文段
  • 客户端进程收到服务器的确认报文段后,立即回复确认报文段,并进入已建立连接状态
  • 服务器收到确认报文段之后,也进入已建立连接状态

传输控制块 TCB(Transmission Control Block)存储了每一个连接中的一些重要信息

建立 TCP 连接为什么最后还要发送确认

这主要是为了防止已失效的连接请求报文段突然又传到了 TCP 服务器,避免产生错误

简述 TCP 连接的释放

  • 客户端应用进程发出连接释放报文段,并停止再发送数据,进入 FIN-WAIT-1(终止等待1)状态,等待服务器确认
  • 服务器收到连接释放报文段后即发出确认,进入 CLOSE-WAIT(关闭等待)状态,服务器若发送数据,客户端扔要接收
  • 客户端收到来自服务器的确认后,进入 FIN-WAIT-2(终止等待2)状态,等待服务器发出连接释放报文段
  • 服务器没有要发送的数据,发出连接释放报文段,进入 LAST-ACK(最后确认)状态,等待客户端确认
  • 客户端收到连接释放报文段后,发出确认,进入 TIME-WAIT(时间等待)状态,经过时间等待计时器设置的时间 2MSL 后,进入 CLOSED(关闭) 状态
  • 服务器收到客户端报文段后,进入 CLOSED 状态

TIME-WAIT 是什么,为什么必须等待 2MLS

TIME-WAIT 是一种 TCP 状态。等待 2MLS 可以保证客户端最后一个报文段能够到达服务器,如果未到达,服务器则会超时重传连接释放报文段,使得客户端、服务器都可以正常进入到 CLOSE(关闭) 状态

TCP 粘包问题

粘包问题

在 TCP 这种字节流协议上做 应用层分包 是网络编程的基本需求。分包指的是在发生一个消息(message)或一帧(frame)数据时,通过一定的处理,让接收方能从字节流中识别并截取(还原)出一个个消息。因此,“粘包问题”是个伪命题

长连接分包

  • 消息长度固定
  • 使用特殊的字符或字符串作为消息的边界,例如 HTTP 协议的 headers 以“\r\n”为字段的分隔符
  • 在每条消息的头部加一个长度字段,这恐怕是最常见的做法
  • 利用消息本身的格式来分包,例如 XML 格式的消息中 <root> … </root> 的配对,或者 JSON 格式中的 { … } 的配对。解析这种消息格式通常会用到状态机(state machine)

UDP、TCP 区别,适用场景

对比项 UDP TCP
连接性 无连接 面向连接
可靠性 不可靠 可靠
报文 面向报文-数据报模式 面向字节流-流模式
双工性 一对一、一对多、多对一、多对多 全双工
流量控制 无 有(滑动窗口)
拥塞控制 无 有(慢开始、拥塞避免、快重传、快恢复)
传输速度 快 慢
资源要求 较少 较多
首部开销 8字节 20字节
数据顺序 不保证 保证

UDP 适用场景

面向数据报方式、网络数据大多为短消息、拥有大量 Client、对数据安全性无特殊要求、网络负担非常重,但对响应速度要求高

TCP 适用场景

文件传输(FTP HTTP 对数据准确性要求较高,速度可以相对慢)

发送或接收邮件(POP IMAP SMTP 对数据准确性要求高,非紧急应用)

远程登录(telnet SSH 对数据准确性有要求,有连接的概念)

建立 socket 需要哪些步骤

  • 创建 socket
  • 绑定 socket 到指定地址和端口
  • 开始监听连接
  • 读取客户端输入
  • 关闭 socket

DNS 主要作用是什么

计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 IP 地址访问

但要让计算机去理解名称,相对而言就变得困难,因为计算机更擅长处理一长串数字

为了解决上述问题,DNS 服务应运而生。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务

HTTP 报文组成

HTTP 报文是由简单字符串组成,HTTP 报文都是纯文本,不是二进制代码,可以很方便地对其进行读写

php面试题-网络协议篇

从客户端发往服务器的 HTTP 报文称为 请求报文 (request message)。从服务器发往客户端的报文称为 响应报文 (response message)。HTTP 请求和响应报文的格式很类似

HTTP 报文组成部分

  • 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况
  • 首部字段:起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值
  • 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据

HTTP 状态码

HTTP 状态码用来告诉客户端,发生了什么事情,状态码位于响应的起始行中

状态码分类

状态码 整体范围 已定义范围 分类
1XX 100~199 100~101 信息提示
2XX 200~299 200~206 成功
3XX 300~399 300~305 重定向
4XX 400~499 400~415 客户端错误
5XX 500~599 500~505 服务器错误

常见状态码

状态码 原因短语 含义 考察概率
100 Continue 收到了请求的初始部分,请客户端继续
101 Switching Protocols 正在将协议切换成客户端指定协议
200 OK 请求没有问题 ***
201 Created 用于创建服务器对象的请求
202 Accepted 请求已接收,服务器还未执行操作
203 Non-Authoritative Information 实体首部包含信息来自资源副本
204 No Content 响应报文中没有实体的主体部分
205 Reset Content 告知浏览器清除 HTML 表单元素
206 Partial Content 部分或 Range(范围) 请求 *
300 Multiple Choices 请求指向多个资源的链接
301 Moved Permanently 在请求的链接被移除时使用 **
302 Found 在请求临时的链接使用 **
303 See Other 告知使用另外一个链接来获取资源
304 Not Modified 资源未被修改可使用旧资源 **
305 Use Proxy 必须使用代理来访问资源
307 Temporary Redirect 在请求临时的链接使用 **
400 Bad Request 告知客户端发送了错误请求 ***
401 Unauthorized 获取资源许先进行认证
403 Forbidden 请求被服务器拒绝 ***
404 Not Found 无法找到所请求的 URL ***
405 Method Not Allowed 不支持该请求方法
406 Not Acceptable 无可接受实体
408 Request Timeout 完成请求耗时太长服务器关闭连接
409 Conflict 请求可能在资源上引发冲突
500 Internal Server Error 服务器遇到错误 ***
501 Not Implemented 请求超过服务器的能力范围
502 Bad Gateway 代理或网关错误(无法连接到其父网关) ***
503 Service Unavailable 无法为请求提供服务 ***
504 Gateway Timeout 代理或网关超时(等待另一服务器响应超时) ***

错误原因

500、502、503、504(待补充,暂未找到靠谱来源)

常见的 HTTP 方法

php面试题-网络协议篇

GET 与 POST 请求方式区别

GET POST
后退按钮/刷新无害 数据会被重新提交
数据长度限制/URL长度2048字符 长度无限制
数据可见/安全性差 不可见/更安全
可以被缓存 不可以被缓存
书签可收藏 书签不可收藏

HTTP 优缺点

基于应用级的接口,使用方便

传输速度慢,数据包大;如实现实时交互,服务器性能压力大;数据传输安全性差

HTTPS 通信原理

php面试题-网络协议篇

HTTP 2.0

多路复用、客户端拉拽/服务器推送、流量控制、WebSocket

IPv6 与 IPv4 有什么变化

更大的地址空间、扩展的地址层次结构、灵活的首部格式、改进的选项、允许协议继续扩充、支持资源的预分配

什么是心跳机制

心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制

什么是长连接

长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Test Driven Development

Test Driven Development

Kent Beck / Addison-Wesley Professional / 2002-11-18 / USD 49.99

Quite simply, test-driven development is meant to eliminate fear in application development. While some fear is healthy (often viewed as a conscience that tells programmers to "be careful!"), the auth......一起来看看 《Test Driven Development》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具