网络传输协议介绍

一.网络传输中为什么需要协议

            在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑

     在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的

     口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太

     大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法

     的用电线把电脑连接到了一起。

            但是简单的连到一起是远远不够的,就好像语言不同的两个人互相见了面,完全不

     能交流信息。因而他们需要定义一些共通的东西来进行交流,TCP/IP就是为此而生。

     TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP

     协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外

     语一样,就可以和其他的计算机终端做自由的交流了。

     摘自:https://www.cnblogs.com/fengzanfeng/articles/1339347.html

       

       下图为上图的补充:

        

       扩展知识点之面向连接的协议和面向非连接的协议:

              面向连接的协议是指通信双方在通信时,要事先建立一条通信线路,其有三个过

              程:建立连接、使用连接和释放连接,如TCP协议;面向非连接是指在正式通信

              前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信

              非常相似:你在发短信的时候,只需要输入对方手机号就OK了,比如UDP协议,

              QQ就是使用UDP协议。

二.HTTP协议

    1.HTTP协议由两部分程序实现:一个客户机程序和一个服务器程序,它们运行在不同

       的端系统中,通过交换HTTP报文进行会话。HTTP定义了这些报文的格式,以及客

       户机和服务器是如何进行报文交换的,即:Web客户机是如何向Web服务器请求Web

       页面,以及服务器如何将Web页面传送给客户机。

    2.Http协议是建立在TCP协议基础之上的。

       当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP

       建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP

       连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。

       所谓的无状态,就是没有记忆能力,是指浏览器每次向服务器发起请求的时候,不是

       通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中

       就能保持住这个连接并且在内存中记住一些信息状态。而每次请求结束后,连接就关

       闭,相关的内容就释放了,所以记不住任何状态,成为无状态连接。假如某个特定的

       客户机在短短的几秒钟内两次请求同一个对象,服务器并不会因为刚刚为该用户提供

       了该对象就不再做出反应,而是重新发送该对象,就像该服务器已经完全忘记不久之

       前所做过的事一样。所以在Java Web编程中引入了Session,用来保持特定客户端状

       态。

       HTTP同时又是无连接的,无连接的含义是限制每次连接只处理一个请求。服务器处

       理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时

       间。早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全

       世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交

       换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散

       性导致两次传送的数据关联性很低,大部分通道实际上会很空闲、无端占用资源。因

       此 HTTP 的设计者。随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图

       片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,HTTP的持

       久连接被提出用来解决这效率低的问题,关于持久连接请看本节4。

    3.HTTP连接同样需要经历三次握手和四次分手

       因为HTTP协议是建立在TCP协议之上的,所以同时需要考虑三次握手和四次分手。

    4.HTTP可以是持久连接也可以是非持久连接,HTTP 1.1起默认是持久连接。

       如果每个请求/响应对,都是经一个 单独的TCP连接 发送,该应用程序被称为使用

       非持久连接;如果所有的请求及相应的响应都经 相同的TCP连接 发送,则该应用

       程序被称为使用持久连接。

       HTTP 1.0中,通过Connection: Keep-alive标识是持久连接。

       HTTP 1.1中,默认就开启持久连接,除非HTTP首部有Connection: Close

       客户端根据这些标识去识别服务器是否支持持久连接。

       为什么要使用持久连接:

              随着时间的推移,html页面变得复杂了,里面可能嵌入了很多图片,这时候每

       次访问图片都需要建立一次tcp连接就显得低效了。因此持久连接被提出用来解决效

       率低的问题。从HTTP/1.1起,默认都开启了持久连接,保持连接特性,简单地说,

       当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关

       闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。

       持久连接不会永久保持连接,它有一个保持时间,可以在不同的服务器软件

     (如Apache)中设定这个时间。虽然这里使用TCP连接保持了一段时间,但是这个时

       间是有限范围的,到了时间点依然是会关闭的,所以我们还把其看做是每次连接完成

       后就会关闭。后来,通过Session, Cookie等相关技术,也能保持一些用户的状态。

       但是还是每次都使用一个连接,依然是无状态连接。

    5.HTTP报文

       HTTP报文:它是HTTP应用程序之间发送的数据块。这些数据块以一些文本形式的

                           元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据

                           部分。这些报文都是在客户端、服务器和代理之间流动。

       HTTP报文的流动方向:一次HTTP请求,HTTP报文会从“客户端”流到“代理”再流到

                                             “服务器”,在服务器工作完成之后,报文又会从“服务器”流

                                             到“代理”再流到“客户端”。

       报文的语法:所有的HTTP报文都可以分为两类,请求报文和响应报文。请求和响

                            应报文的基本报文结构大致是相同的,只有起始行的语法有所不同。

       请求报文:它会向Web服务器请求一个动作

              请求报文的格式:

                      起始行: <method> <request-URL> <version>

                      头部:   <headers>

                      主体:   <entity-body>

       响应报文:它会将请求的结果返回给客户端。

              响应报文的格式:

                      起始行:  <version> <status> <reason-phrase>

                      头部:    <headers>

                      主体:    <entity-body>

       HTTP报文的参数说明:

              * 方式(method):客户端希望服务器对资源执行的动作,是一个单独的词,比

                                          如,GET、POST或HEAD

              * 请求URL(request-URL):要直接与服务器进行对话,只要请求URL是资源的

                                                         绝对路径就可以了,服务器可以假定自己是URL的

                                                         主机/端口。

 

              * 版本(version):报文所使用的HTTP版本。其格式:

                                         HTTP/<主要版本号>.<次要版本号>

              * 状态码(status-code):状态码是三位数字,描述了请求过程中所发生的情况。

                                                    每个状态码的第一位数字都用于描述状态的一般类别

                                                    (比如,“成功”、“出错”等等)。

              * 原因短语(reason-phrase):数字状态码的可读版本,包含行终止序列之前的

                                                            所有文本。原因短语只对人类有意义,因此,尽

                                                            管响应行HTTP/1.0 200 NOT OK和

                                                            HTTP/1.0 200 OK中原因短语的含义不同,但同

                                                            样都会被当作成功指示处理。

              * 头部(header):可以有零个或多个头部,每个首部都包含一个名字,后面跟

                                         着一个冒号(:),然后是一个可选的空格,接着是一个值,最

                                         后是一个CRLF首部是由一个空行(CRLF)结束的,表示了头

                                         部列表的结束和实体主体部分的开始。

              关于HTTP协议的报文还有很多内容,这里就不一一列举了,请看:

              https://www.cnblogs.com/zhuifeng/p/4072248.html

三.Tcp协议

     1.TCP的三次握手和四次分手

      (1)一些概念补充

               Tcp(传输控制协议)层的一些flag字段,SYN、FIN、ACK、PSH、RST、URG。

               它们的含义是:

                      SYN表示建立连接,当SYN=1同时ACK=0的时,表明这是一个连接请求的

                                                       报文段;SYN=1,ACK=1时,时一个响应的报文段。

                      FIN表示关闭连接。

                      ACK表示响应,ACK是确定收到的字段,用来解决丢包的问题当ACK=1的

                                               时候“确认字号”(期望收到对方下一个报文段的第一个数据

                                               字节的编号)才有效。

                      PSH表示有 DATA数据传输。

                      RST表示连接重置。

                其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,

                它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是

                建立连接。TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是

                不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。RST

                一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN

                包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和

                SYN+ACK包时,我们认为客户端与服务器建立了一个连接。PSH为1的情况,

                一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP

                数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完

                成的。

      (2)三次握手   

               为了理解三次握手,首先先了解为什么要三次握手:

                       信道是不可靠的,但是我们要建立可靠的连接发送可靠的数据,也就是数据

                       传输是需要可靠的。在这个时候三次握手是一个理论上的最小值,并不是说

                       是tcp协议要求的,而是为了满足在不可靠的信道上传输可靠的数据所要求

                       的。

                       如果不使用三次握手会怎么样呢?(这种解释不对)

                              第一次:首先A发送一个(SYN)到B,意思是A要和B建立连接进行通信。

                                             如果是只有一次握手的话,这样肯定是不行的,A压根都不知

                                             道B是不是收到了这个请求。    

                              第二次:B收到A要建立连接的请求之后,发送一个确认(SYN+ACK)给

                                             A,意思是收到A的消息了,B这里也是通的,表示可以建立连

                                             接。

                                             如果只有两次通信的话,这时候B不确定A是否收到了确认消

                                             息,有可能这个确认消息由于某些原因丢了,这会导致B误认

                                             为可以建立连接了,白白等待A端往过发消息。

                              第三次:A如果收到了B的确认消息之后,再发出一个确认(ACK)消息,

                                            意思是告诉B,这边是通的,然后A和B就可以建立连接相互通

                                            信了。

               超时重试机制:

                       如果第一个包,A发送给B请求建立连接的报文(SYN)如果丢掉了,A会周期

                       性的超时重传,直到B发出确认(SYN+ACK);

                       如果第二个包,B发送给A的确认报文(SYN+ACK)如果丢掉了,B会周期性的

                       超时重传,直到A发出确认(ACK);

                       如果第三个包,A发送给B的确认报文(ACK)如果丢掉了,

               三次握手的具体步骤:

                      第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据

                                            包到服务器,主机B由SYN=1知道,A要求建立联机。主机A进入

                                            SYN_SEND状态等待服务器确认。

                      第二次握手:主机B收到请求后要确认联机信息,向A发送

                                            ack number=(主机A的seq+1),syn=1,ack=1,随机产生

                                            seq=7654321的包。主机B进入SYN_RECV状态。

                      第三次握手:主机A收到后检查ack number是否正确,即第一次发送的

                                            seq number+1,以及位码ack是否为1,若正确,主机A会再发送

                                            ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值

                                            与ack=1则连接建立成功。完成三次握手,主机A与主机B开始传

                                            送数据。主机A和主机B进入ESTABLISHED状态。

      (3)四次分手

               首先了解一下TCP为什么要四次分手:

                       TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是

                       全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没

                       有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这

                       个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表

                       示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;

                       当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,

                       就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连

                       接。
               四次分手过程:

                      第一次分手:主机1,向主机2发送一个FIN报文段;此时,主机1进入

                                           FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了。

                      第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,

                                            主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关

                                            闭请求;

                      第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入

                                            LAST_ACK状态;

                      第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然

                                            后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,

                                            就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明

                                            Server端已正常关闭,那好,主机1也可以关闭连接了。

     2.HTTP和TCP

        HTTP是一种短连接,每次请求建立连接,请求结束后断开连接;TCP是一种长连接。

四.socket

     1.socket介绍

        socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,

        socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户

        来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。Socket是处

        于传输层的,主要有UDP和TCP两个协议。

     2.socket和HTTP相比较

      (a)Socket传输的特点:

               优点:

               * 传输数据为字节级,传输数据可自定义,数据量小(对于手机应用讲:费用低)

               * 传输数据时间短,性能高

               * 适合于客户端和服务器端之间信息实时交互

               * 可以加密,数据安全性强

               缺点:

               * 需对传输的数据进行解析,转化成应用级的数据

               * 对开发人员的开发水平要求高

               * 相对于Http协议传输,增加了开发量

      (b)HTTP传输的特点

               优点:

               * 基于应用级的接口使用方便

               * 程序员开发水平要求不高,容错性强

               缺点:

              * 传输速度慢,数据包大(Http协议中包含辅助应用信息)

              * 如实时交互,服务器性能压力大。

              * 数据传输安全性差

      (c)各数据传输方式的适用范围

               Socket传输适用范围:

               Socket 传输方式适合于对传输速度,安全性,实时交互,费用等要求高的应用中,

               如网络游戏,手机应用,银行内部交互等

               基于Http协议传输的适用范围:

               基于http协议传输的特点:基于http协议传输方式适合于对传输速度,安全性要求不

               是很高,且需要快速开发的应用。如公司OA系统,互联网服务等。

      (d)socke和http的区别

               HTTP为短连接、socket为长连接,socket可以实现很多协议,但是经常使用的是TCP

               协议。

               很多情况下,都是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时

               同步。若双方是 Socket 连接,可以由服务器直接向客户端发送数据;若双方是HTTP

               连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端。

五.FTP

     文件传输协议,用于上传或下载文件。FTP使用两个并行的TCP连接来传输文件,一个是控

     制连接(control connection),一个是数据连接(data connection)。 控制连接用于在两个

     主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及“put”和“get”文件的命

     令;数据连接用于实际传输一个文件,FTP的控制连接是持久连接,数据连接是非持久连接。

     * FTP服务器必须在整个会话期间保留用户的状态(state)信息。

       FTP服务器必须把特定的用户账户与控制连接联系起来,随着用户在远程目录树上移动,

       服务器必须追踪用户在远程目录树上的当前位置。对每个活动着的用户会话的状态进行追

       踪,可以对FTP会话总数进行限制。 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值