面试(一) 网络总结

2022-01-10 11:34:44 浏览数 (1)

浏览器输入网址之后发生了什么

1,浏览器解析url,本质就是请求服务器的文件资源。

2,http协议生成请求报文,有get和post格式。

3,DNS解析 -查询域名所在的ip地址。

DNS从右往左(www.刘昊然.com) 分为 根DNS服务器(最上层看不见),顶级域DNS服务器(com),权威DNS服务器(刘昊然.com)。

根域的 DNS 服务器信息保存在互联⽹中所有的 DNS 服务器中,所以找到任意一台DNS,就能找到ip地址了。

这里生成新问题域名解析的工作流程,这问题之后写。

4,得到IP地址后,接下来给操作系统里的协议栈,协议栈工作流程见下面问题

5,总结的4的过程

  1. TCP协议将请求报文分割成报文段,进行可靠传输
  2. IP协议进行分组转发
  3. TCP协议重组请求报文
  4. HTTP协议对请求进行处理

域名解析的工作流程

1,客户端会发起一个DNS请求,问域名的ip是啥,首先给本地DNS服务器(就是客户端的TCP/IP设置中填写的DNS服务器地址)。本地DNS服务器收到请求后,如果缓存能找到域名,就直接返回ip。

2,如果缓存里没有,本地DNS就去问根域名服务器,然后根域名服务器会告诉你这个域名的顶级域DNS服务器,如www.刘昊然.com,根DNS服务器会告诉你com所在的顶级域DNS服务器的地址。

3,然后本地DNS发请求问顶级域dns服务器的权威DNS服务器地址。

4,然后权威DNS服务器就会告诉本地DNS这个域名的ip。

5,本地将IP地址返回客户端,同时存入缓存,客服端和目标建立连接。

协议栈工作流程

1,浏览器先调用socket库,来委托协议栈工作。

2,协议栈分两部分,分别是

  • 负责数据收发的TCP和UDP协议。
  • IP 协议控制⽹络包收发操作。在互联⽹上传数据时,TCP将数据切分成⼀块块的⽹络包,⽽将⽹络包发送给对⽅的操作就是由 IP 负责的。

IP协议有两层

  • ICMP协议,用于告知网络包传送过程中产生的错误以及各种控制的错误信息。
  • ARP 用于根据IP地址 查询 相应的以太网MAC地址。

3,IP 下⾯的⽹卡驱动程序负责控制⽹卡硬件,⽽最下⾯的⽹卡则负责完成实际的收发操作,也就是对⽹线中的信号执⾏发送和接收操作。

TCP - 可靠传输

HTTP是基于TCP来传输的。

TCP报文格式

  • 源端口号和目的端口号必须要的,不然数据不知道发给哪个应用。
  • 序号确定数据包的顺序。
  • 确认序列
  • 状态位:SYN是发起连接,ACK是确认,RST是重启连接,FIN是结束连接。
代码语言:javascript复制
TCP 是⾯向连接的,因⽽双⽅要维护连接的状态,这些带状态位的包的发送,会引起双⽅的状态变更。
  • 还有⼀个重要的就是窗⼝⼤⼩。TCP 要做流量控制,通信双⽅各声明⼀个窗⼝(缓存⼤⼩),标识⾃⼰当前能够的处理能⼒,别发送的太快,撑死我,也别发的太慢,饿死我。
  • 除了做流ᰁ控制以外,TCP还会做拥塞控制,对于真正的通路堵⻋不堵⻋,它⽆能为⼒,唯⼀能做的就是控制⾃⼰,也即控制发送的速度。不能改变世界,就改变⾃⼰嘛。

在 HTTP 传输数据之前,⾸先需要 TCP 建⽴连接,TCP 连接的建⽴,通常称为三次握⼿。

第一次握手:客户端和服务端处在closed状态,客户端发SYN给服务端。

第二次握手:服务端收到SYN后,发送客户端一个SYN和ACK。

第三次握手:客户端收到后,发送服务端一个ACK的ACK。然后客户端和服务器建立连接。

所以三次握手的是保证双方都有发送和接收的能力。

TCP 的连接状态查看,在 Linux 可以通过 netstat -napt 命令查看。

三次握手的原因

三次握⼿才可以阻⽌重复历史连接的初始化(主要原因) 三次握⼿才可以同步双⽅的初始序列号 三次握⼿才可以避免资源浪费

断开需要用4次握手

第一次握手:客户端给服务端发送FIN,然后客户端处于不发送数据能接受数据的状态。

第二次握手:服务端给客户端发送ACK,确认,然后服务器还有数据要处理或发送。

第三次握手:等服务端处理完,发送第二次FIN,确实现在可以停止连接了。

第四次握手:客户端发送ACK确认,然后断开连接。

为什么需要四次握手,上面就是原因了。因为服务器要处理数据,不能和连接时一样。

TCP如何分割数据

如何http数据长度超过MSS长度时,需要分割。

分割数据然后每一块都要加上tcp头,再加上ip头。

具体见 图解网络 384页。

TCP生成报文

具体见 图解网络 385页。

两点传输 MAC

⽣成了 IP 头部之后,接下来⽹络包还需要在 IP 头部的前⾯加上 MAC 头部。

MAC 头部是以太⽹使⽤的头部,它包含了接收⽅和发送⽅的 MAC 地址等信息。

MAC头格式

ip协议里的ARP协议用于获取MAC地址。

0 人点赞