1. 网络模型概览

2. HTTP 网络通讯过程

1. 网络模型概览

  • OSI 先有模型,后有协议,先有标准,后进行实践;而 TCP/IP 则相反,先有协议和应用再提出了模型,且是参照的 OSI 模型。
  • OSI 是一种理论下的模型,而 TCP/IP 已被广泛使用,成为网络互联事实上的标准。

2. HTTP 网络通讯过程

示例:简单的网络拓扑模型

详解:当键入网址到网页显示的通讯过程

客户端(发送)

  1. HTTP
    1. 浏览器解析 URL(协议、域名、资源路径)
    2. 生成 HTTP 请求报文
  2. DNS(真实地址查询)
    1. 向DNS服务器查询服务器域名对应的 IP 地址
    2. 域名中越靠右的位置表示其层级越高
  3. 协议栈(指南帮手)
    1. 获取 IP 后将 HTTP 传输工作交给操作系统中的协议栈

      • TCP/UDP:负责收发数据
      • IP:负责将网络包发送给对方
  4. TCP(可靠传输)
    1. 报文头部包含源端口号、目标端口号、序号、确认号等
    2. TCP 传输数据之前,要先三次握手建立连接(三次握手的目的是保证双方都有发送和接收的能力
    3. TCP 报文生成:TCP 头部 + HTTP 报文
  5. IP(远程定位)
    1. 将数据封装称网络包发送给通信对象
    2. IP 报文生成:IP 头部 + TCP 头部 + HTTP 报文
  6. MAC(两点传输)
    1. 还需要加上 MAC 头部(发送方和接收方的 MAC 地址等信息),MAC 头部是以太网的头部
    2. MAC 作用:MAC 地址用来唯一标识设备,再通过 ARP 协议找到下一站路由器的 MAC 地址,实现两点之间的传输
    3. 网络包报文:MAC 头部 + IP 头部 + TCP 头部 + HTTP 报文
  7. 网卡(出口)
    1. 真正的数据发送过程:将数字信息(IP 网络包)转换为电信号,才能在网线上传输
    2. 控制网卡需要靠网卡驱动程序
    3. 网卡本身具有 MAC 地址,且会核对数据包的接收方 MAC 地址与自身 MAC 地址是否相同,不是则丢弃
  8. 交换机(送别)
    1. 交换机的设计:将网络包原样转发到目的地
    2. 交换机工作在 MAC 层,也称为二层(数据链路层)网络设备
    3. 交换机接收到达网线接口的电信号,并转换为数字信息
    4. 交换机的端口不核对对方 MAC 地址
    5. 交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的网线端口
  9. 路由器(出境)
    1. 路由器基本原理:

      • 与交换机类似,通过查表判断包的(下一个路由器或目标设备)转发目标
      • 路由器基于 IP 设计,俗称三层(传输层)网络设备,其各端口具有 MAC 地址和 IP 地址(和计算机网卡一样);而交换机基于以太网设计,俗称二层网络设备,其端口不具有 MAC 地址
    2. 包接收操作:将网线接口的电信号转成数字信号,并核对 MAC 地址
    3. 查询路由表确定输出端口:MAC 头部的作用就是将包送达路由器
    4. 包发送操作:将网络包的数字信号转成电信号并通过端口发送出去,经过层层转发之后,到达最终目标设备

以太网(传输)

在网络包传输过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

服务器端(接收)

  1. 路由器(入境)
  2. 交换机(境内)
  3. 服务器(终点)
    1. 服务器层层扒开数据包头部,最后通过 TCP 头部的端口号确认是 HTTP 进程想要的这个包
    2. HTTP 进程将资源封装在 HTTP 响应报文中,也依次穿上 TCP、IP、MAC 头部,从网卡出去,交由交换机转发到路由器,经过层层转发,最后到达客户端
    3. 客户端扒剩 HTTP 响应报文后,交给浏览器去渲染页面并显示资源
    4. 最后客户端要离开时,向服务器发起 TCP 四次挥手,至此双方连接断开

示例:服务器和客户端相互扒皮

HTTP 网络通讯过程的更多相关文章

  1. 访问www.baidu.com后会发生什么(一次完整的网络通讯过程)

    1.在浏览器中输入www.baidu.com 这意味着浏览器要向百度发送一个网页数据包,要发送数据包,需要知道对方的IP地址,这里我们只知道网址为www.baidu.com,却不知道IP地址,此时应用 ...

  2. dicom网络通讯入门(2)

    第二篇,前面都是闲扯 其实正文现在才开始,这次是把压箱底的东西都拿出来了. 首先我们今天要干的事是实现一个echo响应测试工具 也就是echo 的scu,不是实现打印作业管理么.同学我告诉你还早着呢. ...

  3. DIOCP网络通讯流程

    DIOCP 运作核心探密   原文连接: http://blog.qdac.cc/?p=2362 原作者: BB 天地弦的DIOCP早已经广为人知了,有很多的同学都用上了它,甚至各种变异.修改版本也出 ...

  4. TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议

    原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...

  5. 在网络通讯中应用Protobuf

    在网络通讯中应用Protobuf Protobuf的设计非常适用于在网络通讯中的数据载体,它序列化出来的数据量少再加上以K-V的方式来存储数据,对消息的版本兼容性非常强:还有一个比较大的优点就是有着很 ...

  6. curl---一款实用的URL命令行网络通讯工具/库

    最近一段时间在看朴灵翻译的<深入浅出nodejs>,里面有提到一种脱离浏览器的客户端网络通讯工具,curl命令,自己在电脑上试了一下,感觉非常好用,而且莫名的感觉这是一个非常强大的网络工具 ...

  7. 自学Aruba1.5-Aruba体系结构-Aruba通讯过程

    点击返回:自学Aruba之路 自学Aruba1.5-Aruba体系结构-Aruba通讯过程 1. Aruba通讯过程 Aruba 通讯过程: ①AP连接到现有网络的交换机端口,加电起动后,获得IP地址 ...

  8. https建立通讯过程及运行机制 [转]

    ssl与tls: SSL:(Secure Socket Layer,安全套接字层),为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确 ...

  9. tcp/ip网络通讯安全加密方法

    tcp/ip网络通讯安全是一个广受关注的话题,现在也有一些基于tcp/ip加密技术标准如SSL,TLS等.但很多时候编写一些简单的网络通讯把这标准加密应用添加进来乎一下子把程序变得复杂了,而实现自己的 ...

随机推荐

  1. vue项目配置 `webpack-obfuscator` 进行代码加密混淆

    背景 公司代码提供给第三方使用,为了不完全泄露源码,需要对给出的代码进行加密混淆,前端代码虽然无法做到完全加密混淆,但是通过使用 webpack-obfuscator 通过增加随机废代码段.字符编码转 ...

  2. SpringBoot整合Mongodb4.0

    本品文章只做学习使用: 安装mongodb推荐博客:https://www.jianshu.com/p/a75e26e5f635 1:如何在外网环境下开放mongodb 服务器版本:centos7.6 ...

  3. Maven 打包项目到私服 (deploy)

    一.配置maven 在maven安装目录 /conf/setting.xml 中的servers下添加: 1 <servers> 2 <server> 3 <id> ...

  4. 换人!golang面试官:连怎么避免内存逃逸都不知道?

    问题 怎么避免内存逃逸? 怎么答 在runtime/stubs.go:133有个函数叫noescape.noescape可以在逃逸分析中隐藏一个指针.让这个指针在逃逸分析中不会被检测为逃逸. // n ...

  5. docker08容器监控工具-WeaveScope

    容器监控工具WeaveScope 一 背景 在生成环境中k8s应用部署众多,需要一款可视化工具方便日常获知集群的实时状态,并为故障排查提供及时和准确的数据支持. weavescope支持docker和 ...

  6. GetQueuedCompletionStatus客户端前端和server之间的通信

    项目中遇到了这个东西,怎么都调试不到.记录下. 一.完成端口IOCP https://www.cnblogs.com/yuanchenhui/p/iocp_windows.html

  7. 7.vue组件(二)--双向绑定,父子组件访问

    本文主要说两件事 1. 如何实现父子组件之间的双向绑定 2. 父组件如何访问子组件的data,method, 子组件如何访问父组件的data,method等 一. 如何实现父子组件之间的双向绑定 案例 ...

  8. Spirent Tester二层裸流配置

    1.OLT配置 配一个VLAN,若GE口打Tag,不需要打PVID,打Untag,配PVID. 在ONU上配一个Other Bridge Wan链接. 2.TestCenter配置 选定两个TestC ...

  9. .net 开源模板引擎jntemplate 实战演习:基础篇之入门

    一.简介 模板引擎是Web开发中非常重要的一环,它负责将页面上的动态内容呈现出最终的结果展现给前端用户,在asp.net mvc中,我们最熟悉的就是Razor了,作为官方的视图引擎(视图引擎不等同于模 ...

  10. AtCoder Beginner Contest 190

    A Very Very Primitive Game int main() { int a, b, c; cin >> a >> b >> c; if(c == 0 ...