概述
分层
- 数据链路层:有时称作网络接口层,通常包括操作系统的设备驱动程序和计算机中对应的网络接口卡。
- 网络层:处理分组在网络中的活动,如分组的选路。
- 运输层:主要为两台主机的应用程序进程之间的通信提供通用的数据传输服务。通用是指多种应用可以使用同一个运输层服务。
- 应用层:应用进程间通信和交互的规则。
封装
TCP 传给 IP 的数据单元称作 TCP报文段。IP 传给网络接口层的数据单元称作 IP 数据报。通过以太网传输的比特流称作帧。
应用程序使用 TCP/UDP 传输数据,运输层协议在生成报文首部时要存入一个应用程序的标识。TCP、UDP 使用16 bit 的端口号来表示不同的应用程序,把源端口号和目的端口号分别存入报文首部。
TCP 报文进入 IP 层时,IP 层会在首部存入一个长度为8 bit 的数值,称作协议域。1表示为 ICMP 协议, 2表示为 IGMP 协议, 6表示为 TCP 协议, 17表示为 UDP 协议。
数据从网络层进入数据链路层时,需要在帧首部加入一个16 bit的帧类型域,以指明生成数据的网络层协议。
分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈由下而上进行分用,同时去掉各层协议的首部。每个协议层都会检查报文首部的协议标识,从而确定接收数据的上层协议。
端口号
服务器一般使用知名的端口号,FTP 服务器的 TCP 端口号是21,Telnet 服务器的 TCP 端口号是23。客户端端口号也称为临时端口号,只有用户运行了这个应用程序时端口号才存在。
链路层
TCP/IP 协议族中,链路层主要有三个目的:1.为 IP 模块发送和接收 IP 数据报;2.为 ARP 模块发送ARP 请求和接收 ARP 应答;3.为 RARP 发送 RARP 请求和接收 RARP 应答。
数据链路层使用的信道主要有以下两种类型:
- 点对点信道
- 广播信道
SLIP
SLIP 的全程是 Serial Line IP。它是一种在串行线路上对 ip 数据报进行封装的简单格式。
SLIP 是一种简单的帧封装方法,有以下缺陷:
- 每一端必须知道对方的I P地址;
- 数据帧中没有类型字段(类似于以太网中的类型字段)。如果一条串行线路用于 SLIP,那么它不能同时使用其他协议;
- 没有在数据帧中加上检验和。
PPP 点对点协议
PPP 修改了 SLIP 协议中的所有缺陷,有三个组成部分:
- 在串行链路上封装I IP 数据报的方法;
- 一个用来建立、配置和测试数据链路连接的链路控制协议LCP;
- 一套网络控制协议NCP。
MTU:最大传输单元。如果 IP 层传输数据比链路层的 MTU 大,那么需要在 IP 层对数据进行分片。
环回接口(Loopback Interface)允许运行在同一台主机上的客户端和服务器通过 tcp/ip 进行通信。大多数系统把 ip 地址127.0.0.1 分配给这个接口,命名为 localhost。一个传给环回接口的数据报不能出现在任何网络上。
以太网
在局域网中,硬件地址又称为物理地址或MAC地址。
网际协议
IP 协议特点有:
- 不可靠。不能保证 IP 数据报能成功地到达目的地。IP 仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区, IP有一个简单的错误错误处理算法:丢弃该数据报,然后发送 ICMP 消息报给信源端。任何要求的可靠性必须由上层来提供。
- 无连接。IP 并不维护任何关于后续数据报的状态信息。
IP 首部
IP 数据报的格式:
TTL 设置了数据报可以经过的最多路由器数目。TTL 初始值由主机设置,每经过一个路由器它的值会减一。当该字段的值为0时,数据报就被丢弃,并发送 ICMP 报文通知源主机。
IP 路由选择
IP 层可以配置成路由器的功能,也可以配置成主机的功能。
路由表包含的信息:1.目的 ip 地址;2.下一跳路由器的 ip 地址;3.标志。其中一个标志指明目的 ip 地址是网络地址还是主机地址,另一个标志指明下一跳路由器是否是真正的路由器,还是一个直接连接的接口。
ip 路由选择主要完成以下功能:
- 搜索路由表,寻找能与目的 ip 地址完全匹配的表目(网络号和主机号都要匹配);
- 搜索路由表,寻找能与目的网络号相匹配的表目;
- 搜索路由表,寻找默认路由。
如果上述步骤都没有成功,那么该数据报不能被传送。
为一个网络指定一个路由器,而不是为每个主机指定路由器,可以极大的缩小路由表的规模。
子网寻址
B 类地址:16位网络号;8位子网号;8位主机号
子网对外部路由器来说隐藏了内部网络组织(一个校园或公司内部)的细节。
通过 ip 地址可以分辨属于 A/B/C/D 类地址。通过子网掩码可以知道子网号和主机号之间的分界线。
ARP
地址解析协议。ARP 的功能是在同一个局域网内为32 bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。
工作原理
首先,每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
分组格式
目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
两个字节长的以太网帧类型表示后面数据的类型。对于A R P请求或应答来说,该字段的值为0x0806。
硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示 IP 地址。
操作字段 op 有四种类型,ARP 请求(值为1)、ARP 应答(2)、RARP 请求(3)和 RARP 应答(4)。这个字段是必须的,因为 ARP 请求和 ARP 应答的帧类型值是一样的。
对于一个 ARP 请求,除了目的端硬件地址(以太网地址)外的所有字段都需要填满。当系统收到一个目的主机为本机的ARP 请求后,它会把自己的硬件地址填写进去,然后将两个目的端硬件地址改成发送 ARP 请求的主机的硬件地址。
ARP 代理
如果 APR 请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作 ARP 代理。这样可以欺骗发起 ARP 请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。
RARP
逆地址解析协议。具有本地磁盘的系统引导时,一般从磁盘的配置文件读取 IP 地址。而无盘系统通过 RARP 协议来读取 ip:从接口卡上读取唯一的硬件地址,在分组中表明发送端的硬件地址,然后发送 RARP 请求,请求某个主机响应该无盘系统的 IP 地址(RARP 应答中)。
分组格式
RARP 的分组格式和 ARP 的分组格式类似,主要区别是 RARP 请求或应答的帧类型是0x8053,而且 RARP 请求的 op 操作代码是3,RARP 应答的 op 操作代码是4。
ICMP
Internet 控制报文协议。ICMP 通常被认为是 IP 层的组成部分。它被用来传递报文以及其他需要注意的信息。ICMP 报文通常被 IP 层或者更高层的协议使用。
ICMP 报文类型
查询报文和差错报文。
ICMP 地址掩码请求与应答
ICMP 地址掩码请求用于无盘系统在引导过程获取自己的子网掩码。
ICMP 时间戳请求与应答
ICMP 时间戳请求系统向另一个系统查询当前时间。
ICMP 端口不可达差错
如果收到一份 UDP 数据报而目的端口与某个正在使用的进程不相符,那么 UDP 就会返回一个端口不可达报文。
Traceroute
Traceroute 程序的操作过程。开始时发送一个 TTL 字段为1的 UDP 数据报,然后将 TTL 字段每次加1,以确定路径中的每个路由器。每个路由器在丢弃 UDP 数据报时都返回一个 ICMP 超时报文,而最终目的主机则产生一个ICMP 端口不可达的报文(Traceroute 程序发送数据报给目的主机时指定了一个不可能的值作为 UDP 端口,目的主机任何应用程序都不可能使用此端口)。
对于每个 TTL 值会发送三份数据报,每接收到一份 ICMP 报文,就计算并打印出往返时间。如果在5秒种内仍未收到3份数据报的任意一份的响应,则打印一个星号,并发送下一份数据报。
tracert baid.com
IP 选路
系统产生的或转发的每份 IP 数据报都要搜索路由表,它可以被路由守护程序或 ICMP 重定
向报文修改。
广播和多播
三种 IP 地址:单播地址、广播地址和多播地址。广播和多播仅适用于 UDP。多播的数据帧仅发送给属于多播组的多个主机。
网卡查看由信道传送过来的帧,确定是否接收该帧,若接收后就将它传往设备驱动程序。通常网卡仅接收那些目的地址为网卡物理地址或广播地址的帧。
如果网卡收到一个帧,这个帧将被传送给设备驱动程序(如果帧检验和错,网卡将丢弃该帧)。设备驱动程序将进行另外的帧过滤。首先,帧类型中必须指定要使用的协议( IP、ARP等等)。其次,进行多播过滤来检测该主机是否属于多播地址说明的多播组。
广播是将数据报发送到网络中的所有主机(通常是本地相连的网络),而多播是将数据报发送到网络的一个主机组。。在许多应用中,多播比广播更好,因为多播降低了不参与通信的主机的负担。
IGMP
Internet 组管理协议用于支持主机和路由器进行多播。它让一个物理网络上的所有系统知道当前主机所在的多播组。。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。跟 ICMP 一样,IGMP 也被当做 IP 层的一部分,IGMP 报文通过 IP 数据报进行传输。IGMP 有固定的报文长度,没有可选的数据。
UDP
UDP 是一个简单的面向数据报的运输层协议。
特点
无连接:发送数据之前不需要建立连接。
不可靠的服务:尽最大努力的交互,主机不需要维持复杂的连接状态表。
面向报文:发送方的 UDP 对应用程序传进来的报文,在添加首部后就向下交给 IP 层。
没有拥塞控制:网络出现拥塞不会使源主机的发送速率变慢。
支持一对一、一对多、多对多的交互通信。
UDP 的首部开销小。
首部
伪首部既不向上传送也不向下提交,而仅仅为了计算检验和。伪首部第三字段是全0,第四个字段是 IP 首部中协议字段的值,对于 UDP,此协议字段值为17。
TCP
TCP 提供一种面向连接的、可靠的字节流服务。
特点
- 面向连接。应用程序传输数据之前需要先建立连接。
- 提供可靠交互的服务。
- 全双工通信。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。
- 面向字节流。TCP 把应用程序交下来的数据仅仅看成一串无结构的字节流。
停止等待协议
每发送一个分组就会设置一个超时计数器,如果在计数器没有过期之前收到了对方的确认,就撤销超时计数器。
a 图 B 对 M1 的确认丢失了,A 会重传 M1,然后 B 会收到重复的 M1,将其丢弃,重传确认。
b 图 B 对 M1 的确认在网络滞留,A重传M1,最后会收到两次对M1确认,A会手下迟到的确认但是什么都不做。
首部
序号:TCP 连接中传送的字节流中的每一个字节都按顺序编号。
数据偏移:TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。
紧急 URG:当 URG = 1时,表明紧急指针字段有效,它告诉系统此报文段有紧急数据,应该尽快传送,不要按照之前的排队顺序来传送。
推送 PSH:接收方收到一个 PSH = 1 的报文段,就会尽快把数据交互到应用程序,而不再等到整个缓存填充满了再向上交互。
复位 RST:当 RST = 1 时,表明 TCP 连接中出现了严重差错,必须释放连接,重新建立连接。
同步 SYN:建立连接同步序号。
窗口:窗口值表明接收方能接受多少数据。窗口值作为接收方让发送方设置其发送窗口的依据。
检验和:检验的范围包括首部和数据。
紧急指针:URG = 1时有效,指明紧急字段的末尾在报文段的位置。在窗口为0时也可以发送紧急数据。
最大报文段长度 MSS:默认值是536字节。
DNS
域名系统是一种用于 TCP/IP 应用程序的分布式数据库,它提供主机名字和 IP 地址之间的转换及有关电子邮件的选路信息。
TFTP
简单文件传输协议是一个简单的协议,适合于只读存储器,仅用于无盘系统进行系统引导。TFTP 使用不可靠的 UDP,需要处理分组丢失和分组重复。
BOOTP
BOOTP 使用 UDP,它为引导无盘系统获得它的 IP 地址提供了除 RARP 外的另外一种选择。
阅读量