三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

15-Linux学习之旅之TCP IP模型基础认知

15-Linux学习之旅之TCP IP模型基础认知

Linux学习之旅之TCP/IP模型基础认知

一、TCP/IP 模型网络模型

1、什么是TCP/IP 模型网络模型

TCP/IP 模型是互联网实际运行的分层架构,以 TCP、IP 两个核心协议命名,由美国国防部研发,是现实中所有网络设备(电脑、手机、路由器)遵循的标准;而 OSI 七层只是理论参考标准。
整体分为4 层,自上而下:应用层 → 传输层 → 互联网层 → 网络接口层。

2、四层职责

TCP/IP 层级核心作用典型协议
应用层为应用软件提供网络服务接口,整合数据格式转换、加密解密、会话管理功能HTTP、HTTPS、FTP、DNS、DHCP、SSH、Telnet、SMTP、POP3、IMAP
传输层实现端到端的数据传输,通过端口区分本机不同应用;提供可靠 / 高速两种传输方式TCP、UDP
互联网层(网际/网络层)基于 IP 地址跨网段路由寻址、数据包转发,网络差错反馈、地址解析IPv4、IPv6、ICMP、ARP、IGMP、RIP、OSPF
网络接口/链路层处理二进制比特流、帧封装,MAC 寻址,对接物理传输介质与局域网设备Ethernet、PPP、HDLC、STP、VLAN;网线、光纤、Wi-Fi、RJ45
1. 应用层(顶层) 对应 OSI:5 会话层 +6表示层 +7应用层 作用:直接为软件程序提供网络通信接口,处理用户业务数据、数据加密、会话管理、编码转换。 常见协议: HTTP/HTTPS、FTP、TFTP、DNS、DHCP、SSH、Telnet、SMTP、POP3、IMAP、RPC2. 传输层 对应 OSI:4 传输层 作用:端到端传输,通过端口号区分同一台设备上不同程序;分可靠传输与高速无连接传输。 两大核心协议: TCP:面向连接、可靠传输(三次握手 / 四次挥手、重传、流量控制),网页、文件传输用; UDP:无连接、低延迟、不可靠,直播、游戏、DNS 查询用。3. 互联网层(IP 层,核心层) 对应 OSI:3 网络层 作用:跨网段路由寻址,基于 IP 地址完成数据包转发、差错通知、组播管理。 常见协议: IPv4/IPv6、ICMP(ping 命令)、ARP(IP 转 MAC)、IGMP(组播)、OSPF、RIP(路由协议)4. 网络接口层(底层) 对应 OSI:1 物理层 +2数据链路层 作用:负责二进制比特流传输、帧封装、局域网 MAC 寻址,对接网线、光纤、无线硬件。 协议 / 介质: Ethernet 以太网、PPP、HDLC、STP、VLAN;网线、光纤、WiFi、RJ45、交换机、集线器

3、TCP/IP四层模型 vs OSI七层模型

豆包生成仅供参考

4、数据封装过程

豆包生成仅供参考

封装

应用层 用户产生原始业务数据(如网页文字、文件内容),交给下层传输。 传输层 给数据添加 TCP/UDP 头部(包含源端口、目标端口),整体称为段 / 数据报。 TCP:头部有序列号、确认号、流量控制等可靠传输字段; UDP:头部极简,仅端口信息。 互联网层(IP 层) 在传输层段前方添加 IP 头部(源 IP、目标 IP、TTL 等),整体称为数据包,实现跨网段寻址。 网络接口层 在 IP 包前后添加 MAC 头部 + MAC 尾部 FCS 校验,封装成帧;最终转为0/1 比特流,通过网线、WiFi 等物理介质发出。 封装顺序:原始数据 → TCP/UDP 头 + 数据 → IP 头 + 段 → MAC 头 + IP 包 + FCS → 比特流

解封装

网络接口层 接收比特流,组装成帧,校验 FCS;剥离 MAC 头部与尾部,取出内部 IP 数据包,上交上层。 互联网层 剥离 IP 头部,读取目标 IP 确认本机接收,去掉 IP 头部,将内部 TCP/UDP 段上交传输层。 传输层 剥离 TCP/UDP 头部,根据端口号识别对应的应用程序,去除传输头部,还原原始业务数据。 应用层 把纯净原始数据交付对应软件(浏览器、QQ、FTP 客户端等)展示使用。 解封装顺序:比特流 → 帧(剥离 MAC 头尾)→ IP 数据包(剥离 IP 头)→ 段(剥离 TCP/UDP 头)→ 原始应用数据

二、传输层TCP和UDP

1、TCP和UDP对比

对比项TCP(传输控制协议)UDP(用户数据报协议)
连接特性面向连接,通信前建立连接(三次握手),结束断开(四次挥手)无连接,发送前无需建立连接,直接发包
可靠性可靠传输:丢包重传、有序、流量控制、拥塞控制、差错校验不可靠传输:无重传、无排序、无拥塞控制,丢包不补发
开销头部 20~60 字节,控制字段多,传输开销大头部固定 8 字节,极简,额外开销极小
传输方式数据流,数据分段有序到达独立数据报,数据包相互独立,可能乱序丢失
控制机制序列号、ACK 确认、滑动窗口、重传机制仅校验和,无任何流量 / 拥塞控制

2、为什么 UDP 不可靠,但仍大量使用?

#延迟极低TCP 握手、确认、重传机制会产生大量等待时延;UDP 无需确认,发包即走,实时性拉满。直播、语音通话无法容忍 TCP 等待重传造成卡顿。#头部开销极小UDP 仅8字节头部,带宽占用少,适合低带宽、海量并发场景。#无连接,并发承载能力强TCP 每个连接占用系统资源,百万级连接会耗尽内存;UDP 无连接,服务器可同时响应上万客户端,游戏、DNS 查询高频短报文场景优势巨大。#允许丢包,少量丢失不影响体验音视频、游戏画面少量丢包只会轻微花屏 / 卡顿,远好于 TCP 等待重传带来的长时间延迟。#支持广播、组播TCP 只支持一对一单播;UDP 可一对多广播 / 组播,用于局域网设备发现、视频组播。

3、场景选择

协议核心需求适用业务场景不适合场景
TCP数据必须完整、无丢失、无乱序,可接受较高延迟1. 网页访问 HTTP/HTTPS
2. 文件上传下载 FTP/SFTP
3. 远程管理 SSH、Telnet、RDP
4. 邮件 SMTP、POP3、IMAP
5. 数据库 MySQL、Oracle
6. 支付、表单提交等重要数据传输
实时语音、直播、网络游戏等对延迟敏感场景
UDP优先低延迟,可容忍少量丢包,追求高效并发1. DNS 域名解析
2. DHCP 自动分配 IP
3. 视频直播、语音通话、视频会议
4. 网络游戏实时数据同步
5. NTP 网络时间同步
6. 监控组播、局域网设备发现
文件传输、财务交易等不允许数据丢失的业务

4、常见端口和协议

TCP

端口协议用途
21FTP文件传输控制端口
22SSH安全远程登录
80HTTP网页访问
443HTTPS加密网页
3306MySQL数据库连接
25SMTP发送邮件
110POP3接收邮件
3389RDP远程桌面

UDP

端口协议用途
53DNS域名解析查询
67/68DHCP自动分配 IP 地址
123NTP网络时间同步
69TFTP简单文件传输(内网启动)
161SNMP网络设备监控

5、套接字(socket)

套接字(Socket)是网络通信端点,是应用层与传输层之间的接口,操作系统提供的一套网络编程 API。 一台主机上区分不同进程通信的唯一标识=IP 地址 + 传输层协议(TCP/UDP)+ 端口号。 客户端 Socket:主动发起连接 服务端 Socket:监听端口,等待客户端连接 例如: 本机浏览器访问百度: 客户端套接字:192.168.1.100:52000(本机 IP + 随机临时端口) 服务端套接字:180.101.49.11:80(百度服务器 IP+80 网页端口) 二者成对建立 Socket 通信通道传输网页数据。

三、TCP三次握手与四次挥手

1、什么是三次握手和四次挥手

TCP 是面向连接协议,通信前通过三次握手确认双方发送、接收能力正常,协商初始序列号,建立可靠通道。

2、三次握手流程

#流程(客户端 C ↔ 服务端 S)#第一次握手(C→S)客户端发送 SYN 报文,携带客户端初始序列号随机数ISN(c),请求建立连接;客户端进入 SYN_SENT。#第二次握手(S→C)服务器收到 SYN,回复 SYN+ACK: SYN:服务器也要发起连接,携带服务器 ISN(s)ACK:确认客户端报文,确认号=ISN(c)+1 服务器进入 SYN_RCVD。#第三次握手(C→S)客户端回复 ACK,确认号=ISN(s)+1; 双方同步完成,进入 ESTABLISHED(连接已建立),开始传输业务数据。
阶段报文客户端状态服务端状态说明
握手 1客户端 → 服务端:SYNSYN_SENTLISTEN服务端一直处于监听端口状态;客户端发同步请求
握手 2服务端 → 客户端:SYN+ACKSYN_SENTSYN_RCVD服务器收到 SYN,同步自身序列号并确认客户端
握手 3客户端 → 服务端:ACKESTABLISHEDESTABLISHED双方连接建立完成,可传输业务数据

3、四次挥手流程

#流程(C 客户端、S 服务端)#第一次挥手(C→S FIN)客户端数据发送完毕,发 FIN 报文,客户端进入 FIN_WAIT1,不再发数据。#第二次挥手(S→C ACK)服务器收到 FIN,回复 ACK 确认;此时服务器仍可向客户端发送剩余数据,客户端进入 FIN_WAIT2。#第三次挥手(S→C FIN)服务器数据全部发送完成,发送 FIN 报文,服务器进入 LAST_ACK。#第四次挥手(C→S ACK)客户端回复 ACK 确认,客户端等待 2MSL 后彻底关闭;服务器收到 ACK 直接释放连接。#2MSL 等待作用确保服务器收到最后一次 ACK;若 ACK 丢失,服务器会重发 FIN,客户端可重新回复 ACK
阶段报文客户端状态服务端状态说明
挥手 1客户端→服务端:FINFIN_WAIT_1ESTABLISHED客户端数据发完,请求关闭发送通道
挥手 2服务端→客户端:ACKFIN_WAIT_2CLOSE_WAIT服务器确认关闭请求,仍可向客户端发剩余数据
挥手 3服务端→客户端:FINFIN_WAIT_2LAST_ACK服务器数据全部发送完毕,发送关闭报文
挥手 4客户端→服务端:ACKTIME_WAIT(等待2MSL)CLOSED服务器收到 ACK 立即释放;客户端等待 2MSL 再关闭
关注重点: 大量 TIME_WAIT:正常,高并发服务的特征 大量 CLOSE_WAIT:程序bug,应用没有正确调用 close()关闭 socke 大量 SYN_RCVD :需要查询安全类型,防止有人攻击

@马哥教育

← 返回列表