1. HTTP网络协议栈
在HTTP客户端向服务器发送报文前,需要IP地址
和端口
在客户端和服务器之间建立一条TCP/IP连接

2. 报文
HTTP报文包含三个部分:
- 起始行(
start line
) - 首部字段(
header
) - 主体(
body
)
3. URL语法
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
其中URL最重要的3个部分是方案(scheme)
,主机(host)
,路径(path)
例如:http://www.joes-hardware.com/seasonal/index.html
4. 方法
方法名 | 描述 | 是否有body |
---|---|---|
GET | 从服务器获取文档 | 否 |
HEAD | 只从服务器获取文档首部和GET的首部完全一致 | 否 |
POST | 向服务器发送数据 | 是 |
PUT | 请求的主体部分村数载服务器上 | 是 |
TRACE | 否 | |
OPTIONS | 否 | |
DELETE | 从服务器删除文档 | 否 |
5. TCP连接
TCP连接通过4个值来识别:
<源IP地址,源端口号,目的IP地址,目的端口号>
6. socket
socket
是操作系统提供的操纵TCP连接的工具或者接口实现。
7. HTTP事务时延(请求过程)
- 客户端根据URL确定服务器的IP和端口,最近如果没访问过,需要通过DNS对主机名转化为IP地址,这个过程可能需要数十秒
- 客户端会发送一条TCP连接请求(三次握手的时延)
- TCP连接成功后,客户端会发送请求报文,服务器收到请求报文会进行处理
- 服务器返回响应报文
8. TCP时延(性能聚焦区域)
- TCP连接的三次握手
- TCP慢启动拥塞控制
- 数据聚集的Nagle算法
- 用于捎带确认的TCP延迟确认算法
- TIME_WAIT时延和端口耗尽
9. 传输大数据时(TCP进行分段或UDP中IP进行分片)
采用TCP协议进行数据传输是不会造成IP分片的,因为一旦TCP数据过大,超过了MSS,则在传输层会对TCP包进行分段,自然到了IP层的数据报肯定不会超过MTU,当然也就不用分片了。而对于UDP数据报,如果UDP组成的 IP数据报长度超过了1500字节,那么IP数据报显然就要进行分片,因为UDP不能像TCP一样自己进行分段。
总结:UDP不会分段,就由我IP来分。TCP会分段,当然也就不用我IP来分了!
10. HTTP连接方式
- 串行连接
任务按顺序执行,每次任务开始都要进行TCP连接 - 并行连接
通过多条TCP连接发起并发的HTTP请求,每个请求都有自己的TCP连接,消耗内存资源 - 持久连接
重用TCP连接,以消除连接及关闭时延,能消除慢启动的拥塞适应阶段,能更快的传输数据 - 管道化连接
通过共享的TCP连接发起并发的HTTP请求 - 复用的连接
交替传送请求和响应报文(实验阶段)
网友评论