一、TCP粘包问题
1.TCP在接受数据时,多包数据粘在一起
2.原因:
2.1TCP发送数据时,会根据缓冲区数据的情况进行重新组包
2.2TCP接收方,没有及时读走缓冲区数据,导致缓冲区大量数据缓存。
3.如何解决
3.1发指定大小字节
将要发数据,封装在结构体里
struct data
{
int id;
float tmp;
xxx
};
缺点:发送端与接收端体系不同,32位与64位对齐方式的不同造成数据丢失;所有要在指定的相同平台使用,注意结构体对齐问题。
3.2发送具有指定分隔符的数据
hello world\n
miss you\n
3.3封装自定义数据帧
AA len0C 0001 0112 1314 1504 XXXX XXXXBB
校验:8位和校验
16位和校验
二、网络抓包
抓取通过设备网卡的数据
wireshark:网络抓包工具
1.分析和追踪网络问题
2.查看网络协议栈
安装:sudo apt-get install wireshark
1.sudo wireshark
2.选择通信设备的网卡==》any
3.选择抓取的过滤条件
4.开始抓取
5.进行一次通信

三.TCP报文头
标志位:紧急指针标志,为I时表示紧急指针有效,该报文应该优先传送,
- URG:
确认应答标志
2 ACK:
表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
3.PSH:
- RST:重置连接标志
表示请求建立一个连接5.SYN:
fmish标志,表示释放连接6.FN
四、TCP机制
1.应答机制:为每个数据增加序列发,发送数据时,第一个数据的序号作为报文中的序号。接收方收到相关数据,会回应ACK报文,报文中的确认号是接收方下次希望接收到的数据的起始序号
2.超时重传机制:TCP发送数据后会在一定的时间内等待ACK,假设在指定时间ACK未收到,则视为此数据包丢失,
五、HTTP(应用层)
超文本传输协议
1.世界范围内的广域网--万维网WWW
万维网服务器如何标记万维网文档?---------------->url:统一资源定位符
万维网客户端和万维网服务器如何通信?---------->http:超文本传输协议
万维网客户端如何显示数据?------------------------->HTML:超文本标记语言
URL:
<协议>://<主机>:<端口>/<路径>
/*创作中心-CSDNhttps://mpbeta.csdn.net/mp_blog/creation/editor?spm=1001.2014.3001.4503*/
应用层:
HTTP协议:浏览器与服务器之间的通信标准
端口号:80
传输层:tcp协议
- HTTP工作流程

-
请求TCP连接
-
发送http请求报文
-
接收http响应报文
-
关闭连接
爬虫
2.HTTP报文格式:

Connection: keep-alive
http的(tcp)连接方式
keep-alive:长连接,服务器不会立马断开,会等待一段时间断开
close:短连接,服务器在发送完数据之后立马断开

