TCP/IP协议栈模型
OSI七层模型介绍:
下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主;第4层作为上下两部分的桥梁,是整个网络体系结构中最关键的部分;而上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主。
物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,尽可能屏蔽掉具体传输介质和物理设备的差异。
数据链路层主要功能:建立和管理节点间的链路。通过各种控制协议,通过差错控制、流量控制方法,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
该层通常又被分为介质访问控制(MAC)和逻辑链路控制(LLC)两个子层。MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制;LLC子层的主要任务是建立和维护网络连接,执行差错校验、流量控制和链路控制。
具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层;并且,还负责处理接收端发回的确认帧的信息,以便提供可靠的数据传输。
网络层主要任务是:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。
路由算法:当源节点和目的节点之间存在多条路径时,本层可以根据路由算法,通过网络为数据分组选择最佳路径,并将信息从最合适的路径由发送端传送到接收端。
传输层主要任务:
传输连接管理:提供建立、维护和拆除传输连接的功能。传输层在网络层的基础上为高层提供“面向连接”和“面向无接连”的两种服务。
处理传输差错:提供可靠的“面向连接”和不太可靠的“面向无连接”的数据传输服务、差错控制和流量控制。在提供“面向连接”服务时,通过这一层传输的数据将由目标设备确认,如果在指定的时间内未收到确认信息,数据将被重发。
监控服务质量。
会话层主要任务:
会话管理:允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。例如提供单方向会话或双向同时会话,并管理会话中的发送顺序,以及会话所占用时间的长短。
会话流量控制:提供会话流量控制和交叉会话功能。
寻址:使用远程地址建立会话连接。l
出错控制:从逻辑上讲会话层主要负责数据交换的建立、保持和终止,但实际的工作却是接收来自传输层的数据,并负责纠正错误。会话控制和远程过程调用均属于这一层的功能。
表示层主要功能:处理用户信息的表示问题,如数据编码、数据格式转换、加密解密、压缩和解压缩等
应用层主要功能:
用户接口:应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互式联系。
实现各种服务:该层具有的各种应用程序可以完成和实现用户请求的各种服务。
TCP/IP协议的工作流程如下:
●在源主机上,应用层将一串应用数据流传送给传输层。
●传输层将应用层的数据流截成分组,并加上TCP报头形成TCP段,送交网络层。
●在网络层给TCP段加上包括源、目的主机IP地址的IP报头,生成一个IP数据包,并将IP数据包送交链路层。
●链路层在其MAC帧的数据部分装上IP数据包,再加上源、目的主机的MAC地址和帧头,并根据其目的MAC地址,将MAC帧发往目的主机或IP路由器。
●在目的主机,链路层将MAC帧的帧头去掉,并将IP数据包送交网络层。
●网络层检查IP报头,如果报头中校验和与计算结果不一致,则丢弃该IP数据包;若校验和与计算结果一致,则去掉IP报头,将TCP段送交传输层。
●传输层检查顺序号,判断是否是正确的TCP分组,然后检查TCP报头数据。若正确,则向源主机发确认信息;若不正确或丢包,则向源主机要求重发信息。
●在目的主机,传输层去掉TCP报头,将排好顺序的分组组成应用数据流送给应用程序。这样目的主机接收到的来自源主机的字节流,就像是直接接收来自源主机的字节流一样。
********************************************************************
既然每个以太网设备在出厂时都有一个唯一的MAC地址了,那为什么还需要为每台主机再分配一个IP地址呢?或者说为什么每台主机都分配唯一的IP地址了,为什么还要在网络设备(如网卡,集线器,路由器等)生产时内嵌一个唯一的MAC地址呢?主要原因有以下几点:(1)IP地址的分配是根据网络的拓朴结构,而不是根据谁制造了网络设置。若将高效的路由选择方案建立在设备制造商的基础上而不是网络所处的拓朴位置基础上,这种方案是不可行的。(2)当存在一个附加层的地址寻址时,设备更易于移动和维修。例如,如果一个以太网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。(3)无论是局域网,还是广域网中的计算机之间的通信,最终都表现为将数据包从某种形式的链路上的初始节点出发,从一个节点传递到另一个节点,最终传送到目的节点。数据包在这些节点之间的移动都是由ARP(Address Resolution Protocol:地址解析协议)负责将IP地址映射到MAC地址上来完成的。下面我们来通过一个例子看看IP地址和MAC地址是怎样结合来传送数据包的。
IP地址和MAC地址相同点是它们都唯一,不同的特点主要有:
1. 对于网络上的某一设备,如一台计算机或一台路由器,其IP地址可变(但必须唯一),而MAC地址不可变。
2. 长度不同。IP地址为32位,MAC地址为48位。 3. 分配依据不同。IP地址的分配是基于网络拓朴,MAC地址的分配是基于制造商。
4. 寻址协议层不同。IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层。
********************************************************************
TCP/IP协议栈四层模型介绍:
链路层
- 将数据封装为帧(frame),帧是数据链路层的传送单位;
- 控制帧的传输,包括处理传输差错,调节发送速率与接收方相匹配;
- 在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。
差错控制:
1.反馈重发
接收方通过对差错编码(奇偶校验码或 CRC 码)的检查,可以判定一帧在传输过程中是否发生了差错。一旦发现差错,一般可以采用反馈重发的方法来纠正。接受方收完一帧后,向发送方反馈一个接收是否正确的信息,发送方仅当收到接收方已正确接收的反馈信号后才能认为该帧已经正确发送完毕,否则需要重发直至正确为止。
2.计时器
引入 计时器 (Timer) 来限定接收方发回反馈消息的时间间隔。计时器超时(Timeout),则可认为传出的帧以出错或丢失,就要重新发送。
3.序号
防止同一帧数据被重复发送多次,对发送的帧编号
流量控制
对发送方数据流量的控制,使其发送速率不超过接收方的速率。
PPP(点对点协议)
PPP(点到点协议)是为在同等单元之间传输数据设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据。设计目的主要是用来通过 拨号或专线 方式建立 点对点 连接发送数据,为在点对点连接上传输多协议数据包提供了一个标准方法。
SLIP 协议
SLIP 的缺陷:
- 每一端必须知道对端的 IP 地址,没有办法把本端 IP 地址传递给对端;
- 数据帧中无类型字段,当一条串行线路使用 SLIP 时则不能使用其他协议;
- SLIP 数据帧中无 checksum,只能依靠上层协议来发现和纠正错误。
********************************************************************
网络层
所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。
IP 协议提供的是 不可靠 、 无连接 的数据报传送服务。
- 不可靠:IP 协议不能保证数据包能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据包。传输的可靠性全由上层协议(如TCP)来提供。
- 无连接:IP 协议对每个数据包的处理是相互独立的。这也说明, IP 数据包可以不按发送顺序接收。
IP数据报头:
标识:接收方根据分片中的标识字段相不相同来判断这些分片是不是同一个数据报的分片,从而进行分片的重组;
标志:用于标识数据包是否分片;
偏移:在接收方进行数据报重组时用来标识分片的顺序;
生存时间(TTL) :用于设置数据报可以经过的最多的路由器个数。首部校验和 :根据 IP 首部计算的校验和码;
源 IP 和目的 IP :数据报头还会包含该数据报的发送方 IP 和接收方 IP。
IP = 网络号 + 子网号 + 主机号
子网掩码 来确定一个 IP 地址中哪几位是主机号;
IP 路由选择
IP 层在内存中有一个路由表(输入命令 route -n 可以查看路由表),当收到一份数据报并进行发送时,都要对该表进行搜索:
- 1、搜索路由表,如果能找到和目的 IP 地址完全一致的主机,则将 IP 数据报发向该主机;
- 2、搜索路由表,如果匹配主机失败,则匹配同子网的路由器(这需要子网掩码的协助)。如果找到路由器,则将 IP 该数据报发向该路由器;
- 3、搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该 IP 数据报发向该路由器;
- 4、如果以上都失败了,就搜索默认路由,如果默认路由存在,则发报;
- 6、如果都失败了,就丢掉这个包;
- 7、接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
- 8、如果在转发过程中,IP 数据报的 TTL(生命周期)已经被减为 0,则该 IP 数据报就被抛弃。
网络层其他协议:
ARP(Address Resolution Protocol)、
ICMP(Internet Control Message Protocol),控制报文协议,ping 程序(对两台主机之间连通性进行测试)和 traceroute 程序(侦测主机到目的主机之间所经路由情况)是两个常见的 基于 ICMP 协议 的工具。
IGMP(Internet Group Management Protocol)组管理协议
ARAR(逆向地址解析协议)
ARP地址解析协议
当主机通过数据链路发送数据的时候, IP 数据报会先被封装为一个 数据帧 ,而 MAC 地址 会被添加到数据帧的 报头 (链路层介绍时已讲过)。
ARP 便是在这个过程中通过目标主机的 IP 地址,查询目标主机的 MAC 地址。
在你的电脑和路由器中都有一个 ARP 缓存表 ,其中保存的是近期(20 分钟)与自己有过通信的主机的 IP 地址与 MAC 地址的对应关系。
ARP 缓存表使用过程:
- 当主机要发送一个 IP 数据报的时候,会首先查询一下自己的 ARP 缓存表;
- 如果在 ARP 缓存表中找到对应的 MAC 地址,则将 IP 数据报封装为数据帧,把 MAC 地址放在帧首部,发送数据帧;
- 如果查询的 IP-MAC 值对不存在,那么主机就向网络中广播发送一个 ARP 请求数据帧,ARP 请求中包含待查询 IP 地址;
- 网络内所有收到 ARP 请求的主机查询自己的 IP 地址,如果发现自己符合条件,就回复一个 ARP 应答数据帧,其中包含自己的 MAC 地址;
- 收到 ARP 应答后,主机将其 IP - MAC 对应信息存入自己的 ARP 缓存,然后再据此封装 IP 数据报,再发送数据帧。
********************************************************************
传输层
- 常见的应用程序占用的系统端口号:
应用层协议: | FTP | TELNET | SMTP | DNS | TFTP | HTTP | SNMP |
系统端口号: | 21 | 23 | 25 | 53 | 69 | 80 | 161 |
UDP(User Datagram Protocol)用户数据报协议
主要特点有:
- (1).UDP 是无连接的,发送数据之前不需要建立连接(而 TCP 需要),减少了开销和时延。
- (2).UDP尽最大努力交付,不保证交付可靠性。
- (3).UDP 是面向报文的,对于应用层交付的数据,只做很简单的封装(8 字节 UDP 报头),首部开销小。
- (4).UDP 没有拥塞控制,出现网络拥塞时发送方也不会降低发送速率。这种特性对某些实时应用是很重要的,比如 IP 电话,视频会议等,它们允许拥塞时丢失一些数据,因为如果不抛弃这些数据,极可能造成时延的累积。
- (5).UDP 支持一对一、一对多、多对一和多对多的交互通信。
【UDP报头】:包含源端口、目的端口、校验和(用于检验 UDP 数据报在传输过程中是否有出错,有错就丢弃);
TCP传输控制协议:
主要特点:
- (1) TCP 提供 可靠的 数据传输服务,TCP 是 面向连接的 。应用程序在使用 TCP 通信之前,先要建立连接,TCP建立连接三次握手,释放连接四次握手。
- (2) TCP 连接是 点对点 的,一条 TCP 连接只能连接两个端点。
- (3) TCP 提供可靠传输,无差错、不丢失、不重复、按顺序。
- (4) TCP 提供 全双工 通信,允许通信双方任何时候都能发送数据,因为 TCP 连接的两端都设有发送缓存和接收缓存。
- (5) TCP 面向 字节流 。TCP 并不知道所传输的数据的含义,仅把数据看作一连串的字节序列,它也不保证接收方收到的数据块和发送方发出的数据块具有大小对应关系。
TCP 是面向字节流的,而 TCP 传输数据的单元是 报文段(Segment);
【TCP报头】
源端口和目的端口;
序号seq: TCP 传送的字节流中的每个字节都按顺序编号,而报头中的序号字段值则指的是本报文段数据的第一个字节的序号;
确认序号ack:占 4 字节,期望收到对方下个报文段的第一个数据字节的序号;
控制位:共有 6 个控制位,说明本报文的性质:
ACK 确认:仅当 ACK=1 时确认号ack字段才有效。建立 TCP 连接后,所有报文段都必 须把 ACK 字段置为 1。
SYN 同步:用于建立和释放连接,稍后会详细介绍。
FIN 终止:用于释放连接,当 FIN=1,表明发送方已经发送完毕,要求释放 TCP 连接。
窗口:发送者自己的接收窗口大小;
检验和:检查报文是否在传输过程中出差错;
三、连接的建立与释放
刚才说过,TCP 是面向连接的,在传输 TCP 报文段之前先要创建连接,发起连接的一方被称为客户端,而响应连接请求的一方被称为服务端,而这个创建连接的过程被称为 三次握手 :
- (1) 客户端发出请求连接报文段,其中报头控制位 SYN=1,初始序号 seq=x。客户端进入 SYN-SENT(同步已发送)状态。
- (2) 服务端收到请求报文段后,向客户端发送确认报文段。确认报文段的首部中 SYN=1,ACK=1,确认号是 ack=x+1,同时为自己选择一个初始序号 seq=y。服务端进入 SYN-RCVD(同步收到)状态。
- (3) 客户端收到服务端的确认报文段后,还要给服务端发送一个确认报文段。这个报文段中 ACK=1,确认号 ack=y+1,而自己的序号 seq=x+1。这个报文段已经可以携带数据,如果不携带数据则不消耗序号,则下一个报文段序号仍为 seq=x+1。
至此 TCP 连接已经建立,客户端进入 ESTABLISHED(已建立连接)状态,当服务端收到确认后,也进入 ESTABLISHED 状态,它们之间便可以正式传输数据了。
当传输数据结束后,通信双方都可以释放连接,这个释放连接过程被称为 释放连接 :
- (1) 此时 TCP 连接两端都还处于 ESTABLISHED 状态,客户端停止发送数据,并发出一个 FIN 报文段。首部 FIN=1,序号 seq=u(u 等于客户端传输数据最后一字节的序号加 1)。客户端进入 FIN-WAIT-1(终止等待 1)状态。
- (2) 服务端回复确认报文段,确认号 ack=u+1,序号 seq=v(v 等于服务端传输数据最后一字节的序号加 1),服务端进入 CLOSE-WAIT(关闭等待)状态。现在 TCP 连接处于半开半闭状态,服务端如果继续发送数据,客户端依然接收。
- (3) 客户端收到确认报文,进入 FIN-WAIT-2 状态,服务端发送完数据后,发出 FIN 报文段,FIN=1,确认号 ack=u+1,然后进入 LAST-ACK(最后确认)状态。
- (4) 客户端回复确认确认报文段,ACK=1,确认号 ack=w+1(w 为半开半闭状态时,收到的最后一个字节数据的编号) ,序号 seq=u+1,然后进入 TIME-WAIT(时间等待)状态。
注意此时连接还没有释放,需要时间等待状态结束后(4 分钟) 连接两端才会 CLOSED。设置时间等待是因为,有可能最后一个确认报文丢失而需要重传。
TCP 可靠传输的实现
- (1) TCP 报文段的长度可变,根据收发双方的缓存状态、网络状态而调整。
- (2) 当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。
- (3) 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。这就是稍后介绍的超时重传。
- (4) TCP 将保持它首部和数据的检验和。如果通过检验和发现报文段有差错,这个报文段将被丢弃,等待超时重传。
- (5) TCP 将数据按字节排序,报文段中有序号,以确保顺序的正确性。
- (6) TCP 还能提供流量控制。TCP 连接的每一方都有收发缓存。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
可见超时重发机制是 TCP 可靠性的关键,只要没有得到确认报文段,就重新发送数据报,直到收到对方的确认为止。
实际应用中:发送方采用了流水线传输, 接收方采用累计确认方式,提升传输效率;
********************************************************************
应用层
DNS (Domain Name Service 域名服务) 协议基于 UDP,使用端口号 53。
DNS 提供的是域名与 IP 地址的对应关系,而 ARP 提供的是 IP 地址和 MAC 地址的对应关系。
host 命令 进行 DNS 查询,主机向 DNS 服务器发出的查询叫做DNS 报文;
域名解析的的优先顺序是:先在 DNS 缓存(当一个 DNS 服务器接收到一个 DNS 回答后,会将其信息缓存一段时间)查询,若没有找到记录,再查询 hosts 文件,若还是没找到记录,再向 DNS 服务器发出 DNS 查询报文。
FTP (File Transfer Protocol 文件传输协议) 基于 TCP,使用端口号 20(数据)和 21(控制)。
- FTP 只提供文件传输的基本服务,它采用 客户端—服务器 的方式,一个 FTP 服务器可同时为多个客户端提供服务。
- 在进行文件传输时,FTP 的客户端和服务器之间会建立两个 TCP 连接:21 号端口建立控制连接,20 号端口建立数据连接。
- FTP 的传输有两种方式:ASCII 传输模式和二进制数据传输模式。
HTTP (HyperText Transfer Protocol 超文本传输协议) 基于 TCP,使用端口号 80 或 8080。
- 点击一个链接后,浏览器向服务器发起 TCP 连接;
- 连接建立后浏览器发送 HTTP 请求报文,然后服务器回复响应报文;
- 浏览器将收到的响应报文内容显示在网页上;
- 报文收发结束,关闭 TCP 连接。
响应报文的状态码是一个 3 位数字,分为 5 类 33 种:
- 1xx 表示通知信息,如收到或正在处理。
- 2xx 表示成功接收。
- 3xx 表示重定向。
- 4xx 表示客户的差错,如 404 表示网页未找到。
- 5xx表示服务器的差错,如常见的 502 Bad Gateway。
Telnet 协议,远程登陆服务的标准协议和主要方式,它基于 TCP 协议,使用端口 23。
telnet 可以测试目标机器的TCP端口是否开放: telnet IP地址 端口号
TFTP 协议:简单文件传输的协议,提供不复杂、开销不大的文件传输服务,它基于 UDP 协议,使用端口 69 。它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证。
TFTP也有着它自身的优点:
- TFTP 可用于 UDP 环境;比如当需要将程序或者文件同时向许多机器下载时就往往需要使用到 TFTP 协议。
- TFTP 代码所占的内存较小,这对于小型计算机或者某些特殊用途的设备来说是很重要的,TFTP 具有更多的灵活性,也减少了开销。
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,使用 TCP 协议,使用端口 25 ;
POP3(Post Office Protocol Version 3 )即邮局协议版本3,主要用于支持使用客户端远程管理在服务器上的电子邮件,使用 TCP 协议,使用端口 110 。
********************************************************************