全面了解TCP/IP到HTTP

1、OSI参考模型

OSI(Open System Interconnect),即开放式系统互联。通常都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),即ISO开放系统互连参考模型。在这一框架下进一步详细规定了每一层的功能,以实现开放系统环境中的互连性、互操做性和应用的可移植性。html

2、TCP/IP四层协议系统

TCP/IP是一组不一样层次上的多个协议的组合,一般被认为是一个四层协议系统。前端

  • 链路层,有时也称做数据链路层或网络接口层,一般包括操做系统中的设备驱动程序和计算机中对应的网络接口卡。它们一块儿处理与电缆(或其余任何传输媒介)的物理接口细节。
  • 网络层,有时也称做互联网层,处理分组在网络中的活动,例如分组的选路。在TCP/IP协议族中,网络层协议包括IP网际协议,ICMP互联网控制报文协议,以及IGMP组管理协议。
  • 传输层,主要为两台主机上的应用程序提供端到端的通讯。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通讯。它所作的工做包括把应用程序交给它的数据分 成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。因为传输层提供了高可靠性的端到端的通讯,所以应用层能够忽略全部这些细节。而另外一方面,UDP则为应用层提供一种很是简单的服务。它只是把称做数据报的分组从一台主机发送到另外一台主机,但并不保证该数据报能到达另外一端。任何须需的可靠性必须由应用层来提供。这两种运输层协议分别在不一样的应用程序中有不一样的用途。
  • 应用层负责处理特定的应用程序细节。几乎各类不一样的TCP/IP实现都会提供这些通用的应用程序:Telnet远程登陆、FTP文件传输协议、SMTP简单邮件传送协议、SNMP简单网络管理协议。

咱们须要知道TCP在不可靠的IP层上提供了一个可靠的运输层,这样就不会在后面介绍IP协议的时候出现模糊,TCP采用了超时重传、发送和接收端到端的确认分组等机制。数据库

链路层

链路层协议是Internet协议族中的最底层协议。在TCP/IP协议中,链路层主要有三个做用:(1)发送和接收IP数据报(2)发送APR请求和接收APR应答(3)发送RAPR请求和接收RAPR应答。在这里咱们还须要知道以太网和802封装,以太网是指数字设备公司在1 9 8 2年联合公布的一个标准也是当今 T C P / I P采用的主要的局域网技术,802标准指的是IEEE(电子电气工程师协会)802委员会公布的一个稍有不一样的标准集,802.3标准定义了帧和以太网的帧都有最小长度要求。浏览器

  1. 串行线路IP(SLIP)

这是一种在串行线路上对IP数据报进行封装的一种形式,这个协议定义了固定的数据帧格式,规定IP数据报以一个称做END(0XC0)的特殊字符结束,为了防止线路噪声也被当成数据报内容,因此通常在数据报开始的时候也传入一个END字符;若是IP报文中的某个字符为END那么须要连续传输两个字符0xdb和0xdc来取代它,0xdb这个字符被称做SLIP的ESC字符。SLIP是一种简单的封装,它有一些缺陷:每一端必须知道对方的IP地址;一条串行线路若是使用了SLIP协议那么它将不能同时使用其余协议;并且SLIP没用在数据帧加上检验,因此说报文因受到影响而发生错误只能经过上层协议来发现。在目前SLIP是一种普遍使用的协议。因为串行线路的速率较低,而且SLIP在性能上也有一些缺陷,后期提出了一个CSLIP(压缩SLIP)新协议参考RFC 1144安全

  1. 点对点协议PPP

点对点协议修改了SLIP中的缺陷,PPP既支持数据为 8位和无奇偶检验的异步模式 (如大多数计算机上都广泛存在的串行接口),还支持面向比特的同步连接;它容许通讯双方进行协商,以肯定不一样的选项;容许双方商定是否对报文首部进行压缩。PPP协议要比SLIP协议有更多的优势,可是目前SLIP的用户仍然要多于PPP用户。服务器

  1. 环回接口

环回接口用来容许运行在同一台主机上的客户程序和服务器程序经过TCP/IP进行通讯,A类网络号127就是为环回接口预留的。根据惯例,大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口的IP数据报不能在任何网络上出现。传给环回地址(通常是127.0.0.1)的任何数据均做为IP输入网络

  1. 最大传输单元MTU

咱们知道以太网对数据帧的长度都有一个限制,链路层的这个特性被称为MTU,不一样类型的网络都有一个上限,若是IP层有一个数据报要传,并且数据的长度比链路层的MTU还大,那么IP层就须要进行分片,把数据报分红若干片,这样每一片都小于MTU。当在同一个网络上的两台主机互相进行通讯时,该网络的MTU是很是重要的。可是若是两台主机之间的通讯要经过多个网络,那么每一个网络的链路层就可能有不一样的MTU。重要的不是两台主机所在网络的MTU的值,重要的是两台通讯主机路径中的最小MTU。它被称做路径MTU,它取决于所选择的路由。框架


IP网际协议

IP是网络层上的主要协议,同时被TCP和UDP使用。TCP和UDP的每组数据都经过端系统和每一个中间路由器中的IP层在互联网中进行传输。IP协议是TCP/IP协议族中最核心的协议。它是一个不可靠的、无链接的协议,TCP、UDP、ICMP以及ICGP都以IP数据报格式传输。不可靠的意思是IP仅仅提供最好的传输服务,不能保证数据报能成功到达目的地。无链接的意思是并不维护任何关于后续数据报的状态信息,每一个数据报的处理都是相互独立的,能够不按发送顺序接收。这里我主要解释下IP首部各个字段,这也是一个前端须要了解的。异步

  1. IP首部

普通的IP首部长为20个字节(不含选项字段)性能

首部最高位在左边,记为0bit;最低位在右边,记为31bit。4个字节的32bit值的传输:首先是 0~7 bit,其次8~15bit,而后16~23bit,最后是24~31bit。这种传输次序称做网络字节序,TCP/IP首部中全部的二进制整数在网络中传输时都要求以这种次序,以其余形式存储二进制整数的机器,必须在传输数据以前把首部转换成网络字节序。目前的协议版本号是4,这也就是咱们常说的IPv4。IP数据报的长度称为总长度字段,利用首部长度字段和总长度字段,就能够知道IP数据报中数据内容的起始位置和长度,通常主机主机要求不能接收超过576字节的数据报,这个限制不会影响到TCP,由于它会把用户数据分片,总长度字段是IP首部中必要的内容。标识字段惟一地标识主机发送的每一份数据报。一般每发送一份报文它的值就会加1。TTL生存时间字段设置了数据报能够通过的最多路由器数,初始值由源主机设定,每通过一个处理的路由器它就会减1,该字段为0时数据报就被丢弃。每一份IP数据报都包含源IP地址和目标IP地址。最后一个字段是任选项,是数据报中的一个可选信息并且长度可变,包括时间戳、宽松的源站选路等等。

  1. 子网寻址和子网掩码

目前全部的主机都支持子网编址,不是把IP地址当作由单纯的一个网络号和一个主机号组成,而是把主机号再分红一个子网号和一个主机号。除了IP地址之外,主机还须要知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程当中经过子网掩码来肯定的,这个掩码是一个32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号,给定IP地址和子网掩码之后,主机就能够肯定IP数据报的目标地址,根据子网掩码可知道子网号与主机号之间的分界线。

ICMP控制报文协议

ICMP常常被认为是IP层的一个组成部分。它传递差错报文以及其余须要注意的信息。 ICMP报文一般被IP层或更高层协议(TCP或UDP)使用。全部报文的前4个字节都是同样的,可是剩下的其余字节则互不相同,ICMP报文格式(见图ICMP报文3-1)。不的类型由报文中的类型字段和代码字段来共同决定。ICMP报文须要区分时候查询报文仍是差错报文,并且有时差错报文须要作特殊处理。

IGMP组管理协议

IGMP组管理协议主要用于用于支持主机和路由器进行多播。IGMP也被看成IP层的一部分,IGMP报文经过IP数据报进行传输,有固定的报文长度,没有可选数据(图IGMP报文字段)。多播路由器使IGMP报文来记录与该路由器相连网络中组成员的变化状况。


UDP用户数据报协议

UDP是一个简单的面向数据报的传输层协议,进程的每一个输出操做都正好产生一个 UDP数据报,并组装成一份待发送的IP数据报。UDP不提供可靠性,它把应用程序传给 IP层的数据发送出去,可是并不保证它们能到达目的地。

  1. UDP首部

端口号表示发送进程和接收进程,UDP长度字段指的是UDP首部和UDP数据的字节长度,UDP检验和(可选的)覆盖UDP首部和UDP数据,如图所示:

  1. UDP数据报最大长度

去除20字节的IP首部和8个字节的UDP首部,UDP数据报中用户数据的最长长度为 65507字节。可是,大多数实现所提供的长度比这个最大值小。

TCP传输控制协议

TCP提供一种面向链接的、可靠的字节流服务。面向链接意味着两个应用在彼此交换数据以前必须先创建一个TCP链接。TCP为应用层提供全双工服务。

TCP经过下列方式来提供可靠性:应用数据被分割成TCP认为最适合发送的数据块;当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段;当TCP收到发自TCP链接另外一端的数据,它将发送一个确认,这个确认会有一点延迟;TCP将保持它首部和数据的检验和;TCP将对收到的数据进行从新排序,将收到的数据以正确的顺序交给应用层;TCP还能提供流量控制。

  1. TCP首部

TCP数据被封装在一个IP数据报中(如图TCP1-1所示)

TCP首部(如图TCP1-2所示),若是不计任选字段一般是20个字节。每一个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址惟一肯定一个TCP链接。32位序号用来标识从TCP发送端向TCP接收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。在TCP首部中有6个标志比特:URG(紧急指针有效) ACK(确认序号有效) PSH(接收方应该尽快将这个报文段交给应用层) RST(重建链接) SYN(同步序号用来发起一个链接) FIN(发端完成发送任务)

检验和覆盖了整个的TCP报文段:TCP首部和TCP数据。这是一个强制性的字段,必定是由发送端计算和存储,并由接收端进行验证。只有当URG标志置1时紧急指针才有效。

最多见的可选字段是最长报文大小,每一个链接方一般都在通讯的第一个报文段中指明这个选项。TCP报文段中的数据部分是可选的,一个链接创建和一个链接终止时,双方交换的报文段仅有TCP首部。

  1. TCP的三次握手与四次挥手

当创建一个TCP链接的时候,经过三个报文段来完成链接的创建,这个过程称为三次握手。(见图TCP2-1)

(1)请求端(一般称为客户端)发送一个SYN段指明客户打算链接的服务器的端口,以及初始序号。

(2)服务器发回包含服务器的初始序号的SYN报文段做为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。

(3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认

因为TCP的半关闭,终止一个链接要通过4次握手也就是咱们常说的四次挥手。当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向链接。当一端收到一个 FIN,它必须通知应用层另外一端几经终止了那个方向的数据传送。发送FIN一般是应用层进行关闭的结果。当客户端关闭链接时将会发送一个FIN,用来关闭从客户到服务器的数据传送当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加 1,同时TCP服务器还向应用程序传送一个文件结束符,接着这个服务器程序就关闭它的链接,致使它的TCP端发送一个FIN,客户必须发回一个确认,并将确认序号设置为收到序号加1(见图TCP2-2)

  1. TCP的超时与重传

TCP提供可靠的运输层。它使用的方法之一就是确认从另外一端收到的数据。但数据和确认都有可能会丢失。TCP经过在发送时设置一个定时器来解决这种问题。若是当定时器溢出时尚未收到确认,它就重传该数据。

对每一个链接,TCP管理4个不一样的定时器:(1)重传定时器使用于当但愿收到另外一端的确认。(2)persist定时器使窗口大小信息保持不断流动,即便另外一端关闭了其接收窗口。(3)keeplive定时器可检测到一个空闲链接的另外一端什么时候崩溃或重启。(4)2MSL定时器测量一个链接处于TIME_WAIT状态的时间。

3、互联网的地址及域名

互联网上的每一个接口必须有一个惟一的Internet地址(也称做IP地址)。IP地址长32 bit。Internet地址并不采用平面形式的地址空间,如一、二、3等。IP地址具备必定的结构,五类不一样的互联网地址格式以下图所示。

尽管经过IP地址能够识别主机上的网络接口,进而访问主机,可是人们最喜欢使用的仍是主机名。在TCP/IP领域中,域名系统(DNS)是一个分布的数据库,由它来提供IP地址和主机名之间的映射信息。

4、HTTP超文本传输协议

HTTP(超文本传输协议)是利用TCP在两台电脑(一般是Web服务器和客户端)之间传输信息的协议,是一种无状态的协议,使用URI(统一资源标识符)定位互联网上的资源。在两台计算机之间使用HTTP协议通讯时,在一条通讯线路上一定有一端是客户端,另外一端则是服务器端。HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,确定是先从客户端开始创建通讯的,服务器端在没有接收到请求以前不会发送响应。

HTTP/1.1中的方法

  1. GET方法:获取资源

来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,若是请求的资源是文本,那就保持原样返回;若是是像CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回通过执行后的输出结果。

  1. POST方法:传输实体主体

用来传输实体的主体,虽然用GET方法也能够传输实体的主体,但通常不用GET方法进行传输,而是用POST方法。虽然说POST的功能与GET很类似,但POST的主要目的并非获取响应的主体内容。

  1. PUT方法:传输文件

用来传输文件。就像FTP协议的文件上传同样,要求在请求报文的主体中包含文件内容,而后保存到请求URI指定的位置。存在安全性问题,所以通常的Web网站不使用该方法。

  1. HEAD方法:得到报文首部

HEAD方法和GET方法同样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。

  1. DELETE方法:删除文件

用来删除文件,是与PUT相反的方法。DELETE方法按请求URI删除指定的资源。一样存在安全性问题,所以通常的Web网站不使用该方法。

  1. OPTIONS方法:询问支持的方法

用来查询针对请求 URI 指定的资源支持。

  1. TRACE方法:追踪路径

让Web服务器端将以前的请求通讯环回给客户端。

  1. CONNECT方法:要求用隧道协议链接代理

要求在与代理服务器通讯时创建隧道,实现用隧道协议进行TCP通讯。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通讯内容加密后经网络隧道传输。


Cookie

HTTP是无状态协议,它不对以前发生过的请求和响应的状态,保留无状态协议这个特征的同时又要解决相似的矛盾问题,因而引入了Cookie技术。Cookie技术经过在请求和响应报文中写入Cookie信息来控制客户端的状态。它会根据从服务器端发送的响应报文内的一个叫作Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查到底是从哪个客户端发来的链接请求,而后对比服务器上的记录,最后获得以前的状态信息。

HTTP状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户能够知道服务器端是正常处理了请求,仍是出现了错误。

状态码 类别 缘由
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 须要进行附加操做以完成请求
4XX Client Error(客户端错误状态码) 服务器没法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

HTTP首部字段

HTTP首部字段是构成HTTP报文的要素之一。在客户端与服务器之间以HTTP协议进行通讯的过程当中,不管是请求仍是响应都会使用首部字段,它给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。

HTTP首部字段是由首部字段名和字段值构成的,中间用冒号“:”分隔。HTTP首部字段根据实际用途被分为如下 4 种类型:

  1. 通用首部字段(General Header Fields)

请求报文和响应报文两方都会使用的首部。

  1. 请求首部字段(Request Header Fields)

从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。

  1. 响应首部字段(Response Header Fields)

从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。

  1. 实体首部字段(Entity Header Fields)

针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。


HTTP通用首部字段


HTTP请求首部字段


HTTP响应首部字段


HTTP实体首部字段

HTTP报文结构

用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫作请求报文,响应端(服务器端)的叫作响应报文。HTTP报文自己是由多行数据构成的字符串文本,大体可分为报文首部和报文主体两块。

本文大体介绍了TCP/IP与HTTP,给前端开发人员了解,若有兴趣可参考专业书籍进行深刻探索,有兴趣的还能够看看TCP服务器设计以及T/TCP还有HTTPS,同时欢迎各位指正、交流!

相关文章
相关标签/搜索