十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【网络原理】TCP/IP 协议栈

【网络原理】TCP/IP 协议栈 本文重点理解传输层的作用深入理解 TCP 的各项特性和机制对整个 TCP/IP 协议有系统的理解对 TCP/IP 协议体系下的其他重要协议和技术有一定的了解本文的知识点是网络编程的理论基础是一个服务器开发程序员的重要基本功是整个网络知识中重点和难点也是各大公司笔试面试的核心考点文章目录引言协议栈的分层体系一、应用层二、传输层2.1 端口号端口号范围划分认识知名端口号Well-Known Ports2.2 UDP 协议User Datagram Protocol用户数据报协议UDP 数据报格式UDP 协议特点基于 UDP 协议的应用层协议2.3 TCP 协议Transmission Control Protocol传输控制协议TCP 协议格式TCP 协议特点引言TCP/IP 协议栈是互联网通信的基石它定义了一套分层协作的通信规则确保数据能够在复杂的网络环境中可靠、高效地传输。协议栈的分层体系TCP/IP 协议栈通常简化为四层模型自下而上分别为数据链路层、网络层、传输层和应用层。每一层都负责不同的通信任务并依靠下层的服务完成自身工作。层次核心职责关键协议应用层满足用户具体业务需求HTTP、DNS、FTP、SMTP 等传输层负责数据从发送端到接收端的端到端传输TCP可靠、UDP不可靠网络层在复杂网络中选择路径并管理地址IP、ICMP、ARP数据链路层在同一链路节点间传递数据帧以太网、PPP一、应用层应用层直接面向开发者和最终应用提供满足业务需求的通信接口。常见协议如HTTP/HTTPSSSHTelnetFTPSMTP这些应用层协议构成了日常网络应用的入口。应用层协议之下传输层如TCP/UDP 协议负责可靠性与传输控制应用层只需实现自己的业务语义。DNS 等服务在应用层实现域名解析等功能底层通常通过UDP/ TCP进行请求和响应。在网络编程中应用层协议API如Java、Python、C/C 的 socket 接口用于实现业务逻辑理解下层协议对设计高效、鲁棒的网络程序至关重要。二、传输层传输层的任务是保证数据能够从发送端传输到接收端。传输层也是网络编程的核心提供两种传输方式可靠的 TCP和高效的 UDP。2.1 端口号端口号Port标识了一个主机上进行通信的不同的应用程序不同应用程序的端口号都各不相同。在 TCP/IP 协议中用“源IP”、“源端口号”、“目的IP”、“目的端口号” 以及 “协议号”这样的五元组来标识一个通信可以通过 netstat -n 来查看。端口号范围划分0~1023知名端口号Well-Known Ports分配给广泛使用的服务如 HTTP80、HTTPS443 等这些广为使用的应用层协议。这些端口通常需要管理员权限才能绑定并且他们的端口号都是固定的、公认的。1024~49151注册端口号Registered Ports供用户或应用程序注册使用不是操作系统自动动态分配的。许多数据库如 MySQL 3306、应用服务器如 Tomcat 8080会使用这个范围内的端口。49152~65535动态/私有端口号Dynamic/Private Ports通常由操作系统动态分配给客户端程序作为源端口用于发起连接也称为临时端口。认识知名端口号Well-Known Ports有些服务器是非常常用的为了使用方便人们约定一些常用的服务器都是用以下这些固定的端口号SSH 服务器22FTP 服务器21Telnet 服务器23HTTP 服务器80HTTPS 服务器443我们自己写一个程序时如果要使用端口号应该避免这些知名端口号。一个进程是否可以绑定多个端口号可以。一个端口号是否可以被多个进程绑定不可以除非设置 SO_REUSEADDR 特殊情况通常不允许。2.2 UDP 协议User Datagram Protocol用户数据报协议UDP 就像寄信—— 写好的信就是数据包当贴上邮票、放入邮筒中之后你不知道它是否能成功送到目的地。UDP 数据报格式偏移量 (位)字段名称长度作用说明0-1516位源端口号2字节发送方进程端口号。如果是客户端通常由操作系统动态分配1024-65535如果是服务端则是知名端口如DNS的53。16-3116位目的端口号2字节接收方进程端口号。用于在目标主机上找到对应的应用程序。32-4716位UDP长度2字节整个UDP数据报首部 数据的总长度单位是字节。最小值为8只有首部无数据最大值为65535即64KB。48-6316位校验和2字节用于检测数据在传输过程中是否损坏。如果校验和出错接收端会直接丢弃该数据报。16 位 UDP 长度表示整个数据报UDP 首部 UDP 数据的最大长度。如果校验和出错就会直接丢弃。UDP 协议特点无连接知道对端的 IP 和端口号可以直接进行传输不需要建立连接不可靠没有确认机制没有重传机制如果因为网络故障导致该段无法发送到对方UDP 协议层也不会给应用层返回任何错误信息面向数据报不能够灵活地控制读写数据的次数和数量。应用层交给 UDP 多长的报文UDP 会照样发送既不合并也不拆分长度限制最大长度是 16 位即 64KB如果 UDP 的总长度超过 64KB应用层必须手动分包、多次发送接收端必须手动组包常见场景DNS 查询、实时音视频RTP、游戏数据容忍丢包追求低延迟基于 UDP 协议的应用层协议NFS网络文件系统TFTP简单文件传输协议DHCP动态主机配置协议BOOTP启动协议用于无盘设备启动DNS域名解析协议2.3 TCP 协议Transmission Control Protocol传输控制协议TCP 协议是互联网最复杂的协议它通过一系列精巧的机制在不可靠的 IP 网络上提供了可靠的字节流传输。TCP 协议格式源/目的端口号表示数据是从哪个进程来到哪个进程去32位序号/32位确认序号4位 TCP 报头长度表示该 TCP 首部有多少个32位bit即有多少个4字节TCP 首部最大长度是 6015 * 46位标志位URG紧急指针是否有效ACK确认号是否有效PSH提示接收端应用程序立刻从 TCP 缓冲区把数据读走RST对方要求重新建立连接称为复位报文段SYN请求建立连接称为同步报文段FIN通知对方本端要关闭了称为结束报文段16位窗口大小16位校验和发送端填充CRC校验接收端校验不通过则认为数据有问题。此处的校验和不光包含 TCP 首部也包含数据部分16位紧急指针表示哪部分数据是紧急数据40字节头部选项TCP 协议特点文章到这里就告一段落了若有错误请尽管指出完
返回列表