zoukankan      html  css  js  c++  java
  • 互联网通讯的过程

    上一个话题说到了网络编程的五层网络模型。

    所以该说一下互联网通讯过程具体步骤了。

    当小锅买了一台新电脑,准备连上网冲浪,问题来了,应该包含什么步骤呢?

    那么,小锅应该这么去做:

    打开电脑的系统配置配置以下四个参数:

    (1)本机IP地址

    (2)本机子网掩码

    (3)网关IP地址

    (4)DNS服务器地址

     配完这四个参数,小锅就可以网上冲浪啦。

    为啥是这是四个参数呢?为啥不是别的呢?为啥必须是四个呢?听俺细细为你道来。

    在我的另外一篇博文 网络通讯五层架构入门 中,我提出了,如果要访问另一台电脑,需要知道:

    1)对方的IP地址

    2)对方的Mac地址

    如果另一台电脑不在同一个子网内,需要先访问本机所在子网的网关,如下

    网络                  IP地址           MAC地址

    同一子网            网关IP地址        网关MAC地址 

    不同子网            对方电脑IP                             对方电脑MAC

    具体的如何实现通过以下的一个例子说明。

    像上面截图手动配置IP的行为对于普通人来说比较难。所以有一个动态分配IP的选项可以给用户选择。

    这个过程是通过发送给DHCP服务器来获取需要的地址和参数的。

    对于本机发送的数据包而言,它要知道本机的端口号和目的机的端口号和IP地址,以及MAC地址。

    那么发送的包中,

      本机MAC                      目的MAC              本机IP           目的机IP     本机Port    目的机Port            Data

      本机MAC               未知,填个FF:FF:FF:FF   未知0.0.0.0    255.255.255.255    68                      67               Data

    数据在子网传播的方式是广播,所以子网中所有的计算机都会收到这个数据包,但是除了DHCP服务器识别到了发送方IP是0.0.0.0,

    接收方IP是255.255.255.255,会处理信息并相应外,其他设备都会丢弃这条信息。

    DHCP服务器回复的响应信息

    DHCPMAC  目的MAC     DHCPIP   目的IP            DHCP Port        目的 Port           Data

    DHCPMAC        目的MAC                 HHCPIP        255.255.255.255       67                      68                  包含需要的IP和其他参数(子网掩码、DNS、网关地址)

    当本机收到回复,也就知道分配的IP地址,子网掩码、路由、DNS了。

    说一个网络通信的例子

    网络通了之后,小锅打开浏览器上网,并且输入网址:

     这时本机仅知道一个ai.taobao.com的域名,并不知道对方的服务器IP地址和MAC地址。

    于是本机会发送数据包给DNS服务器请求域名对应的IP地址,遵循的是DNS协议。然后,我们就知道了ai.taobao.com的域名是203.119.169.6。

    在发送数据包之前要判断目的设备是否在同一个子网内,所以通过和子网掩码的对比知道对方所在的子网是203.119.169.0,本机所在的子网是

    192.168.10.0,不在同一个子网里,所以数据应该发送给网关,

    发送的数据包如下

    本机MAC地址 网关MAC地址(通过ARP协议获取) 本机IP地址 网关IP地址  本机端口(随机) 目的机端口(http协议是80) 数据是HTTP协议的内容

    包里的内容如下

     假设IP数据包是5000字节,已知一个IP数据包最大为1500字节,所以应该分1500,1500,1500,560四个包发送,记得IP标头每个数据包都要有,大小是20字节。

    当对方服务器收到消息后,通过http协议解析,并恢复消息,本机收到后显示相关页面。

     这就是互联网协议的整个通信过程。

    人前不露怯, 远足不露财, 内外当整洁, 自奉须俭约。
  • 相关阅读:
    C语言-第0次作业
    ubuntu 安装maven
    微服务运行在 Docker 之上
    docker入门
    springcloud-Sleuth 与 Zipkin 结合图形化展示
    Spring Cloud Config 配置管理
    springcloud-Zuul 网关
    springcloud-Hystrix 容错处理
    springcloud-Feign 声明式 REST 调用
    springcloud-Ribbon 客户端负载均衡
  • 原文地址:https://www.cnblogs.com/gzhich2019/p/11772834.html
Copyright © 2011-2022 走看看