目录
TCP/IP协议(传输控制协议/互联网协议,Transmission Control Protocol/Internet Protocol)是一组用于计算机网络通信的协议集合,是互联网和许多局域网的基础。它定义了数据如何在网络中传输、寻址、路由和接收。
第1层 链路/网络接口层—帧(Frame)
负责将数据封装成帧,通过物理介质传输,并包括地址解析和物理信号传输功能。
1. 链路层功能
- 帧的封装与拆装:将网络层数据包封装成帧,添加MAC地址和校验字段,并在接收端解封装。
- 帧边界识别:通过前导码、定界符或长度字段识别帧的开始和结束。
- 介质访问控制(MAC):协调多设备对共享介质的访问,防止数据冲突(如CSMA/CD、CSMA/CA)。
- 差错检测:通过CRC或校验和检测帧传输错误,丢弃出错帧(通常不负责重传,重传一般由传输层负责)。
- 物理信号传输:将帧转化为物理信号(如电信号、光信号)并通过介质发送和接收。
- 地址解析:通过ARP协议将IP地址映射为MAC地址。
2. 常见协议
Ethernet(以太网)、Wi-Fi(IEEE 802.11)、PPP(点对点协议)、ARP(地址解析协议)、HDLC(高级数据链路控制协议)
2.1. ARP(地址解析协议)
ARP负责在同一局域网内,将网络层的IP地址(IPv4)映射到链路层的MAC地址。作为链路层协议,它为网络层的IP寻址提供支持,通常被视为网络层与链路层的接口协议。
ARP工作流程
- ARP请求(Request)
- 以广播方式发送到本地网络,目标MAC地址为FF:FF:FF:FF:FF:FF(全网广播)。
- 请求包通过Ethernet帧传输(协议类型0x0806),包含:
- 发起者的IP地址和MAC地址。
- 目标MAC地址(填充为00:00:00:00:00:00,因为未知)。
- 目标IP地址(待解析的IP)。
- ARP回复(Reply)
- 以单播方式发送给请求者的MAC地址,通过Ethernet帧(协议类型0x0806)。
- 回复包包含:
- 回应者的IP地址和MAC地址。
- 发起者的IP地址和MAC地址(继承自请求包)。
- 缓存与超时
- 主机收到ARP回复后,将IP↔MAC映射存入ARP缓存(ARP table),减少后续请求。
- 缓存分为动态条目(通过ARP请求/回复生成)和静态条目(手动配置,不超时)。
- 动态条目通常在1-20分钟后超时(视操作系统而定,如Linux约20分钟,Windows可能更短),超时后需重新发送ARP请求。
- 扩展功能
- 反向ARP(RARP):将MAC地址解析为IP地址,早期用于无盘工作站,现多被DHCP取代。
- 代理ARP(Proxy ARP):路由器代表其他网络中的主机回复ARP请求,用于跨子网通信。
如何查看ARP缓存
Linux
查看:arp -n(显示ARP表,不解析主机名)或ip neigh show(显示邻居表,包括ARP和IPv6的NDP)。
添加静态:sudo arp -s 192.168.1.20 BB:BB:BB:BB:BB:BB(MAC地址使用冒号分隔)。
删除:sudo arp -d 192.168.1.20。
Windows
查看:arp -a(显示ARP缓存表)。
添加静态:arp -s 192.168.1.20 BB-BB-BB-BB-BB-BB(MAC地址使用连字符分隔)。
删除:arp -d 192.168.1.20。
注意:Linux使用冒号分隔的MAC地址(如BB:BB:BB:BB:BB:BB),Windows使用连字符分隔(如BB-BB-BB-BB-BB-BB)。
3. 常见设备
- 网卡(NIC):将数据转换为物理信号(如电信号或无线信号),并具有唯一的MAC地址
- 交换机(Switch):根据MAC地址表转发数据帧,支持全双工通信,减少网络冲突。
- 网桥(Bridge):连接两个网络段,根据MAC地址过滤和转发数据,适用于小型网络。
- 集线器:广播所有接收到的信号,带宽共享,易发生冲突,主要用于小型或早期网络。
- 传输介质:如双绞线、光纤、同轴电缆,用于承载物理信号。
第2层 网络层—数据包(Packet)
负责将数据从源主机传输到目的主机,即使它们不在同一个网络中。它通过逻辑寻址和路由选择来实现这一点,确保数据包能够跨越不同的网络和子网到达目的地。
1. 网络层功能
- 逻辑寻址:为每个网络设备分配唯一的IP地址(IPv4或IPv6),用于标识主机和网络。
- 路由选择:根据路由表和路由协议(如RIP、OSPF)确定数据包从源到目的地的最佳路径。
- 数据包转发:路由器根据目标IP地址和路由表将数据包转发到下一跳。
- 分片与重组:当数据包大小超过网络路径中的最大传输单元(MTU)时,网络层在源端或中间路由器将数据包分片,并在目的端重组。
- 差错检测:IP包头包含头部校验和,用于检测头部数据是否损坏(不检查数据部分)。
- 协议支持:支持ICMP(用于网络诊断,如ping)、IGMP(用于组播管理)等协议。
- 网络地址转换(NAT):在私有网络和公共网络之间转换IP地址,允许多个设备共享一个公共IP。
- 拥塞反馈:通过ICMP协议报告网络拥塞状态,辅助传输层进行拥塞控制”。
2. 常见协议
- IP(Internet Protocol):提供无连接的数据包传输服务,包括IPv4和IPv6。
- ICMP:用于网络诊断和错误报告,如ping和traceroute。
- IGMP:管理组播组成员,支持多播通信。
- ARP:为网络层提供IP到MAC地址的解析,操作上依赖链路层(ARP归属为链路层协议)。
- RIP/OSPF:动态路由协议,辅助路由选择
2.1. ICMP(互联网控制消息协议)
ICMP用于差错报告和网络诊断。
- 错误报告:当 IP 数据包在传输过程中因目的地不可达、路由超时等原因不能被正常转发或送达时,路由器或主机会利用 ICMP 向源主机发送差错报文,告知其具体的失败原因。
- 网络诊断:通过 “Echo Request/Reply” 机制(即 ping 命令),可以测试两台主机之间的连通性、往返时延(RTT)以及丢包率。
注意:ICMP不负责数据传输,仅用于控制和诊断。ICMP报文封装在IP数据包中,由网络层处理。
3. 常见设备
- 路由器(Router):根据IP地址和路由表转发数据包,支持NAT(网络地址转换)和防火墙功能。
- 三层交换机(Layer 3 Switch):结合链路层交换和网络层路由功能,根据IP地址进行快速转发。
第3层 传输层—TCP段或UDP数据报
负责在源主机和目的主机之间提供端到端的通信服务。根据所使用的协议,它可以确保数据的可靠传输(如TCP)或高效传输(如UDP)。传输层通过端口号标识应用程序,并提供流量控制、错误控制和连接管理等功能。
1. 传输层功能
- 端到端通信:在源设备和目的设备之间建立和管理通信会话。
- 数据分段与重组:将来自应用层的数据分割成适合网络传输的块(TCP称为段,UDP称为数据报),并在接收端按顺序重组。
- 端口寻址:使用端口号区分不同的应用程序,实现数据的多路复用和解复用。
- 流量控制:通过滑动窗口机制(如TCP)调节数据发送速率,避免网络拥塞。
- 错误控制:检测数据包的丢失或损坏,并根据需要请求重传(TCP支持,UDP不支持)。
- 连接管理:根据协议类型(如TCP面向连接,UDP无连接)建立、维护或终止连接。
2. 常见协议
2.1. TCP
是一种面向连接的、可靠的、基于字节流的传输层协议。
工作机制:通过三次握手建立连接,四次握手断开连接。
- 面向连接:通信前必须“三次握手”建立连接,断开前“四次挥手”
- 可靠性保障:通过序列号、确认号、重传机制、校验等方式
- 有序交付:数据按顺序到达,不会乱(方法:序列号)
- 流量控制:控制发送速率(方法:滑动窗口)
- 拥塞控制:网络拥堵时主动降低数据传输速率(TCP慢启动等方法)
- 双向通信:全双工(双向传输)
- 错误检测:校验和保证数据不出错(方法:校验和等方法)
场景示例:
应用 |
协议 |
为什么用TCP? |
网页浏览 |
HTTP/HTTPS |
要求完整、顺序、可靠 |
邮件 |
SMTP / IMAP / POP3 |
邮件不可丢 |
文件传输 |
FTP |
数据不可丢 |
SSH远程 |
SSH |
丢包或错包会导致断开连接 |
2.2. UDP
是一种无连接、不可靠、传输效率高的传输层协议。
- 无连接:不建立连接,直接发包
- 不可靠:不确认、不重传、不排顺序
- 效率高:头部小(8字节),资源消耗低
- 不保证顺序:包可能乱序到达
场景示例:
应用 |
协议 |
为什么用UDP? |
视频/音频流 |
RTP / VoIP |
一点丢包不影响整体体验 |
DNS |
DNS |
查询快,包小,可靠性交给应用层 |
游戏 |
自定义UDP协议 |
掉一帧画面也能玩 |
3. TCP三次握手与四次挥手
3.1. 名词讲解
Seq:序列号(用于标识发送的数据字节流的顺序)每个 TCP 数据包(或段)都包含一个序列号。
SYN:表示该数据包用于发起连接请求或响应连接请求。
ACK:表示该数据包包含确认信息,用于通知发送方已成功接收某些数据。
FIN:表示发送方已完成数据发送,请求终止连接。
3.2. 三次握手
客户端 <------------- 三次握手 -------------> 服务端
| -------------> SYN, Seq=x -------------> |
#客户端发起连接,客户端数据包的初始序列号为x
| <------- SYN+ACK, Seq=y, Ack=x+1 ------- |
#服务端响应客户端的连接请求,并且告知客户端我确认收到了请求。
#服务端数据包的初始序列号为y,希望客户端的下一个数据包使用x+1
| -------> ACK, Seq=x+1, Ack=y+1 --------> |
#客户端响应服务端的连接请求,并告知服务端我确认收到了请求。
#该数据包的序列号为x+1,希望服务端的下一个数据包使用y+1
#连接建立,双方进入ESTABLISHED(连接状态)
3.3. 数据传输
客户端 <------------- 数据传输 -------------> 服务端
| -------> Seq=x+1, Ack=y+1 (1 byte) ----> |
#客户端发送1字节数据,希望服务端的下一个数据包使用y+1
#该包的序列号为x+1,这里假设传输的是1字节数据,所以是x+1。
#如果是100字节数据,那就是x+101。x+101是下一个包的起始序列号
| <----------- ACK, Seq=y+1, Ack=x+2 ----- |
#服务端确认收到数据,希望客户端的下一个数据包使用x+2。
#该包的序列号为y+1
3.4. 四次挥手
客户端 <------------- 四次挥手 -------------> 服务端
| ---------> FIN, Seq=x+2, Ack=y+1 ------> |
# 客户端发送FIN请求断开连接,希望服务端的下一个数据包使用y+1
# 该包的序列号为x+2,延续数据传输后的序列号
# FIN占用一个序列号,类似数据传输的1字节
| <-------- ACK, Seq=y+1, Ack=x+3 -------- |
# 服务端确认收到客户端的FIN,希望客户端的下一个数据包使用x+3
# 该包的序列号为y+1
| <--------- FIN, Seq=y+1, Ack=x+3 ------- |
# 服务端发送FIN请求断开连接,希望客户端的下一个数据包使用x+3
# 该包的序列号为y+1,延续服务端的序列号
| --------> ACK, Seq=x+3, Ack=y+2 -------> |
# 客户端确认收到服务端的FIN,希望服务端的下一个数据包使用y+2
# 该包的序列号为x+3,连接即将关闭
3.5. 整体流程
客户端 <------------- 三次握手 -------------> 服务端
| -------------> SYN, Seq=x -------------> |
| <------- SYN+ACK, Seq=y, Ack=x+1 ------- |
| -------> ACK, Seq=x+1, Ack=y+1 --------> |
客户端 <------------- 数据传输 -------------> 服务端
| -------> Seq=x+1, Ack=y+1 (1 byte) ----> |
| <----------- ACK, Seq=y+1, Ack=x+2 ----- |
客户端 <------------- 四次挥手 -------------> 服务端
| ---------> FIN, Seq=x+2, Ack=y+1 ------> |
| <-------- ACK, Seq=y+1, Ack=x+3 -------- |
| <--------- FIN, Seq=y+1, Ack=x+3 ------- |
| --------> ACK, Seq=x+3, Ack=y+2 -------> |
4. 常见设备
- 网关:在传输层进行协议转换,如将TCP/IP数据转换为其他协议。
- 负载均衡:根据端口号分发流量,优化服务器性能。
第4层 应用层
负责为用户应用程序提供网络服务和通信接口。它处理数据的格式化、表示、加密以及会话管理,确保应用程序能够通过网络进行有效通信。
1. 应用层功能
- 网络服务提供:为应用程序(如浏览器、邮件客户端、文件传输工具)提供通信功能,支持网页浏览、文件传输、电子邮件发送和接收等。
- 数据格式化:将应用程序的数据转换为网络可传输的格式(如HTTP请求、FTP命令),并在接收端将数据还原为应用程序可识别的格式。
- 会话管理:管理应用程序之间的通信会话,包括会话的建立、维护和终止。
- 安全性:通过协议内置的加密和认证机制(如HTTPS中的TLS/SSL)保护数据传输的安全性。
- 资源定位:通过DNS(域名系统)将域名解析为IP地址,帮助用户访问网络资源。
- 用户认证:通过协议(如FTP、SMTP、SSH)验证用户身份,确保访问安全。
2. 常见协议
- HTTP/HTTPS(超文本传输协议/安全超文本传输协议):用于网页浏览,HTTPS提供加密保护。
- DHCP(动态主机配置协议):动态分配IP地址,简化网络配置
- FTP(文件传输协议):用于在网络上上传和下载文件。
- SMTP(简单邮件传输协议):用于发送电子邮件。
- POP3/IMAP(邮局协议/互联网消息访问协议):用于从邮件服务器接收电子邮件。
- DNS(域名系统):将域名(如www.baidu.com)解析为IP地址。
- Telnet/SSH(远程登录协议/安全Shell协议):用于远程登录到网络设备,SSH提供加密保护。
3. 常见软件
- Web服务器:如Apache、Nginx、IIS,提供网页内容。
- DNS服务器:如BIND,负责域名解析。
- 客户端应用程序:如浏览器(Chrome、Firefox)、邮件客户端(Outlook、Thunderbird)
如果按照设备划分的话可分为:
服务器(Server):提供网络服务,如:Web服务器、邮件服务器等
客户端(Client):请求服务的设备:如电脑或手机
TCP/IP通信流程
1. 发送端
- 应用层:在浏览器输入某网址,浏览器通过HTTP协议生成请求数据(例如GET /index.html)。
- 若使用HTTPS,数据会通过SSL/TLS加密,准备发送给Web服务器。
- 传输层:数据被分割成小块(Segment),添加TCP头部,形成TCP段。
- TCP头部包含源端口(随机端口,如49152)、目标端口(通常为80或443)、序列号、确认号和校验和,用于确保可靠传输。
- 网络层:TCP段被封装成IP数据包,添加IP头部,包含源IP地址和目的IP地址。
- 若使用IPv4,头部还包括协议类型(TCP)。
- 链路层:IP数据包被封装成数据帧,添加链路层头部(如以太网头部,包含源MAC地址和目标MAC地址)和尾部(如CRC校验),通过网卡准备发送到局域网。
- 数据帧通过物理介质(如网线、Wi-Fi)转换为电信号、光信号或无线信号传输到网络。
2. 接收端
- 链路层:接收电信号、光信号或无线信号,转换为数据帧。
- 检查MAC地址是否匹配,验证帧的完整性(通过CRC校验),剥离链路层头部和尾部,提取IP数据包。
- 网络层:解析IP数据包,检查目的IP地址是否匹配本地设备,剥离IP头部,提取TCP段,传递给传输层。
- 若需跨网络,路由器会根据IP地址转发数据包。
- 传输层:解析TCP段,检查端口号(例如80或443)以确定目标应用,验证序列号确保数据按序到达,剥离TCP头部,重组数据段,传递给应用层。
- 若数据丢失,触发重传机制。
- 应用层:Web服务器接收HTTP请求数据(若为HTTPS,解密SSL/TLS数据),处理请求,生成响应数据(如HTML网页内容),并通过相同流程返回给客户端。