Linux 软件编程学习第十五天

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协议:

www.nowapi.com

APPKey: 44923

sign: 5432c8efd2fc919d409b01241b70c9f4

HTTP超文本传输协议

应用层

万维网: 大型的信息联网存储所
统一资源定位符:简称URL

协议://主机:端口号/资源路径

https://www.baidu.com

协议: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

相关推荐
charlie11451419139 分钟前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
c语言·stm32·单片机·教程·oled·嵌入式软件
小林up2 小时前
【C语言设计模式学习笔记1】面向接口编程/简单工厂模式/多态
c语言·设计模式
破-风2 小时前
linux的用法
linux·运维·服务器
涛ing5 小时前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
__雨夜星辰__5 小时前
Linux 学习笔记__Day2
linux·服务器·笔记·学习·centos 7
大耳朵土土垚5 小时前
【Linux】日志设计模式与实现
linux·运维·设计模式
学问小小谢5 小时前
第26节课:内容安全策略(CSP)—构建安全网页的防御盾
运维·服务器·前端·网络·学习·安全
独正己身6 小时前
代码随想录day4
数据结构·c++·算法
yaoxin5211236 小时前
第十二章 I 开头的术语
运维·服务器
ProgramHan6 小时前
1992-2025年中国计算机发展状况:服务器、电脑端与移动端的演进
运维·服务器·电脑