从0开始http-0-点击浏览器过程简介

关注微信公众号关注更多好文
golang技术分享

1、点击浏览器请求过程

在这里插入图片描述

2、IP是怎么来的 DHCP

网络请求过程相同网段和不同网段

  1. 网络请求首先检查是否是相同网段,如果是相同网段,会发送ARP请求,获取mac地址

  2. 如果不是同一网段回请求网关,如果没配置网关,根本发不出去

动态主机配置DHCP

动态主机配置协议(Dynamic Host Configuration Protocol),简称 DHCP。

  1. 请求地址发送0.0.0.0的广播包,目标地址为255.255.255.255,广播包封装了 UDP,UDP 封装了 BOOTP。其实 DHCP 是 BOOTP 的增强版

  2. 即使有多个DHCP服务器,总会有第一个去响应,给出ip

  3. 请求的ip收到后,回应DHCP收到,DHCP服务器收到后回应ACK,客户机表示收到,并将信息存储

  4. 客户机会在过去50%的时候去续租,根据新的回应跟新配置信息

3、物理层

物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境。

4、数据链路层

即MAC层,媒体访问控制协议

帧是数据链路层的传送单位

数据链路层主要有两个功能 :帧编码和误差纠正控制。帧编码意味着定义一个包含信息频率、位同步、源地址、目标地址以及其他控制信息的数据包。数据链路层协议又被分为两个子层 :逻辑链路控制(LLC)协议和媒体访问控制(MAC)协议。

5、传输层

传输层包含tcp和udp,也是学习的重点

1⃣️ TCP/IP模型和OSI模型简介

示意图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VOCLzphn-1614934450834)(geekTime-http.assets/image-20210303101403289.png)]

第一层链接层,也是数据链路层或者MAC层,底层以太网 、wife等原始数据包的发送

第二层网际层,机器MAC转换为IP地址构成巨大互联网交互、网络里找到设备在转化为MAC地址应答

第三层传输层,TCP、UDP等传输协议

第四层应用层,经过下层的封装,层协议较多,http、sftp、smtp、ssh等等

知道了tcp/ip的层级分布,那么我们看一下点击浏览器的过程在此都做了什么

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-diPSabkH-1614934450837)(geekTime-http.assets/image-20210304095514686.png)]

  1. 当收到一个请求,也就是process_layer2(buffer)的时候查看MAC头是否和自己是一样的,一样说明是发送给自己的
  2. 然后调用process_layer3(buffer),二层MAC已经被摘除,查看三层的ip头是否和自己的ip是一样的,一样的则是发给自己的,不是则转发出去
  3. 假设用的tcp协议,process_tcp(buffer),查看tcp头信息,这里有端口号,分发给不同的坚挺端口进行处理
  4. 进行请求处理
  5. 然后调用 send_layer3(buffer)。Buffer 里面已经有了 HTTP 的头和内容,以及 TCP 的头。在这个函数里面加一个 IP 的头,记录下源 IP 的地址和目标 IP 的地址。
  6. 然后调用 send_layer2(buffer)。Buffer 里面已经有了 HTTP 的头和内容、TCP 的头,以及 IP 的头。这个函数里面要加一下 MAC 的头,记录下源 MAC 地址,得到的就是本机器的 MAC 地址和目标的 MAC 地址
  7. 整理好信息,从网口发出

介绍完TCP/IP的四层模型,我们来看下和iso的osi的七层网络模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91AxbcF5-1614934450839)(geekTime-http.assets/image-20210303111401255.png)]

第一层:物理层,TCP/IP 里无对应;

第二层:数据链路层,对应 TCP/IP 的链接层;

第三层:网络层,对应 TCP/IP 的网际层;

第四层:传输层,对应 TCP/IP 的传输层;

第五、六、七层:统一对应到 TCP/IP 的应用层。

2⃣️ 数据链路层

三个主要职责

  1. 为IP模块发送和接收IP数据报
  2. 为ARP模块发送ARP和接收ARP应答
  3. 为RARP发送RARP请求和接收RARP应答
  • IP协议大家都知道位于TCP/IP模型中中的网际层,上层是传输层,下层是链接层

  • ARP叫做地址解析协议,使用IP地址换取MAC地址的一种协议

    • 当一个请求发出的时候,请求地址检查目的地址是否在同一网段,不再的话广播请求网关(通常是路由器),网关收到请求,回复收到加上MAC地址,发送到下一个中转或者目的主机
  • RARP叫做逆地址解析协议

  • 还有很多其他的协议,以太网,PPP协议(adsl宽带)以及loopback协议

1、IP协议

IP协议是TCP/Ip协议的狠心,所有的TCP、UDP、IGCP的数据都是以Ip数据格式传输的。

IP协议是不可靠的,IP协议没有提供一种数据传达以后的处理机制,这被认为是上层协议TCP或者UDP要做的事

所以TCP事一个可靠的协议,而UDP就没有那么可靠。

IP协议头信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XL3EzV2x-1614934450840)(geekTime-http.assets/image-20210303141418517.png)]

版本号:IP协议的版本,例如ipv4值为4

头部长度:4位最大长度为0xF,盖子短表示单位事字节(4字节)

服务类型:3位优先权字段+4位TOS字段+1位保留字段,4位TOS字段分别表示最小延时、最大吞吐量、最高可靠性、最小费用,其中最多有一个能置为1。应用程序根据实际需要来设置 TOS值,如ssh和telnet这样的登录程序需要的是最小延时的服务,文件传输ftp需要的是最大吞吐量的服务

总长度:指整个IP数据报的长度,单位字节,即IP数据报的最大长度为65535字节(2的16次方),由于MTU的限制,长度超过MTU的数据报将被分片传输,—最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小

标识:唯一地标识主机发送的每一个数据报,其初始值是随机的,每发送一个数据报其值就加1。同一个数据报的所有分片都具有相同的标识值

标志: 位1保留,位2表禁止分片(DF),若设置了此位,IP模块将不对数据报进行分片,在此情况下若IP数据报超过MTU,IP模块将丢弃数据报并返回一个ICMP差错报文;位3标识更多分片(MF),除了数据报的最后一个分片,其他分片都要把它设置为1

位偏移:分片相对原始IP数据报数据部分的偏移。实际的偏移值为该值左移3位后得到的,所以除了最后一个IP数据报分片外,每个IP分片的数据部分的长度都必须是8的整数倍

生存时间::数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置,常设置为64。数据报在转发过程中每经过一个路由该值就被路由器减1.当TTL值为0时,路由器就将该数据包丢弃,并向源端发送一个ICMP差错报文。TTL可以防止数据报陷入路由循环

协议: 区分IP协议上的上层协议。在Linux系统的/etc/protocols文件中定义了所有上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17

头部校验和: 由发送端填充接收端对其使用CRC算法校验,检查IP数据报头部在传输过程中是否损坏

源IP地址和目的IP地址: 表示数据报的发送端和接收端。一般情况下这两个地址在整个数据报传递过程中保持不变,不论中间经过多少个路由器

选项:可变长的可选信息,最多包含40字节。选项字段很少被使用。可用的IP可选项有:
  a. 记录路由: 记录数据包途径的所有路由的IP,这样可以追踪数据包的传递路径
  b. 时间戳: 记录每个路由器数据报被转发的时间或者时间与IP地址对,这样就可以测量途径路由之间数据报的传输的时间
  c. 松散路由选择: 指定路由器的IP地址列表数据发送过程中必须经过所有的路由器
  d. 严格路由选择: 数据包只能经过被指定的IP地址列表的路由器
  e. 上层协议(如TCP/UDP)的头部信息

​ TTL 8bit :生存时间,数据报到达目的地之前经过的路由数,每经过一次路由就将该值减1,当TTL位0的时候,路由器就会将该数据报丢弃,8bit最大255,常设置为64

IP路由选择

最特殊的情况是主机对主机直连,那么主机根本不需要寻找路由,直接传递数据就好,依靠ARP协议广播就可以

主机经过若干个路由器和目的主机连接,那么路由器就要通过ip包的信息来为ip寻找下一个合适的目标来进行传递,如果数据包的TTL到期就丢弃

搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机

搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码(1.3.)”的协助。如果找到路由器,则将该包发向路由器。

搜索路由表,如果匹配同子网路由器失败,则匹配同网号路由器,如果找到路由器,则将该包发向路由器。

搜索路由表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包

如果都失败了,就丢掉这个包。

这再一次证明了,ip包是不可靠的。因为它不保证送达。

ARP协议

  1. ARP协议是一种解析协议,本来主机是完全不知道这个IP在哪个主机的哪个接口
  2. 当主机要发一个ip包的时候,会首先查一下自己的ARP高速缓存(ip-MAC地址缓存对应表)
  3. 如果查询的IP-MAC值对不存在,那么主机就像网络发送一个ARP广播协议包,这个包里面包含要查询的ip地址
  4. 收到广播包的主机都查询自己的ip地址,如果发现和自己一样,那么就准备一个包含自己MAC地址的ARP包传送给ARP广播的主机
  5. 而广播主机收到后,就放入缓存ARP的缓存中,发送官博的主机就会用心的ARP缓存数据发送数据包

任何系统

arp -a
? (169.254.0.32) at 0:f4:8d:a0:9:db on en0 [ethernet]
? (169.254.0.171) at 5c:80:b6:45:a2:63 on en0 [ethernet]
? (169.254.8.69) at 0:f4:8d:db:36:81 on en0 [ethernet]
? (169.254.9.124) at 9a:e7:bf:d:d4:a6 on en0 [ethernet]
? (169.254.10.1) at 72:d7:e6:bb:87:90 on en0 [ethernet]
? (169.254.11.88) at 50:e0:85:50:e0:d3 on en0 [ethernet]
? (169.254.14.160) at a0:c5:89:a3:fb:56 on en0 [ethernet]
? (169.254.17.14) at 2:c6:7e:4a:d2:36 on en0 [ethernet]
? (169.254.17.242) at 14:20:5e:10:b5:3c on en0 [ethernet]

ARP的高速缓存时间是20分钟

2、ICMP协议

百度百科的解释

ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。 这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用 font>

ICMP使用IP的基本支持,就像它是一个更高级别的协议,但是,ICMP实际上是IP的一个组成部分,必须由每个IP模块实现。

IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

  1. ping查询

  2. 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)

  3. 时间戳查询(可以用来同步时间)

  4. ICMP的应用–Traceroute

IP选路

IP选路,即IP寻路,就是根据路由表中的记录,来决定当前数据报是直接交付(目的地址属于当前局域网)还是发往下一跳路由(隶属于不同的局域网)。

静态路由选路

查看路由表

netstat -rn                                                                                            
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            172.16.63.254      UGSc          114        8     en0
10.8/16            10.9.0.1           UGSc            0        0   utun1
10.9/24            10.9.0.104         UGSc          107        0   utun1
10.9/16            10.9.0.1           UGSc            0        0   utun1
10.9.0.104         10.9.0.104         UH              1        0   utun1
10.29.114.134/32   10.9.0.1           UGSc            0        0   utun1
10.47.67.196/32    10.9.0.1           UGSc            0        0   utun1
10.111/16          10.9.0.1           UGSc            0        0   utun1
10.111.179.243/32  10.9.0.1           UGSc            0        0   utun1
10.168.100.103/32  10.9.0.1           UGSc            0        0   utun1
47.52.55.213/32    10.9.0.1           UGSc            0        0   utun1
47.75.96.181/32    10.9.0.1           UGSc            0        0   utun1
47.75.168.58/32    10.9.0.1           UGSc            0        0   utun1
47.91.193.192/32   10.9.0.1           UGSc            0        0   utun1
47.91.223.112/32   10.9.0.1           UGSc            0        0   utun1
47.93.84.213/32    10.9.0.1           UGSc            0        0   utun1
47.96.1.126/32     10.9.0.1           UGSc            0        0   utun1

Flags 解析

U 表明该路由可用

G表明该路由是到一个网关。如果没有这个标志,说明和Destination是直连的,而相应的Gateway应该直接给出Destination的地址。

H表明该路由是到一个主机,如果没有该标志,说明Destination是一个网络,换句话说Destination就应该写成一个网络号和子网号的组合,而不包括主机号(主机号码处为0),例如 10.9.0.104

D表明该路由是为重定向报文创建的

M该路由已经被重定向报文修改

这样,IP选路的方式就可以更加具体化了。如下

  1. 首先用IP地址来匹配那些带H标志的DestinationIP地址。

  2. 如果1失败就匹配那些网络地址。

  3. 如果2失败就发送到Default网关

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a...Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值