HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工做小组IETF(Internet Engineering Task Force)合做的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天广泛使用的一个版本--HTTP 1.1。为记念Tim Berners-Lee提出HTTP后对互联网发展的贡献,万维网协会保留有他最原始提交的版本。javascript
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可使浏览器更加高效,使网络传输减小。它不只保证计算机正确快速地传输超文本文档,还肯定传输文档中的哪一部分,以及哪部份内容首先显示(如文本先于图形)等。html
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。java
折叠特色web
HTTP协议的主要特色可归纳以下:浏览器
一、支持客户/服务器模式。支持基本认证和安全认证(见后文《安全协议》)。安全
二、 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。服务器
三、灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。网络
四、HTTP 0.9和1.0使用非持续链接:限制每次链接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。ide
HTTP 1.1使用持续链接:没必要为每一个web对象建立一个新的链接,一个链接能够传送多个对象。函数
五、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。
TCP/IP协议
TCP/IP模型也被称做DoD模型(Department of Defense Model)。TCP/IP字面上表明了两个协议:TCP(传输控制协议)和IP(网际协议)。1983年1月1日,在因特网的前身(ARPA网)中,TCP/IP协议取代了旧的网络控制协议(NCP,Network Control Protocol),从而成为今天的互联网的基石。
层次概述
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。
从协议分层模型方面来说,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。
TCP/IP协议并不彻底符合OSI的七层参考模型,OSI(Open System Interconnect)是传统的开放式系统互连参考模型,是一种通讯协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各类硬件在相同的层次上相互通讯。这7层是:物理层、数据链路层(网络接口层)、网络层(网络层)、传输层、会话层、表示层和应用层(应用层)。而TCP/IP通信协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成本身的需求。因为ARPANET的设计者注重的是网络互联,容许通讯子网(网络接口层)采用已有的或是未来有的各类协议,因此这个层次中没有提供专门的协议。实际上,TCP/IP协议能够经过网络接口层链接到任何网络上,例如X.25交换网或IEEE802局域网。
TCP/IP结构对应OSI结构
TCP/IP
OSI
应用层
应用层
表示层
会话层
主机到主机层(TCP)(又称传输层)
传输层
网络层(IP)(又称互联层)
网络层
网络接口层(又称链路层)
数据链路层
物理层
折叠网络接口层
物理层是定义物理介质的各类特性:
一、机械特性;
二、电子特性;
三、功能特性;
四、规程特性。
数据链路层是负责接收IP数据包并经过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。
常见的接口层协议有:
Ethernet 802.三、Token Ring 802.五、X.2五、Frame relay、HDLC、PPP ATM等。
折叠网络层
负责相邻计算机之间的通讯。其功能包括三方面。
1、处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,而后将数据报发往适当的网络接口。
2、处理输入数据报:首先检查其合法性,而后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报还没有到达信宿,则转发该数据报。
3、处理路径、流控、拥塞等问题。
网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)
控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。
IP是网络层的核心,经过路由选择将下一条IP封装后交给接口层。IP数据报是无链接服务。
ICMP是网络层的补充,能够回送报文。用来检测网络是否通畅。
Ping命令就是发送ICMP的echo包,经过回送的echo relay进行网络测试。
ARP是正向地址解析协议,经过已知的IP,寻找对应主机的MAC地址。
RARP是反向地址解析协议,经过MAC地址肯定IP地址。好比无盘工做站还有DHCP服务。
折叠传输层
提供应用程序间的通讯。其功能包括:1、格式化信息流;2、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,而且假如分组丢失,必须从新发送,即耳熟能详的"三次握手"过程,从而提供可靠的数据传输。
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。
折叠应用层
向用户提供一组经常使用的应用程序,好比电子邮件、文件传输访问、远程登陆等。远程登陆TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。
应用层协议主要包括以下几个:FTP、TELNET、DNS、SMTP、RIP、NFS、HTTP。
FTP(File Transfer Protocol)是文件传输协议,通常上传下载用FTP服务,数据端口是20H,控制端口是21H。
Telnet服务是用户远程登陆服务,使用23H端口,使用明码传送,保密性差、简单方便。
DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换。
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转。
RIP (Router Information Protocol)是路由信息协议,用于网络设备之间交换路由信息。
NFS (Network File System)是网络文件系统,用于网络中不一样主机间的文件共享。
HTTP(Hypertext Transfer Protocol)是超文本传输协议,用于实现互联网中的WWW服务。
总结
OSI中的层
功能
TCP/IP协议族
应用层
文件传输,电子邮件,文件服务,虚拟终端
TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
表示层
数据格式化,代码转换,数据加密
没有协议
会话层
解除或创建与别的接点的联系
没有协议
传输层
提供端对端的接口
TCP,UDP
网络层
为数据包选择路由
IP,ICMP,OSPF,EIGRP,IGMP,RIP
数据链路层
传输有地址的帧以及错误检测功能
SLIP,CSLIP,PPP,MTU,ARP,RARP
物理层
以二进制数据形式在物理媒体上传输数据
ISO2110,IEEE802,IEEE802.2
网络层中的协议主要有IP,ICMP,IGMP等,因为它包含了IP协议模块,因此它是全部基于TCP/IP协议网络的核心。在网络层中,IP模块完成大部分功能。ICMP和IGMP以及其余支持IP的协议帮助IP完成特定的任务,如传输差错控制信息以及主机/路由器之间的控制电文等。网络层掌管着网络中主机间的信息传输。
传输层上的主要协议是TCP和UDP。正如网络层控制着主机之间的数据传递,传输层控制着那些将要进入网络层的数据。两个协议就是它管理这些数据的两种方式:TCP是一个基于链接的协议;UDP则是面向无链接服务的管理方式的协议。
TCP/IP模型的主要缺点有:
第一,它在服务、接口与协议的区别上就不是很清楚。一个好的软件工程应该将功能与实现方法区分开来,TCP/IP偏偏没有很好地作到这点,就使得TCP/IP参考模型对于使用新的技术的指导意义是不够的。TCP/IP参考模型不适合于其余非TCP/IP协议簇。
第二,主机-网络层自己并非实际的一层,它定义了网络层与数据链路层的接口。物理层与数据链路层的划分是必要和合理的,一个好的参考模型应该将它们区分开,而TCP/IP参考模型却没有作到这点。
折叠编辑本段数据格式
数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC地址及类型,帧尾是校验字)
IP数据包:IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等)
TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校验字等)
3次握手
开放分类:网络网络通信计算机
3次握手,别称TCP握手协议,是计算机传输协议。
编辑摘要
TCP三次握手及原理
TCP/IP是不少的不一样的协议组成,其实是一个协议组,TCP用户数据报表协议(也称做TCP传输控制协议,Transport Control Protocol。可靠的主机到主机层协议。这里要先强调一下,传输控制协议是OSI网络的第四层的叫法,TCP传输控制协议是TCP/IP传输的6个基本协议的一种。两个TCP意思非相同。 )。TCP是一种可靠的 面向链接的传送服务。它在传送数据时是分段进行的,主机交换数据必须创建一个会话。它用比特流通讯,即数据被做为无结构的字节流。 经过每一个TCP传输的字段指定顺序号,以得到可靠性。是在OSI参考模型中的第四层,TCP是使用IP的网间互联功能而提供可靠的数据传输,IP不停的把报文放到 网络上,而TCP是负责确信报文到达。在协同IP的操做中TCP负责:握手过程、报文管理、流量控制、错误检测和处理(控制),能够根据必定的编号顺序对非正常顺序的报文给予重新排列顺序。关于TCP的RFC文档有RFC79三、RFC79一、RFC1700。
在TCP会话初期,有所谓的“三握手”:对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而肯定的数据确认数及数据发送、接收完毕后什么时候撤消联系,并创建虚链接。为了提供可靠的传送,TCP在发送新的数据以前,以特定的顺序将数据包的序号,并须要这些包传送给目标机以后的确认消息。TCP老是用来发送大批量的数据。当应用程序在收到数据后要作出确认时也要用到TCP。因为TCP须要时刻跟踪,这须要额外开销,使得TCP的格式有些显得复杂。
RFC 1994详细定义了CHAP。
CHAP 用于使用3次握手周期性的验证对端身份。在链路创建初始化时这样作,也能够在链路创建后任什么时候间重复验证。
在链路创建完成后,验证者向对端发送一个“challenge”信息。
对端使用一个“one-way-hash”函数计算出的值响应这个信息。
验证者使用本身计算的hash值校验响应值。若是两个值匹配,则验证是认可得,不然链接应该终止。
在随机时间,验证端发送一个“challenge”给对端,重复1到3步。
TCP采用三次握手协议创建链接的过程
TCP链接的创建采用三次握手协议。三次握手的具体过程是:第一方向另外一方发送链接请求段,另外一方回应对链接请求的确认段,第一方再发送对对方确认段的确认。过程如图。
图中SYN为请求创建链接的标志,三次握手的过程以下:
在T1时刻,A向B发送请求创建链接段序列号为X。
在T2时刻,B发送应答A的X序列号的请求创建链接的段,该应答段的序列号为Y。
在T3时刻,A发送对B的应答段的应答,应答号为Y+1,代表应答号为Y+1的段已接收。
至此,链接创建成功。
window.onclick:
一、最简单的调用方式
直接写到html的body标签里面,如:
<html>
<body onload="func()">
</body>
</html>
二、在JS语句调用
<script type="text/javascript">
function func(){……}
window.onload=func;
</script>
三、同时 调用多个函数
直接写到html的body标签里面,如:
<html>
<body onload="func1();func2();func3();">
</body>
</html>
四、js调用多个函数,如下这种调用方式能够用于不太复杂的JS程序中,若是程序函数不少,逻辑比较复杂,能够考虑用第五种方式。
复制代码
复制代码
<script type="text/javascript">
function func1(){……}
function func2(){……}
function func3(){……}
window.onload=function(){
func1();
func2();
func3();
}
</script>
复制代码
复制代码
五、JS自定义函数式屡次调用
复制代码
复制代码
<script type="text/javascript">
function func1(){……}
function func2(){……}
function func3(){……}
function addLoadEvent(func){
var oldonload=window.onload;
if(typeof window.onload!="function"){
window.onload=func;
}
else{
window.onload=function(){
oldonload();
func();
}
}
}
addLoadEvent(func1);
addLoadEvent(func2);
addLoadEvent(func3);
</script>