仅供自学使用。html
1)物理层数组
主要功能是完成相邻节点之间原始比特流的传输。(网卡等)
物理层协议关心的典型问题是使用什么样的物理信号来表示数据1和0;持续的时间有多长;数据传输是否可同时在两个方向上进行。物理层的设计还涉及通讯工程领域内的一些问题。浏览器
2)数据链路层缓存
主要负责将上层数据封装成固定格式的帧,在数据帧内封装发送和接收端的数据链路层地址(在以太网中为MAC地址,MAC地址是用来标识网卡的物理地址;在广域网中点到多点的链接状况下,能够是一个链路的标识)而且为了防止在数据传输过程当中产生误码,要在帧尾部加上校验信息,发现数据错误时,能够重传数据帧。网络
3)网络层数据结构
主要功能是实现数据从源端到目的端的传输。
在网络层,使用逻辑地址来标识一个点,将上层数据封装成数据包,在包的头部封装源和目的端的逻辑地址。网络层根据数据包头部的逻辑地址选择最佳的路径,将数据送达目的端。tcp
4)传输层工具
主要功能是实现网络中不一样主机上用户进程之间的数据通讯
网络层和数据链路层负责将数据送达目的端的主机,而这个数据须要什么用户进程去处理,就须要传输层帮忙了。
例如:QQ发送消息,网络层和数据链路层负责将消息转发到接收人的主机,而接收人应该用QQ程序来接收仍是用IE浏览器来接收,就是在传输层进行标识。
传输层要决定对会话层用户(最终的网络用户)提供什么样的服务。所以,咱们常常把1~3层的协议称为点到点的协议,而把4~7层的协议叫作端到端的协议。
因为绝大多数主机都支持多进程操做,于是机器上会同时有多个程序访问网络,这就意味着将有多条链接进出于这台主机,所以须要以某种方式区别报文属于哪条链接。识别这些链接的信息能够放在传输层的报文头中。除了将几个报文流多路复用到一条通道上,传输层还必须管理跨网链接的创建和拆除,这就须要某种命名机制,使机器内的进程可以说明它但愿交谈的对象。学习
5)会话层编码
主要是容许不一样机器上的用户之间创建会话关系。
会话层容许进行相似传输层的普通数据的传输,在某些场合还提供了一些有用的加强型服务;容许用户利用一次会话在远端的分时系统上登录,或者在两台机器间传递文件。
6)表示层
主要用于完成某些特定功能,对这些功能人们经常但愿找到广泛的解决方法,而没必要由每一个用户本身来实现。
表示层还涉及数据压缩解压,数据加密和解密等工做
7)应用层
联网的目的在于支持运行于不一样计算机上的进程之间的通讯,而这些进程则是为用户完成不一样任务而设计的。
1)物理层和数据链路层
在物理层和数据链路层,TCP/IP并无定义任何特定的协议。它支持全部标准的和专用的协议,网络能够是局域网(如普遍使用的以太网),城域网或广域网。因此,TCP/IP实际上只有三个层次。
2)网络层
在网络层,TCP/IP定义了网络互联协议,而IP又由四个支撑协议组成;ARP(地址解析协议),RARP(逆地址解析协议),ICMP(网际控制报文协议)和IGMP(网际组管理协议)
3)传输层
传统上,TCP/IP有两个传输层协议;TCP(传输控制协议)和UDP(用户数据报协议)。TCP协议传输更加稳定可靠,UDP协议传输效率更高。
4)应用层
在应用层,TCP/IP定义了许多协议,如HTTP(超文本传输协议),FTP(文件传输协议),SMTP(简单邮件传输协议),DNS(域名系统)等
上述这些协议将在后续课程中具体讲解,这里你们只要明确协议与各层的对应关系便可。当咱们研究具体协议的应用时,结合该协议所在层功能来理解和分析问题将事半功倍。
下面咱们将以TCP/IP五层结构为基础来学习数据在网络中传输的“真相”。因为这个过程比较抽象,咱们能够类比给远在美国的朋友邮寄圣诞节礼物的过程。
(1)当咱们给朋友写一封信时,必定会遵守一个约定俗成的信件格式去写信。例如,在开头写对收信人的称呼,接下来是问候语“你好”等,中间是信的内容,最后落款写本身的姓名,日期等。那么,这个书信格式以及通讯采用的语言实际上就是和朋友之间的协议,只有遵守这个协议,对方才能读懂信。
(2)写好了信,要将信装在信封中。在信封上,要书写收信人的地址和姓名等。再将信交给邮局。邮局根据收信人的目的地址,将信件再次封装成大的包裹,经过运输部门发往目的城市。
(3)运输部门会将信件的包裹送达目的地的邮局。目的地邮局会将信件送达收信人手中。
在这个寄信的例子中,一封信的传输须要通过三个层次:
[x] :首先发信和收信的双方是这个过程当中的最高层,位于下层的邮局和运输部门都是为了最高层之间的通讯在服务。寄信人和收信人之间要有个协议,这个协议保证收信人能读懂寄信人的信件。
[x] :两地的邮局和运输部门之间也有约定,如包裹大小,地址的书写方式,运输到站的时间等
[x] :邮局是寄信人和收信人的下一层,为上一层提供服务,邮局为寄信人提供服务时,邮筒就是两个层之间的接口。
1)应用层传输过程
在应用层,数据被“翻译”为网络世界使用的语言---二进制编码数据(0和1组成)。你们能够试想如下,人们须要经过计算机传输的数据形式变幻无穷,各式各样,有字母,数字,汉字,图片,声音等。这些信息对于单一经过弱电流传输的计算机来讲太过于“复杂”,所以这些人类方便识别的信息被应用层经过各类特殊的编码过程转换成二进制数据。这就是上面所描述的“翻译”过程,也是应用层在网络数据传输过程当中最为核心的贡献。
2)传输层传输过程
在传输层,上面数据被分割成小的数据段,并为每一个分段后的数据封装TCP报文头部。应用层将人们须要传输的信息转换成计算机可以识别的二进制数据后,这些数据每每都是海量的。例如:一张高清晰的图片转换成二进制数据可能会有几百万甚至几千万位,如此庞大的数据一次性传输的话,一旦网络出现问题而致使数据出错就要从新传输,数据量过大会加大出错的几率,最终可能会致使网络资源耗尽。所以,将数据先分割成小段再逐段传输,一旦出现数据传输错误只需重传这一小段数据便可。
在TCP头部有一个关键的字段信息---端口号,它用于标识上层的协议或应用程序,确保上层应用数据的正常通讯。
3)网络层传输过程
在网络层,上层数据被封装上新的报文头部---IP头部。值得注意的是,这里所说的上层数据包括TCP头部,也就是说,这里的上层是指传输层。对于网络层而言,它是“看不懂”TCP包头中的内容的,在它看来,不管是应用层的应用数据,仍是TCP头部信息都属于上层数据。
在IP头部中有一个关键的字段信息--IP地址,它是由一组32位的二进制数组成的,用于标识网络的逻辑地址。回想刚才寄信的例子,咱们在信封上填写了对方的详细地址和本地的详细地址,以保证收件人可以顺利收到信件。在网络层的传输过程与其很相似,在IP头部中包含目标IP地址和源IP地址,在网络传输过程当中的一些中间设备,如路由器,会根据目标IP地址来逻辑寻址,找到正确的路径将数据转发到目的端。若是中间的路由设备发现目标的IP地址根本是不可能到达的,它将会把该消息传回发送端主机,所以在网络层须要同时封装目标IP和源IP。
4)数据链路层传输过程
在数据链路层,上层数据被封装一个MAC头部,其内部有一个关键的字段信息--MAC地址,它由一组48位的二进制数组成。在目前阶段,咱们先把它理解为固化在硬件设备中的物理地址,具备全球惟一性。例如,以前讲解的网卡就有属于本身的惟一的MAC地址。和IP头部相似,在MAC头部同时封装着目标MAC地址和源MAC地址。
5)物理层传输过程
不管在以前哪一层封装的报文头部仍是上层数据信息都是由二进制数组成的,在物理层,将这些二进制数字组成的比特流转换成电信号在网络中传输。
在物理层,首先将电信号转换成二进制数据,并将数据送至数据链路层。在数据链路层,将查看目标MAC地址,判断其是否与本身的MAC地址吻合,并据此完成后续处理。若是数据报文的目标MAC地址就是本身的MAC地址,数据的MAC头部将被“拆掉”,并将剩余的数据传送至上一层;若是目标MAC地址不是本身的MAC地址,对于终端设备来讲,它将会丢弃数据。在网络层与在数据链路层相似,目标IP地址将被核实是否与本身的IP地址相同,从而肯定是否送至上一层;到了传输层,首先要根据TCP头部判断数据段送往哪一个应用层协议或应用程序。而后将以前被分组的数据段重组,再送往应用层;在应用层,这些二进制数据将经历复杂的解码过程,以还原发送者所传输的最原始的信息。
若是网络世界中只有终端设备,那将不能称之为网络。正由于有不少中转设备才造成了今天如此复杂的Internet网络,只不过一向做为网络用户的咱们没有机会感知他们的存在,这都是传输层的“功劳”。因为传输层经过端口号辅助上层创建最终用户间的端到端会话,所以对于最终用户而言,数据的真实传输过程都被掩藏起来。
例如:经过QQ软件即便通讯时,用户感受好像在和对方面对面沟通,全然不知本身要说的内容通过了多少交换机和路由器才到达对方那里,但这些过程是真实发生的。
在实际的网络环境中,最终的发送方和接收方每每相隔千山万水,中间会有不少的硬件设备起到中转的做用。为了说明整个过程,咱们假设了一种通讯结构,以下图,在两台通讯的计算机之间增长了两台交换机和路由器,发送主机的数据将会通过这些“中间设备”才能到达接收主机。
从这个过程咱们能够看出,数据在传输过程当中不断的进行着封装和解封装的过程,中间设备属于哪一层就在哪一层对数据进行相关的处理,以实现设备的主要功能。也正因如此,咱们称TCP/IP五层模型为“参考”模型,参考这五层模型能够帮助咱们很好的研究网络中的设备以及设备工做过程当中遵照的协议。
层名称 | 应用层 | 传输层 | 网络层 | 数据链路层 | 物理层 |
---|---|---|---|---|---|
典型设备 | 计算机 | 防火墙 | 路由器 | 交换机 | 网卡 |
格式 | 用途 |
---|---|
源端口号 | 发送方进程对应的端口号 |
目标端口号 | 接收端收到数据段后,根据这个端口号来肯定把数据送给哪一个应用程序的进程 |
序号 | 当TCP从进程接收数据字节时,就把他们存储在发送缓存中,并对每个字节进行编号。当数据到达目的地后,接收端会按照这个序号把数据从新排列,保证数据的正确性 |
确认号 | 是对发送端的确认信息,用它来告诉发送端这个序号以前的数据段都已经收到,如确认号是X,就是表示前X-1个数据段都已经收到 |
首部长度 | 用它能够肯定首部数据结构的字节长度。通常状况下TCP首部是20字节,但首部长度最大能够扩展为60字节 |
保留 | 这部分保留位做为从此扩展功能用 |
控制位 | 这六位有很重要的做用,TCP的链接,传输和断开都受这六个控制位的指挥 |
窗口值 | 说明本地可接收数据段的数目,这个值的大小是可变的,当网络通畅时将这个窗口值变大以加快传输速度,当网络不稳定时减少这个值可保证网络数据的可靠传输,TCP协议中的流量控制机制就是依靠变化窗口的大小实现的 |
校验和 | 用来作差错控制,TCP校验和的计算包括TCP首部,数据和其余填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时又进行一次校验和计算。若这两次的校验和一致,则说明数据基本是正确的,不然将认为该数据已被破坏,接收端将丢弃该数据 |
紧急指针 | 和URG配合使用 |
选项 | TCP首部能够有多达40字节的可选信息 |
报文类型 | 含义 | 状态 |
---|---|---|
SYN | 发起一个新链接 | 1表示发起链接 |
FIN | 释放一个链接 | 1表示结束链接 |
ACK | 确认序号有效 | 1表示序号有效 |
seq | 随机序号 | 随机数 |
ack | 随机序号回复 | ack=seq+1 |
1)第一次握手:Client将标志位SYN置为1,随机产生一个seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求创建链接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认链接请求,Server进入SYN_RCVD状态。
3)第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,若是正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,若是正确则链接创建成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间能够开始传输数据了。
1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传输,同时发送一个seq=x的随机序号。Client进入FIN_wait_1状态
2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)Server进入CLOSE_WAIT状态。
3)第三次挥手:Server发送一个FIN,用来关闭Server到CLient的数据传输,同时发送一个seq=y的随机数,Server进入LAST_ACK状态
4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次回挥手
TCP在网络中的应用范围很广,主要用在对数据传输可靠性要求高的环境中,如网页浏览,它使用的HTTP协议就是依赖TCP协议提供可靠性的。
格式 | 用途 |
---|---|
UDP长度 | 用来指出UDP的总长度,为首部加上数据 |
校验和 | 用来完成对UDP数据的差错检验,它的计算与TCP校验和相似。这是UDP协议提供的惟一可靠机制 |
UDP协议在实际工做中的应用也比较多,例如聊天工具QQ在处理发送短消息时就是使用了UDP的方式。不难想象,若是发送十几个字的短消息也使用TCP协议进行一系列的验证,将致使传输率大大降低。有谁愿意用一个“反应迟钝”的软件进行网络聊天呢?