java网络编程(1)网络体系结构及通信协议我知道IP协议相应于网络层。TCP协议相应于传输层。而HTTP协议相应于应用层,

三者从本质上来说没有可比性

  • TPC/IP协议是传输层协议,主要解决数据怎样在网络中传输。
  • 而HTTP是应用层协议,主要解决怎样包装数据。
  • socket是对TCP/IP协议的封装和应用(程序猿层面上)。

三者关系

总的来说

  • 传输层的TCP是基于网络层的IP协议的
  • 应用层的HTTP协议又是基于传输层的TCP协议的
  • Socket本身不算是协议,它仅仅是提供了一个针对TCP或者UDP编程的接口

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等等。

TCP/IP和HTTP协议的关系

  • 我们在数据传输时。能够仅仅使用(传输层)TCP/IP协议。可是那样的话,假设没有应用层。便无法识别数据内容。

  • 假设想要使传输的数据有意义,则必须使用到应用层协议。
  • 应用层协议有非常多。比方HTTP、FTP、TELNET等。也能够自定义应用层协议。
  • WEB使用HTTP协议作应用层协议。以封装HTTP文本信息。然后使用TCP/IP做传输层协议将它发到网络上。

socket和TCP/IP协议关系

  • TCP/IP仅仅是一个协议栈,就像操作系统的执行机制一样,必需要详细实现,同一时候还要提供对外的操作接口。
  • 这个就像操作系统会提供标准的编程接口,比方win32编程接口一样。
  • TCP/IP也要提供可供程序猿做网络开发所用的接口,这就是Socket编程接口。”

CSDN上有个比較形象的描写叙述:HTTP是轿车,提供了封装或者显示数据的详细形式;Socket是发动机,提供了网络通信的能力。

想要了解很多其它TCP/IP协议的相关知识找度娘。

知识点具体解释

TCP连接

要想明确Socket连接。先要明确TCP连接。手机能够使用联网功能是由于手机底层实现了TCP/IP协议,能够使手机终端通过无线网络建立TCP连接。TCP协议能够对上层网络提供接口。使上层网络数据的传输建立在“无区别”的网络之上。

建立起一个TCP连接须要经过“三次握手”:

  1. 第一次握手:client发送syn包(syn=j)到server,并进入SYN_SEND状态,等待server确认;
  2. 第二次握手:server收到syn包,必须确认客户的SYN(ack=j+1),同一时候自己也发送一个SYN包(syn=k),即SYN+ACK包。此时server进入SYN_RECV状态。
  3. 第三次握手:client收到server的SYN+ACK包,向server发送确认包ACK(ack=k+1),此包发送完毕。client和server进入ESTABLISHED状态,完毕三次握手。

握手过程中传送的包里不包括数据,三次握手完成后,client与server才正式開始传送数据。

理想状态下,TCP连接一旦建立,在通信两方中的不论什么一方主动关闭连接之前,TCP 连接都将被一直保持下去。

断开连接时server和client均能够主动发起断开TCP连接的请求,断开过程须要经过“四次握手”,server和client交互,终于确定断开

HTTP连接

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网经常使用的协议之中的一个。HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是client发送的每次请求都须要server回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

  1. 在HTTP 1.0中,client的每次请求都要求建立一次单独的连接。在处理完本次请求后,就自己主动释放连接。

  2. 在HTTP 1.1中则能够在一次连接中处理多个请求。而且多个请求能够重叠进行,不须要等待一个请求结束后再发送下一个请求。

因为HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”。要保持client程序的在线状态,须要不断地向server发起连接请求。通常的做法是即时不须要获得不论什么数据,client也保持每隔一段固定的时间向server发送一次“保持连接”的请求,server在收到该请求后对client进行回复。表明知道client“在线”。若server长时间无法收到client的请求,则觉得client“下线”,若client长时间无法收到server的回复,则觉得网络已经断开。

SOCKET原理

套接字(socket)概念

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。

它是网络通信过程中端点的抽象表示,包括进行网络通信必须的五种信息:

  1. 连接使用的协议
  2. 本地主机的IP地址
  3. 本地进程的协议port
  4. 远地主机的IP地址
  5. 远地进程的协议port。

应用层通过传输层进行数据通信时。TCP会遇到同一时候为多个应用程序进程提供并发服务的问题。

多个TCP连接或多个应用程序进程可能须要通过同一个 TCP协议port数据传输。

为了差别不同的应用程序进程和连接,很多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。

应用层能够和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信。实现传输数据的并发服务。

建立socket连接

建立Socket连接至少须要一对套接字。当中一个执行于client,称为ClientSocket ,还有一个执行于server端。称为ServerSocket 。

套接字之间的连接过程分为三个步骤:

  1. server监听:server端套接字并不定位详细的client套接字。而是处于等待连接的状态。实时监控网络状态。等待client的连接请求。
  2. client请求:指client的套接字提出连接请求,要连接的目标是server端的套接字。

    为此,client的套接字必须首先描写叙述它要连接的server的套接字。指出server端套接字的地址和port号,然后就向server端套接字提出连接请求。

  3. 连接确认:当server端套接字监听到或者说接收到client套接字的连接请求时,就响应client套接字的请求,建立一个新的线程,把server端套接字的描写叙述发给client。一旦client确认了此描写叙述,两方就正式建立连接。

    而server端套接字继续处于监听状态,继续接收其它client套接字的连接请求。

SOCKET连接与TCP连接

创建Socket连接时,能够指定使用的传输层协议,Socket能够支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

Socket连接与HTTP连接

因为通常情况下Socket连接就是TCP连接。因此Socket连接一旦建立。通信两方就可以開始相互发送数据内容,直到两方连接断开。

但在实际网络应用中,client到server之间的通信往往须要穿越多个中间节点,比如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连。因此须要通过轮询告诉网络,该连接处于活跃状态。

而HTTP连接使用的是“请求—响应”的方式。不仅在请求时须要先建立连接,并且须要client向server发出请求后,server端才干回复数据。

非常多情况下,须要server端主动向client推送数据,保持client与server数据的实时与同步。

  • 若两方建立的是Socket连接。server就能够直接将数据传送给client
  • 若两方建立的是HTTP连接,则server须要等到client发送一次请求后才干将数据传回给client

因此,client定时向server端发送连接请求。不仅能够保持在线。同一时候也是在“询问”server是否有新的数据,假设有就将数据传给client。

转载请标明地址http://blog.csdn.net/zhaoyazhi2129/article/details/40422059

版权声明:本文博主原创文章,博客,未经同意不得转载。

找呀志_java网络编程(4)TCP/IP、Http和Socket差额的更多相关文章

  1. 找呀志_java网络编程(5)TCP和udp差额

    1.TCP定向链接,尽管该网络的不稳定性质,所述不安全确定多少次握手不能保证连接的可靠性.但TCP的三次握手至少(事实上确保了相当大的程度)以确保连接的可靠性; 和UDP不面向连接的,UDP前传送的数 ...

  2. 嵌入式linux的网络编程(1)--TCP/IP协议概述

    嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...

  3. 【转载】[基础知识]【网络编程】TCP/IP

    转自http://mc.dfrobot.com.cn/forum.php?mod=viewthread&tid=27043 [基础知识][网络编程]TCP/IP iooops  胖友们楼主我又 ...

  4. 2015/12/14 Python网络编程,TCP/IP客户端和服务器初探

    一直不是很清楚服务器的定义,对于什么是服务器/客户端架构也只有一个模糊的感觉.最近开始学习,才明白一些什么服务器和客户端的关系. 所谓的服务器,就是提供服务的东西,它是一个硬件或者软件,可以向一个或者 ...

  5. 2015-07学习总结——网络编程(TCP/IP)

    之前学习的主要内容是单机上的处理,比如编程语言.游戏编程.数据库.多媒体编解码.其实对网络也有些接触,比如WWW.HTTP.UDP/TCP.RTP.RTMP.SNMP.FTP.单播组播.Telnet. ...

  6. python网络编程(TCP/IP、发邮件)

    TCP/IP 关注公众号"轻松学编程"了解更多. 计算机为了联网,就必须规定通讯协议,早期的计算机网络是由各个厂商规定的一些协议,他们之间互不兼容. 为了把全世界的电脑能够连接到一 ...

  7. 【网络编程】TCP/IP、UDP、网络概…

    计算机刚刚发明出来的时候,两台计算机之间是无法通信的,为了使计算机之间能够进行数据的交流,制定了OSI(Open SystemInterconnection)开放系统互联模型,而TCP/IP(我们所使 ...

  8. linux网络编程系列-TCP/IP模型

    ### OSI:open system interconnection ### 开放系统互联网模型是由ISO国际标准化组织定义的网络分层模型,共七层 1. 物理层:物理定义了所有电子及物理设备的规范, ...

  9. 网络基础之 tcp/ip五层协议 socket

    1 网络通信协议(互联网协议) 1.1 互联网的本质就是一系列的网络协议 1.2 osi七层协议 1.3 tcp/ip五层模型讲解 1.3.1 物理层 1.3.2 数据链路层 1.3.3 网络层 1. ...

随机推荐

  1. 第一章. ActionScript 语言基础

    第一章. ActionScript 语言基础 1.0. ActionScript 3.0 Cookbook 概述 1.1. 新建一个 ActionScript project 1.2. 自己定义应用程 ...

  2. Cocos2d-x教程(28)-ttf 字体库的使用

    欢迎增加 Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/37650843 通常为 ...

  3. SocketAsyncEventArgs使用解说

    原文:SocketAsyncEventArgs使用解说 如果在.NET下写过网络通讯的同学应该感觉不陌生了,有很多刚入门的同学很多都认为这东西可以大大提高处理效能还有就是使用上很不适应.其实使用之前最 ...

  4. Maven中Spring-Data-Redis存储对象(redisTemplate) (转)

    Redis是一种nosql数据库,在开发中常用做缓存.Jedis是Redis在java中的redis- client.在此之前,希望已经了解redis的基本使用和Maven的使用.建立Maven Pr ...

  5. VS2010升级VS2013后,出现没有定义类型“PowerPacks.ShapeContainer”错误解决方法

    开发说明: http://msdn.microsoft.com/zh-tw/library/microsoft.visualbasic.powerpacks.aspx Microsoft.Visual ...

  6. 2014ACM/ICPC亚洲区域赛牡丹江站现场赛-K ( ZOJ 3829 ) Known Notation

    Known Notation Time Limit: 2 Seconds      Memory Limit: 65536 KB Do you know reverse Polish notation ...

  7. ubuntu14.04中 gedit 凝视能显示中文,而source insight中显示为乱码的解决的方法

    1.乱码显示情况: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcjc3NjgzOTYy/font/5a6L5L2T/fontsize/400/fill/ ...

  8. jenkins 安装 SVN Publisher 后向 svn 提交代码报错: E170001: Authentication required for...

    问题描写叙述 安装并启动 jenkins 后,加入了 SVN Publisher 插件,然后在构建任务的"构建后操作"操作中加入了"Publish to Subversi ...

  9. 如何在 Windows Phone 8 中获取手机的当前位置

    原文 如何在 Windows Phone 8 中获取手机的当前位置 适用于:仅限于 Windows Phone 8. 本主题演示如何使用 Windows Phone 位置 API 确定手机的当前位置. ...

  10. 隐马尔科夫模型(HMM)及事实上现

    马尔科夫模型 马尔科夫模型是单重随机过程,是一个2元组:(S,A). 当中S是状态集合,A是状态转移矩阵. 仅仅用状态转移来描写叙述随机过程. 马尔科夫模型的2个如果 有限历史性如果:t+l时刻系统状 ...