TCP协议/HTTP协议
1.粘包问题:在接受数据时,会出现多包数据粘在了一起
2.原因:
3.如何解决TCP粘包
1.发送指定大小的数据包(结构体)(指定在相同的平台,结构体对齐问题)
struct data
{
int id;
float tmp;
xxx;
};
2.发送具有指定分隔符的数据(字符串)
“hello world\n”;
3.封装自定义数据帧
校验:8位和校验/16位和校验
网络抓包:抓取通过设备网卡的数据
wiresnark:网络抓包工具
UDP头部与TCP头部对比:UDP头部只有8个字节,而TCP有20个字节的固定首部
TCP报文头:
标志位:
1. URG: 紧急指针标志, 为1时表示紧急指针有效, 该报文应该优先传送。
2. ACK: 确认应答标志
3. PSH: 表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
4. RST: 重置连接标志
5. SYN: 表示请求建立一个连接
6. FIN: finish标志, 表示释放连接
TCP机制:
1. 应答机制:为每个数据增加序列发,发送数据时,第一个数据的序号作为报文中的序号。接收方收到相关数据,会回应ACK报文,报文中的确认号是接收方下次希望接收到的数据的起始序号。
2. 超时重传机制:TCP发送数据后会在一定的时间内等待ACK,假设在指定时间ACK未收到,则视这包数据已经丢失,会重新传输这包数据。
3. 流量控制机制:根据接收方接收数据的能力,调整窗口大小,通知发送发进行流量控制
此外,还有捎时应答机制,延时应答机制,滑动窗口机制
HTTP:
1.url(统一资源定位符)
2.http:浏览器与服务器之间的通信标准
端口号:80;
传输层协议:TCP;
3.http工作流程:
4.http的报文格式:
请求报文:方法
回应报文:状态码
注意:connect:keep-alive
长连接,服务器不会立马断开,会等待一段时间自动断开
close:短连接,服务器在发送完数据后会立马断开