当前位置: 首页 > news >正文

HTTP请求在网络中传输的完整路径

目录
  • HTTP请求在网络中传输的完整路径
    • 完整流程
    • 完整流程详解
      • 1. 客户端点击 → 发送HTTP包
      • 2. Socket连接发送给服务器
      • 3. 服务器网卡收到
      • 4. 系统底层sock等处理
      • 5. 到达服务器的Socket连接

HTTP请求在网络中传输的完整路径

img

完整流程

客户端点击↓
构造HTTP请求(GET /index.html HTTP/1.1...)↓   # 发送给服务端:socket.writeAndFlush()
用户空间 → 内核空间(send()系统调用)↓
传输层:添加TCP头(源端口、目标端口80、序列号等)↓  
网络层:添加IP头(源IP、目标IP、TTL等)↓
数据链路层:添加以太网帧头(源MAC、目标MAC)↓
物理层:网卡将数字信号转为电信号/光信号↓
--- 通过网络传输 ---↓
服务器网卡收到电信号/光信号↓
物理层:网卡将信号转为数字数据↓
数据链路层:检查MAC地址,剥去帧头↓
网络层:检查IP地址,判断是本地交付↓
传输层:TCP处理,根据端口号找到对应sock结构↓
将数据放入sock接收队列,唤醒等待进程↓   # 接收:socket.getInputStream()
服务器应用程序从Socket读取数据↓
解析HTTP请求,处理业务逻辑↓
返回HTTP响应(逆向重复上述过程)↓  # 发送给客户端:socket.writeAndFlush()...

完整流程详解

1. 客户端点击 → 发送HTTP包

// 浏览器/客户端应用代码层面
public class Browser {public void onClick() {// 构造HTTP请求String httpRequest = "GET /index.html HTTP/1.1\r\n" +"Host: www.example.com\r\n" +"User-Agent: Mozilla/5.0\r\n" +"\r\n";// 通过Socket发送Socket socket = new Socket("www.example.com", 80);OutputStream out = socket.getOutputStream();out.write(httpRequest.getBytes());out.flush();}
}

2. Socket连接发送给服务器

操作系统内核处理:

// Linux内核大致流程(简化)
int socket_send(struct socket *sock, const char *buf, size_t len) {// 传输层:添加TCP头struct tcphdr *tcp_header = build_tcp_header(sock->src_port, sock->dst_port);// 网络层:添加IP头  struct iphdr *ip_header = build_ip_header(sock->src_ip, sock->dst_ip);// 数据链路层:添加以太网头struct ethhdr *eth_header = build_eth_header(sock->src_mac, sock->dst_mac);// 通过网卡驱动发送netdevice_transmit(complete_packet);
}

3. 服务器网卡收到

网卡驱动处理:

// 网卡中断处理函数
irqreturn_t nic_interrupt_handler(int irq, void *dev_id) {// 1. DMA将数据包从网卡内存拷贝到内核内存struct sk_buff *skb = alloc_skb(packet_size);nic_dma_to_ram(skb->data, packet_size);// 2. 触发软中断,交给网络协议栈处理raise_softirq(NET_RX_SOFTIRQ);
}

4. 系统底层sock等处理

Linux网络协议栈处理:

// 网络协议栈处理流程
int netif_receive_skb(struct sk_buff *skb) {// 1. 数据链路层:检查MAC地址,剥去以太网头if (!is_my_mac_address(skb->eth_hdr->dest)) return DROP;skb_pull(skb, sizeof(struct ethhdr));// 2. 网络层:检查IP头,路由判断if (skb->ip_hdr->daddr != my_ip) {ip_forward(skb);  // 需要转发} else {ip_local_deliver(skb);  // 本地处理}// 3. 传输层:TCP/UDP处理if (skb->ip_hdr->protocol == IPPROTO_TCP) {tcp_v4_rcv(skb);  // 交给TCP处理}
}// TCP层处理
int tcp_v4_rcv(struct sk_buff *skb) {// 根据IP+端口找到对应的sock结构struct sock *sk = __inet_lookup_skb(&tcp_hashinfo, skb);if (sk != NULL) {// 将数据包放入sock的接收队列__skb_queue_tail(&sk->sk_receive_queue, skb);// 唤醒等待该sock的进程wake_up_interruptible(sk->sk_sleep);}
}

5. 到达服务器的Socket连接

服务器应用程序处理:

// 服务器端Socket代码
public class WebServer {public void start() throws IOException {ServerSocket serverSocket = new ServerSocket(80);while (true) {// 等待客户端连接(内核唤醒进程)Socket clientSocket = serverSocket.accept();// 创建线程处理请求new Thread(() -> handleRequest(clientSocket)).start();}}private void handleRequest(Socket clientSocket) throws IOException {// 6. 获取数据内容InputStream in = clientSocket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));// 读取HTTP请求String requestLine = reader.readLine();System.out.println("收到请求: " + requestLine);// 读取请求头String header;while (!(header = reader.readLine()).isEmpty()) {System.out.println("请求头: " + header);}// 处理请求并返回响应OutputStream out = clientSocket.getOutputStream();String response = "HTTP/1.1 200 OK\r\n\r\nHello World";out.write(response.getBytes());out.flush();clientSocket.close();}
}
http://www.jsqmd.com/news/39097/

相关文章:

  • 2025 年 11 月码垛机厂家推荐排行榜,龙门码垛机,立柱码垛机,全自动码垛机,机器人码垛设备,立柱式码垛机公司推荐
  • Ruby小白学习路线 - 实践
  • 部分 DP 问题小记
  • 2025年评价高的轩恩档案管理系统行业应用解决方案推荐榜
  • 2025年垃圾渗滤液聚丙烯酰胺源头厂家权威推荐榜单:养殖场聚丙烯酰胺/聚丙烯酰胺分子量/聚丙烯酰胺纯品源头厂家精选
  • 2025年专业的装修全屋定制行业口碑排行榜
  • Java实现一定时间内同时请求接口时返回相同数据
  • 协议和socket的关系
  • 2025年评价高的上海智算中心IDCE数据中心展同期活动
  • sqlserver日志收缩
  • 2025年玻璃鼠标垫定制厂家推荐排行榜
  • 2025年可靠的环保咨询全国优质服务推荐榜
  • 2025年国内有名的品牌设计行业影响力品牌榜
  • 2025酒店防风卷帘供应厂家推荐榜单
  • 2025年质量好的澳洲海外仓中转一件代发优质服务榜
  • 2025年靠谱的格力空调代理值得信赖机构榜单
  • kubelet在和kube-apiserver通信不支持http2协议cup占用升高
  • 达梦数据库 查询建表语句、获取字段注释(亲测可用)
  • 2025年比较好的标书制作品牌推荐榜
  • 五分钟构建智能知识库:AI如何重塑知识管理
  • 2025年比较好的酒会活动策划行业影响力品牌榜
  • 2025年知名的智慧工厂目视化规划最新品牌推荐榜服务商
  • 基于MATLAB实现空间计量模型及检验方法
  • 2025农用遮阳网销售厂家排行
  • 2025年评价高的赣州装修公司定制
  • 2025年广州包车品牌排行榜
  • 2025背调最好的排行榜单
  • 2025年靠谱的河南公司注册代理记账机构品牌实力推荐排行榜
  • 2025年权威的慧商青少年少儿训练平台口碑排行榜
  • 2025年数控机床生产厂家推荐排行