网络由下往上分为

  物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

  通过初步的了解,我知道IP协议相应于网络层,TCP协议相应于传输层,而HTTP协议相应于应用层,

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

  socket则是对TCP/IP协议的封装和应用(程序猿层面上)。

  也能够说,TPC/IP协议是传输层协议,主要解决数据怎样在网络中传输,

  而HTTP是应用层协议,主要解决怎样包装数据。

  关于TCP/IP和HTTP协议的关系,网络有一段比較easy理解的介绍:

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

  假设想要使传输的数据有意义,则必须使用到应用层协议。

  应用层协议有非常多,比方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协议关系的说法比較easy理解:

  “TCP/IP仅仅是一个协议栈,就像操作系统的执行机制一样,必需要详细实现,同一时候还要提供对外的操作接口。

  这个就像操作系统会提供标准的编程接口,比方win32编程接口一样,

  TCP/IP也要提供可供程序猿做网络开发所用的接口,这就是Socket编程接口。”

  关于TCP/IP协议的相关仅仅是,用博大精深来讲我想也不为过,单单查一下网上关于此类仅仅是的资料和书籍文献的数量就知道,

  这个我打算会买一些经典的书籍(比方《TCP/IP具体解释:卷一、卷二、卷三》)进行学习,今天就先总结一些基于基于TCP/IP协议的应用和编程接口的知识,也就是刚才说了非常多的HTTP和Socket。

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

  实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它仅仅是提供了一个针对TCP或者UDP编程的接口。

  以下是一些常常在笔试或者面试中碰到的重要的概念,特在此做摘抄和总结。

  一、什么是TCP连接的三次握手

  第一次握手:client发送syn包(syn=j)到server,并进入SYN_SEND状态,等待server确认;

  第二次握手:server收到syn包,必须确认客户的SYN(ack=j+1),同一时候自己也发送一个SYN包(syn=k),即SYN+ACK包,此时server进入SYN_RECV状态;

  第三次握手:client收到server的SYN+ACK包,向server发送确认包ACK(ack=k+1),此包发送完毕,client和server进入ESTABLISHED状态,完毕三次握手。

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

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

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

  二、利用Socket建立网络连接的步骤

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

  套接字之间的连接过程分为三个步骤:server监听,client请求,连接确认。

  1、server监听:server端套接字并不定位详细的client套接字,而是处于等待连接的状态,实时监控网络状态,等待client的连接请求。

  2、client请求:指client的套接字提出连接请求,要连接的目标是server端的套接字。

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

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

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

  三、HTTP链接的特点

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

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

  四、TCP和UDP的差别(考得最多。。快被考烂了我认为- -\\)

  1、TCP是面向链接的,尽管说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也非常大程度上保证了)保证了连接的可靠性;

  而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种传输数据协议。

  2、也正由于1所说的特点,使得UDP的开销更小传输数据速率更高,由于不必进行收发数据的确认,所以UDP的实时性更好。

  知道了TCP和UDP的差别,就不难理解为何採用TCP传输协议的MSN比採用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,

  由于程序猿能够手动对UDP的数据收发进行验证,比方发送方对每一个数据包进行编号然后由接收方进行验证啊什么的,

  即使是这样,UDP由于在底层协议的封装上没有採用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。

TCP/IP、Http、Socket的差别的更多相关文章

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

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

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

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

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

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

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

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

  5. TCP/IP以及Socket聊天室带类库源码分享

    TCP/IP以及Socket聊天室带类库源码分享 最近遇到个设备,需要去和客户的软件做一个网络通信交互,一般的我们的上位机都是作为客户端来和设备通信的,这次要作为服务端来监听客户端,在这个背景下,我查 ...

  6. TCP/IP 和 Socket 的关系

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

  7. TCP/IP的Socket编程

    1. TCP/IP.UDP的基本概念 TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,他是一个工业标准的协议集, ...

  8. TCP,IP,HTTP,SOCKET区别和联系

    物理层-- 数据链路层-- 传输层--                       TCP协议 会话层-- 我 们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便 ...

  9. Mysql服务器相互作用的通讯协议包括TCP/IP,Socket,共享内存,命名管道

    MySQL实现了四种通信协议 TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接模块 Unix Socket协议,这个通常我们登入MySQL服务器中使用这个协议 ...

  10. TCP/IP,HTTP,Socket的区别与联系

    一 忆往昔,尽是悔恨泪.       在学校的时候学过,网络七层,也知道tcp的三次握手.但因为根本没用在实际开发中,所以逐渐淡忘.现在就再次理解下三个的区别与联系. 二 正题       网络七层: ...

随机推荐

  1. hdu1005 Number Sequence(寻找循环节)

    主题链接: pid=1005">huangjing 题意: 就是给了一个公式,然后求出第n项是多少... 思路: 题目中n的范围实在是太大,所以肯定直接递推肯定会超时,所以想到的是暴力 ...

  2. 使用require.js和backbone实现简单单页应用实践

    前言 最近的任务是重做公司的触屏版,于是再园子里各种逛,想找个合适的框架做成Web App.看到了叶大(http://www.cnblogs.com/yexiaochai/)对backbone的描述和 ...

  3. error C2248: “CObject::operator =”: 不可访问 private 员(于“CObject”类声明)

    MFC如果编码错误: 演出:error C2248: "CObject::operator =": 不可访问 private 员(于"CObject"类声明) ...

  4. uva 10192 Vacation(最长公共子)

    uva 10192 Vacation The Problem You are planning to take some rest and to go out on vacation, but you ...

  5. singleton pattern

    1 normal mode class Singleton { private Singleton(){}; Singleton singleton; static Singleton getInst ...

  6. CentOS 安装memcached

    一,安装libevent 安装位置 /usr/lib #tar -zxvf libevent-2.0.21-stable.tar.gz # cdlibevent-2.0.21 # ./configur ...

  7. android 他们定义对话框

    创建一个布局文件 my_dialog.xml <?xml version="1.0" encoding="utf-8"?> <Relative ...

  8. mtk硬件项目开始关闭蓝牙功能:mtk 硬件ScanCode和keycode应用演示示例

    项目要求:该项目因为没有使用android5.0,导致启动bluetooth的蓝牙audio slave功能必须使用第三方模组,该第三方模组,启动是通过android主板通过GPIO控制.UI界面是通 ...

  9. 使用HTML5 Canvas做些什么

    百分比圆环进度条   // ----------------------------------------------------------- 柱状排行榜统计图   // ------------ ...

  10. C#访问Java的WebService添加SOAPHeader验证的问题

    原文:C#访问Java的WebService添加SOAPHeader验证的问题 这两天做与公司OA的接口,发现C#访问Java的WebService需要提供一个SOAP的头验证信息,但是WebServ ...