转自:http://blog.jobbole.com/74795/

前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑。主要是因为对网络协议不太熟悉,对一些概念也没弄清楚。后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网络协议有了初步的认识,在这里总结出来,可以梳理一下我对网络协议的理解,加深印象.

话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样。一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通。两台电脑之间进行通讯所共同遵守的规则,就是网络协议。

那么谁来制定这个网络协议?

国际标准化组织(ISO)定义了网络协议的基本框架,被称为OSI模型。要制定通讯规则,内容会很多,比如要考虑A电脑如何找到B电脑,A电脑在发送信息 给B电脑时是否需要B电脑进行反馈,A电脑传送给B电脑的数据的格式又是怎样的?内容太多太杂,所以OSI模型将这些通讯标准进行层次划分,每一层次解决 一个类别的问题,这样就使得标准的制定没那么复杂。OSI模型制定的七层标准模型,分别是:应用层,表示层,会话层,传输层,网络层,数据链路层,物理 层。

虽然国际标准化组织制定了这样一个网络协议的模型,但是实际上互联网通讯使用的网络协议是TCP/IP网络协议。

TCP/IP 是一个协议族,也是按照层次划分。共四层:应用层,传输层,互连网络层,网络接口层。 那么TCP/IP协议和OSI模型有什么区别呢?OSI网络协议模型,是一个参考模型,而TCP/IP协议是事实上的标准。TCP/IP协议参考了OSI 模型,但是并没有严格按照OSI规定的七层去划分标准,而只划分了四层,个人觉得这样会更简单点,当划分太多层次时,你很难区分某个协议是属于哪个层次 的。TCP/IP协议和OSI模型也并不冲突,TCP/IP协议中的应用层协议,就对应于OSI中的应用层,表示层,会话层。就像以前有工业部和信息产业 部,现在实行大部制后只有工业和信息化部一个部门,但是这个部门还是要做以前两个部门一样多的事情,本质上没有多大的差别。TCP/IP中有两个重要的协 议,传输层的TCP协议和互连网络层的IP协议,因此就拿这两个协议做代表,来命名整个协议族了,在说TCP/IP协议时,是指整个协议族。

TCP/IP协议分为四个层次,但我们并不需要了解所有层次的协议,我觉得主要关注应用层和传输层的协议就可以了。拿寄送邮件举例, A寄邮件给B,A关心的是用什么格式写什么内容给B(应用层内容),是寄挂号信还是寄平信(传输层内容),但是A是不会去关注邮件传送过程中采用了那条路 线,邮递员是如何把信件递送到B手里的(互连网络层,网络接口层)。

先说传输层,传输层有多个协议,但最主要的是TCP和UDP协议。两则的区别在于TCP协议需要接收方反馈,UDP协议不需要接收方反馈。TCP就像挂号 信,A电脑发信息给B电脑后,需要得到B电脑的反馈,这样A电脑就能知道B电脑是否已经收到信息。UDP就像平信,A电脑发信息给B电脑后,B电脑并不给 A电脑发聩,A电脑发送信息出去后并不知道B电脑是否已经收到。 因此,TCP传输比UDP传送更可靠,但是TCP传输的效率就不如UDP了。至于,在传送过程中具体选择哪种传送方式,需要具体问题具体分析。在不可靠的 网络传送过程中一般选择TCP传送方式。在讲求效率,或者不在乎传送失误的情况下可以选择UDP方式来提高传输速率。

应用层的协议有很多,每一个协议代表一种类型的服务。HTTP协议,万维网服务。FTP协议,文件传送服务。POP3,邮件服务,SOAP协议webService服务。

在理解TCP/IP协议的过程中,我遇到了三个困惑。

1.什么是socket?

以前有听说过socket编程这种说法,也有的说套接字编程。我在搜索关于socket的资料时,发现有的说socket是指一个连接,有的说 socket是一指一个端点。拿打电话做比喻,A电话机和B电话机正在通话,那么socket是指的A和B之间的连接线呢,还是指电话机(端点)?

我现在的理解是,socket就是一个连接中的一个端点,一次通讯(连接)a,b端都会有一个socket。一个socket对应一个连接。

2.http协议属于应用层还是传输层?

http 超文本传送协议,听上去像是传输层的协议一样。但事实上大家都知道http和ftp一样都是属于应用层的协议,我先前很纳闷的是,既然是应用层的协议,怎 么就取这样一个误导人的名称啊。在对TCP/IP协议还不熟悉的时候,这很容易让人误解和纳闷的。后来,我在wiki上发现这么一段话:

http中文译名问题
HTTP 在中国大陆被翻译为“超文本传输协议”,因为“transfer”在中文里有“传输”的含意。但依据 HTTP 定制者之一的 Roy Fielding博士的论文[1](6.5.3节),作者专门强调“transfer”表示的是“(表述状态的)转移” (Representational State Transfer),而不是“传输”(transport)。故其中文译名“超文本传输协议”恰恰引种反映了这种误解。更符合原义的译名应该为“超文本转 移协议”。

这段话解除了我的疑惑。那么http协议当然是应用层的协议。

3.SOAP可以使用HTTP协议进行传输吗?

在了解SOAP协议的过程中,看到介绍说soap可以通过tcp,udp,http协议来传送。这也是让人困惑的描述。一看这句话,就会感觉http怎么 和tcp,udp协议并列了呢?难道http还是属于传输层的协议?再加上http中文译名的问题,名字听上去像传输层,初学者又要开始头大了。

事实上,http是应用层的协议,这一点可以毫无怀疑。那么现在新的问题来了。soap和http都是应用层协议,怎么说soap能用http协议来传输呢?应用层的协议可以用应用层的协议传送吗?

我查阅了资料,是这样一回事情,soap将信息进行XML的序列化后,再用http协议的方式再打包进行传送,传送的方式还是tcp或者udp。做个比喻 就好理解了。tcp 和 udp 都是公路,暂且把tcp认为是一般公路,udp高速公路,soap和http就都是汽车,那么soap和http都可以在tcp和udp上跑。说soap 可以通过http来传送,实际就是说soap是小轿车,http是装轿车的卡车,把soap的信息装到http里面,然后再运输,当然走的道路还是tcp 或udp。

说soap可以通过http协议来传输,这句话不太准确,比较准确第说法是:soap信息可以通过http协议包装后通过tcp或udp传输。

转:对TCP/IP网络协议的深入浅出归纳的更多相关文章

  1. 对TCP/IP网络协议的深入浅出归纳

    前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...

  2. 对TCP/IP网络协议的深入浅出归纳(转)

    前段时间做了一个开发,涉及到网络编程,开发过程比较顺利,但任务完成后始终觉得有一些疑惑.主要是因为对网络协议不太熟悉,对一些概念也没弄清楚.后来 我花了一些时间去了解这些网络协议,现在对TCP/IP网 ...

  3. TCP/IP网络协议的通俗理解,SOCKET,HTTP,SOAP

    TCP/IP,HTTP,SOAP等协议之区别   术语TCP/IP代表传输控制协议/网际协议,指的是一系列协议.“IP”代表网际协议,TCP和UDP使用该协议从一个网络传送数据包到另一个网络.把IP想 ...

  4. Linux学习(1)- TCP/IP网络协议基础

    Linux学习(1)- TCP/IP网络协议基础 一.TCP/IP 简介 学习内容 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输 ...

  5. TCP/IP网络协议基础

    实验楼学习网络协议传送门 一.TCP/IP简介 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电 ...

  6. TCP/IP网络协议

    OSI七层模型 OSI采用了分层的结构化技术,共分七层,物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. TCP/IP模型 OSI模型比较复杂且学术化,所以我们实际使用的TCP/IP模型, ...

  7. 初探计算机网络之TCP/IP网络协议

    网络协议 ​ 在计算机诞生以来,从最原始的单机模式到现在多台计算机协同工作,形成计算机网络,从前很难想象的信息共享.多机合作.大规模计算在今天也早已成了现实.在早期,计算机网络需要解决的痛点,就是怎样 ...

  8. TCP/IP网络协议基础知识集锦[转]

    引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP协议簇是由OSI七层模型发展而来的,之所以 ...

  9. 慕课学习--OSI与TCP/IP网络协议

    **OSI:开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放 ...

随机推荐

  1. poj3263 Tallest Cow

    题意略去. 考虑给定的R对pair(A, B). 即A能看见B,这意味着B不比A低,并且区间内部的所有元素的高度严格小于A的高度. 我们规定区间的方向:若A > B,为反方向,反之称为正方向. ...

  2. 周赛-Clique in the Divisibility Graph 分类: 比赛 2015-08-02 09:02 23人阅读 评论(3) 收藏

    Clique in the Divisibility Graph time limit per test1 second memory limit per test256 megabytes inpu ...

  3. 修改Windows下的键盘映射

    在知乎上看见有人说Ctrl键放在A的旁边会更方便,于是我就琢磨着把Cap Lock键改成Ctrl 我肯定不愿意用第三方工具修改的,于是找到了这篇文章,很容易的就修改成功,现在用起来果然舒服多了. 附上 ...

  4. 基于@AspectJ和schema的aop(一)

    在前面我们使用Pointcut和Advice描述切点和增强, 并使用Advisor整合两者描述切面.@AspectJ使用注解来描述切点和增强.两者使用的方式不同, 但是在本质上都是一样的. 我们还是用 ...

  5. java中|与||,&与&&到底有什么区别呢?

    &是位运算符.&&是布尔逻辑运算符.在运行上,&两边的条件都要判断(不管前面的是ture还是false),而&&先判断前面的,若为false,则后面的不 ...

  6. Mysql-学习笔记(==》数据库备份修复 十 四)

    CREATE DATABASE db USE db; CREATE TABLE stu( id INT UNSIGNED NOT NULL AUTO_INCREMENT, sname VARCHAR( ...

  7. 2016年10月21日 星期五 --出埃及记 Exodus 19:5

    2016年10月21日 星期五 --出埃及记 Exodus 19:5 Now if you obey me fully and keep my covenant, then out of all na ...

  8. Objective-C学习笔记_命令行参数获取

    找到编译目录下执行myapp >./myapp param1 param2 在应用中可以这样来获取param1/param2 NSProcessInfo *proc = [NSProcessIn ...

  9. SGU 105 div.3 找规律

    There is sequence 1, 12, 123, 1234, ..., 12345678910, ... . Given first N elements of that sequence. ...

  10. MTK+Android编译

    1. 修改recovery代码 比如mediatek\custom\itek82_wet_kk\recovery\inc\cust_keys.h ./mk r k ./mk recoveryimage ...