学习
实践
活动
工具
TVP
写文章
专栏首页MyJava面试(一) 网络总结

面试(一) 网络总结

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

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是结束连接。
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地址。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://blog.syjhxy.ltd/复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 后端面试总结-网络篇

    每个包的TCP首都都有4个字节的序列号,用来解决乱序和重复问题(根据序列号对收到的包进行正确的排序,再交给应用层;会丢弃掉序列号相同的数据包)

    会玩code
  • 面试总结【一面】

    先是问的项目中的问题,在那说了大概十来分钟; 下来是问的都是基础问题,我把能想到的问题在这里列一下(顺序不重要)

    简单的程序员
  • springmvc-面试总结(一)

    (1)@Controller 用于标识此类的实例是一个控制器。 (2)@RequestMapping 映射Web请求,支持所有的格式(访问路径和参数) ...

    高大北
  • spring-面试总结(一)

    Spring是javaEE编程领域的一款轻量级框架。是一个分层的、面向切面的java应用程序的一站式轻量级解决方案。

    高大北
  • SpringBoot基础-面试总结(一)

    SpringBoot是spring4.0之后提供的一个自动化启动框架,采用习惯优于配置的理念,可以进行自动化配置(EnableAutoConfiguration...

    高大北
  • 【2012】笔试面试总结(一)

    没去参加它的宣讲会,但是在现场招聘时获得了笔试的机会(现场问了下基本情况,然后叫我写个函数从1加到10。(*^__^*) 嘻嘻……很简单吧) 超简单的,不知道...

    全栈程序员站长
  • 关于网络请求的面试题总结

    用户1687375
  • 【前端 · 面试 】TCP 总结(一)—— 概述

    我们常常会听到“ TCP 三次握手、四次挥手” 这样的话。并且通过前面对 HTTP 的总结,我们知道 HTTP 通常是运行在 TCP 之上的,那么 TCP 到底...

    编程三昧
  • 【Java面试总结】计算机网络

    我们在学习的时候,一般采用折中的办法,也就是中和 OSI 与 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简介又能将概念阐述清楚。

    Rochester
  • vue面试题总结(一)

    我们在父组件给子组件传值得时候,为了避免不必要的错误,可以给prop的值进行类型设定,让父组件给子组件传值得时候,更加准确,prop可以传一个数字,一个布尔值,...

    前端老道
  • vue面试题总结(一)

    “ 关注 前端开发社区 ,回复"1"即可加入 前端技术交流群,回复 "2"即可免费领取 500G前端干货!

    前端老道
  • 网易面试总结(机器学习一些面试)

    http://blog.csdn.net/jiejinquanil/article/details/52530922

    bear_fish
  • 面试总结

    海仔
  • 面试总结

    周五去了一趟深圳某互联网金融面试,很遗憾吧,没过,听到没过的时候心都碎了,毕竟还是很想去这家公司的,之后还不要脸的问了“能不能再聊聊”,下楼之后,被二面的经理叫...

    Zephery
  • 计算机网络面试题总结

    相对与上一个版本的计算机网路面试知识总结,这个版本增加了 “TCP协议如何保证可靠传输”包括超时重传、停止等待协议、滑动窗口、流量控制、拥塞控制等内容并且对一些...

    全栈程序员站长
  • 【前端 · 面试 】HTTP 总结(一)—— HTTP 概述

    HTTP 的全称是 Hyper Text Transfer Protocol,翻译过来就是“超文本传输协议”。

    编程三昧
  • react高频面试题总结(一)

    那为什么会有这样的限制呢?Hooks 的设计初衷是为了改进 React 组件的开发模式。在旧有的开发模式下遇到了三个问题。

    helloworld1024
  • Python笔试面试题总结(一)

    最近一直在面试找工作,总算是决定去一家公司入职。这里对最近这半个月的一些笔试面试题进行分享,希望对大家有帮助。今天首先总结笔试题部分,明天将慢慢给出答案,并给出...

    用户7685359

扫码关注腾讯云开发者

领取腾讯云代金券