TCP欢迎端口与连接端口差异及三次握手作用技术咨询
关于HTTP端口与TCP三次握手的问题解答
注:本文涉及的图片出自James F. Kurose与Keith W. Ross所著教材《Computer Networking: A Top-Down Approach》(ISBN-13: 978-0-13-285620-1,ISBN-10: 0-13-285620-4),图片显示欢迎端口与实际连接端口不同(因不同套接字分配不同端口号)。
问题1:当客户端发起HTTP请求时,Web服务器的欢迎端口为80,实际连接端口是否与80不同?
得分两端来解释这个问题:
- 对于Web服务器来说,实际处理该HTTP请求的连接,其本地端口依然是80。服务器会在80这个“欢迎端口”上持续监听所有进来的连接请求,接受连接后并不会更换端口——毕竟客户端是冲着80端口发起的请求,换端口的话客户端根本不知道该往哪发数据。服务器靠TCP四元组(客户端IP+随机端口,服务器IP+80)来唯一标识每个连接。
- 对于客户端来说,发起请求时会由操作系统分配一个临时的随机端口(通常在1024-65535的动态端口范围内),这个端口和服务器的80端口必然不同——这就是图片里展示的“欢迎端口与实际连接端口不同”的场景,客户端和服务器用不同端口完成双向通信的套接字分配逻辑。
问题2:TCP三次握手的作用是什么?
TCP三次握手本质是客户端和服务器之间的双向可靠性确认仪式,核心作用有两个:
- 验证双方收发功能正常:通过三次来回交互,客户端能确认“服务器既能收到我的消息,也能给我发消息”;服务器也能确认“客户端的收发链路都没问题”,避免出现单向通信失效的情况。
- 同步初始序列号(ISN):TCP是面向字节流的协议,每个字节都有唯一序列号,用来保证数据的顺序、完整性和去重。三次握手时,双方会交换各自的初始序列号,为后续数据传输的校验打下基础。
再拆解每一步的具体意义:
- 第一次握手:客户端发送SYN包,相当于说“嘿,我想和你建立连接,我的起始序列号是X”。
- 第二次握手:服务器回复SYN+ACK包,意思是“收到请求了!我的起始序列号是Y,我确认你的X没问题”。
- 第三次握手:客户端回复ACK包,说“收到你的Y了,咱们可以开始传输数据了”。
除此之外,三次握手还能过滤旧连接的残留报文——如果之前断开的连接有延迟报文流入当前网络,三次握手的序列号验证会直接识别出这些无效报文,避免建立错误的连接。
内容的提问来源于stack exchange,提问作者whoisit
相关产品推荐
相关产品推荐

