前提:本片文章的名字叫做"Android开发中的TCP/IP协议,Socket编程",其实TCP/IP协议是一种网络协议,并不是在Android中才有的,也不只是在java中有,其他的开发语言中同样也可以使用TCP/IP协议进行网络编程。之所以这么说是因为在不久的以前,作者也是一个对于各种协议、什么socket编程、什么http等等完全没有概念,直到现在,我也还是在不断的学习,去尝试慢慢的理解它们。
很多帖子都会介绍一下网络编程的发展史。。但是我感觉对我来说并没有什么卵用,我只关心这玩意儿怎么用,所以我们跳过介绍的部分直接讲重点。
首先你得大概知道网络是分层的,细分可分为7层,分别为:
物理层-->数据链路层-->网络层-->传输层-->会话层-->表示层-->应用层,还可以分为:
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接,这三次握手大概记一下,面试的时候可以装下逼。
第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
说完TCP/IP协议就来说一下Socket。首先我们从字面上理解“协议”两个字,可以把它当成是某种规定,就你进入公司,公司会有很多规章制度,但是如果光有这些所有的规章制度是完全起不到作用的,公司必须把这些制定成劳动合同或者员工手册才能够正真的生效。TCP/IP协议就好比公司的规章制度,而Socket就相当于劳动合同,是履行这些规章制度的基本单元。
Socket是对协议的一种抽象,是使用协议的最小单元,我们可以直接New出Socket对象进行操作,但是却无法New出TCP/IP协议直接操作吧?Socket是对TCP/IP协议的一种封装,当然,Socket还可以指定其他的协议,例如UDP协议或者其他协议。Socket的实际操作我就不演示了,百度上一搜,使用很简单。
再来说一下HTTP协议,接口大家都用过吧?例如:http://192.168.1.233:8080/login?username=wo&password=123,url地址熟悉吧?我们用的最多的就是这玩意儿吧,拿着url带上参数往服务器一传,服务器会返回我们一个响应。这其中使用的就是http协议啊,像什么okhttp,volley都是封装了这玩意儿啊。上面不是说了TCP/IP协议嘛,这HTTP协议就是基于TCP/IP封装的一种协议,他有一个很明显的特点:就是与服务器建立连接后,你请求服务器,服务器会给你响应,基于这个特性,我们对于这个协议使用很多。
然后还说一下UDP协议和TCP协议的差别吧,他们都是基于IP协议的,TCP协议就相当于打电话,你给你朋友打电话,你朋友必须接了电话你们才能聊天,TCP协议就是这样,服务器和客户端要连接起来,所以可信度是比较高的。然后UDP呢,相当于发短信,你给你朋友发短信,只管发就行了,至于他收的到收不到你不用管,等到他什么时候看到了自然会给你回,UDP协议就是这样,所以可信度是比较低的。
然后,Socket和HTTP的关系,说实话这个我自己也有点蒙蔽,按道理HTTP是基于TCP/IP协议的一种协议,Socket是使用TCP/IP协议的最小单元,那Socket和HTTP协议又有啥关系呢?网上有很多说话,我感觉HTTP是把Socket也包装进去了,CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。大家自行理解。。。
说了这么多,读者应该对socket,tcp/ip,http有了一个简单的理解,不要慌张和蒙蔽,在不同的项目中,会根据不同协议的特点(比如http,请求就比较稳定可靠,但是要消耗更多资源),来使用合适的协议和方法,在项目中学习去理解就会很快掌握,总结一下:
1.TCP/IP协议是一种协议!请好好理解协议这2个字的意思。
2.Socket是操作TCP/IP协议的最小单元。
3.HTTP是基于TCP/IP协议的且包含了Socket使用的一种协议,平时大家写的接口使用的就是这个协议。
很多帖子都会介绍一下网络编程的发展史。。但是我感觉对我来说并没有什么卵用,我只关心这玩意儿怎么用,所以我们跳过介绍的部分直接讲重点。
首先你得大概知道网络是分层的,细分可分为7层,分别为:
物理层-->数据链路层-->网络层-->传输层-->会话层-->表示层-->应用层,还可以分为:
物理+数据链路(物理层,数据链路层)-->网络层-->传输层-->应用层(会话层,表示层,应用层)
在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接,这三次握手大概记一下,面试的时候可以装下逼。
第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认
第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
说完TCP/IP协议就来说一下Socket。首先我们从字面上理解“协议”两个字,可以把它当成是某种规定,就你进入公司,公司会有很多规章制度,但是如果光有这些所有的规章制度是完全起不到作用的,公司必须把这些制定成劳动合同或者员工手册才能够正真的生效。TCP/IP协议就好比公司的规章制度,而Socket就相当于劳动合同,是履行这些规章制度的基本单元。
Socket是对协议的一种抽象,是使用协议的最小单元,我们可以直接New出Socket对象进行操作,但是却无法New出TCP/IP协议直接操作吧?Socket是对TCP/IP协议的一种封装,当然,Socket还可以指定其他的协议,例如UDP协议或者其他协议。Socket的实际操作我就不演示了,百度上一搜,使用很简单。
再来说一下HTTP协议,接口大家都用过吧?例如:http://192.168.1.233:8080/login?username=wo&password=123,url地址熟悉吧?我们用的最多的就是这玩意儿吧,拿着url带上参数往服务器一传,服务器会返回我们一个响应。这其中使用的就是http协议啊,像什么okhttp,volley都是封装了这玩意儿啊。上面不是说了TCP/IP协议嘛,这HTTP协议就是基于TCP/IP封装的一种协议,他有一个很明显的特点:就是与服务器建立连接后,你请求服务器,服务器会给你响应,基于这个特性,我们对于这个协议使用很多。
然后还说一下UDP协议和TCP协议的差别吧,他们都是基于IP协议的,TCP协议就相当于打电话,你给你朋友打电话,你朋友必须接了电话你们才能聊天,TCP协议就是这样,服务器和客户端要连接起来,所以可信度是比较高的。然后UDP呢,相当于发短信,你给你朋友发短信,只管发就行了,至于他收的到收不到你不用管,等到他什么时候看到了自然会给你回,UDP协议就是这样,所以可信度是比较低的。
然后,Socket和HTTP的关系,说实话这个我自己也有点蒙蔽,按道理HTTP是基于TCP/IP协议的一种协议,Socket是使用TCP/IP协议的最小单元,那Socket和HTTP协议又有啥关系呢?网上有很多说话,我感觉HTTP是把Socket也包装进去了,CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。大家自行理解。。。
说了这么多,读者应该对socket,tcp/ip,http有了一个简单的理解,不要慌张和蒙蔽,在不同的项目中,会根据不同协议的特点(比如http,请求就比较稳定可靠,但是要消耗更多资源),来使用合适的协议和方法,在项目中学习去理解就会很快掌握,总结一下:
1.TCP/IP协议是一种协议!请好好理解协议这2个字的意思。
2.Socket是操作TCP/IP协议的最小单元。
3.HTTP是基于TCP/IP协议的且包含了Socket使用的一种协议,平时大家写的接口使用的就是这个协议。