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. 关于GitHub 搭建 Hexo 总结

    问题描述 在更新上传了一篇新博客后,本地运行http://localhost:4001正常,而连接到Github仓库便爆出404错误. 更新博客后,依次执行: 1 hexo clean 2 hexo ...

  2. 后端程序员之路 29、Thrift

    Apache Thrift是Facebook实现的一个高效的.支持多种编程语言的远程服务调用(RPC)框架. Apache Thrift - Homehttp://thrift.apache.org/ ...

  3. MongoDB4.2 副本集扫盲说明

    说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明副本集相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 副本集的原理.搭建.应用.MongoDB中的副本集是一 ...

  4. Python命令开启http.server服务器

    如果想把命令E:\zpic作为提供下载的目录,那么在cmd里cd到该目录下,并执行命令:python -m SimpleHTTPServer 默认的端口号是8000, 服务器根目录就是运行python ...

  5. Prometheus自定义指标

    1.  自定义指标 为了注册自定义指标,请将MeterRegistry注入到组件中,例如: public class Dictionary { private final List<String ...

  6. 微服务网关Zuul过滤器Filter

    Zuul本质 Zuul是一个网关,关于网关的介绍参考:亿级流量架构之网关设计思路.常见网关对比, 可知Zuul是一个业务网关, 而深入了解Zuul, 基本就是一系列过滤器的集合: Zuul的过滤器 下 ...

  7. 推荐模型DeepCrossing: 原理介绍与TensorFlow2.0实现

    DeepCrossing是在AutoRec之后,微软完整的将深度学习应用在推荐系统的模型.其应用场景是搜索推荐广告中,解决了特征工程,稀疏向量稠密化,多层神经网路的优化拟合等问题.所使用的特征在论文中 ...

  8. visual studio 2019 + cmake 实现windows linux跨平台开发环境搭建

    visual studio 2019开始支持cmake跨平台开发. 以前cmake项目需要先生成vs项目,然后vs直接使用vs项目开发.现在可以直接用vs2019创建或打开cmake项目. 使用vis ...

  9. 常用开发库 - 告別BeanUtils拷贝,MapStruct工具库最全详解

    常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanU ...

  10. Centos7 Firewall 使用笔记

    在 Centos 7 中防火墙由 firewalld 来管理,而不是以前的 iptables. 记录一下常用操作备查 firewall-cmd 操作 firewall-cmd --state 查看防火 ...