网络分层流转—从浏览器请求到服务端响应究竟经历了什么?

网络编程之 Socket 编程 一文看懂 承接上文,我想继续聊聊数据是如何在网络中传输的,我在北京去请求一个部署在上海的服务,我是怎么找到他的呢?数据时怎么在这之间流转的呢?心中多少对此有些疑惑,总有模棱两可的感觉,所有本篇文章想解开这篇战争迷雾。

先来点真实的,网络为什么要分层?

在设计上讲,分层其实就是分块,就是将打的问题分级分解为小的问题,各层各级各司其职,做好自己那一块的小事情,从而完成一个复杂问题。所以为什么?为了拆解复杂问题

既然,分了这些层,那么对于 TCP/IP 网络模型,一个网络请求是必然是要经历层与层之间的传递

其实对于数据的传输,从 HTTP -> TCP -> IP ->MAC 其实就是一个套 “头” 的过程,这个 “头” 其中最重要的信息就是标识你是谁,你要去哪

首先是我们发送一个请求出去前会做什么?如何准备数据?如上图。

对于一个普通的 HTTP 请求来说,基本的数据会放到 HTTP body 中,协议内容放到 header 中,这是第一步的应用层

下一步会经过传输层的处理,对我们要发送的数据添加 TCP 头,TCP 头中包含源端口号(也就是请求发起方的端口号),以及目的端口号(请求服务的端口号)。

这之后达到网络层 IP 协议的处理,这里会添加 IP 头,其中包含源 IP 地址和目标 IP 地址。

然后 数据链路层 处理 MAC 地址,添加 MAC 头,其中包含源 MAC 地址和目标 MAC 地址(目标 MAC 地址是会变的,一开始不知道最终目标的 MAC 地址时可能是网关的 MAC 地址)

最后进入物理层通过网线进行数据传输,这其中可能会经过网关,路由器进行中转寻址定位。一路过关斩将直到找到目标服务器的地址。

而服务器在收到请求后,也会一层层去查看(说是一层层,对于程序来说这个查看也就是在数据结构中移动下指针而已),校验是否是需要自己处理的,MAC 地址对不对,IP 地址对不对,要请求的是我的那个端口的服务,都 OK 会交给应用层服务进行处理,然后重复上面的过程将结果包起来返回给客户端浏览器。

网络分层流转---从浏览器请求到服务端响应究竟经历了什么?相关推荐

  1. AJAX学习笔记(基本使用,请求参数传递,获取服务端响应,错误处理,低版本IE浏览器缓存问题及解决)

    1. Ajax实现步骤 创建ajax对象 let xhr = new XMLHttpRequest(); 告诉ajax请求地址及请求方式 xhr.open('get','http://www.exam ...

  2. 浏览器及时感知服务端数据变化的方式

    需求 在公司,有一个需求,是浏览器实时获取服务端数据变化,然后根据变化做相应的动作.需求场景如下:手机端扫描二维码,然后获取待取件订单列表,点击取件,进行取件,同时远端打印机打印出取件小票. 技术难点 ...

  3. 学习AJAX必知必会(2)~Ajax基本使用,设置请求行、请求体、请求头,服务端响应JSON数据

    一.Ajax的基本使用 1.核心对象 XMLHttpRequest,AJAX 的所有操作都是通过该对象进行的. 2.发送ajax请求(4个步骤): 创建xhr对象,然后open方法初始化,设置请求方式 ...

  4. Request对象 --web浏览器向web服务端的请求

    参考文档:http://blog.csdn.net/u012986057/article/details/50570325 一]Request对象常用方法         1)StringBuffer ...

  5. SignalR 实现web浏览器客户端与服务端的推送功能

    SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...

  6. LinuxC++:网络编程(一)最原始服务端及客户端代码实现和函数释义

    前言:学习编程一定要敲,接着测试,然后查资料,最后总结!!! 一.socket这个单词在C++网络编程中的含义 socket中文就是插座.运行在计算机中的两个程序通过socket建立起一个通道,数据在 ...

  7. 联众服务器超时中断,http连接中客户端中断了请求,服务端会中断执行吗?超时时间设置?...

    由于http是基于tcp的,在tcp中,客户端中断了连接,服务端是无法感知的,只能通过发心跳包来检测,而显然我们的nginx是没有发心跳包的,所以,包括nginx,php-fpm都是不知道客户端已断开 ...

  8. java httpclient发送json 请求 ,go服务端接收

    /***java客户端发送http请求*/package com.xx.httptest;/*** Created by yq on 16/6/27.*/import java.io.IOExcept ...

  9. 【IAP】新建虚拟产品、新建测试帐号、获取产品列表、向自己的服务器生成订单、发送购买请求、服务端数据安全

    文章目录 前言 I .新建虚拟产品 II.新建测试帐号 III.代码里该做的事情 3.1 SKProductsRequest 3.2 获取产品列表 3.3 向自己的服务器生成订单 3.4 发送购买请求 ...

  10. PhotonServer,客户端发送请求给服务端,服务端解析请求,发送回客户端响应,客户端再解析服务端发过来的响应。

    1.(客户端发送给服务端)test中的构造参数并且发送 完整代码如下 test.cs using System; using System.Collections; using System.Coll ...

最新文章

  1. 使用Google 官方的控件SwipeRefreshLayout实现下拉刷新功能
  2. TOP (100) PERCENT
  3. ansible1.7.2源码安装教程
  4. java类型比较_Java数据类型的比较
  5. ibatis的简介与初步搭建应用
  6. 电脑向linux服务器传输文件,windows如何通过ssh工具向linux服务器上传和下载文件?...
  7. select下拉框option的样式修改
  8. Qt之QSS:带CheckBox的QGroupBox及其样式设计
  9. 商业智能BI有哪些数据价值
  10. Java 并发编程之美:线程相关的基础知识
  11. 什么3D建模软件适合初学者使用?
  12. CIS Benchmarks
  13. 在windows 10上将vega56 超频,eth算力保持在43。
  14. 网上商城所需软硬件架构分析
  15. 推荐系统——矩阵分解
  16. 利用Java计算一光年的距离
  17. 【笨木头Unity】入门之旅005:正常人都要掌握的操作
  18. 常用WebServices 天气,IP,邮编,Email,火车时刻表,股票 web接口服务
  19. ERP实施-保密配方管理方案
  20. local variable 'sum_size' referenced before assignment报错

热门文章

  1. 用html5画瀑布图,一起制作瀑布图
  2. bcm5396交换机级联配置_「收藏」Cisco交换机安全配置设定
  3. 崇实大学 计算机专业,2020年崇实大学Times世界排名
  4. 【漏洞扫描与复现】Kali之Metasploit渗透测试
  5. srand rand c语言,C语言srand和rand函数
  6. iPhone各种机型尺寸、屏幕分辨率
  7. 安卓游戏《罗马帝国》游戏心得
  8. Visual studio 2017 安装
  9. 易基因 | 植物DNA甲基化专题 | NAR:拟南芥AtHDA6与着丝粒周围DNA甲基化关系研究
  10. 京东商品的历史价格走势