TCP网络协议
TCP粘包
1. TCP在接收数据时,多包数据粘在了一起
2. 原因:
1. TCP发送数据时,没有及时发走,会根据缓冲区数据的情况进行重新组包;
2. TCP接收方,没有及时读走缓冲区数据,导致缓冲区大量数据缓存。
3. 如何解决TCP粘包:
1. 发指定大小字节(结构体)
struct data
{
int id;
float tmp;
xxx;
};
指定在相同平台上使用,注意结构体对其齐问题。
2. 发送具有指定分隔符的数据
"hello world\n"
"how are you\n"
3. 封装自定义数据帧
AA 0d 01 00 00 00 14 00 00 00 15 xx xx xx xx sum BB
网络抓包
网络抓包:抓取通过设备网卡的数据
wireshark:网络抓包工具:
1. 分析和追踪网络问题
2. 查看网络协议栈
安装:sudo apt-get install wireshark
1. sudo wireshark
2. 选择通信设备的网卡---》any
3. 选择抓取的过滤条件
4. 开始抓取
5. 进行一次通信
TCP报文头
标志位:
1. URG: 紧急指针标志, 为1时表示紧急指针有效, 该报文应该优先传送。
2. ACK: 确认应答标志
3. PSH: 表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
4. RST: 重置连接标志
5. SYN: 表示请求建立一个连接
6. FIN: finish标志, 表示释放连接
TCP机制
1. 应答机制:为每个数据增加序列发,发送数据时,第一个数据的序号作为报文中的序号。
接收方收到相关数据,会回应ACK报文,报文中的确认号是接收方下次希望接收到的数据的
起始序号。
2. 超时重传机制:TCP发送数据后会在一定的时间内等待ACK,假设在指定时间ACK未收到,则视这包数据已经
丢失,会重新传输这包数据。
3. 流量控制机制:根据接收方接收数据的能力,调整窗口大小,通知发送发进行流量控制