网络协议
两台计算机要实现通讯必须遵守同一个规则,这就好比两个人交流,只会英文和只会中文的因为没有共同的语言(规则)根本就无法沟通,要使两台计算机能够正常通讯,两者必须遵守同样的规则,而这个规则就是就是网络协议。
那么这个规则,也就是计算机通信的网络协议是谁规定的呢,国际上有这么一个组织ISO(国际标准化组织),他定义了网络协议基本框架,叫做OSI模型。两台电脑在进行通讯时,要考虑很多很多的问题,例如A电脑如何找到B电脑,A电脑给B电脑什么类型的数据,A电脑怎么能收到B电脑的反馈等等,这些问题都需要一个标准,为了能够给以上问题分类设置标准,OSI模型进行了层次划分,每一层都有相应的协议去解决相应的问题。七层标准模型,如下:
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层。
Socket
如果想要使传输的数据有意义,则必须使用到应用层协议。
应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。
WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
通过Socket,我们才能使用TCP/IP协议。
实际上,Socket跟TCP/IP协议没有必然的联系。
Socket编程接口在设计的时候,就希望也能适应其他的网络协议。
所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,
从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:
“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。
这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,
TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”
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规定的七层去划分,而是划分了四层:
应用层
传输层
网络层
网络接口层
目前我们已经知道TCP/IP协议分为四个层次,我举个例子简单说明一下各个层的作用,拿寄送邮件举例,A寄邮件给B,A关心的是用什么格式写什么内容给B(应用层内容),是寄挂号信(信件丢失会赔偿)还是寄平信(信件丢失不赔偿)(应用层内容),A是不会关注邮件传送过程中采用了哪条路线,邮递员是如何把信地道B手里的(网络层,网络接口层)。接下来再详细讲一下应用层和传输层。
传输层 传输层有多个协议,但最主要的是TCP和UDP协议。两者的区别在与TCP协议需要接收方反馈,传输更可靠,而UDP协议虽然不需要反馈,但传输的速率比较高。
,至于具体采用哪种方式,需要具体问题具体分析,在不可靠的网络传送过程中一般选择TCP传送方式,在讲求效率或者不在乎传输失误的情况下可以选择UDP方式来提高传输速率。
应用层 应用层协议有很多,每一个协议代表一种类型的服务。HTTP协议,万维网服务
FTP协议,文件传送服务
POP3协议,邮件服务
HTTP协议
HTTP介绍
HTTP协议,属于应用层,是一种超文本传输协议。
HTTP协议的作用
规定客户端和服务器之间的数据传输格式
让客户端和服务器能有效地进行数据沟通
为什么要选择使用HTTP协议:
1.支持客户/服务器模式。
2.简单快速。客户向服务器请求服务时,只需传送请求方法和路径,客户端与服务器之间的请求方法常用的有GET、HEAD、POST。另外,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快因为HTTP协议简单,所以HTTP服务器的程序规模小,因而通信速度很快。
3.灵活。HTTP允许传输任意类型的数据,正在传输的类型由Content-Type加以标记。
4.无连接。限制每次链接只处理一个请求,服务器对客户端的请求做出响应后,马上断开链接,这种方式可以节省传输时间。
5.无状态。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
3.GET和POST的选择
如果要传递大量数据,比如文件上传,只能用POST请求
GET的安全性比POST要差些,如果包含机密\敏感信息,建议用POST
如果仅仅是索取数据(数据查询),建议使用GET
如果是增加、修改、删除数据,建议使用POST