网络协议

两台计算机要实现通讯必须遵守同一个规则,这就好比两个人交流,只会英文和只会中文的因为没有共同的语言(规则)根本就无法沟通,要使两台计算机能够正常通讯,两者必须遵守同样的规则,而这个规则就是就是网络协议。

那么这个规则,也就是计算机通信的网络协议是谁规定的呢,国际上有这么一个组织ISO(国际标准化组织),他定义了网络协议基本框架,叫做OSI模型。两台电脑在进行通讯时,要考虑很多很多的问题,例如A电脑如何找到B电脑,A电脑给B电脑什么类型的数据,A电脑怎么能收到B电脑的反馈等等,这些问题都需要一个标准,为了能够给以上问题分类设置标准,OSI模型进行了层次划分,每一层都有相应的协议去解决相应的问题。七层标准模型,如下:

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层。

TCP/IP协议

What

OSI网络通讯协议模型,是一个参考模型,参考于他的TCP/IP协议才是目前网络上通用的网络通讯协议,接下来先了解一下TCP/IP协议。

通常所说的TCP/IP协议,其实是一个协议集合,这个集合里面包含了网络通讯所需的所有协议,里面不仅有TCP(传输控制协议)、IP(网际协议),还有UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等许多协议,但因为TCP协议和IP协议是保证数据完整传输的两个基本的重要协议,所以该协议集合就被命名为TCP/IP协议了。

TCP/IP协议的制定是参考于OSI模型的,但并没有严格按照OSI规定的七层去划分,而是划分了四层,

应用层

传输层

网络层

网络接口层

OSI和TCP/IP对比图

目前我们已经知道TCP/IP协议分为四个层次,我举个例子简单说明一下各个层的作用,拿寄送邮件举例,A寄邮件给B,A关心的是用什么格式写什么内容给B(应用层内容),是寄挂号信(信件丢失会赔偿)还是寄平信(信件丢失不赔偿)(应用层内容),A是不会关注邮件传送过程中采用了哪条路线,邮递员是如何把信地道B手里的(网络层,网络接口层)。接下来再详细讲一下应用层和传输层。

传输层传输层有多个协议,但最主要的是TCP和UDP协议。两者的区别在与TCP协议需要接收方反馈,传输更可靠,而UDP协议虽然不需要反馈,但传输的速率比较高。,至于具体采用哪种方式,需要具体问题具体分析,在不可靠的网络传送过程中一般选择TCP传送方式,在讲求效率或者不在乎传输失误的情况下可以选择UDP方式来提高传输速率。

应用层应用层协议有很多,每一个协议代表一种类型的服务。

HTTP协议,万维网服务

FTP协议,文件传送服务

POP3协议,邮件服务

HTTP协议

HTTP介绍

HTTP协议,属于应用层,是一种超文本传输协议。

HTTP协议的作用

规定客户端和服务器之间的数据传输格式

让客户端和服务器能有效地进行数据沟通

为什么要选择使用HTTP协议

支持客户/服务器模式。

简单快速。客户向服务器请求服务时,只需传送请求方法和路径,客户端与服务器之间的请求方法常用的有GET、HEAD、POST。另外,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快因为HTTP协议简单,所以HTTP服务器的程序规模小,因而通信速度很快。

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

无连接。限制每次链接只处理一个请求,服务器对客户端的请求做出响应后,马上断开链接,这种方式可以节省传输时间。

无状态。HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

采用HTTP向服务器请求数据常用方式

GET请求。get是获取数据的意思,数据以明文在URL中传递,受限于URL长度,所以传输数据量比较小。比如我在百度上搜索FMDB,那么他相应的url便是https://www.baidu.com/s?ie=UTF-8&wd=FMDB,我要搜索的内容在url是可见的,如果我要搜索的内容过长,便会产生异常,不信的话,你可以将FMDB换成一个比较长的字符看下效果。

POST请求。post是向服务器提交数据的意思,提交的数据以实际内容形式存放到消息头中进行传递,无法在浏览器url中查看到,大小没有限制。在请求URL后面以?的形式跟上发给服务器的参数,多个参数之间用&隔开,比如http://ww.test.com/login?username=123&pwd=234&type=JSON

HEAD请求:请求头信息,并不返回请求数据体,而只返回请求头信息,常用用于在文件下载中取得文件大小、类型等信息。

GET和POST的选择

如果要传递大量数据,比如文件上传,只能用POST请求

GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST

如果仅仅是索取数据(数据查询),建议使用GET

如果是增加、修改、删除数据,建议使用POST