2019/04/29 HTTP服务

本文深入探讨HTTP服务软件如Apache和Nginx的区别,TCP/IP四层模型与OSI七层模型的对比,以及SSH、TCP等应用层协议的作用。详细讲解了三次握手和四次挥手过程,套接字(socket)的概念及其在网络通讯中的应用,包括域名解析、端口绑定、监听与连接的全过程。同时,介绍了Python编写TCP服务器端程序的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提供http服务的软件有很多,apache只是其中一个,还有nginx,传统公司用apahce比较多,互联网的用nginx比较多
在这里插入图片描述
OSI模型分7层,tCP/IP分四层(应用层,传输层,互联网层,网络接口层)
ssh,tcp协议,mysql协议,都属于应用层,
既然是应用层协议,那就有应用层的报文头部,每一层都有每一层的报文头部,应用层也有应用层的报文头部,tcp/ip协议的报文头部,数据链路层的报文头部,
tcp的3次握手,四次挥手,
http协议也有自己的报文头部

在这里插入图片描述
在这里插入图片描述在这里插入图片描述配置DNS反向解析的时候有这个网络名称,实际就是来源于最早的网络名称
在这里插入图片描述
这封邮件的原文
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
OICQ其实是仿照ICQ是以色列开发的软件
在这里插入图片描述
最早的电商有8848,艺龙(现在做旅游了),异国
京东就是抓住了04年非典,人家不敢出来,只能网上买东西,发展起来了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
OSI的应用层,表示层,会话层=tcp/ip的应用层
传输层=传输层
网络层=internet 层
数据链路层,物理层=网络接口层

在这里插入图片描述
跨网络都涉及到2个进程如何通讯,一般都用tcpip协议,所以一般都是基于套接字进行通讯,
两个主机跨网络如何找对对方,就需要套接字socket
套接字就是ip地址加协议端口
通过ip地址可以找到网络中唯一的设备,通过端口就确定了在这台主机上的应用程序地址(不会有两个进程使用同一个端口号),这两个要素组合成socket
从外面浏览器如果访问京东网站,就需要访问京东对应的套接字
浏览器输入www.jd.com
前端利用dns解析把www.jd.com解析成地址,
利用地址找到京东网站的主机,找到主机,因为写的是http://
tcp/ip协议的默认端口号是80,通过ip地址再加上tcp的端口号80就找到了web服务器地址
53是dns服务端口,tcp,udp

在这里插入图片描述
每个引用程序,需要有一个socket套接层,这个套接层,把不同的应用程序加以区分(协议和端口号,比如tcp的80端口(到达套接字,就知道是给tcp还是mysql的进程))
在这里插入图片描述
socket套接字是为了实现进程间的通讯的,通常是实现不同主机的通讯,要实现socket通讯,就要实现专门的对外网络的开发接口
Socket API,应用程序开发接口,做开发就需要和系统自带的一些程序库去调用,调用库就需要调用API接口

在这里插入图片描述
socket 在进行编程的时候,用了一些相关概念,
Domain主要特指协议类型,是IPV4,还是IPV6协议
还有一种是叫UNIX的Domain,是正在同一主机不同进程上使用的,比如mysql的粉色文件
跨网络就不能使用socket文件了,就需要用ipv4或ipv6的跨网络domain 了
在同一台机器上就没必要像在网络中传输一样,解封装,一般都是用.sock文件,来进行通讯

在这里插入图片描述
在这里插入图片描述
socket类型
三次握手,四次挥手
tcp协议是可靠的,带有相应的标记位fin,ack、数据包的序列号,确认号
udp协议是不可靠的

在这里插入图片描述
socket跳过应用层直接调用ip头部
在这里插入图片描述
在这里插入图片描述
服务器端会打开socket对象
soscket创建好后,会绑定相关协议,包括端口(比如走http的就绑定80)
绑定好后,就打开处于监听状态
监听好后,客户端想要链接,也打开socket,这个socket就不需要绑定端口
直接连接(写上服务器地址和端口号),发送请求
服务器端收到请求就会对客户端进行响应
可以发送数据也可以写数据
客户端也一样,双方都能写和读数据
前面的过程分服务器端和客户端,
一般服务器和客户端建立连接,就谈不上服务器端和客户端了
因为服务器端和客户端都可以发数据和收数据

在这里插入图片描述
套接字底层调用的一些功能
在这里插入图片描述
tcp服务器端的一个程序,使用pythonn写的
socket 创建资源对象
bind绑定地址和端口

python对于缩进比较严谨
在这里插入图片描述
tcp服务器端的一个程序,使用pythonn写的
socket 创建资源对象
bind绑定

在这里插入图片描述
在这里插入图片描述
导入文件
在这里插入图片描述
运行方式跟bash差不多,bash是bash解释器,python是python的解释器
在这里插入图片描述
现在就有一个9527的端口监听
在这里插入图片描述
0.0.0.0可以本主机所有的ip上
在这里插入图片描述
** 代表所有地址*
在这里插入图片描述
修改客户端
在这里插入图片描述
客户端执行,收到服务器端回的消息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
9527是比较大的端口,那么可以使用小的端口吗在这里插入图片描述
成功打开端口
在这里插入图片描述
在这里插入图片描述
客户端也没上面问题
在这里插入图片描述
在这里插入图片描述
wang能否允许这个程序
在这里插入图片描述
为何会权限拒绝
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改了端口号就执行成功了
在这里插入图片描述
网络那几章中,端口号是有范围的,1024以上和1024以下的,有些称呼不一样
1023以内的叫特权端口,特权端口就是只有root才有权限
1024以上才能给普通用户

在这里插入图片描述
在这里插入图片描述ssh 22端口就是以root方式运行的
MySQL数据库是3306 ,也就是比1023大
http服务普通用户不能启动,所以就需要用root身份打开http服务

在这里插入图片描述
http本质通讯过程也是基于socket 的
刚开始创建socket套接字
ip和端口号绑定
开启监听,等待链接

客户端也需要创建一个socket,利用connect链接函数,连接到服务器端,
一旦链接起来以后,双方就会发送数据

在这里插入图片描述
http通过tcp豹纹分装数据包,往下传送给网络层封装报文头部,数据链路层再封装,到达另外的就解封装在这里插入图片描述
在这里插入图片描述
我们看到的页面并不是原始数据,有些原始数据就被屏蔽了
在这里插入图片描述
在这里插入图片描述
http超文本传输协议
安装httpd

在这里插入图片描述
在这里插入图片描述
这个页面就是纯文本的
在这里插入图片描述
为了好看一点,需要给它改成超文本
在这里插入图片描述
加个标签
在这里插入图片描述
http协议最初是用来传输文本的
head、 title标题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就变了
在这里插入图片描述
javascript简称js
在这里插入图片描述
这个网站还可以测试
在这里插入图片描述
在这里插入图片描述
java和javascript是没有关系的,雷锋和雷锋塔的关系
在这里插入图片描述
CSS类似ansible模版,往里面填东西就可以,但是大体模版都差不多
在这里插入图片描述
在这里插入图片描述
http早期传输文本,后来发现不同的需求,加调用了MIME,多用于互联网邮件扩展
早期互联网是由邮件方式沟通 的

在这里插入图片描述
描述大体分成两块
在这里插入图片描述
主要类型,细化类型
类似设备编号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
http协议相对较晚的
在这里插入图片描述
在这里插入图片描述
http早期只支持get
post上传
http协议也有直接的头部文件,是个文本文件可以看懂
content-type 就告诉用户这次传的是多媒体文件,还是文本文件,还是其他类型的文件

在这里插入图片描述
头部很多键值对组成,寻找下图片
在这里插入图片描述
放什么就识别什么
在这里插入图片描述
有可能把图片嵌入到文本文件里
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在访问还是文本,但是实际里面有两种资源(图片和文字)、在这里插入图片描述
在这里插入图片描述
报文头部在这里插入图片描述
-I就会看头部的意思
在这里插入图片描述
在这里插入图片描述
delete代表http不仅可以给你传输数据还能把你 的数据删除,只不过一般网站不支持
在这里插入图片描述
通讯是按照次序通讯,一次tcp链接,所有数据是按照顺序通讯的,这样就有可能造成排队现象,为了避免这样的情况发生,
在这里插入图片描述
网站的资源都是按顺序一个个下载,下载的话都从一个网站下载就太慢了,为了提高速度,减少请求不太现实
在这里插入图片描述
**还有一种方法提高速度就是多开持久链接,建立连接以后不断开,三次握手以后,把页面信息下载下来不断开,在这个链接里面可以发起多次请求,默认情况下网站不支持,关闭了持久链接(三次握手以后,每次链接就传一个数据,传完以后就断开,下次再传的时候还需要建立三次握手,这是比较消耗资源的,)
还可以用合并脚本,样式表,将图片嵌入到css代码中,域名分片(每个资源可能放在不是一个网站,放在不同位置)
**在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
域名分片,就是在我的页面放的资源有可能不是我本网站的资源,是其他的
大的网站一般是很多服务器提供服务的

在这里插入图片描述

内容概要:本文介绍了基于Python实现的SSA-GRU(麻雀搜索算法优化门控循环单元)时间序列预测项目。项目旨在通过结合SSA的全局搜索能力和GRU的时序信息处理能力,提升时间序列预测的精度和效率。文中详细描述了项目的背景、目标、挑战及解决方案,涵盖了从数据预处理到模型训练、优化及评估的全流程。SSA用于优化GRU的超参数,如隐藏层单元数、学习率等,以解决传统方法难以捕捉复杂非线性关系的问题。项目还提供了具体的代码示例,包括GRU模型的定义、训练和验证过程,以及SSA的种群初始化、迭代更新策略和适应度评估函数。; 适合人群:具备一定编程基础,特别是对时间序列预测和深度学习有一定了解的研究人员和技术开发者。; 使用场景及目标:①提高时间序列预测的精度和效率,适用于金融市场分析、气象预报、工业设备故障诊断等领域;②解决传统方法难以捕捉复杂非线性关系的问题;③通过自动化参数优化,减少人工干预,提升模型开发效率;④增强模型在不同数据集和未知环境中的泛化能力。; 阅读建议:由于项目涉及深度学习和智能优化算法的结合,建议读者在阅读过程中结合代码示例进行实践,理解SSA和GRU的工作原理及其在时间序列预测中的具体应用。同时,关注数据预处理、模型训练和优化的每个步骤,以确保对整个流程有全面的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值