1、套接字
套接字是IPC(进程间通信)的一种实现,允许位于不同主机(甚至同一主机)通上不同进程间信
数据交换:Socket API,1983,4.2BSD
ip+端口
ip:主机到主机间通信
网络间通信本质是进程间通信
进程是程序的副本,可以有多个,多个副本都是不同的进程
1)unix socket:在同一主机间通信
基于文件系统通信
2)Socket:ip+port 不同主机间通信
ip:port
ip.port
套接字的类型:
TCP套接字:SOCK_STREAM
UCP套接字:SOCK_
raw套接字(原始套接字)
Socket Domain:
根据其使用的地址不同:
AF_INET:Address Family,IPv4
AF_INETV5:IPv6
AF_UNIX:同一主机上不同进程之间通信时使用
每类套接字都至少提供了两种socket:流,数据报
流:可靠地传递、面向连接、无边界
数据报:不可靠地传递,有边界
套接字相关的系统调用:
socket():创建一个套接字
bind():绑定
listen():监听
accept():接收请求
connect():请求连接简历
write();发送数据
read():接收数据
send(),recv(),sednto(),recvfrom()
IANA:
端口是16位的,也就是端口最大的值可以达到2^16-1,所以一共有2^16-1+1=65536个端口。再加一个1是因为最大值是65535,而计算机中是从0开始计算的,所以要加上全0这个端口。
固定端口(0-1023):永久的分配给固定的应用使用,特权端口:管理员才有权限使用 使用集中式管理机制,即服从一个管理机构对端口的指派,这个机构负责发布这些指派。由于这些端口紧绑于一些服务,所以我们会经常扫描这些端口来判断对方是否开启了这些服务,如TCP的21(ftp),80(http),443(https),139(netbios),UDP的7(echo),69(tftp)等等一些大家熟知的端口; 动态端口(1024-49151): 这些端口并不被固定的捆绑于某一服务,操作系统将这些端口动态的分配给各个进程,同一进程两次分配有可能分配到不同的端口。不过一些应用程序并不愿意使用操作系统分配的动态端口,他们有其自己的‘商标性’端口,如oicq客户端的4000端口,木马冰河的7626端口等都是固定而出名的。 49152-65535:客户端程序随机使用的端口
MTU:最大传输单元1500B
2、http概述
http:hyper text transfer protocol 超文本传输协议
TTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
html:超文本标记语言 编程语言
HTML(Hyper Text Mark-up Language )即,是 WWW 的描述语言,由 提出。设计 HTML 语言的目的是为了能把存放在一台电脑中的文本或图形与另一台电脑中的文本或图形方便地联系在一起,形成有机的整体,人们不用考虑具体信息是在当前电脑上还是在网络的其它电脑上。这样,你只要使用鼠标在某一文档中点取一个图标,Internet就会马上转到与此图标相关的内容上去,而这些信息可能存放在网络的另一台电脑中。
html格式的文件(网页文件):
<html>
<head> 首部
<title></title> 标题
</head>
<body> 内容
<h1></h1> 标题1
<p></p> 段落
<h2></h2> 标题2
<p></p> 段落
</body>
</html>
动态页面:程序脚本,在服务端执行(也在客户端在执行),把结果返回给客户端
php,asp,.net,jsp,perl,python,c,c++
静态页面:
URI:Uniform Resource Identifier 统一资源标识符
标识互联网上每个的资源的唯一性
URL:Uniform Resource Locator 统一资源定位符
用于描述某服务器某特定资源的位置
格式:Scheme://Server:Port/path/to/resource
方案|协议:// 主机名:端口/资源路径
例如: http://www.magedu.com/images/logo.jpg
URN:统一资源命名符
MIME:Multipurpose Internet Mail Extesion 基于文本传输协议传输非文本数据
将二进制数据编码成文本发送,并能够让接收方还原回原来的格式
媒体类型(MIME类型):major/minor
HTML:text/html
ASCII:text/plain
JPEG:image/jpeg
QuickTime:image/gif
http协议版本:
HTTP/0.9:1991,原型版本html文档,功能简陋不支持多媒体
HTTP/1.0:第一个广泛使用的版本,支持MIME ,keep-alive(保持连接),有缓存功能
HTTP/1.1:更多的请求方法,更精细的缓存控制,持久连接
spdy:加速浏览器获取资源速度
HTTP/2.0:整合spdy协议的优势
工作机制:
http请求
http响应
web资源:web resource
静态文件:.html .gif .txt .js .css .mp3
动态文件:.php .jsp .asp
http协议:是一种stateless(无状态)协议,服务器无法持续追踪访问者来源
一次HTTP事务结束后,连接即行断开
加速方式:
并行请求:
持久连接:
HTTP事务时延:
1、DNS解析
2、tcp三次握手
3、资源请求过程
4、tcp四次挥手
一次完整的http请求过程:
1)建立连接:接收请求或拒绝请求
2)接收请求
接收来自于网络的请求报文中对某资源的一起请求过程
3)处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息
元数据:请求报文首部
<method> <URL> <VERSION>
请求的方法
host:www.magedu.com 请求的主机名称
connection:连接方式
4)访问资源:获取请求报文中请求的资源
web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态资源执行后生成的资源,这些资源放置于本地文件系统某路径下,此路径通常称为DocRoot(文档根)
5)构建响应报文
MIME类型:
显示分类
魔法分类
协商分类
URL重定向:
web服务构建的响应并非客户端请求的资源,而是资源的另一个访问路径
6)发送响应报文
7)记录日志
3、I/O
一次I/O调用两个阶段:等待数据完成阶段(数据从磁盘到内核内存,内核完成),等待复制完成阶段(数据从内核内存复制到进程内存,进程完成)
阻塞: 进程发起I/O调用,未完成之前,当前进程会被挂起(睡眠状态“S”)
非阻塞:进程发起I/O调用,被调用函数完成之前不会阻塞当前进程而是立即返回
“调度者如何被处理”
同步:进程发起一个过程调用(功能、函数)调用后,在没得到结果之前,该调用将不会返回
异步:进程发起一个过程调用,即便调用者不能立即得到结果,但调用却会返回,返回时未完成状态,当调用完成后,内核会自行通知调用者已经OK。
“被调度者如何被调度”
内存映射:mmap:
磁盘I/O模型有5种:
同步阻塞:数据I/O两个阶段都阻塞
同步非阻塞:第二个阶段仍然阻塞
I/O复用 select(),poll():第一阶段阻塞在多路IO上,第二阶段阻塞
事件驱动 epoll(),wqueue():第一阶段不阻塞,第二个阶段仍然阻塞
边缘触发:只通知调用者一次
水平触发:多次通知
AIO(异步非阻塞):真正的异步:内核完成2个阶段后再通知调用者,2个阶段都不阻塞
一般网络IO不支持异步,只有文件(磁盘)IO支持异步
并发访问响应模型(网络 I/O)
单进程:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
多进程/线程:prefork(一个进程响应一个请求),worker(一个线程响应一个请求)select()
复用:一个进程响应n个请求;
多线程模型:一个进程生成N个线程,每个线程响应一个用户请求
事件驱动机制:event-driven,单线程响应多个用户请求,epool()
复用的多进程I/O结构:启动多个(m)进程,每个进程响应n个请求
4、http架构
http:C/S
Client:
GUI:IE,Firefox,chrome,Opera,Safari
CLI:elinks,curl
Server:
IIS,httpd,nginx,lighttpd,gws
应用程序服务器:iis,tomcat,jetty,jboss,resin
webshere,weblogic,oc4j