学习目标
理解网络层的作用, 深入理解IP协议的基本原理
理解数据链路层的作用, 了解ARP协议
对整个TCP/IP协议有系统的理解
对TCP/IP协议体系下的其他重要协议和技术有一定的了解
学会使用一些分析网络问题的工具和方法
一、网络层
在复杂的网络环境中确定一个合适的路径,将数据包从源主机转发到目标主机。
网络层提供将数据跨主机传输的能力,传输层为这种传输的可靠性制定策略。
2.1 IP协议
定义了如何将数据包从一个主机发送到另一个主机,可能跨越多个网络和链路。
2.1.1 相关概念
路由:确定如何将数据包从源机器转发到目标机器的过程
主机: 配有IP地址, 但是不进行路由控制的设备
路由器: 即配有IP地址, 又能进行路由控制
节点: 主机和路由器的统称
2.1.2 IP地址
IP地址(互联网协议地址)是一个分配给每个在TCP/IP网络(如互联网)上的设备的数字标签。它用于标识和定位设备在网络上的位置。每个设备,无论是个人计算机、手机、路由器或其他,只要它希望在网络上发送或接收数据,都需要一个IP地址。
(1)IPv4
格式: 由四个介于0和255之间的十进制数字组成,这些数字通过点分隔。例如: 192.168.1.1。
地址空间: IPv4提供了约43亿个地址,这看起来很多,但由于互联网的快速增长,这些地址已经耗尽。
分类: IPv4地址分为几个类别,如A、B、C、D和E,但实际使用中更多地是基于CIDR(无类别域间路由)的方法来划分和分配地址。
(2)IPv6
格式: 由8组16位十六进制数字组成,每组数字之间用冒号分隔。例如: 2001:0db8:85a3:0000:0000:8a2e:0370:7334。
地址空间: IPv6提供了一个巨大的地址空间,这使得每个设备都可以有一个公网地址,而不必像IPv4中那样使用NAT(网络地址转换)技术。
过渡: 由于IPv6和IPv4不直接兼容,所以引入了多种技术来实现两者之间的过渡和互操作
2.1.3 地址类型
公网地址: 在整个互联网上都是唯一的,用于互联网上的设备。
私有地址: 只在私有网络(如家庭或公司网络)内部唯一。这些地址不能直接在公共互联网上路由。IPv4的私有地址范围经常被用于此目的,如10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。
2.2 协议头格式
2.2.1 属性字段
4位版本号(version): 指定IP协议的版本, 例如IPv4。
4位头部长度(header length): IP头部的长度(以32位字为单位)。
8位服务类型(Type Of Service): 原来用于描述服务质量需求(如低延迟、高吞吐量等)。现在大多用于DSCP(差分服务代码点)和ECN(显式拥塞通知)。
16位总长度(total length): 表示整个IP数据包(包括头和数据)的长度。
8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数,一般是64。每次经过一个路由器, TTL -= 1,小于0后报文丢弃。防止出现路由循环,占用网络资源
8位协议: 表示上层协议的类型
16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
32位源地址和32位目标地址: 表示发送端和接收端.
(1)16位标识
唯一的标识主机发送的报文。如果IP报文在数据链路层被分片了, 那么每一个片里面的这个标识(序号)都是相同的。
(2)3位标志字段
第一位保留
第二位(DF)表示禁止分片,数据包是否允许被分片
如果报文长度超过MTU, IP模块就会丢弃报文
第三位(MF)表示"更多分片",是否还有更多的分片来组成完整的数据
如果分片了的话, 最后一个分片的更多分片置为1, 其他是0,用于标记结束
(3)13位分片偏移
相对于原始IP报文开始处的偏移,当前分片在原报文中处在哪个位置。
2.2.2 分片、组装
分片(Fragmentation)和组装(Reassembly)是IP层中用于处理大数据包的两个关键过程。当一个数据包太大而不能通过某个网络链路时,该数据包需要被分片成多个小数据包。在目的地,这些小数据包需要被重新组装成原始的大数据包。
(1)分片
发生的原因: 当一个数据包要通过的网络链路的MTU(最大传输单元)小于数据包的大小时,该数据包需要被分片。例如,Ethernet通常有一个1500字节的MTU。
操作: 数据包被切成几个片段,每个片段的大小不超过MTU。每个分片都是一个独立的IP数据包,并且都有自己的IP头。
标识与偏移: 每个分片都有相同的“标识”字段,但具有不同的“片偏移”值,用于指示这个片段在原始数据包中的位置。
MF标志: 所有分片(除了最后一个)的“更多分片”(MF)标志都设置为1,最后一个片段的MF标志设置为0,以指示没有更多的分片。
(2)组装(Reassembly)
目标: 目标是将所有相关的分片重新组合成一个完整的数据包。
过程: 接收方使用每个分片的“标识”字段来确定哪些分片属于同一个原始数据包。然后,它使用“片偏移”字段来确定如何将这些片段重新组合。
完整性检查: 一旦接收到没有设置MF标志的分片,接收方知道它已经接收到了最后的分片。此时,如果所有的分片都已被接收并正确地组装,数据包就被视为完整。
超时与丢失: 如果在一定时间内某些分片没有被接收,接收方通常会放弃,并丢弃已经接收到的该数据包的所有分片。这是因为在某些情况下,分片可能会在传输过程中丢失。
(3)问题
效率: 分片和组装过程需要处理器和内存资源,可能导致网络设备的性能下降。
不可靠性: 如果只丢失一个分片,整个数据包都会被丢弃。
安全性: 分片可能被用于某些网络攻击,如重组攻击或覆盖分片攻击。
分片会大大增加丢包的概率,网络层是否分片是由传输层决定的,在三次握手时,会协商单词传输数据的报文大小,减少分片。
2.3 网段划分
网段划分,也叫子网划分,是指将一个IP地址范围(或称为网络段)分割成多个较小的IP地址范围。
这是为了更好地管理和分配IP地址资源,提高地址使用率,增强网络的安全性和减少广播流量等。
有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便。
一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器。
2.3.1 IP地址
IP地址=网络号+主机号
网络号: 保证相互连接的两个网段具有不同的标识
主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号
2.3.2 子网(Subnet)
子网是一个更小的、独立的IP地址范围,从原始网络中划分出来的。每个子网都有自己的网络地址和广播地址。
2.3.3 划分方案
(1)划分五类
A类 0.0.0.0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255
(2)CIDR
引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
1)子网掩码(Subnet Mask)
子网掩码是用来识别IP地址中的网络部分和主机部分的。常见格式如
255.255.255.0
或/24
(CIDR表示法)。
2)划分案例
考虑一个C类网络
192.168.1.0/24
。假设我们需要4个子网,每个子网至少有50个主机地址。选择子网掩码
/26
(即255.255.255.192
),因为这将提供4个子网,每个子网有62个可用的主机地址(64-2,减去网络地址和广播地址)。
2.3.4 特殊IP
将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
2.4 IP数量限制
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不够使用
2.4.1 动态分配IP地址
只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到 的IP地址不一定是相同的
2.4.2 NAT技术
(1)路由器
一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
不同的路由器, 子网IP其实都是一样的。
每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN口IP就是一个公网IP了.
(2)路由
在复杂的网络结构中, 找出一条通往终点的路线。
当IP数据包, 到达路由器时, 路由器会先查看目的IP,判断数据包是能直接发送给目标主机, 还是需要发送给下一个路由器,依次反复, 一直到达目标IP地址。
(3)路由表
当一个设备需要决定如何转发一个数据包时,它会查看路由表,并根据目标地址选择最匹配的路由。如果设备找不到与数据包目标地址匹配的路由,它通常会将数据包发送到默认路由(如果配置了的话)或直接丢弃数据包。
(4)NAT技术
子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换).
2.4.3 IPv6
IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表 示一个IP地址。
2.5 跨网络通信原理
当上层的数据(如传输层的TCP或UDP段)到达网络层时,网络层会添加IP头部,形成IP数据包。
如果数据包太大而无法通过某个网络链路,它可能会在传输中被分片。每个分片都有自己的IP头,当所有分片到达目的地后,它们会被重新组装成原始数据包。
当数据包到达一个路由器时,路由器会检查其目标IP地址,然后查找其路由表以确定如何转发该数据包。路由器可以决定直接发送数据包(如果目标主机与路由器在同一个局域网内)或将其发送到另一个路由器(作为下一跳)。
多个不同的网络和多个路由器,每个路由器都根据其路由表做出转发决策,确保数据包沿着最佳路径传输。
三、数据链路层
用于两个设备(同一种数据链路节点)之间进行传递,即提供数据在局域网传输的能力
3.1 以太网帧格式
源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
帧协议类型字段有三种值,分别对应IP、ARP、RARP;
帧末尾是CRC校验码。
3.2 相关概念
3.2.1 MAC
MAC地址用来识别数据链路层中相连的节点。
IP地址描述的是路途总体的 起点 和 终点
MAC地址描述的是路途上的每一个区间的起点和终点;
3.2.2 MTU
MTU(Maximum Transmission Unit)是指数据链路层上可以传输的最大数据单元的大小,不包括链路层的头部和尾部。它定义了网络路径上任何给定点能够处理的最大尺寸的数据包,超过这个尺寸的数据包将被分片或丢弃。
局域网通信是基于碰撞域,而为了减小碰撞,网络层往下交付数据链路层数据帧有最大传输约束。
标准以太网的默认MTU大小为1500字节。这意味着,除了以太网帧的头和尾外,最大可以发送1500字节的数据。
MSS (Maximum Segment Size):是TCP协议中的一个概念,与MTU密切相关。MSS是TCP数据包中数据部分的最大大小,不包括TCP头部。对于标准以太网,如果MTU是1500,那么MSS通常是1460(考虑到20字节的IP头和20字节的TCP头)
3.2.3 交换机
交换机(Switch)是一个网络设备,用于连接网络中的设备,并使用MAC地址转发数据帧到正确的端口,从而在局域网内实现数据的传输。
与集线器(Hub)相比,交换机是更智能的设备,因为它只将数据帧发送到目标MAC地址所在的端口,而不是广播到所有端口。
可以实现将网桥划分区域,即划分碰撞域。
3.3 局域网通信原理
通信时每一个主机都能获取数据,而数据传输始于链路层、终于链路层,数据链路层将数据解析,对比MAC的目的地址是否相等,向上交付给网络层。但是在多个主机同时发送时,会发生数据碰撞(我们也将局域网称为碰撞域)。
数据链路层接收来自网络层的数据包,然后封装成帧进行传输。
使用MAC地址来识别网络上的每个设备。
广播帧到所有端口。所有设备都会接收广播帧,但只有目的MAC地址与设备的MAC地址匹配的设备才会处理这个帧。
3.4 ARP协议
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
ARP地址解析协议建立了主机IP地址 和 MAC地址的映射关系,在数据链路层的上部
3.4.1 ARP协议格式
3.4.2 ARP工作流程
(1)ARP请求
当设备A想要知道设备B的MAC地址(但只知道设备B的IP地址)时,设备A会发送一个ARP请求。
这个请求是一个广播消息,意味着所有在局域网中的设备都会收到这个请求。
ARP请求中包含以下信息:发送者的IP地址、发送者的MAC地址、目标的IP地址。
(2)ARP响应
设备B在接收到ARP请求后,检查请求中的“目标IP地址”是否与自己的IP地址匹配。
如果匹配,设备B将填充自己的MAC地址,并发送一个ARP响应给设备A。
ARP响应是单播消息,只发送给发起ARP请求的设备(即设备A)。
ARP响应中包含:发送者的IP地址(设备B的IP)、发送者的MAC地址(设备B的MAC)。
(3)更新ARP缓存
当设备A接收到ARP响应后,它会更新其ARP缓存表,将设备B的IP地址和MAC地址的映射存储起来。
有了这个映射,设备A现在可以开始与设备B通信,因为它知道设备B的MAC地址。
ARP缓存是有时效性的,条目在一段时间后会过期,以避免使用旧的或无效的映射。
3.4.2 ARP问题
ARP是无状态的且不进行身份验证,所以它也可能受到某些类型的攻击,如ARP欺骗或ARP中毒。
接受的时候,可能是别人的请求或者应答,通过op(分辨请求还是应答)区分。
四、TCP/IP体系下的其他技术
4.1 DNS
DNS(Domain Name System)是一个分层的分布式数据库系统,用于将人类可读的域名(例如
www.example.com
)转换为与之关联的IP地址(例如192.168.1.1
)。这种转换允许用户通过域名而不是记住复杂的IP地址来访问互联网资源。
4.1.1 域名介绍
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称
com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
baidu: 二级域名, 公司名.
www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格 式, 来表示主机支持的协议
4.1.2 域名解析
4.2 NAT
NAT(Network Address Translation)是一种网络技术,用于在IPv4网络环境中转换IP地址。NAT主要在路由器或防火墙上实现,其主要目的是允许一个网络上的多个设备通过一个或几个公共IP地址访问互联网,同时隐藏内部网络结构。这主要是因为IPv4地址逐渐耗尽的问题而产生的技术。
4.2.1 工作模式
静态NAT:这种模式下,一个内部IP地址被映射到一个固定的公共IP地址。这种映射是一对一的,通常用于需要固定公共IP地址的服务器,如Web服务器或邮件服务器。
动态NAT:在这种模式下,内部IP地址是从一个地址池动态映射到公共IP地址的。这不是一对一的映射,而是根据可用的公共IP地址动态进行的。
PAT(Port Address Translation)或NAPT(Network Address Port Translation):这是最常用的NAT类型。在这种模式下,多个内部设备共享一个公共IP地址,但每个设备使用不同的端口号。这种方法允许多个设备同时使用一个公共IP地址来访问互联网。
对于服务器返回的数据中, 目的IP都是相同 的. NAPT使用IP+port来建立这个关联关系,来分辨不同的主机。
4.2.2 工作原理如下
内部设备发送数据包到互联网时,数据包的源IP地址是内部私有IP地址。
当数据包经过NAT设备(如路由器或防火墙)时,NAT设备修改数据包的源IP地址(以及可能的端口号,如果使用PAT)。
NAT设备保持一个NAT转换表,以跟踪每个活跃的转换。
当从互联网收到响应数据包时,NAT设备根据NAT转换表修改数据包的目的IP地址(和可能的端口号),然后将数据包转发给正确的内部设备。
4.2.3 NAT穿透
NAT穿透是一个技术,用于在NAT环境中建立直接的点对点连接。在很多场景中,两个设备都位于各自的NAT保护的私有网络中,如果它们想直接通信,那么就会面临一些挑战。因为NAT的主要工作是将私有IP地址转换为公共IP地址,并在数据返回时进行相反的转换,所以从外部网络直接访问NAT背后的设备会变得复杂。
4.3 代理服务器
代理服务器是一个中间实体,它位于客户端(例如,用户的计算机或移动设备)和目标服务器(例如,一个网站)之间。
当客户端想要访问某个资源(例如,一个网页)时,它首先向代理服务器发送请求,然后代理服务器处理这个请求,从目标服务器获取资源,并将其返回给客户端。
4.3.1 代理服务器的主要功能和优点
内容过滤:企业或教育机构可能使用代理服务器来过滤和阻止对特定网站或内容的访问。
数据缓存:代理服务器可以缓存经常被请求的资源,从而减少对原始服务器的访问,提高访问速度。
匿名浏览:通过使用代理服务器,用户的真实IP地址可以被隐藏,从而提供匿名性。
负载均衡:在大型企业环境中,代理可以分散流向后端服务器的流量,提高响应速度。
访问受限内容:在某些国家或地区,某些在线内容可能被封锁。使用代理服务器,用户可能可以绕过这些限制,访问这些内容。
安全和隐私:代理服务器可以提供SSL加密,保护用户在传输过程中的数据。此外,某些代理还提供恶意内容的检测和过滤。
4.3.2 代理服务器的几种常见类型
正向代理(Forward Proxy):这是最常见的代理类型,用户配置其设备使用指定的代理服务器,然后所有的网络请求都通过这个代理发送。
逆向代理(Reverse Proxy):逆向代理代表服务器接收请求,常用于负载均衡、缓存和安全。
VPN(Virtual Private Network):虽然VPN不仅仅是代理,但其工作方式与代理相似。VPN为用户提供了一个加密的通道,通过这个通道,所有的网络流量都会经过。
五、http通信过程
http通信过程:域名解析、TCP连接、构建http请求、发送请求、解析请求、定位资源、构建响应、发送响应、解析响应、HTML渲染