一 忆往昔,尽是悔恨泪.

      在学校的时候学过,网络七层,也知道tcp的三次握手.但因为根本没用在实际开发中,所以逐渐淡忘.现在就再次理解下三个的区别与联系.

二 正题

      网络七层:物数网传会表应.分别为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层.其中,底层三层:物理层,数据链路层,网络层是网络工程师研究的对象,而其它四层,是用户面向和关心的问题.

http协议:超文本传输协议, 对应于应用层.

tcp协议:传输控制协议,对应于传输层.

ip协议:对应于网络层.

       TCP/IP是传输层协议,主要解决数据在网络中的传输.Http是应用层的协议,用于如何封装数据.传输数据的时候,只使用TCP/IP协议(传输层).如果没有应用层来识别数据内容,传输后的协议都是无用的.
       应用层协议很多,FTP,HTTP,TELNET等,可以自己定义应用层协议.WEB使用HTTP作传输层协议.以封装HTTP文本信息,然后使用TCP/IP做传输层协议,将数据发送到网络上.

       Socket是对TCP/IP协议的封装,Socket只是个接口,不是协议,通过Socket,我们才能使用TCP/IP协议.
当然,除了TCP,也可以使用UDP协议来传递数据.

三 HTTP和Socket连接区别

1 TCP连接
       要想明白Socket,必须要理解TCP连接.
        建立TCP连接的"三次握手":
        第一次:客户端向服务器发送SYN包(syn=j),同时自己处于SYN_SEND状态.
        第二次:服务器端收到SYN包后,必须确认客户的SYN(syn=j+1),同时也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态.
        第三次:客户端收到服务器发来的SYN+ACK包,就向服务器发送SYN(syn=k+1),发送完毕后,服务器和客户端都进入ESTABLISHED状态.完成三次握手.
握手过程中,并不传输数据.在握手后,服务器与客户端才开始传输数据,理想状态下,TCP连接一旦建立,在通讯双方中的任何一方主动断开连接之前,TCP连接会一直保持下去.
2 HTTP连接
       HTTP最显著的特点:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接.HTTP是一种短连接.通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求.这样可以保证客户端在服务器端是"上线"状态.

3 socket原理
       Socket连接,至少需要一对套接字,分为clientSocket,serverSocket.连接分为3个步骤:
服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态.
客户端请求:客户端的套接字要描述它要连接的服务器的套接字.提供地址和端口号,然后向服务器套接字提出连接请求.
连接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并建立一个新的线程,把服务器端的套接字的描述发给客户端,一旦客户端确认了此描述,就正式建立连接.而服务器套接字继续处于监听状态,继续接收其他客户端套接字的连接请求.
4 Socket连接与TCP连接
       创建Socket连接的时候,可以指定传输层协议.可以是TCP或者UDP,当用TCP连接,该Socket就是个TCP连接.
5 Socket连接与HTTP连接
       通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通讯双方开始互发数据内容,直到双方断开连接.在实际应用中,由于网络节点过多,在传输过程中,会被节点断开连接.因此要通过轮询高速网络,该节点处于活跃状态.
HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据.

      很多情况下,都是需要服务器端向客户端主动推送数据,保持客户端与服务端的实时同步.若双方是Socket连接,可以由服务器直接向客户端发送数据.若双方是HTTP连接,则服务器需要等客户端发送请求后,才能将数据回传给客户端.因此,客户端定时向服务器端发送请求,不仅可以保持在线,同时也询问服务器是否有新数据,如果有就将数据传给客户端.

TCP/IP,HTTP,Socket的区别与联系的更多相关文章

  1. 【转】TCP/IP和SOCKET的区别

    要写网络程序就必须用Socket,这是程序员都知道的.而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,w ...

  2. Http、TCP/IP、Socket的区别

    网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...

  3. HTTP/TCP/IP UDP Socket等区别联系

    1.TCP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. ...

  4. TCP/IP,Http,Socket的区别

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用 ...

  5. ios开发网络知识 TCP,IP,HTTP,SOCKET区别和联系

    TCP,IP,HTTP,SOCKET区别和联系 网络由下往上分为:        对应 物理层-- 数据链路层-- 网络层--                       IP协议 传输层--     ...

  6. TCP/IP、SOCKET、HTTP之间的联系与区别

    主要内容: 1.网络的七层协议 2.TCP/IP.SOCKET.HTTP简介 3.TCP连接.HTTP连接.Socket连接的区别 一.网络的七层协议 网络七层由下往上分别为物理层.数据链路层.网络层 ...

  7. 网络协议HTTP、TCP/IP、Socket

    网络协议HTTP.TCP/IP.Socket 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.  其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的 ...

  8. Linux内核 TCP/IP、Socket参数调优

    Linux内核 TCP/IP.Socket参数调优 2014-06-06  Harrison....   阅 9611  转 165 转藏到我的图书馆   微信分享:   Doc1: /proc/sy ...

  9. OSI及TCP/IP的概念和区别

    什么是TCP/IP协议 TCP/IP协议(Transfer Controln Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet ...

随机推荐

  1. Python 编程规范-----转载

    Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...

  2. angular factory Services provider 自定义服务 工厂

    转载于 作者:海底苍鹰地址:http://blog.51yip.com/jsjquery/1602.html 1.在app.js 中声明了模块的依赖 var phonecatApp = angular ...

  3. Linux下的”锁“事儿

    原由 之所以写这篇文章当然还是在面试中涉及了对本文标题的相关问题-互斥锁和自旋锁的区别.听到这个问题的时候,我是比较忐忑的.互斥锁我还能简单说一些,但是对于自旋锁的了解几乎为零.为此,将总结Linux ...

  4. Overcome the Dilemma of "unlock" and "trust"

    When examining an Android phone, we have to overcome some barriers first so that we could extract da ...

  5. Unieap3.5-禁用Form表单中的全部标签

    var form=unieap.byId('customerForm'); var children=form.getDescendants(); dojo.forEach(children,func ...

  6. js控制div颜色

    <html><head></head><style>#div1{width:400px;height:400px;background-color:re ...

  7. maven项目使用mybatis-generator自动生成代码

    1.添加mybatis-generator插件,打开pom.xml文件 在project节点下添加: <build> <plugins> <!-- MyBatis代码生成 ...

  8. .NET中的IO操作之文件流

    读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...

  9. C puzzles详解

    题目:http://www.gowrikumar.com/c/ 参考:http://wangcong.org/blog/archives/291 http://www.cppblog.com/smag ...

  10. Dockpanel的控件加载问题

    1. 正确加载模式:panel.ControlContainer.Controls.Add(control); 如果用panel.Controls.Add(control);则可能出现模块发生位移问题 ...