互联网协议基础

来源:互联网 发布:c语言scanf用法 编辑:程序博客网 时间:2024/05/16 03:14

概述

互联网是分层结构的,根据不同的标准有分五层,有分七层,大同小异,多的只不过是针对应用层进行了细分。如图:

这里写图片描述

互联网协议的“五层描述”:

由顶至底依次是:
1,Application Layer: 应用层
2,Transport Layer:传输层
3,Network Layer: 网络层
4,Link Layer:链接层
5,Physical Layer:物理层
越顶层越贴近用户的使用和感知,越底层,越和硬件相关。

为了阐述清楚,从底至顶的顺序介绍:
需要说明的是,每一个层次的产生都是科学家和技术人员为了解决某种需求做出诸多努力最后抽象出来的,在历史上每个层的从初生到成熟都有一个统一的过程,不同的任何组织针对问题提出自己的解决访问,不同的解决方案比拼,最终业界形成统一的标准。以下介绍每一层的协议就是经过这一历程沿用至今,组成了如今的协议栈:

这里写图片描述

物理层

物理层就是构成整个网络的物理硬件,如光纤,电缆,双绞线,交换机,路由器等等。纯粹的硬件层次,协议的话,就是什么插口对什么槽吧,开玩笑的,科学的说是定义了传输介质类型(线缆标准)和连接器类型(接口标准),相关协议如:EIA/TIA-232, V.35。

PS:集线器是存在于物理层的,通过信号的中继和放大来支持网络通信。

链路层

链路层是通过物理层传输信号的最基本层次,遵从以太网协议

数据的传输是以数据包为单元分包传输的。对于每一个数据包,分为头(head)和数据体(body)。以太网协议数据包的头长18字节,包含着数据发送者和接受者的MAC地址。

这里写图片描述

MAC地址:MAC地址是唯一标识用网设备网卡的编号。一台计算机,服务器或者路由器,都会有一个或多个网卡,每一个网卡对应一个唯一的MAC地址,MAC地址是48个2进制数构成的(48个2进制数=12个16进制数=6个字节),以太网头文件包含发送者和接受者的MAC地址,就是12个Byte,剩余6个Byte,可能还要装点别的,暂不深究。

还需要说明为什么需要MAC地址,就是为了确定数据包传输的起点和目标。考虑网络的最初的雏形,所有的计算机在一个组网(局域网)之中。相互之间,计算机以一种“广播”的方式传输数据,将数据向整个网络传输,所有的在网设备都可以接收到这些数据,显然数据并不是对于每台计算机都有用的。因此需要标定接受者和发送者,在网的设备接受的数据包后,解析出接受者MAC地址和自己的MAC地址比对,相同数据包留下,不同抛弃MAC地址就是用来做这个的。

PS:交换机通过电脑的网卡MAC地址来实现不同主机之间的数据转发。

网络层

继续思考我们的网络的最初雏形,所有的数据都在整个网络中传输,每台计算机按照MAC地址发送或接收着自己的数据。这样,对于一个计算机来说,整个网络中的数据大部分是没用的。网络不大的情况还好,但是随着网络中的计算机越来越多,这种无用的信息变得越来越多,越来越浪费,导致网络的物理层已经无法承受了。因此不可能把整个互联网放在一个网中,而应该将网络分割,然后设置中继(路由),就像快递一样,设置一个个中转站,最终把东西送到正确的人手里。网络层就是解决这个问题诞生的。

这里写图片描述

IP协议

网络层的主要协议是IP协议,就是我们非常熟悉的IP地址。
如上所述,整个互联网被分割成很多个子网,每个子网共用一个路由,子网与子网之间通过路由来传输数据,子网内使用广播方式传播数据。因此就需要一种方法来标定两台计算机是否在同一个子网,在哪个子网,以确定传输方式。

IP地址就是做这个工作的,IP是一个XXX.XXX.XXX.XXX的32位二进制码(4byte),例如192.168.0.1,每一个分段数字取值范围是1~255。IP地址的前一部分是子网的地址,后一部分是该计算机在本子网里的地址,至于两个部分从哪里分界,需要借助一个叫子网掩码的工具。子网掩码也是一串XXX.XXX.XXX.XXX格式的编码。子网掩码可以分成公网段,和子网段,公网段的二进制字符都是1,子网段的二进制字符都是0。例如我们最熟悉的255.255.255.0,化成二进制格式就是11111111.11111111.11111111.00000000。前24个二进制位就是公网段,后八位是子网段。判断两个IP地址是否在同一子网,就是将IP地址分别与子网掩码做“与”运算(都是1才是1,有0就是0)。经过“与”运算,IP地址中的公网段被保留下来,而子网段会全部归零,这时如果两个IP地址经过与子网掩码“与”运算后相同,就说明在同一子网,可以使用广播方式直接传输,否则这说明不在同一子网,需要先传输到子网网关,在根据IP地址传到对应的子网的网关,再由对方网关传输到对应计算机。

IP数据包同样由head和body组成。head部分主要包括版本、长度、IP地址等信息,”数据”部分则是IP数据包的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样。

这里写图片描述

因此,两个计算机之间通信,一定首先知道彼此IP地址,确定对方在网络中的位置,找到对方,然后对方返回自己的MAC地址,建立起明确的数据通道。这个询问并返回接受方MAC地址的方式是ARP协议(Address Resolution Protocol),ARP在子网和公网传输都要用到。

ARP

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

传输层

物理层完成了计算机的物理连通,链路层和网路层解决了主机对主机的正确通信问题,那么新的问题来了,一个主机上可能运行着多个程序,都在收发数据,如何判断数据是对应于那一个程序的呢?传输层就是来完成这个信息管理工作的。因此也需要新的协议来标定主机上同时运行的多个程序。在传输层里,我们成这个标定叫做端口。主机IP和端口联合在一起可以唯一定位一个程序,也就是真正的数据收发者了。

完成这一工作的是UDP协议(User Datagram Protocol)和TCP协议(Transmission Control Protocol )。

UDP是一种简单实现,即在之前所说的IP数据包内在拿出若干字节存放端口数据。TCP协议则是进阶版的UDP协议,它要求知道一个数据包发送出去是否被正确接收。因此TCP协议有着更复杂的相互通信。

这里写图片描述

TCP协议

TCP 提供可靠的字节流服务。字节流服务是指将大块数据分割成报文段(segment)为单位的数据包进行管理。

为了保证准确性,TCP 协议采用了三次握手(three-way handshaking)策略。握手过程中使用了 TCP 的标志(flag)—— SYN(synchronize)、ACK(acknowledgement)和 FIN(finish)。

TCP建立连接—三次握手
发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束,过程见下图。

这里写图片描述

TCP释放连接—四次握手

发送端首先发送一个带 FIN 标志的数据包给对方,然后进入 FIN-WAIT-1 状态。接收端收到后不能立即断开连接(防止数据丢失),先发送带 ACK 标志的数据包,此时发送端进入 FIN-WAIT-2 状态。然后接收端将没有传输完的数据继续传完,传完之后发送一个带 ACK 和 FIN 标志的数据包,通知发送端。发送端发送 ACK 标志的数据包给接收端,并进入 TIME-WAIT 状态,等待 2MSL 后断开连接。

这里写图片描述

应用层

到达了应用层,说明已经确定无疑数据传输成功了,接下来的工作就是对数据的相应,自然首先要读懂数据,因此对于数据编排就有各种不同的协议,例如文件传输协议FTP,浏览网页用的HTTP协议等等。

另外,在实际生活中,我们发现我们是不会用那么多繁琐的数字来访问网站的,而是通过易于记忆的域名,这是因为域名和IP地址存在着映射关系,而这项工作是DNS协议做的。DNS (Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。用户通常通过主机名或域名来访问对方的计算机,计算机则通过 IP 地址查询服务器。所以 DNS 就提供了域名查找 IP 地址和从 IP 地址反查域名的服务。

一次B-S的访问经历了如下图的流程

这里写图片描述

总结

互联网是分层结构的。

物理层解决物理连接;
链路层解决数据连接;
网络层解决主机-主机定位;
传输层解决接口-接口定位;
应用层解决数据实际使用。

物理层的协议是硬件的匹配;
链路层的协议是“以太网协议”
网络层的协议是“IP协议”,还需要用到ARP协议
传输层的协议是“TCP协议”,
应用层有多种协议,常见的有HTTP,FTP,DNS

在中间的三层,数据的发送和接收都经历一个打包和解包的过程,发送者由顶至底不断封装新的头信息,接受者由底至顶逐层解析删除头信息,整个流程如下图所示。

这里写图片描述

参考资料:
阮大师的博客:
http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html
姜斌师兄的分享:
http://mp.weixin.qq.com/s?__biz=MzUwOTAxMTQ5NQ==&mid=2247483683&idx=1&sn=2580508c2caf7a4295948911654bd8a1&chksm=f919f26bce6e7b7dd767fae55dc6ac28de65039e5b0c9dbd7261cf9d92486fab7051ba0fa7da&mpshare=1&scene=1&srcid=0310QMKAHbUTCXoBeju3heiq#rd

0 0