网络协议程序员

网络基础TCP/IP(一)

2018-03-27  本文已影响169人  SunshineBrother

计算机与网络设备要相互通信,双方就必须基于相同的方法,比如,如何探测到通信目标,由哪一边先发通信,使用哪一种语言进行通讯,怎样结束通信等规则都需要事先确定。不同的硬件,操作系统之间的通信,所有的一切都需要规则,而我们就把这种规则称为协议(protocol

互联网各种协议

像这样把互联网相关的协议集合起来总称为TCP/IP。也有说法认为,TCP/IP是指的TCP和IP这两种协议。

TCP/IP协议里面重要的一点就是分层。TCP/IP协议按层次划分为了4层,分别为:应用层,传输层,网络层,和数据链路层。这里我们要和网络的七层协议由区分

网络七层协议,英文全称Open System Interconnection,简写OSI,OSI是一个开放性的通信系统互连参考模型。而把网络分为多层,可以把复杂的网络划分成为更容易管理的层,减少复杂性,允许更容易编程改变或快速评估。

OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流

网络七层协议

OSI

TCP/IP协议簇

为什么已经有了网络七层协议还要提出TCP/IP协议四层协议呢

TCP/IP协议是互联网协议(簇)的统称,他是互联网标准通信的基础,它提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。而OSI模型是开放式系统互联通信参考模型

OSI是一个完整的、完善的宏观模型,他包括了硬件层(物理层),当然也包含了很多上面途中没有列出的协议(比如DNS解析协议等);而TCP/IP(参考)模型,更加侧重的是互联网通信核心(也是就是围绕TCP/IP协议展开的一系列通信协议)的分层,因此它不包括物理层,以及其他一些不想干的协议;其次,之所以说他是参考模型,是因为他本身也是OSI模型中的一部分,因此参考OSI模型对其分层。

网络七层协议和TCP/IP协议四层协议的关系

网络七层协议和TCP/IP协议四层协议.png

TCP/IP通讯传输流

TCP/IP通讯传输流.png

利用TCP/IP协议簇进行网络通信的时候,会通过分层顺序与对方进行通讯。
发送端从应用层往下走,接收端则往应用层上走

我们以一个常见的HTTP请求作为一个例子,看一下通讯流程

通讯流程.jpg

在发送端在层与层之间进行传输数据时,没经过一层必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,没经过一层会把对应层的首部去掉

MAC地址、IP地址、 IP协议 、TCP、DNS

MAC地址

MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址

MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。这个地址与网络无关,也即无论将带有这个地址的硬件(如网卡、集线器、路由器等)接入到网络的何处,它都有相同的MAC地址,MAC地址一般不可改变,不能由用户自己设定。

MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(Istitute of Electrical and Electronics Engineers,电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。每个网络制造商必须确保它所制造的每个以太网设备都具有相同的前三字节以及不同的后三个字节。这样就可保证世界上每个以太网设备都具有唯一的MAC地址

IP地址

对于IP地址,相信大家都很熟悉,即指使用TCP/IP协议指定给主机的32位地址。IP地址由用点分隔开的4个8八位组构成,如192.168.0.1就是一个IP地址,这种写法叫点分十进制格式。IP地址由网络地址和主机地址两部分组成,分配给这两部分的位数随地址类(A类、B类、C类等)的不同而不同。网络地址用于路由选择,而主机地址用于在网络或子网内部寻找一个单独的主机。一个IP地址使得将来自源地址的数据通过路由而传送到目的地址变为可能。

mac地址和ip地址有什么区别

IP地址是指Internet协议使用的地址,而MAC地址是Ethernet(以太网)协议使用的地址。IP地址与MAC地址之间并没有什么必然的联系,MAC地址是Ethernet网卡上带的地址,长度为48位。
每个Ethernet网卡生产厂家必须向IEEE组织申请一组MAC地址,在生产网卡时在网卡的串行EEPROM中写入一个唯一的MAC地址。任何两个Ethernet网卡的MAC地址,不管是哪一个厂家生产的都不应相同。Ethernet芯片厂家不必负责MAC地址的申请,MAC地址存在于每一个Ethernet包中,是Ethernet包头的组成部分,Ethernet交换机根据Ethernet包头中的MAC源地址和MAC目的地址实现包的交换和传递。

IP地址是Internet协议地址,每个Internet包必须带有IP地址,每个Internet服务提供商(ISP)必须向有关组织申请一组IP地址,然后一般是动态分配给其用户。IP地址现是32位长,正在扩充到128位。IP地址与MAC地址无关,因为Ethernet的用户,仍然可通过Modem连接Internet,取得一个动态的IP地址,这个地址每次可以不一致。IP地址通常工作于广域网,路由器处理的就是IP地址MAC地址工作于局域网,局域网之间的互连一般通过现有的公用网或专用线路,需要进行网间协议转换。可以在Ethernet上传送IP信息,此时IP地址只是Ethernet信息包数据域的一部分,Ethernet交换机或处理器看不见IP地址,只是将其作为普通数据处理。

补充:Internet 和Ethernet 的区别:ethernet是局域网的组网技术,internet是上外网的技术;在一个局域网中,每一台计算机要组成一个局域网,那么就要每一台pc都有网卡,这些网卡通过统一标准制作,可以实现不同pc上的网卡进行信号调制而实现通信,后来国际专业的一个组织将这种局域网组网技术,包括这些网卡设计标准进行统一的规定,就是现在使用的IEEE802.3标准,网卡硬件制作商只要遵循这样的标准就可以做出通用性的网卡。IEEE802.3标准是再ehternet局域网组网技术上颁布的标准。

有了ehternet技术可以实现局域网组网,但是如果要让这个局域网和更多,更大的局域网通信,就需要在这些局域网中规定一种通信的协议,比如tcp/ip,使用这样的通信协议进行全球性的通信的技术就是internet。

也就是说要上网,你要一张网卡,另外还要到运营商申请一个上网账号才能实现上网,那么这个网卡就是ethernet范畴,而这个上网的账号就是internet范畴。ehternet和internet共同构成我们上网的要素。

IP协议

IP(Internet Protocol)网络协议,位于网络层。IP协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中最重要的两个条件就是IP地址和MAC地址。

IP是使用ARP协议凭借MAC地址进行通信的

IP间的通信依赖MAC地址。在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行转移的时候,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时就会采用ARP(Address Resolution Protocol)。ARP是一种以解析地址的协议,根据通信方的IP地址就可以发查处对应的MAC地址。


IP.jpg

TCP协议

按层次分,TCP位于传输层,提供可靠的字节流服务

字节流服务是指为了方便传输,将大块的数据分割成以报文段为单位的数据进行管理。

可靠的传输服务是指能够把数据准确的可靠的传输给对方,这就引出了TCP的三次握手

TCP协议为了更容易传送大数据才把数据分割,而TCP协议能够确认数据最终是否送达到对方

为了准确无误地将数据送达到目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。

握手过程中使用了TCP的标志(flag):SYN(synronize 同步)和 ACK(acknowledgement 确认)

三次握手.jpg

发送端首先发送一个带SYN标志的数据包给对方,接受端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息,最后,发送端再回传一个带ACK标志的数据包,代表握手结束

若握手过程中某个阶段中断,TCP协议会再次以相同的顺序发送相同的数据包

UDP
谈到TCP,就必须要说到UDP了

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

UDP 适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实 “ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如, 在默认状态下,一次“ping”操作发送4个数据包。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一 个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。

DNS

DNS(Domain Name System 域名系统)负责域名解析,是和HTTP协议一样位于应用层的协议。它提供域名到IP地址之间的解析服务。

DNS服务产生原因:用户通常使用主机名域名来访问对方的计算机,而不是直接通过IP地址访问。因为与IP地址的一组纯数字相比,用字母数字组合的表示更加符合人类的记忆。但是计算机更擅长处理数字。为了解决这个问题,DNS服务应运而生。
DNS协议提供通过域名查找IP地址,或逆向从IP地址反查找域名的服务

DNS.jpg

学习了IP协议,TCP协议和DNS服务,我们就来一张图来看看HTTP协议的通信过程中各自发挥的作用

HTTP协议.jpg

URL和URI

591228-20160116223301225-1866838315.png

Uniform:规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(如http: 或 ftp:)也更加容易

Resoure:可标识的任何东西

Identifier:表示可标识的对象

URI就是由某个协议方案表示的资源定位标识符;例如采用HTTP协议时,协议方案就是http

为了让大家更加清楚URL和URI的区别,这里我找到了一个比较生动形象的解释,摘录:Web基础-Uri跟Url的区别

首先给大家举个例子,有一家公司的总经理,某天,给了我一张名片,上面写了他的头衔,北京XXX公司总经理 张三,还有他的办公室地址,北京市海淀区长安街35号北京XXX公司总经理办公室,那么,我以后给我的朋友吹牛,我认识北京XXX公司的总经理张三,我的朋友都知道北京XXX公司的总经理是一个叫张三的人,那么,这个头衔就和张三对应起来了,只要一说到这个头衔,大家都知道说的是张三,反应到网络世界,这个头衔就叫做URI,只要你给我一个URI,我就知道它代表了什么,比如,http://www.sina.com.cn代表了新浪网,admin@qq.com代表了某一个人的qq邮箱,你的qq号也是一个URI(腾讯服务器内可以识别就是你的QQ账户),URI就是网络资源的头衔,通过URI标记可以把网络世界里面的每一个事物都加以标记并区分开来。

好的,现在出现了一个问题,你现在知道北京XXX公司总经理是张三,“北京XXX公司总经理”就是张三这个人的URI,可是,我让你亲自去和张三见一面,你做得到吗?你肯定做不到,因为你不知道他的地址,虽然你有他的URI头衔,但是除此以外,你对他具体的情况一无所知,于是你要定位到他,你就必须得到他的办公室地址,通过“北京市海淀区长安街35号北京XXX公司总经理办公室”这个地址,你就找到了张三。反应到网络世界,网络世界里面的每一个资源不光有自己的头衔,还要能够被人访问,被人找到,所以,网络地址是必须的,否则,这个网络资源的存在没有任何意义,这个地址就叫做URL。

通过上面的描述,可以发现,URI强调的是给资源标记命名,URL强调的是给资源定位,但是你会发现,URL显然比URI包含信息更多,我通过URL也可以知道张三是总经理,并且我还知道了他的地址,所以大多数情况下大家觉得给一个网络资源分别命名和给出地址太麻烦,干脆就用地址既当地址用,又当标记名用,所以,URL也充当了WWW万维网里面URI的角色,但是他比URI多了一层意义,我不光知道你叫什么,我还知道你在哪里。我们在浏览器输入的都是URL,因为我们输入的目的是为了找到某一个资源,当然你输入的是URI也是没错的,因为URL也是URI。

总结:URI标记了一个网络资源,仅此而已; URL标记了一个WWW互联网资源(用地址标记),并给出了他的访问地址。

内容参考:《图解HTTP》

上一篇下一篇

猜你喜欢

热点阅读