http协议是建立在tcp的基础上
http协议定义传输的数据格式与规范
tcp协议规定数据传输和连接方式
Socket连接
建立Socket连接时可以指定传输协议,即TCP或UDP协议
TCP连接:
建立tcp连接需要经过三次握手过程
HTTP连接:
在建立TCP连接的基础上,再建立HTTP连接
HTTP请求报文
请求行:请求方法、请求地址、协议版本
请求头:键值对的方式,包括host、user-agent、connection、accept-charset等
空行(请求头结束后会有一个空行表示请求头已经结束,接下来是请求数据)
请求数据:
HTTP响应报文:
响应行:协议版本、状态码、状态描述
响应头:键值对的方式,包括server、Content-Type、Content-Length等
空行(响应头结束后会有一个空行表示响应头已经结束,接下来是响应数据)
响应数据
TCP的四次握手
前三次:
第一次:
TCP粘包和半包现象
通俗讲:tcp发送的两个包变成一个包发出去了;一个包太大,被拆成了两个包
原因:
- 一次性发送的字节大小大于套接字发送缓冲区的大小
- 进行MSS大小的TCP分段:MSS:最大报文段长度(整个TCP报文段长度=TCP首部+MSS)
③以太网的playload大于MTU进行IP分片:MTU是一种通信协议的某一个层面上的能够通过的最大数据大小;当数据包大小大于MTU时会在IP层进行分片
解决:
- 消息定长
- 在包的尾部增加回车或者空格符等进行分割
- 将消息分为消息头和消息尾