1.0HTTP和APACHE-internet和http协议相关技术

发布于 2022年 02月 12日 08:28

internet因特网

1.1 internet因特网
起源于美国五角大楼,前身是美国国防部高级研究计划局(ARPA)主持研制的ARPAnet
## arpa在dns的反向解析上有过
之后各个国家组织的网络都连进去,形成全球性的大网络

互联网协议用TCP/IP协议,早期局域网没有用TCP/IP协议,现在都是TCP/IP协议
http协议,早期用来传输超文本标识语言(HTML)
通过html来传输图片等,不只是文字

1.2internet和中国
1987年,钱天白(搞物理的),利用电话拨号连接国际互联网,给德国朋友发

1990年钱天白注册顶级域名CN
之后各个机构专线部分功能接入
1994年用64K专线全功能接入跟国际互联网
成为第77个成员
1995年“瀛海威”提供普通家庭连接互联网的商业机构
1996年中国互联网全国骨干网建成并正式开通
####游戏软件不太玩
1995年4月马云凑了两万,成立杭州海博网络公司,专门给企业做主页
1997.5 丁磊创建网易
1998.2 张朝阳创建搜狐
1998.6.18刘强东在中关村创建京东公司,代理销售光磁产品
1998.11 马化腾和张志东成立深圳腾讯激素那几系统有限公司,OICQ开通
1998.12 新浪网成立,关键人物:王志东
1999.5.18 中国第一家电子商务企业8848.com成立
2000.1 李彦宏创建百度
### 中国互联网连接世界
八条光缆,4个登陆战允许入境

基于socket的主机网络通讯

这个知识应该在前面的tcpip协议上的补充,也是对osi七层模型的补充
应用层和传输层之间的,socket抽象层

1.1 socket是什么
socket套接字(IP+端口)
IP唯一的标识网络中的设备
端口:唯一标识设备的某个应用程序

socket是主机网路通信最基础的要求

1.2 socekt API(库与应用程序的接口)

Soceket Domain:根据用的地址
AF_INET:IPV4
AF_INET:IPV6
AF_UNIX:同一主机上不同进程间的通信
Socket Type:根据使用的传输层协议
SOCK_STREAM:流,tcp套接字,可靠传递,面向连接
SOCK_DGRAM:数据报,udp套接字,不可靠传递,无连接
(用的很少)SOCK_RAM:裸套接字,无需tcp或udp,app直接通过ip包通信

以后学python不会这么调用的,因为过于底层
做软件开发man socket 有很多选项和接口
如果用c写的话,要调用
以后无论做c还是python开发,最终的都是调用socket

1.3 套接字相关的系统调用(应用程序与os的-用户访问os内核是通过系统调用实现的)
socket() 创建套接字
 bind()绑定ip和端口
 listen()监听
 accept()接收请求
 connect()请求建立连接
 write()发送
 read()接收
 close()关闭连接 
 
1.4 socket通信的python3实现
vim tcpclient.py

#!/bin/python3
import socket
HOST='10.0.0.52'
# 要连接机器的地址
PORT=9527
# 要连接机器地址的端口
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
# 客户端不用绑定和监听,直接连即可
sock.send(b'hello,tcpserver!I am tcpClient')
# 打招呼
recv=sock.recv(BUFFER)
# 接收服务器端的消息
print('[tcpServer said]:%s' %recv.decode())
# 打印接收到的消息
sock.close()
# 客户端不是一个循环,执行一次就断开了

# 测试:两台机器,一个当服务器端,一个当客户端
# 这样就可以实现网络通讯

# 如果服务器端不正常退出
# ss -ntl查看不了
# ss -ntla可以查看,会显示处于time-wait状态  tcp的11种状态之一
# 等待一下即可,通常time-wait是30秒
# 可以用tcp/udp测试工具测试
# 以后软件开发,网络通讯,直接复制粘贴即可
# python功能非常丰富,比shell的脚本强多了

vim tcpsever.py

#!/bin/python3
# 调用python3的解码器
import socket
# 导入socket函数库
HOST='0.0.0.0'
# 定义主机IPV4地址
# 或者叫监听的端口
# 0.0.0.0监听本机所有的ip
PORT=9527
# 定义主机端口号
BUFFER=4096
# 定义缓冲区大小
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 定义socket层,调用socket函数定义传输层和网络层协议
# 传输层tcp,网络层IPV4
sock.bind((HOST,PORT))
# 绑定主机IP和端口
sock.listen(3)
# 监听主机ip和端口
# 3表示监听队列
print ('tcpServer listen at:%s:%s\n\r' %(HOST,PORT))
# 定义,绑定,监听后提示信息
while True:
    # 死循环
    client_sock,client_addr=sock.accept()
    # 用socket接收远程用户连接
    # 有两个返回值
    # 客户端的传输层和网络层用什么协议,绑定的ip和端口是多少
    # 所以这应该是个数组对象
    print('%s:%s connect ' %client_addr)
    while True:
        # 死循环
        recv=client_sock.recv(BUFFER)
        # 利用socket和对方进行通讯
        if not recv:
            # 如果没有接收到任何数据
            client_sock.close()
            # 断开连接
            break
        print('[client %s:%s said]:%s' %(client_addr[0],client_addr[1],recv.decode()))  # 打印客户端ip和端口,以及接收到的信息
        client_sock.send(b'tcpServer has received your message')
        # 对客户端发一个回应
sock.close()
# 外层循环是不能结束的,然后的断开
# 如果接收到accept的请求,会继续监听
python3的缩进很严格


# 执行,不能用bash执行
# 要chmod +x tcpserver.py
# ./ tcpserver.py
# 之后就可以ss- ntl查看监听的端口

访问网站时候,背后发生了什么

 dns解析,把名字解析ip地址
 和对方主机连接3次握手4次挥手
 建立连接后就会发送http请求
 通过http请求和对方传输数据
 从对方的服务器获取返回的html信息(一般)
 浏览器收到html页面后解释执行
 
 从互联网上的得到的实际是一端html源码
 从源码到页面的过程叫渲染
 渲染过程:构建DOM树,构建CSSOM树,构建渲染树,合成绘制

http协议通信过程

1.1 历史
发明人:蒂姆-伯纳斯-李
 http是促进互联网发展的重要的协议
 最早的互联网应用不是http协议,是吖db协议
 http-超文本传输协议
 早期就是传文本的,可以看到更多的效果,颜色或者图片等等
 文本的太简陋了,可以显示出大小颜色效果,将网页显示的更生动好看
 
 1984年
 后期http标准由万维网协会推广
 http版本最主流1.1版本
 http通讯过程和socket传输差不多
 
 1.2Http服务通信过程
 获取ip和端口
 创建套接字
 连接到服务器IP:port上
 1.3http协议分层
 参考:
 https://juejin.cn/post/6844904097405992968
 这个要加一层应用层http报文
也就是切片的数据是http报文

Http相关技术和术语

1.1 WEB开发语言
http:应用层协议-超文本传输协议 ,默认端口80/tcp

WEB前端开发语言
	html
	css
	javascript
WEB后端开发语言
	并发量高的
		java
		go
	中小公司
		php
		python

1.2 html-Hyper Markup Language 超文本标记语言-负责实现页面的结构
范例:
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charaset=utf-8">
# 表示编码机制,属于text/html类型,字符集utf-8
<title>HTML语言</title>
# 起了个标题,访问页面的时候的标签
</head>
<img src="https://www.baidu.com/img/bd_logo1.png">
# 调用了百度首页log
# 这是属于盗链行为
<h1 style="colo:red">欢迎</h1>
# 欢迎,颜色红色
<p><a href=http://www.baidu.com>百度</a>欢迎你</p>
# 这是个超链接
</body>
</html>
# 创建出来,后缀html,这样可以由浏览器渲染打开可以识别html的代码格式,可以本地打开,也可以跨网络打开,用记事本就可以了,本质上就是个纯文本

1.3 CSS-Cascading Style Sheet 层叠样式表,定义了如何显示(装扮)HTML元素,比如:字体大小,颜色属性等,通常保存在外部的.css文件种
通过仅仅编辑一个简单的css文档,就可以同时改百年站点中所有页面的布局和外观
范例:CSS
# test.html
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="mystyle.css"/>
</head>
<body>
<h1>这是heading 1</h1>
<p>这是一段普通的段落,请注意,改段落的文本是红色的,在body选择器中定义了本页面的默认文本颜色。</p>
<p class="ex">该段落定义了 class="ex".该段落大的颜色是蓝色的</p>
</body>
</html>

# mystyle.css
body {color:red}
h1 {color:#00ff00}
p.ex {color:rgb(0.0.255)}
# 很多大网站的页面,模块化,共性的东西抽取出来,做成一个单独的文件
# 以后所有的文件调用即可,不需要重复大的定义

1.4 js-javascript,实现网页大的动画效果
范例:JavaScript-和java没有任何关系
# 雷锋和雷峰塔的关系
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
</head>
<body>
<h2>我的第一段 javascript</h2>
<button type="button" onclick="document.getElementById('demo').innerHTML=Date()" >
点击这里来先死日期和时间
</button>
<p id="demo"></p>
</body>
</html>
# 还可以自动变-叫阿加特斯技术,前端要好好学
# 也是生成html后缀
总结:上面的三种语言都是前端工程师要掌握的,我们是运维工程师,不要求精通,至少要了解,只要知道三种大概有什么功能就可以了,如果以后要做网页开发就要懂了

推荐文章