参考资料:
从实践中学习TCP/IP协议书籍
家庭网络常识 1:猫、路由器、wifi_哔哩哔哩_bilibili
一、概述
(一)、名词解释
1、网卡
网卡也被称为网络适配器(Network Adapter),是连接计算机和 传输介质的接口。网卡主要用来将计算机数据转换为能够通过传输介 质传输的信号。
-
有线网卡
-
无线网卡:无线网卡通常特指Wi-Fi网络的无线网卡
-
蓝牙适配器
-
虚拟网卡:是在软件中模拟的网络接口卡
- 桥接模式:虚拟机可以看作一台独立的主机,与物理主机处于同一网段。
- NAT模式:虚拟机的所有网络流量先通过宿主机的虚拟网卡,然后通过宿主机的物理网卡转发到互联网,并使用宿主机的IP地址。该模式下虚拟机的ip地址是通过虚拟网卡转换得到的。
- 仅主机模式:虚拟机只能与宿主机通信,不能与外部网络通信。这通常用于测试和隔离环境。
模式使用 网卡 通信情况 桥接模式 真实网卡 可以与主机和外网通讯,有独立ip地址,容易造成ip地址冲突 NAT模式 VMnet8网卡 可以与主机和外网通讯,不占用ip地址 Host-only:仅主机模式 VMnet1网卡 只能与主机通信
2、网络设备
网络设备指的是网络组成中的设备,如交换机、路由器、调制解 调器等。它们是发送或接收数据的终端设备
- 交换机:可以将多个网络设备连接起来组成一个局域网
- 路由器:又称网关设备(Gateway),用于连接多个逻辑 上分开的网络,即单独的网络或者子网,只有网络层、数据链路层、物理层
- 猫:信号转换的
3、网络相关
IP地址 | 由网络号和主机号组成 |
---|---|
子网掩码 | 告诉计算机哪些是网络号,哪些是主机号 |
网络地址 | IP地址&子网掩码 |
网段 | 网络地址相同的IP地址属于同一网段,即同一子网 |
网关 | 网络关卡,目标IP在不同网段时需要经过网关 |
ARP表 | 存放IP和MAC地址的映射 |
MAC表 | 存放MAC地址和物理端口的映射信息 |
路由表 | 存放目标网络的对应网关,即下一跳 |
4、常用Linux命令
常看路由表 | route -n |
---|---|
查看默认路由 | ip route show |grep default |
查看本机IP和MAC地址 | ip addr |
查看本机ARP表 | arp -a |
查看Socket相关的端口号 | netstat -tulnp (tcp:显示tcp相关 u:显示udp相关 l:监听状态 n:不显示别名,以数字形式显示 p:显示程序名和进程pid) |
查看进程打开的文件列表 | lsof -p PID |
查看网络连通性 | ping ip地址 |
查看达到目标网络经过的路由 | traceroute ip地址 |
查看域名IP | host/ping 域名 |
(二)、网络分层
1、OSI协议层次
分层 | 常见协议 | 作用 |
---|---|---|
应用层 | HTTP、HTTPS、DNS、DHCP、Telnet、SNMP、FTP | 为应用程序提供服务并规定应用程序中相关的通信细节 |
表示层 | 转换应用层的信息为适合网络传输的格式 | |
会话层 | socks5代理 | 负责建立和断开Socket通信连接 |
传输层 | TCP、UDP、 | 解决进程之间的传输问题 |
网络层 | ARP、ICMP、IP | 将数据传输到目标地址,主要负责寻址和路由转发问题 |
数据链路层 | 负责物理层面上互联的节点间的通信传输 | |
物理层 | 进行比特流传输 |
2、TCP/IP协议层次结构
- 应用层
- 传输层
- 网际层:即网络层
- 网络访问层:数据链路层+物理层
(三)、Wireshark使用
1、常见网卡
eth0 | 以太网接口 |
---|---|
lo | 本地回环接口 |
wlan0 | 无线接口 |
rmnet | sim卡接口 |
tun0 | 代理转发接口 |
2、数据包层次结构
-
Packet List面板:上面部分,显示Wireshark捕获到的所有数据包, 这些数据包从1进行顺序编号
-
Packet Details面板:中间部分,显示一个数据包的详细内容信 息,并且以层次结构进行显示
-
Packet Bytes面板:下面部分,显示一个数据包未经处理的原始样子
层次 说明 Frame 该数据包物理层的数据帧概况 Ethernet II 数据链路层以太网帧头部信息 Internet Protocol Version 4 网际层IP包头部信息 Transmission Control Protocol 传输层的数据段头部信息 Hypertext Transfer Protocol 应用层的信息,此处是HTTP协议
3、使用过滤器
Wireshark过滤规则:Wireshark过滤规则及使用方法 - 知乎 (zhihu.com)
(四)、其他
1、外网不能访问主机,需要借助端口映射(内网穿透)技术
2、127.0.0.1和0.0.0.0
- 127.0.0.1:本机回环地址,只能主机访问主机。
- 0.0.0.0:监听所有的网卡设备。也是默认路由,路由表中所有网络地址不符合时,匹配默认路由。
3、socks5代理和HTTP代理
- HTTP代理:能够代理客户机的 HTTP 访问,主要是代理浏览器访问网页。
- SOCKS5 代理:SOCKS5 代理是使用 SOCKS 协议的代理服务器,它是一个通用代理服务器。 默认端口是 1080,只简单地传递数据包,不关心是何种应用协议,既可以是 HTTP 请求,也可以是Protobuf通信协议
- SOCKS5 是一种代理协议,位于传输层(TCP/UDP 等)和应用层之间, 它使用TCP/IP协议进行通信
二、应用层
(一)、动态主机配置协议DHCP
DHCP服务是用来分配IP地址的,DHCP服务器使用的是UDP 67端口,DHCP客户端使用的是 UDP 68端口。
1、DHCP工作方式
-
发现阶段
DHCP客户端向所有DHCP服务器的67端口发送广播数据包以获取IP地址租约
-
提供阶段
DHCP服务器收到广播包后会检查自己的配置,并发起广播消息进行响应,为DHCP客户端提供可用的IP地址
-
选择阶段
DHCP客户端收到地址信息后,会选择第一个到达的租约地址信息。然后发起广播消息,告诉所有DHCP服务器,自己已经做出选择
-
确认阶段
DHCP服务器都收到客户端发来的消息广播包,并发送确认广播消息
(二)、DNS协议
域名系统(Domain Name System,DNS)是将域名转化为IP地址 的网络协议
1、域名解析流程
三、传输层
(一)、端口和嵌套字
1、端口
用来识别同一计算机中同时通信的不同应用程序
熟知端口号 | 0~1023 | 这些端口号指派给了TCP/IP体系中最重要的一些应用协议 |
---|---|---|
登记端口号 | 1024~49151 | 为没有熟知端口号的应用程序使用 |
短暂端口号 | 49152~65535 | 留给客户进程选择暂时使用 |
2、嵌套字
应用程序和TCP/IP协议交互的接口
3、TCP/IP体系的应用层常用协议所使用的运输层熟知端口号
使用TCP协议 | 使用UDP协议 |
---|---|
RIP:520 | SMTP:25 |
DNS:53 | BGP:179 |
TFTP:69 | HTTP:80 |
SNMP:161 | HTTPS:443 |
DHCP:67、68 | FTP:20、21 |
(二)、TCP协议
传输控制协议(Transmission Control Protocol,TCP)是一种面向 连接的、可靠的、基于字节流的传输层通信协议。适用于要求可靠传输的应用,如文件传输。
1、TCP协议作用
- 重新排序:如果数据以错误的顺序到达目的地,TCP模块能够对数据重新排序,来恢复原始数据
- 流量控制:TCP能够确保数据传输不会超过目的计算机接收数据 的能力
- 优先级与安全:为TCP连接设置可选的优先级和安全级别
- 适当的关闭:以确保所有的数据被发送或接收以后,再进行关闭 连接
2、TCP报文首部格式
-
源端口 :占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程
-
目的端口 :占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程
-
序号 :占32比特,取值范围[0,2^32-1],序号增加到最后一个后,下一个序号就又回到0。指出本TCP报文段数据载荷的第一个字节的序号
-
确认号 :占32比特,取值范围[0,2^32-1],确认号增加到最后一个后,下一个确认号就又回到0。
指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认
若确认号=n,则表明到序号n-1为止的所有数据都已正确接收,期望接收序号为n的数据
-
确认标志位ACK :取值为1时确认号字段才有效;取值为0时确认号字段无效。
TCP规定,在连接建立后所有传送的TCP报文段都必须把ACK置1
-
数据偏移 :占4比特,并以4字节为单位
用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。这个字段实际上是指出了TCP报文段的首部长度
-
保留 :占6比特,保留为今后使用,但目前应置为0
-
窗口 :占16比特,以字节为单位。指出发送本报文段的一方的接收窗口
这是以接收方的接收能力来控制发送方的发送能力,称为流量控制
-
校验和 :占16比特,检查范围包括TCP报文段的首部和数据载荷两部分
-
同步标志位SYN :在TCP连接建立时用来同步序号
-
终止标志位FIN :用来释放TCP连接
-
复位标志位RST :用来复位TCP连接
-
推送标志位PSH :接收方的TCP收到该标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付
-
紧急标志位URG :取值为1时紧急指针字段有效;取值为0时紧急指针字段无效
-
紧急指针 :占16比特,以字节为单位,用来指明紧急数据的长度
3、TCP协议三次握手
-
第一次握手:TCP连接请求报文
- SYN同步位:表明这是一个TCP连接请求报文段。
- seq:TCP客户进程所选择的初始序号。
-
第二次握手:TCP连接请求确认报文
- SYN=1,ACK=1:表明这是一个TCP连接请求确认报文段。
- 序号字段seq被设置了一个初始值y:作为TCP服务器进程选择的初始序号。
- 确认号字段ack的值被设置成了x+1:这是对TCP客户进程选择的初始序号的确认。
-
第三次握手:普通的TCP确认报文
- 确认位ACK被设置为1:表明这是一个普通的TCP确认报文段
- seq=x+1,这是因为TCP客户进程发送的第一个TP报文段的序号为x。(发送的下一份TCP报文序号任然是x+1)
- ack=y,这是对TCP服务器进程选择的初始序号的确认
-
三次握手是否多余?
不多余!这是为了防止已失效的连接请求报文段突然又传送到了TCP服务器,因而导致错误
4、TCP协议四次挥手
- 第一次挥手:TCP连接释放报文
- 终止位FIN、确认位ACK设置为1:表明这是一个TCP连接释放报文段,同时也是对之前接收数据的确认。
- 序号seq字段的值设置为u:u等于TCP客户进程之前已传送过的数据的最后一个字节的序号加1。
- 确认号ack字段的值设置为v:等于TCP客户进程之前已收到的数据的最后一个字节的序号加1。
- 第二次挥手:普通的TCP确认报文
- 确认位ACK被设置为1:表明这是一个普通的TCP确认报文段。
- seq=v,等于TCP客户进程之前已收到的数据的最后一个字节的序号加1。(发送的下一份TCP报文序号任然是v)
- ack=u+1,这是对TCP连接释放报文段的确认。
- 第三次挥手:TCP连接释放报文段,最后确认状态
- 终止位FIN和确认位ACK的值都被变置为1:表明放是—个TCP连接释放报文段,同时也对之前收到的报文段进行确认。
- 序号seq字段的值为v:在半关闭状态下,TCP进程可能发送一些数据,导致序列号增加;如果没有发送数据则w=v
- 确认号adk字段的值为u+1:这是对之前收到的TGP连接释放报文段的重复确认。
- 第四次挥手:普通的TCP确认报文
- 确认位ACK被设置为1:表明这是一个普通的TCP确认报文段。
- seq=u+1,等于TCP客户进程之前已收到的数据的最后一个字节的序号加1。
- ack=w+1,这是对TCP连接释放报文段的确认。
(三)、UDP协议
UDP向上层提供无连接不可靠传输服务。适用于IP电话、视频会议等实时应用
1、UDP协议特点
- 没有各种连接:在传输数据前不需要建立连接,也避免了后续的 断开连接。
- 不重新排序:对到达顺序混乱的数据包不进行重新排序。
- 没有确认:发送数据包无须等待对方确认。因此,使用UDP协议 可以随时发送数据,但无法保证数据能否成功被目标主机接收。
2、UDP协议数据格式
- 源端口:这个字段占据UDP报文头的前16位,通常包含发送数据报的应用程序所使用的UDP端口
- 目的端口:接收端计算机上UDP软件使用的端口,占据16位
- 长度:该字段占据16位,表示UDP数据报长度,包含UDP报文头和UDP数据长度
- 校验值:该字段占据16位,可以检验数据在传输过程中是否被损 坏
四、网络层
(一)、概述
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输。
1、网络层主要解决的问题
- 网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
- 网络层寻址问题
- 路由选择问题
(二)、IP地址
IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符。
1、分类编址
-
只有A类、B类和C类地址可分配给网络中的主机或路由器的各接口
-
主机号为**“全0”**的地址是网络地址,不能分配给主机或路由器的各接口
-
主机号为**“全1”**的地址是广播地址,不能分配给主机或路由器的各接口
网络类型 第一个可指派的网络号 最后一个可指派的网络号 不能指派的网络号 占总地址空间 IP地址范围 网络数量及主机数量 A类地址 1 126 0和127 1/2 1.0.0.1~126.255.255.254 126(27-2)个,每个网络能容纳16,777,214(224-2)个主机 B类地址 128.0 191.255 无 1/4 128.0.0.1~191.255.255.254 16384(214)个,每个网络能容纳65534(216-2)个主机 C类地址 192.0.0 223.255.255 无 1/8 192.0.0.1~223.255.255.254 2097151(221-1)个,每个网络能容纳254(28-2)个主机 D类地址 多播地址 1/16 224.0.0.1~239.255.255.254 E类地址 保留为今后使用 1/16 240.0.0.1~255.255.255.254
2、特殊IP地址
具有特殊含义,不会分配给互联网的主机,用于私有网络,称为私有地址。保留一部分地址用于测试,被称为保留地址。
A类地址 | B类地址 | C类地址 | |
---|---|---|---|
私有地址 | 10.0.0.0~10.255.255.255 | 172.16.0.0~172.31.255.255 | 192.168.0.0~192.168.255.255 |
保留地址 | 127.0.0.0~127.255.255.255 | 169.254.X.X |
3、子网划分以及CIDR格式
-
子网划分
子网划分是将IP地址的主机ID部分划分为子网ID和主机ID。其 中,子网ID用来寻找网络内的子网;主机ID用来寻找子网中的主机。 子网掩码则是用来指明地址中多少位用于子网ID,保留多少位用于实际的主机ID。
-
CIDR格式
CIDR标记使用一个斜线(/)分隔符,后面跟一个十进制数值表 示地址中网络部分所占的位数。
4、IP数据报格式
- 版本:占4比特,表示IP协议的版本
- 首部长度:占4比特,表示lP数据报首部的长度。该字段的取值以4字节为单位
- 总长度:占16比特,表示IP数据报的总长度(首部+数据载荷)
- 标识:占16比特,属于同一个数据报的各分片数据报应该具有相同的标识
- 标志:占3比特
- 中间位DF:1表示不允许分片;0表示允许分片
- 最低位MF:1表示“后面还有分片”;0表示“这是最后一个分片
- 保留位:必须为0
- 片偏移:占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。片偏移以8个字节为单位
- 生存时间:TTL占8比特,表示IP数据报的生存时间
- 协议:占8比特,指明IPv4数据报的数据部分是何种协议数据单元
- 首部检验和:占16比特,用来检测首部在传输过程中是否出现差错
- 源IP地址和目的IP地址:各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址
(三)、ARP协议
地址解析协议(Address Resolution Protocol,ARP)是根据IP地址 获取物理地址的一个TCP/IP协议。它通过IP地址向MAC地址的转换, 解决网际层和网络访问层的衔接问题。
1、基本流程
-
请求过程
主机A以广播形式向网络中所有主机发送ARP请求,请求包 中包含了目标IP地址192.168.1.2。
-
响应过程
主机B接收到请求,发现自己就是主机A要找的主机,返回响应。响应包中包含自己的MAC地址。
2、ARP表
每台主机都有一个ARP表。当主机得到ARP 响应后,将目标主机的IP地址和物理地址存ARP缓存中,下次请求MAC地址时,直接查询本机的ARP表。
3、MAC表
数据包到达交换机时,交换机会读取目标MAC地址,然后转发给相应物理端口上的设备
4、总结
存放 | 表来源 | |
---|---|---|
ARP表 | IP=>MAC | 每台计算机 |
MAC表 | MAC=>物理端口 | 交换机 |
路由表 | 目标IP=>下一跳 | 路由器 |
(四)、NAT地址转换
一般我们没有公网IP,但是上因特网需要公网IP,NAT地址转换技术可以把我们的网关私有地址,转换为唯一的公有地址。局域网所有主机公有地址是一样的。
(五)、IP数据报的发送和转发过程
1、主机发送IP数据报:局域网内通信
- 判断目的主机是否与自己在同一个网段
- 若不在同一个网络,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发
- 若在同一个网络
- 查地址:根据ARP协议找到目标MAC地址
- 发数据:数据发送给交换机,交换机维护了一张MAC表,交换机会读取目标MAC地址,然后转发给相应物理端口上的设备
2、路由器转发IP数据报
- 主机访问外网
- 判断目的主机是否与自己在同一个网段
- 若不在同一个网络,传输给主机所在网络的默认网关(路由器),由默认网关帮忙转发
- 若不在同一个网络
- 检查IP数据报首部是否出错
- 若出错,则直接丢弃该IP数据报并通告源主机
- 若没有出错,则进行转发
- 根据IP数据报的目的地址在路由表中查找匹配的条目
- 若找到匹配的条目,则转发给条目中指示的下一跳
- 若找不到,则丢弃该IP数据报并通告源主机
- 检查IP数据报首部是否出错
- 外网访问主机:外网不能访问主机,需要借助端口映射(内网穿透)技术
(六)、ICMP协议
ICMP协议用于在IP主机和路由器之间传递控制消息,描述网络是否通畅、主机是否可达、路由器是否可用等 网络状态。
1、探测主机:ping
2、路由跟踪:traceroute
- 原理
- ICMP向目的主机发送回送请求,生存时间设为1,经过第一个路由生存时间为0,路由器丢弃该数据报,并向源主机发送ICMP差错报告报文,其类型为时间超过,这样源主机就知道了达到目的主机的第一个路由器
- ICMP向目的主机发送回送请求,生存时间设为2,经过第二个路由生存时间为0,路由器丢弃该数据报,并向源主机发送ICMP差错报告报文,其类型为时间超过,这样源主机就知道了达到目的主机的第二个路由器
- 依次类推,直到到达目的主机收到数据,发现内部封装的是ICMP回送请求报文,发送源主机封装有ICMP回送请求回答报文的IP数据报
- 作用:检测发出数据包的主机到目标主机之间所经过 的网关
(七)、VPN(Virtual Private Network)
1、原理
- 开启VPN后,会生成一个虚拟网卡tun0
- 本地到外地,或者外地到本地的报文会先经过虚拟网卡
- 虚拟网卡将数据转发给代理软件
- 代理软件转发数据
- 若代理服务器为本地,则转发数据到目标网络
- 若代理服务器为其他外网,则数据先发送给代理服务器,代理服务器再转发数据到目标网络
2、VPN抓包原理
【Android】 使用VPN实现抓包:【android】 使用vpn实现抓包 | iTimeTraveler
(八)、端口映射(内网穿透)
1、作用
可以让公网公网主动访问内网的电脑
2、原理
五、数据链路层
(一)、帧结构
- 前同步码:用来使接收端的适配器在接收MAC帧时能够迅速调整 时钟频率,使它和发送端的频率相同
- 帧开始定界符:帧的起始符,为1个字节
- 目的地址:接收帧的网络适配器的物理地址(MAC地址)
- 源地址:发送帧的网络适配器的物理地址(MAC地址)
- 类型:上层协议的类型
- 帧检验序列FCS:检测该帧是否出现差错