尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
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、RJ451. 应用层顶层 对应 OSI5 会话层 6表示层 7应用层 作用直接为软件程序提供网络通信接口处理用户业务数据、数据加密、会话管理、编码转换。 常见协议 HTTP/HTTPS、FTP、TFTP、DNS、DHCP、SSH、Telnet、SMTP、POP3、IMAP、RPC2. 传输层 对应 OSI4 传输层 作用端到端传输通过端口号区分同一台设备上不同程序分可靠传输与高速无连接传输。 两大核心协议 TCP面向连接、可靠传输三次握手 / 四次挥手、重传、流量控制网页、文件传输用 UDP无连接、低延迟、不可靠直播、游戏、DNS 查询用。3. 互联网层IP 层核心层 对应 OSI3 网络层 作用跨网段路由寻址基于 IP 地址完成数据包转发、差错通知、组播管理。 常见协议 IPv4/IPv6、ICMPping 命令、ARPIP 转 MAC、IGMP组播、OSPF、RIP路由协议4. 网络接口层底层 对应 OSI1 物理层 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和UDP1、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/HTTPS2. 文件上传下载 FTP/SFTP3. 远程管理 SSH、Telnet、RDP4. 邮件 SMTP、POP3、IMAP5. 数据库 MySQL、Oracle6. 支付、表单提交等重要数据传输实时语音、直播、网络游戏等对延迟敏感场景UDP优先低延迟可容忍少量丢包追求高效并发1. DNS 域名解析2. DHCP 自动分配 IP3. 视频直播、语音通话、视频会议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百度服务器 IP80 网页端口 二者成对建立 Socket 通信通道传输网页数据。三、TCP三次握手与四次挥手1、什么是三次握手和四次挥手TCP 是面向连接协议通信前通过三次握手确认双方发送、接收能力正常协商初始序列号建立可靠通道。2、三次握手流程#流程客户端 C ↔ 服务端 S#第一次握手C→S客户端发送 SYN 报文携带客户端初始序列号随机数ISNc请求建立连接客户端进入 SYN_SENT。#第二次握手S→C服务器收到 SYN回复 SYNACK SYN服务器也要发起连接携带服务器 ISN(s)ACK确认客户端报文确认号ISN(c)1 服务器进入 SYN_RCVD。#第三次握手C→S客户端回复 ACK确认号ISN(s)1 双方同步完成进入 ESTABLISHED连接已建立开始传输业务数据。阶段报文客户端状态服务端状态说明握手 1客户端 → 服务端SYNSYN_SENTLISTEN服务端一直处于监听端口状态客户端发同步请求握手 2服务端 → 客户端SYNACKSYN_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等待2MSLCLOSED服务器收到 ACK 立即释放客户端等待 2MSL 再关闭关注重点 大量 TIME_WAIT正常高并发服务的特征 大量 CLOSE_WAIT程序bug应用没有正确调用 close()关闭 socke 大量 SYN_RCVD 需要查询安全类型防止有人攻击马哥教育
返回列表