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. java算法题

    1.下面输出结果是什么? public class Test { public static void main(String[] args) { Person person=new Person(& ...

  2. Using Sqoop to import from db2 to hadoop

    参考 : https://stackoverflow.com/questions/23933481/db2-data-import-into-hadoop         sqoop import - ...

  3. ViewPager 高度自适应

    public class ContentViewPager extends ViewPager { public ContentViewPager(Context context) { super(c ...

  4. Qstring和String的区别

    QString qTest; std::string sTest = qTest.toStdString(); qTest = QString::fromStdString(sTest); //进入两 ...

  5. Prometheus时序数据库-磁盘中的存储结构

    Prometheus时序数据库-磁盘中的存储结构 前言 之前的文章里,笔者详细描述了监控数据在Prometheus内存中的结构.而其在磁盘中的存储结构,也是非常有意思的,关于这部分内容,将在本篇文章进 ...

  6. 操作系统---IO权限管理和敏感指令

    简化版 使用IOPL设置一个特权级的用户程序对所有端口的访问权限,使用I/O位图对一个特权级的用户程序设置个性化的端口访问权限(能访问部分端口.不能访问另外的端口). 用户程序的CPL<IOPL ...

  7. vue打开新窗口并且实现传参,有图有真相

    我要实现的功能是打开一个新窗口用来展示新页面,而且需要传参数,并且参数不能显示在地址栏里面,而且当我刷新页面的时候,传过来的参数不能丢失,要一直存在,除非我手动关闭这个新窗口,即浏览器的标签页. 通过 ...

  8. Git 常用命令 和 安装

    这年头不会点git还真不能与别人进行代码交流 安装 windowns版下载:https://git-scm.com/download/win ,下载完成后就自己手动安装 ,很简单就不多说. Ubunt ...

  9. FreeBSD 中文TTY控制台

    freebsd新型终端VT,支持cjk,所以丢个字体进去,就能显示中文了1,首先你没有改过控制台程序,使用的是默认的,,2,最新版本,本说明是以freebsd12.1release字体格式为.fnt命 ...

  10. NoSQL安装与操作

    redis操作: redis的启动与关闭:注意:(需要关闭防火墙) redis的启动:redis-server redis.conf redis的登录:redis-cli -a pass redis的 ...