1.TCP粘包问题 :
TCP发送数据是连续的,两次发送的数据可能粘连成一包被接收到
1.解决粘包问题方法:
1.接收指定长度:(不稳定)
发送5个字节 接收5个字节
2.睡眠:(效率低)
让每次发送间设定时间间隔
3.将两次数据包间添加间隔标志
UDP MTU最大传输单元(理论:65535 实际:1500)
源端口
目的端口
序号:发送数据的编号
确认号:接收到数据的编号(只有当ACK为1时,该位有效)、确认号即想要让对方下次发送数据的序号
数据偏移:拆包组包过程中标识该包的偏移量
SYN:请求应答
ACK:确认应答
FIN:结束连接
RST:重置连接
PSH:数据包
URG:加急
窗口:滑动串口,用来完成流量控制和拥塞控制
滑动窗口:用来控制接收和发送窗口的大小,来实现对流量的控制
校验和
紧急指针
本次发送的序号,为上次收到的确认号
本次发送的确认号,为收到的序号 + 实际接收到的数据长度
1.TCP三次握手:
SYN
SYN + ACK
ACK
2.四次挥手:
FIN
ACK + FIN
ACK
FIN
ACK
FIN
ACK
3.传输过程中通过序号和确认号保障数据传输的完整性
PSH
ACK
TCP和UDP传输方式:
1.UDP实现方式简单
资源开销比较小
UDP不安全、不可靠
UDP是无连接的,面向数据包的传输方式
2.TCP实现方式复杂
资源开销比较大
TCP安全、可靠
TCP是面向连接的,面向字节流传输方式
HTTP协议:
APPKey: 44923
sign: 5432c8efd2fc919d409b01241b70c9f4
HTTP超文本传输协议
应用层
万维网: 大型的信息联网存储所
统一资源定位符:简称URL
协议://主机:端口号/资源路径
协议:https 加密
http 非加密
主机:IP地址
端口号: 80
443
资源路径: 默认为 / 主页
短连接:想要通信时建立链接
长连接:通信前建立链接,通过新过程中链接一直保持
客户端如何拿到服务器中的网页文件?
1.客户端向主机发送TCP链接请求
2.服务器收到请求后,与客户端链接成功
3.客户端向发送HTTP请求报文,告诉服务器想要的数据
4.服务器回复HTTP响应报文,将客户端要的数据发回
5.双方关闭通信
通信报文:
GET /?app=weather.today&weaId=1&appkey=44923&sign=5432c8efd2fc919d409b01241b70c9f4&format=json HTTP/1.1
Host: api.k780.com
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 17 Aug 2024 08:08:35 GMT
Content-Type: application/json; charset=utf-8;
Transfer-Encoding: chunked
Connection: keep-alive
Access-Control-Allow-Origin: *
{"success":"1","result":{"weaid":"1","days":"2024-08-17","week":".........","cityno":"beijing","citynm":"......","cityid":"101010100","temperature":"30.../23...","temperature_curr":"32...","humidity":"62%","aqi":"45","weather":"...............","weather_curr":"......","weather_icon":"http://api.k780.com/upload/weather/d/1.gif","weather_icon1":"","wind":".........","winp":"2...","temp_high":"30","temp_low":"23","temp_curr":"32","humi_high":"0","humi_low":"0","weatid":"2","weatid1":"","windid":"5","winpid":"2","weather_iconid":"1"}}
HTTP请求报文格式:
1.方法:
GET
2.资源路径:
/?app=weather.today&weaId=1&appkey=44923&sign=5432c8efd2fc919d409b01241b70c9f4&format=json