【TCP/IP协议族详解】

发布于:2025-05-25 ⋅ 阅读:(17) ⋅ 点赞:(0)

 

目录

第1层 链路/网络接口层—帧(Frame)

1. 链路层功能

2. 常见协议

2.1. ARP(地址解析协议)

3. 常见设备

第2层 网络层—数据包(Packet)

1. 网络层功能

2. 常见协议

2.1. ICMP(互联网控制消息协议)

3. 常见设备

第3层 传输层—TCP段或UDP数据报

1. 传输层功能

2. 常见协议

2.1. TCP

2.2. UDP

3. TCP三次握手与四次挥手

3.1. 名词讲解

3.2. 三次握手

3.3. 数据传输

3.4. 四次挥手

3.5. 整体流程

4. 常见设备

第4层 应用层

1. 应用层功能

2. 常见协议

3. 常见软件

TCP/IP通信流程

1. 发送端

2. 接收端

TCP/IP数据解封装​


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网页内容),并通过相同流程返回给客户端。

TCP/IP数据解封装


网站公告

今日签到

点亮在社区的每一天
去签到