木榛

导航

HTTP一、HTTP介绍与套接字

 

目录

一、套接字
  1、HTTP与Apache
  2、应用层协议:HTTP
  3、套接字(IP+协议端口的组合)
  4、套接字图示
  5、套接字相关知识点
二、HTTP
 
 
 
 

一、套接字

 
 

1、HTTP与Apache

 

  HTTP:软件包的包名
  Aapache:软件名
 
 
 

2、应用层协议:HTTP

 
  HTTP协议是应用层协议,同层的协议还有FTP、SMTP、DNS、RPC等

 

 
 
3、套接字(IP+协议端口的组合)
 
  套接字地址:IP地址和端口号,合称为套接字地址-socket address
 
  在建立通信连接的每一端,进程间的传输要有两个标志:
 
  客户机套接字地址定义了一个唯一的客户进程
 
  服务器套接字地址定义了一个唯一的服务器进程

                  套接字:IP地址+端口的组合

 
 
 每个应用程序在同一台主机上,各自有各自的端口号,不会出现两个进程使用同一个端口号的情况。
 
因此,通过IP地址,我们可以找到网络中具体的主机。通过协议对应的端口,我们就唯一地确定了这台主机上应用程序。
 
进而,通过IP地址+协议端口号组成socket,就可以唯一的标识网络通信中双方的地址了,这其中一个是客户端套接字地址
 
另一个就是服务器套接字地址
 
 
4、套接字图示
 
  从图中可以看出,位于应用层有多个用户进程,处理这些进程的Socket套接字层如何区分它是哪个应用程序能?
靠的就是协议加端口号。如,当用户访问TCP的80端口,很容易就得出用户的请求响应该回给HTPP还是DNS。
 
 
 
 
5、套接字相关知识点
 
 
Socket:
  套接字,进程间通信IPC的一种实现,允许位于不同主机(或同一主机)上,不同进程之间 进行通信和数据交换。
  Socket API于1983年在BSD 4.2上出现。
 
Socket API:
  封装了内核中所提供的aocket通信相关的系统调用
 
Socket Domain:
  根据其所使用的地址分为以下三类
 
  AF_INET: 主要用于IPV4
  AF_INET6: 主要用于IPV6
  AF_UNIX: 同一主机上,不同进程之间通信使用
 
 
 
6、套接字函数
 
 
建立连接前
 
1)服务器端开启创建一个socket对象;
2)创建好的socket绑定一个协议、端口、本地地址等信息;(如ipv4某地址绑定tcp80的端口)
3)将socket置于监听listen状态; (准备开张营业接待用户)
4)客户端也创建一个socket,不同于服务器它不需要绑定端口,因为客户端使用的是随机端口。
5)客户端调用connect函数,发起请求去连接服务器。connect里写入了要连接的对象信息,如服务器ip、端口信息等;
 
建立连接后(双方都处于可发可收
 
6)服务收到客户端的请求,将对该请求做出响应,如给他发送数据,或接收数据。
同时,客户端也是可以做出接收或发送数据的action.
 
关闭连接
 
7)数据收发完后,双方可以断开连接

 

 

 
7、套接字相关系统调用
 
  
  socket(): 创建一个套接字
  bind(): 绑定IP和端口
  listen(): 监听
accept(): 接收请求
connect(): 请求建立连接
write(): 发送
read(): 接收
closed(): 关闭连接
 
 
 
8、Socket模块代码赏析
 
 
  
import socket #
HOST='127.0.0.1' #
PORT=9527
BUFFER=4096
sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((HOST,PORT))
sock.send('hello, tcpServer!') #
recv=sock.recv(BUFFER) #
print('[tcpServer said]: %s' % recv) #
sock.close()
 
 
 
9、HTTP通信过程
 

 

 
 
二、HTTP相关术语
 
1、HTTP相关术语
 
http: Hyper Text Transfer Protocol,超文本传输协议, 80/tcp
html: Hyper Text Markup Language 超文本标记语言,编程语言
 
 
 html示例:
<html>
<head>
<title>html语言</title>
</head>
<body>
<h1>标题1</h1>
<p><a href=http://www.magedu.com>马哥教育</a>欢迎你</p>
<h2>标题2</h2>
</body>
</html>
 
 
CSS: Cascading Style Sheet 层叠样式表
 
js: javascript
 
 
MIME: Multipurpose Internet Mail Extensions (最早来源于邮件传输技术)
 
 
多用途互联网邮件扩展 /etc/mime.types
 
格式:major/minor
 
text/plain
text/html
text/css
image/jpeg
image/png
video/mp4
application/javascript
 
 
 
 
 
2、URI、URL和URN
 
URI: Uniform Resource Identifier 统一资源标识,分为URL和URN
 
URN: Uniform Resource Naming,统一资源命名
 
示例: P2P下载使用的磁力链接是URN的一种实现
 
  magnet:?xt=urn:btih:660557A6890EF888666
 
URL: Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
 
 
URN与URL区别:(人名与住址)
 
URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查
 
找该事物的方法。URN仅用于命名,而不指定地址
 
 
URL的组成
 
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
 
schame: 方案,访问服务器以获取资源时要使用哪种协议(http、ftp、trsp等)
user: 用户,某些方案访问资源时需要的用户名。(一般匿名不写)
password: 密码,用户对应的密码,中间用:分隔。
 
Host: 主机,资源宿主服务器的主机名或IP地址
port: 端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号(系统默认端口可省略)
 
path: 路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔
params: 参数,指定输入的参数,参数为名/值对,多个参数,用;分隔
query: 查询,传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag: 片段,锚点。一小片或一部分资源的名字,此组件在客户端使用,用#分隔
 
 
url中的查询
  如电商购物网站搜索产品,在url中会产生查询后台数据库的keyword,这就是查询

 

 
url中的锚点
  如网页内容太长,选中该字母则跳转到该字母所在区域,url中以#标识
 

 

 

 

 

URL示例

http://www.magedu.com:8080/images/logo.jpg
ftp://mage:password@172.16.0.1/pub/linux.ppt
rtsp://videoserver/video_demo/
Real Time Streaming Protocol
http://www.magedu.com/bbs/hello;gender=f/send;type=title
https://list.jd.com/list.html?cat=670,671,672&ev=149_2992&sort=sort_totalsales15_desc&trans=1
http://apache.org/index.html#projects-list

 

 

 
 
 
3、HTTP协议介绍
 
持久连接:建立连接以后三次握手建立连接后不断开,在连接里可以持续发起请求。持久连接(persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。
 
管道机制(pipelining):即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
 
队头堵塞:同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking)
 
头信息帧和数据帧:头信息和数据体都是二进制,称为头信息帧和数据帧
 
多工(Multiplexing):复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工(Multiplexing)
 
头信息压缩机制(header compression):头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
 
服务器推送(server push):HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送(server push)
 
 
 
 
 
 
 
 
 
 

posted on 2018-06-19 22:04  木榛  阅读(984)  评论(0编辑  收藏  举报