
目录端口号(Port)端⼝号范围划分UDP协议UDP协议端格式特点UDP 实现可靠传输TCP协议TCP协议端格式编辑1. 三次握手与四次挥手2. 可靠传输机制3. 面向字节流异常情况IP协议协议头格式网段划分路由选择以太网DNS在了解了网络信息传递的方式以及数据传输的过程之后这里将着重讲解 TCP/IP 协议。网络通信见前篇章中已经知道了代码都在应⽤层上实现传输层保证了数据能够从发送端传输接收端 在传输中五元组是必不可少的端口号(Port)在 TCP/IP 协议中端口号是用于标识应用程序或服务的逻辑编号它位于传输层与 IP 地址共同构成网络通信中的关键定位信息。当数据从发送端传输到接收端时IP 地址负责定位到目标主机而端口号则进一步定位到主机上具体的应用程序或服务。端⼝号范围划分• 0-1023:知名端⼝号, HTTP,FTP,SSH 等这些⼴为使⽤的应⽤层协议,他们的端⼝号都是固定的.• 1024-65535:操作系统动态分配的端⼝号.客⼾端程序的端⼝号,就是由操作系统从这个范围分配 的.有些服务器是⾮常常⽤的,为了使⽤⽅便,⼈们约定⼀些常⽤的服务器,都是⽤以下这些固定的端⼝号:• ssh服务器, 使⽤22端⼝• ftp服务器, 使⽤21端⼝• telnet服务器, 使⽤23端⼝• http服务器, 使⽤80端⼝• https服务器, 使⽤443端⼝UDP协议UDP协议端格式• 16位UDP⻓度,表⽰整个数据报(UDP⾸部UDP数据)的最⼤⻓度;• 如果校验和出错,就会直接丢弃;上图展示了 UDP 数据报的完整格式。UDP 首部固定为8 字节由源端口号16 位、目标端口号16 位、UDP 长度16 位由报头 载荷和校验和16 位四个字段组成。其中源端口号标识发送方的应用程序目标端口号标识接收方的应用程序UDP 长度表示整个数据报UDP 首部 UDP 数据 的最大长度校验和用于检测数据在传输过程中是否发生错误如果校验和出错数据报会被直接丢弃。校验和是 UDP 首部中的 16 位字段用于检测数据报在传输过程中是否出错。发送方对 UDP 首部和数据部分计算校验和并填入该字段接收方按相同算法重新计算并比对若不一致则说明数据可能被篡改或损坏接收方会直接丢弃该数据报。特点UDP的特点不在过多赘述见前篇章⽆连接:知道对端的IP和端⼝号就直接进⾏传输,不需要建⽴连接;不可靠:没有确认机制,没有重传机制;如果因为⽹络故障该段⽆法发到对⽅,UDP协议层也不会给应 ⽤层返回任何错误信息;⾯向数据报:不能够灵活的控制读写数据的次数和数量;应⽤层交给UDP多⻓的报⽂,UDP原样发送,既不会拆分,也不会合并UDP协议⾸部中有⼀个16位的最⼤⻓度.也就是说⼀个UDP能传输的数据最⼤⻓度是 64K(包含UDP⾸部).所以需要传输的数据超过64K,也就需要在应⽤层⼿动的分包,多次发送,并在接收端⼿动拼装UDP 实现可靠传输用 UDP 实现可靠传输UDP 本身不可靠但可在应用层模拟 TCP 的可靠机制常见做法包括确认应答接收方返回 ACK发送方未收到则视为丢失超时重传超时未收到确认就重发序号接收方按序号排序并去重滑动窗口控制发送速率。例如 QUIC 协议就是在 UDP 之上实现了可靠传输。TCP协议TCP协议端格式TCP 报文段由首部和数据两部分组成其中首部固定为20 字节是 TCP 实现可靠传输的关键。首部主要字段如下源端口号 / 目标端口号各 16 位标识发送方和接收方的应用程序与 IP 地址共同完成端到端的定位。序号32 位标识本报文段数据部分第一个字节的编号用于解决乱序和重复问题。确认号32 位表示期望收到对方下一个字节的序号用于确认应答机制。数据偏移4 位表示 TCP 首部的长度单位为 4 字节用于定位数据部分的起始位置。标志位包括 SYN建立连接、ACK确认应答、FIN释放连接等用于控制连接的建立、传输和释放。窗口大小16 位用于流量控制告知对方自己当前能接收的最大字节数。校验和16 位用于检测首部和数据在传输过程中是否出错出错则直接丢弃。TCPTransmission Control Protocol传输控制协议是 TCP/IP 协议族中位于传输层的核心协议与 UDP 相比它提供面向连接、可靠、基于字节流的传输服务。TCP 的核心机制围绕如何保证数据在不可靠的网络环境中可靠、有序地到达接收方展开主要包括以下几个方面1. 三次握手与四次挥手TCP 是面向连接的协议通信双方在传输数据前必须先建立连接通信结束后再释放连接。三次握手建立连接客户端发送 SYN 报文请求建立连接服务器收到后回复 SYN ACK 报文表示同意建立连接客户端再发送 ACK 报文确认。经过这三次交互双方确认彼此的收发能力正常连接建立成功。四次挥手释放连接主动关闭方发送 FIN 报文对方回复 ACK 确认对方再发送 FIN 报文主动关闭方回复 ACK 确认。经过四次交互连接被安全释放。2. 可靠传输机制滑动窗口是 TCP 实现流量控制的核心机制。发送方根据接收方通告的窗口大小决定一次能连续发送多少数据避免发送过快导致接收方处理不过来。窗口大小随接收方缓冲区剩余空间动态变化并通过 ACK 反馈给发送方在窗口范围内可批量发送多个报文段无需逐个等待确认从而提升传输效率。流量控制的作用在于让发送方的发送速率与接收方的处理能力相匹配防止因发送过快导致数据丢失或接收方缓冲区溢出是 TCP 可靠传输的重要保障之一。拥塞控制则关注网络整体的承载能力当网络出现拥塞时主动降低发送速率避免加剧网络拥堵。二者共同服务于可靠传输流量控制解决的是接收方处理不过来的问题拥塞控制解决的是网络承载不了的问题配合确认应答与超时重传共同保证数据不丢失、不重复、按序到达。延迟应答是 TCP 提升传输效率的机制之一。接收方收到数据后不立即返回 ACK而是等待一小段时间若在此期间收到更多数据则合并为一个 ACK 统一回复从而减少网络中 ACK 报文的数量降低网络开销同时也能让发送方更快地进入下一个窗口的发送。捎带应答是 TCP 提升传输效率的另一机制。当接收方需要回复 ACK 时如果恰好也有数据要发送给对方就可以把 ACK 附带在这份数据报中一起发送而不必单独发送一个空的 ACK 报文从而减少报文数量、节省网络开销。捎带应答与延迟应答常配合使用共同减少 ACK 报文的传输次数。TCP 通过多种机制协同工作保证数据不丢失、不重复、按序到达确认应答ACK接收方收到数据后会向发送方返回确认报文告知数据已成功接收。超时重传发送方发送数据后启动定时器若在超时时间内未收到确认则重新发送该数据。序号与确认号每个字节都有序号接收方按序号重组数据从而解决乱序和重复问题。流量控制通过滑动窗口机制接收方告知发送方自己的接收能力避免发送过快导致接收方处理不过来。拥塞控制当网络出现拥塞时TCP 会主动降低发送速率避免加剧网络拥堵常用算法包括慢启动先发少量的数据,摸清⽹络状态,再决定多少的速度传输数据、拥塞避免、快重传和快恢复。延迟应答接收方收到数据后不立即返回 ACK而是等待一小段时间若在此期间收到更多数据则合并为一个 ACK 统一回复从而减少网络中 ACK 报文的数量降低网络开销提升传输效率。捎带应答当接收方需要回复 ACK 时如果恰好也有数据要发送给对方就把 ACK 附带在这份数据报中一起发送而不必单独发送空的 ACK 报文从而减少报文数量、节省网络开销。TCP传输机制 最关键的两个机制为确认应答与超时重传保证了TCP 可靠传输机制3. 面向字节流与 UDP 的面向数据报不同TCP 是面向字节流的协议。应用层交给 TCP 的数据会被看作一串连续的字节流TCP 会根据网络状况和接收方能力自行决定如何拆分或合并这些字节进行发送接收方再按序号将字节流还原给应用层。因此TCP 不保留应用层报文的边界读写数据的次数和数量由 TCP 灵活控制。粘包问题由于 TCP 是面向字节流的协议不保留应用层报文的边界当发送方连续发送多个数据包时接收方可能一次性收到多个包的数据导致无法区分每个包的边界这就是粘包问题。常见的解决思路包括在数据中约定固定长度、在包尾添加分隔符或在包头携带长度字段。例如发送方约定每个数据包固定为 100 字节三种解决方式接收方每收到 100 字节就按一个完整包处理从而区分出每个包的边界或者在每个包的末尾添加特殊分隔符如 \n接收方遇到该分隔符即认为一个包结束也可以在包头写入本次数据的长度字段接收方先读取长度再按该长度截取对应的数据部分。异常情况TCP 异常情况在实际通信中TCP 还会遇到一些异常场景。例如连接异常断开时一方可能因断电、崩溃等原因未发送 FIN 报文另一方会通过超时重传和保活机制Keepalive检测到连接失效半关闭则指一方发送 FIN 后不再发送数据但仍可接收对方数据常见于一方数据发送完毕、另一方仍需继续传输的场景端口未监听时对方会收到 RST 报文连接被立即重置从而避免长时间等待。IP协议IP 协议Internet Protocol网际协议是 TCP/IP 协议族中位于网络层的核心协议负责将数据包从源主机路由到目标主机。它主要解决两个问题一是寻址通过 IP 地址唯一标识网络中的每一台主机二是路由选择决定数据包在复杂的网络拓扑中应沿哪条路径传输。IP 协议提供的是无连接、不可靠的传输服务每个数据报独立发送不建立连接若传输过程中发生丢包或出错IP 层不会自动重传可靠性由上层协议如 TCP来保证。常见的 IP 协议包括IPv4和IPv6其中 IPv4 使用32 位地址IPv6 使用128 位地址以解决地址枯竭问题。协议头格式NAT 下的网络通信在 NAT 环境下内网设备使用私有 IP 地址对外通信时由 NAT 设备通常是路由器将私有 IP 映射为公网 IP。当内网设备向公网发送数据时NAT 设备会记录该映射关系当公网返回数据时NAT 设备根据映射表将数据转发回对应的内网设备从而实现多台内网设备共享一个公网 IP 与外网通信。IP 地址不够用的解决方法IPv4 使用 32 位地址理论上最多可提供约 43 亿个地址但实际可用数量远小于此随着互联网设备激增地址枯竭问题日益突出。目前主要有以下几种解决思路NAT网络地址转换让一个公网 IP 供局域网内多台设备共享设备内部使用私有 IP对外统一映射为公网 IP是当前最广泛使用的方案。CIDR无类别域间路由打破传统 A、B、C 类地址的固定分类按需灵活划分地址块减少地址浪费提高利用率。DHCP动态主机配置协议动态分配 IP 地址设备接入网络时才临时获取地址离开后释放复用避免长期占用。IPv6使用 128 位地址地址空间极其充足是解决地址枯竭问题的根本方案。其中NAT通过私有地址与公网地址的映射让大量内网设备共享少量公网 IP是目前缓解 IPv4 地址紧张最直接、最常用的手段而IPv6则从地址空间上彻底解决了枯竭问题是未来网络发展的方向。IP 协议头IPv4 首部固定为20 字节是 IP 数据报中用于控制传输的关键部分。首部主要字段如下版本4 位标识 IP 协议版本IPv4 该字段值为 4。首部长度4 位表示 IP 首部的长度单位为 4 字节最小为 5即 20 字节。服务类型8 位用于区分服务的优先级实际使用较少。总长度16 位表示整个 IP 数据报首部 数据的总长度最大为 65535 字节。标识、标志、片偏移用于数据报的分片与重组当数据报超过链路 MTU 时会被拆分传输。生存时间TTL8 位限制数据报在网络中的跳数防止数据报无限循环转发。协议8 位标识上层协议类型如 TCP值为 6、UDP值为 17。首部校验和16 位用于检测 IP 首部在传输过程中是否出错。源 IP 地址 / 目标 IP 地址各 32 位标识数据报的发送方和接收方主机。其中TTL每经过一个路由器就减 1减到 0 时数据报被丢弃从而避免数据报在网络中无限循环协议字段则让接收方知道该把数据交给上层的哪个协议处理。网段划分特殊的 IP 地址在 IP 地址中有一些地址具有特殊含义不能作为普通主机地址使用。常见的特殊 IP 地址包括网络号主机号全为 0 的地址用于标识整个网段例如192.168.1.0表示 192.168.1 这个网段本身不能分配给主机。广播地址主机号全为 1 的地址用于向同一网段内的所有主机发送数据例如192.168.1.255就是该网段的广播地址。回环地址127.0.0.1用于本机自测数据不会发送到网络上常用于验证本机协议栈是否正常。私有地址如10.0.0.0/8、172.16.0.0/12、192.168.0.0/16仅用于内网不能直接在公网路由。网段划分网段是指 IP 地址中网络号相同的地址集合用于标识同一局域网内的主机。IPv4 地址由网络号和主机号两部分组成网络号相同的设备属于同一网段可直接通信不同网段之间则需要通过路由器转发。例如IP 地址192.168.1.10与192.168.1.20若子网掩码为255.255.255.0则网络号均为192.168.1它们属于同一网段可以直接通信而192.168.2.10的网络号为192.168.2与前两者不在同一网段需要经过路由器才能互通。路由选择路由选择路由选择是 IP 协议的核心功能之一指数据包从源主机出发在复杂的网络拓扑中确定一条到达目标主机的转发路径。路由器根据自身的路由表逐跳转发数据包每经过一个路由器就根据目标 IP 地址查找下一跳地址直到数据包到达目标主机所在的网段。路由选择主要分为两类静态路由由管理员手动配置路径固定、简单可靠但无法适应网络拓扑变化动态路由由路由协议如 RIP、OSPF、BGP自动计算和更新路由表能根据网络状态动态调整路径更适合规模较大、拓扑复杂的网络。以太网以太网格式帧协议类型字段有三种值,分别对应 IP、ARP用于根据目标 IP 地址查询对应的 MAC 地址从而在同一网段内完成数据帧的封装与传输、RARP帧末尾是 CRC 校验码以太网Ethernet是当前最广泛使用的局域网技术工作在数据链路层负责在同一网段内的设备之间传输数据帧。它通过MAC 地址唯一标识网络中的每一块网卡当一台设备要发送数据时会在帧头写入目标设备的 MAC 地址同一网段内的设备都能收到该帧但只有 MAC 地址匹配的设备才会接收并处理。以太网采用CSMA/CD载波监听多路访问/冲突检测机制来协调共享介质的访问发送前先监听信道是否空闲空闲则发送发送过程中若检测到冲突则停止并随机等待一段时间后重试。现代以太网大多使用交换机组网交换机根据 MAC 地址表将数据帧只转发到目标端口从而避免冲突、提升传输效率。IP 地址与 MAC 地址的区别IP 地址是逻辑地址由网络管理员或 DHCP 分配用于在网络层标识主机会随网络环境变化MAC 地址是物理地址由网卡出厂时固化用于在数据链路层标识设备全球唯一且不可更改。IP 地址负责跨网络寻址MAC 地址负责同一网段内的帧传输二者配合完成端到端的通信。DNSDNSDomain Name System域名系统是负责将域名解析为IP 地址的分布式系统DNS是应⽤层协议。由于 IP 地址难以记忆用户通常通过域名如 www.example.com访问网站DNS 的作用就是把域名转换为对应的 IP 地址从而建立连接。DNS 采用分层结构组织根域名服务器、顶级域名服务器和权威域名服务器逐级查询。当本地 DNS 缓存中没有记录时会依次向上级服务器发起查询最终返回目标 IP 地址并将结果缓存以加快后续访问避免了每次访问都要经过DNS 触发DNS请求。此外 DNS服务器存在很多 除了存入最初的原始数据的 “DNS根服务器 ” 还存在着各大运营商的‘DNS镜像服务器’所以不必担心海量数据导致DNS ’挂掉‘ 的可能性已经燃成灰烬了