首页 > 代码库 > 6.22随笔

6.22随笔

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后对互联网发展的贡献,万维网协会保留有他最原始提交的版本。

 

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

 

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

 

折叠特点

 

HTTP协议的主要特点可概括如下:

 

1、支持客户/服务器模式。支持基本认证和安全认证(见后文《安全协议》)。

 

 

2、 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

 

3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

 

4、HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

 

HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象。

 

5、无状态: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)(又称互联层)

网络层

网络接口层(又称链路层)

数据链路层

物理层

折叠网络接口层

 

物理层是定义物理介质的各种特性:

 

1、机械特性;

 

2、电子特性;

 

3、功能特性;

 

4、规程特性。

 

数据链路层是负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。

 

常见的接口层协议有:

 

Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等。

 

折叠网络层

 

负责相邻计算机之间的通信。其功能包括三方面。

 

一、处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。

 

二、处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。

 

三、处理路径、流控、拥塞等问题。

 

网络层包括: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服务。

 

折叠传输层

 

提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的"三次握手"过程,从而提供可靠的数据传输。

 

传输层协议主要是:传输控制协议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文档有RFC793、RFC791、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:

 

1、最简单的调用方式 

直接写到html的body标签里面,如:

 

<html> 

  <body onl oad="func()"> 

  </body> 

</html> 

2、在JS语句调用

 

<script type="text/javascript"> 

  function func(){……} 

  window.onload=func; 

</script> 

3、同时 调用多个函数 

直接写到html的body标签里面,如:

 

<html> 

  <body onl oad="func1();func2();func3();"> 

  </body> 

</html> 

4、js调用多个函数,以下这种调用方式可以用于不太复杂的JS程序中,如果程序函数很多,逻辑比较复杂,可以考虑用第五种方式。

 

复制代码

复制代码

<script type="text/javascript"> 

  function func1(){……} 

  function func2(){……} 

  function func3(){……} 

  window.onload=function(){ 

    func1(); 

    func2(); 

    func3(); 

  } 

</script> 

复制代码

复制代码

5、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>

6.22随笔