1. 应用层

1.1 http协议格式是什么

  • 请求报文格式:请求行、请求头、空一行、请求体

请求行包括:请求方法、统一资源定位符(URL)、http协议及版本

  • 响应报文格式:状态行、响应头、空一行、响应体

状态行包括:协议及版本、状态码、状态码解释

1.2 http和https的区别

http:由于http是明文传输,所以其安全性低,易受攻击,无法确认对方的身份,也无法确保数据的完整性;http协议默认端口号是80端口;它的优点是简单快速,使用很灵活;http服务器的程序规模小所以通信速度很快;与https相比,http没有额外的费用。

https:由于https使用ssh加密传输协议,信息是密文,所以它的安全性高,可以认证双方的身份,防止信息被截取篡改;https协议默认端口号是443端口;它会加重服务器负担,需要资源来支撑,降低用户的访问速度。

1.3 http常见状态码

1.4 cookie和session的区别

1、数据存放位置不同:cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、安全程度不同:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、性能使用程度不同:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、数据存储大小不同:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。

5、会话机制不同:session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。cookies会话机制:cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。

1.5 get和post的区别

他们本质都是TCP连接,并无区别,但是由于http的规定以及浏览器和服务器的限制,导致他们在应用过程中可能有所不同

1、get方法的特点

①请求数据会附在URL之后(放在请求行中,以 ?分割URL和传输数据,多个参数用 & 连接)

②get是会被浏览器主动缓存的,如果下一次传输的数据相同,那么就会返回缓存中的内容,可以更快的展示数据

③get方法的UR一般都有长度限制,但是需要注意的是http协议中并未规定get请求的长度。这个长度限制主要是由浏览器和web服务器决定的,并且各个浏览器对长度限制各不相同

④get方法只产生一个TCP数据包,浏览器会把请求头和请求数据一并发送出去,服务器响应200 ok(返回数据)

2、post方法的特点

①根据http规范,post可能改变服务器上的资源的请求(点赞就是post请求),因为有可能修改服务器上的资源,所以不符合安全性和幂等性

②因为post方法是放在请求数据的,所以它的请求信息是没有长度限制的

③post方法会产生两个TCP数据包,浏览器会先将请求头发送给服务器,待服务器返回100 continue,浏览器再发送请求数据,服务器响应 200 ok(返回数据),这个看起来get比post快一些,但是实际上,在网络状况良好的情况下,他们的传输速度基本相同。

相关视频推荐

Tcp/ip协议栈技术专题训练营(1)

Tcp/ip协议栈技术专题训练营(2)

网络原理tcp/udp,网络编程epoll/reactor,面试中正经“八股文”

学习地址:c/c++ linux服务器开发/后台架构师

【文章福利】需要C/C++ Linux服务器架构师学习资料加群812855908(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等)

2. 传输层

2.1 讲讲三次握手

1、建立客户端向服务端的连接:发送客户端的请求连接数据包SYN到服务端

2、响应客户端的连接并建立服务端的连接:服务端发送响应客户端连接的数据包ACK和服务端的请求连接数据包SYN到客户端

3、响应服务端的连接:客户端发送响应服务端连接的数据包ACK到服务端

服务端新建套接字,绑定地址信息后开始监听,进入LISTEN状态。客户端新建套接字绑定地址信息后调用connect,发送连接请求SYN,并进入SYN_SENT状态,等待服务器的确认。服务端一旦监听到连接请求,就会将连接放入内核等待队列中,并向客户端发送SYN和确认报文段ACK,进入SYN_RECD状态。客户端收到SYN+ACK报文后向服务端发送确认报文段ACK,并进入ESTABLISHED状态,开始读写数据。服务端一旦收到客户端的确认报文,就进入ESTABLISHED状态,就可以进行读写数据了

2.1.1 为什么是三次握手,而不是两次或四次

两次不安全,四次没必要

tcp通信需要确保双方都具有数据收发的能力,得到ACK响应则认为对方具有数据收发的能力,因此双方都要发送SYN确保对方具有通信的能力。第一次握手是客户端发送SYN,服务端接收,服务端得出客户端的发送能力和服务端的接收能力都正常;第二次握手是服务端发送SYN+ACK,客户端接收,客户端得出客户端发送接收能力正常,服务端发送接收能力也都正常,但是此时服务器并不能确认客户端的接收能力是否正常;第三次握手客户端发送ACK,服务器接收,服务端才能得出客户端发送接收能力正常,服务端自己发送接收能力也都正常。

2.2 讲讲四次挥手

1、客户端向服务端发送断开连接请求FIN

2、服务端响应客户端的断开连接请求,发送ACK响应包给客户端

3、服务端向客户端发送断开连接请求FIN

4、客户端响应服务端的断开连接请求,发送ACK响应给客户端

客户端主动调用close时,向服务端发送结束报文段FIN报,同时进入FIN_WAIT1状态; 服务器会收到结束报文段FIN报,服务器返回确认报文段ACK并进入CLOSE_WAIT状态,此时如果服务端有数据要发送的话,客户端依然需要接收。客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段; 服务器端数据发送完毕后,当服务器真正调用close关闭连接时,会向客户端发送结束报文段FIN包,此时服务器进入LAST_ACK状态,等待最后一个ACK的带来; 客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出送确认报文段ACK;服务器收到了对结束报文段确认的ACK,进入CLOSED状态,断开连接。而客户端要等待2MSL的时间,才会进入到CLOSED状态

2.2.1 为什么握手是三次,而挥手需要四次呢

  • 第二步属于系统自动响应数据包
  • 第三步是程序手动调用close()方法发送关闭连接的请求数据包

其实在TCP握手的时候,接收端将SYN包和ACK确认包合并到一个包中发送的,所以减少了一次包的发送。对于四次挥手,由于TCP是全双工通信,主动关闭方发送FIN请求不代表完全断开连接,只能表示主动关闭方不再发送数据了。而接收方可能还要发送数据,就不能立即关闭服务器端到客户端的数据通道,所以就不能将服务端的FIN包和对客户端的ACK包合并发送,只能先确认ACK,等服务器无需发送数据时在发送FIN包,所以四次挥手时需要四次数据包的交互

2.2.2 一台主机上出现大量的TIME_WAIT是什么原因?应该如何处理?

TIME_WAIT是主动关闭方出现的,一台主机出现大量的TIME_WAIT证明这台主机上发起大量的主动关闭连接。常见于一些爬虫服务器。这时候我们应该调整TIME_WAIT的等待时间,或者开启套接字地址重用选项

2.2.3 一台主机上出现大量的CLOSE_WAIT是什么原因?应该如何处理?

CLOSE_WAIT是被动关闭方收到FIN请求进行回复之后的状态,等待上层程序进一步处理,若出现大量CLOSE_WAIT,有可能是被动关闭方主机程序中忘了最后一步断开连接后调用close释放资源。这是一个 BUG,只需要加上对应的 close 即可解决问题

2.3 TCP是如何保证可靠性的

可靠性和提高性能可参考此链接!!!

确认应答、超时重传、连接管理、流量控制、拥塞控制

2.4 TCP是如何提高性能的

滑动窗口、延迟应答、捎带应答

2.5 TCP和UDP的区别

TCP是可靠,稳定的,TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认应答、超时重传、连接管理、流量管理、拥塞控制机制,在数据传完后,还会四次挥手断开连接用来节约系统资源。 但是它相对UDP较慢,效率低,占用系统资源高,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,每个连接都会占用系统的CPU、内存等硬件资源。

UDP没有TCP的确认应答、超时重传、连接管理、流量管理、拥塞控制等机制,是一个无状态的传输协议,所以它在传递数据时非常快。但是UDP不可靠、不稳定,因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

总的来说

TCP是面向连接的,UDP无连接

TCP是可靠的,UDP不可靠

TCP只支持对点的通信;UDP支持一对一,一对多,多对一,多对多通信

TCP是面向字节流的;UDP是面向数据报的

TCP首部开销大,20个字节;UDP只有8个字节

TCP可以保证传输的顺序,UDP不可以保证

3. 其他问题

3.1 浏览器输入URL后发生了什么

1、首先,在浏览器地址栏中输入url,先解析url,检测url地址是否合法

2、浏览器先查看浏览器缓存——系统缓存——路由器缓存,如果缓存中有,直接在屏幕上显示内容,如果没有,到第三步

浏览器缓存:浏览器会记录DNS一段时间,因此只有第一个地方解析DNS请求

操作系统缓存:如果在浏览器中不包含这个记录,则会使用系统调用操作系统,获取操作系统记录(保存最近的DNS查询缓存)

路由器缓存:如果上述两个步骤均不能获取DNS记录,继续搜索路由器缓存

3、在发送http请求前,需要域名解析(DNS解析),获取相应的IP地址

4、浏览器向服务器发起TCP连接,与浏览器建立三次握手

5、握手成功后,浏览器向服务器发送http请求,请求数据包

6、服务器处理收到的请求,将数据返回至浏览器

7、四次挥手释放TCP连接

8、浏览器收到http响应

9、浏览器解析响应,如果响应可以缓存,则存入缓存

10、浏览器发送请求获取嵌入在HTML的资源(对于未知类型,会弹出对话框)

11、浏览器发送异步请求

12、页面渲染全部结束

3.2 电脑网络不通如何解决

(1)排除接触故障

查看网线是否连接正常。如果网络连接图标上显示“红叉”,则说明网络连接不正常。可检查主机网卡口上的网线、交换器(路由器)上网线是否正常连接

(2)使用ipconfig查看计算机的上网参数

①单击“开始|所有程序|附件|命令提示符“,打开命令提示符窗口

②输入ipconfig,按Enter确认,可以看到机器的配置信息,输入ipconfig/all,可以看到IP地址和网卡物理地址等相关网络详细信息。

(3)使用ping命令测试网络的连通性

在命令提示符窗口中输入"ping 127.0.0.1",数据显示本机分别发送和接受了4个数据包,丢包率为零,可以判断本机网络协议工作正常,如显示”请求超时“,则表明本机网卡的安装或TCP/IP协议有问题,接下来就应该检查网卡和TCP/IP协议,可以通过重新安装该协议来解决。安装方法:右击“本地连接”——属性——安装——协议,选择TCP/IP协议确定安装。

(4)ping本机IP

如果ping 127.0.0.1 正常,则可以“ping 本机IP”来判断本机的网卡是否正常工作。如不能ping通,说明本机的网卡驱动程序不正确,或者网卡与网线之间连接有故障,也有可能是本地的路由表面收到了破坏,此时应检查本机网卡的状态是否为已连接,网络参数是否设置正确,如果正确可是不能ping通,就应该重新安装网卡驱动程序。丢失率为零,可以判断网卡安装配置没有问题,工作正常。

(5)ping网关IP

网关地址能被ping通的话,表明本机网络连接已经正常,如果命令不成功,可能是网关设备自身存在问题,也可能是本机上网参数设置有误,检查网络参数。如果ping 网关IP正常,可网页却无法打开,同时QQ可以正确登录。则一般是DNS填写不正确,请联系运行商询问DNS地址,也可询问邻居他们是怎么设置的,一个地区的同一运行商所用的DNS都是一样的。

网络面试!居然这么详细,那看这篇就够了呀相关推荐

  1. 博客园美化教程大集合----极致个性化你的专属博客(超详细,看这篇就够了)...

    阅读目录: 1. 前言 2. 定制自己的博客 00. 美化整体效果 01. 准备工作 02. 自定义个性化导航栏 03. 添加顶部博主信息 04. 添加顶部滚动公告 05. 为博客文章添加目录导航 0 ...

  2. Docker入门实战看这篇就够了(最新详细以及踩过的坑)

    Docker入门实战看这篇就够了 前言 初识 是什么 容器与虚拟机 能干什么 去哪玩 安装 先决条件 查看自己的内核 安装所需的软件包(支持devicemapper存储类型) 设置镜像的仓库 设置yu ...

  3. 99. 中高级开发面试必问的Redis,看这篇就够了

    中高级开发面试必问的Redis,看这篇就够了! 一.概述 二.数据类型 STRING LIST SET HASH ZSET 三.数据结构 字典 跳跃表 四.使用场景 计数器 缓存 查找表 消息队列 会 ...

  4. 面试率 90% 的JS事件循环Event Loop,看这篇就够了!! !

    面试率 90% 的JS事件循环Event Loop,看这篇就够了!! ! 事件循环(Event Loop)大家应该并不陌生,它是前端极其重要的基础知识.在平时的讨论或者面试中也是一个非常高频的话题. ...

  5. redis详细介绍附实例代码--看一篇就够了

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html redis介绍详解附实例代码- ...

  6. uiautomation遍历windows所有窗口_万字长文!滑动窗口看这篇就够了!

    大家好,我是小浩.今天是小浩算法 "365刷题计划" 滑动窗口系列 - 整合篇.之前给大家讲解过一些滑动窗口的题目,但未作系统整理. 所以我就出了这个整合合集,整合工作中除了保留原 ...

  7. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  8. [个人向]超快速了解微信小程序:看这篇就够了!(注册、语言、框架、配额等简要说明)

    [个人向]超快速了解微信小程序看这篇就够了+相关简要说明 本文精炼微信小程序开发文档相关内容,旨在对初次接触并准备开发小程序的童鞋(比如自己)提供一个快速了解攻略.其中包括注册相关.语言.框架模式.相 ...

  9. Java应用系统监控看这篇就够了

    Java应用系统监控看这篇就够了 文章目录 业务背景 系统监控发展历程 技术方案 日志监控技术方案 Grafana+阿里云SLS日志服务 分布式链路追踪技术方案 阿里云jaeger方案 开源框架sky ...

  10. caffe-源码学习——只看一篇就够了

    caffe-源码学习--只看一篇就够了 网络模型 说caffe代码难懂,其实关键点在于caffe中有很多基础的数学运算代码,如果能够对掌握这些数学运算,剩下的就是推公式了. 激活函数 sigmoid ...

最新文章

  1. 实验干货分享:用Go语言实现分布式缓存开发之map
  2. VS2015 代码左缩进
  3. 输入身份证号,输出出生日期
  4. (11)FPGA复位设计原则
  5. dtgrid 手动条件删除表格中的某一行
  6. sql2005 reporting service,我总算找到一个完全程序化绑定报表(ado.net dataset 绑定reprot)的方案,谁能再给我些其他建议呢?...
  7. 是什么让 Python 如此多才多艺?
  8. Bailian2914 计算概论习题-动态存储【排序】
  9. 极域电子教室常见问题的解决方法
  10. FMI飞马网 | 人工智能/大数据/程序/语言/项目管理/机器学习/Python书籍免费赠书
  11. 热力学分布用matlab,matlab在热物理学中的应用.doc
  12. HyperLedger Fabric - 超级账本(8)Node测试
  13. 浪潮刀片服务器型号,浪潮刀片服务器.pdf
  14. 传输层 SACK与选择性重传算法
  15. 【python 图像识别】图像识别从菜鸟走向大神系列1
  16. 处理Java连接不上hdfs
  17. 微信打开域名网址被拦截 域名网址被微信拦截怎么办
  18. 低代码发展现状调研和思考
  19. imx53-saber-tablet开发记录
  20. python实现共轭梯度法

热门文章

  1. vscode在html预览看到图片的插件_HTML5图片水面倒影和波纹动画,超逼真
  2. 查看电脑开放了哪些端口
  3. LeNet 网络详解
  4. 房晟陶:面试高管,这一个问题就能测出其成色
  5. android adb 点亮 关闭 屏幕 命令
  6. 科大讯飞t20和t20pro区别 对比评测哪个好
  7. python中zeros用法_python中numpy.zeros(np.zeros)的使用方法
  8. 华为nova7 se鸿蒙系统,华为nova7 SE评测:后置6400万高清影像系统 定格美的方方面面...
  9. 专访政协委员陈朝晖:泉州区块链政策解读
  10. 公司很小的时候,怎么判断未来老板是否能做大做强?