目录

  • 基础知识
    • TCP/IP四层模型
    • UDP协议特点
    • TCP协议特点
    • TCP的三次握手
    • TCP的四次挥手
    • 网络套接字
    • HTTP协议特点
    • HTTPS安全措施
  • 典型面试题
    • 请简述TCP三次握手的过程
    • 为什么需要三次握手,两次不行吗?
    • 请简述TCP四次挥手的过程
    • 为什么断开连接需要四次握手?
    • 四次挥手为什么有TIME-WAIT状态
    • 服务器出现大量CLOSE-WAIT状态的原因?
    • 请简述UDP和TCP的区别
    • 请简述TCP的滑动窗口
    • 请简述浏览器键入URL后发生的过程
    • 简述HTTP状态码
    • 简述GET和POST的区别
    • 简述Cookie和Session的区别
    • 简述HTTP和HTTPS的区别

基础知识

TCP/IP四层模型

层级名 主要内容 解决问题
应用层 主要包括HTTP、DHCP协议 解决数据与应用程序对接的问题
传输层 主要包括TCP、UDP协议 解决数据在端到端传输的可靠性问题
网络层 主要包括IP协议 解决数据包在单一网络中传输的问题
网络接口层 主要包括物理设备、以太网等 解决数据包从一个设备的网络层到另一个设备的网络层的问题

开发者需重点关注应用层和传输层知识。


UDP协议特点

  1. 无连接:不需要建立连接就可以传输数据
  2. 不可靠:不能确保数据完整送达
  3. 面向报文:不处理应用层发送过来的数据,直接封装进UDP数据报中
  4. 无拥塞控制:无视网络压力进行传输
  5. 头部开销小:仅由源端口号+目的端口号+数据长度+校验和共8字节组成

TCP协议特点

  1. 面向连接:双方需要经过三次手建立连接后方可通信
  2. 可靠传输:利用停止等待协议或连续ARQ协议确保数据准确无误的到达
  3. 面向字节流:应用程序的数据被看成一串可拆分的字节流
  4. 流量控制:利用滑动窗口协议感知接收方压力,实时控制流量
  5. 拥塞控制:发送方根据网络压力调整发送速度,防止堵塞网络

TCP的三次握手

标记 含义
ACK 确认位,ACK=1时确认号才生效
SYN 同步位,SYN=1时表示建立连接
FIN 终止位,FIN=1时表示释放连接

TCP的四次挥手


网络套接字

套接字是进程与进程间通信的端点,它由IP+端口组成。
通过套接字可以进行数据的发送和接收。
TCP连接由两个套接字组成。


HTTP协议特点

  1. 支持C/S模式:客户端向服务端发送请求,服务端向客户端发送响应
  2. 简单快速:客户端向服务器发送请求时,只需传输方法和路径
  3. 灵活:允许传输任意类型(Content-Type)的数据对象
  4. 无连接:限制每次连接只处理一个请求,响应结束后即断开
  5. 无状态:对于事务没有记忆能力,每次处理都需要重传全部所需的数据

HTTPS安全措施

  1. 对称加密:使用公钥加密和解密
  2. 非对称加密:使用公钥加密,使用私钥解密(公钥无法解密)
  3. 数字证书:可信任组织颁发给特定对象的认证(包含公钥)
  4. SSL:位于应用层和传输层之间,提供数据安全和数据完整服务

典型面试题

请简述TCP三次握手的过程

三次握手是为了建立连接
第一次握手时,客户端会发送SYN包给服务端,并进入同步已发送状态,等待服务端确认;
第二次握手时,服务端收到数据包后对客户端的seq进行确认,并向客户端发送一个SYN+ACK包,并进入同步已接收状态,等待客户端确认;
第三次握手时,客户端收到数据包后对服务端的seq进行确认,并向服务端发送一个ACK包,至此三次握手完成。


为什么需要三次握手,两次不行吗?

从两个角度考量:
初始化Sequence Number的值:TCP通信的双方需告知彼此的seq值,TCP协议会根据seq来拼接数据,从而避免数据乱序,只有三次握手才能确保双方收到了彼此的seq序号。
防止已经失效的请求报文被对方打开:当客户端发送的SYN包长时间未得到服务端确认时将会发送新的SYN包,先前发出的请求报文会失效,如果两次握手就能建立连接,一旦服务端在之后应答了那些超时的请求,便会建立起错误的连接,只有三次握手才能确保失效的会话能够被客户端忽略。


请简述TCP四次挥手的过程

四次挥手是为了终止连接
第一次挥手时,客户端会发送FIN包给服务端,并进入第一次完成等待态,等待服务端确认。
第二次挥手时,服务端收到数据包后对客户端的seq进行确认,并向客户端发送一个ACK包。此时服务端将进入关闭等待态,只能发送数据,但已不再接收数据;而客户端将进入第二次完成等待态,只接收数据,不再发送数据。
第三次挥手时,服务端发送FIN包给客户端,进入最后确认状态。
第四次挥手时,客户端会对服务端发送的终止连接的seq进行确认,并回复一个ACK包。为确保确认报文能顺利送达,客户端会开启一个等待计时器,默认等待2MSL(2倍最大分段寿命)才关闭连接,而服务端一旦收到确认报文就会立刻关闭连接。


为什么断开连接需要四次握手?

因为TCP协议是全双工协议,若需断开连接,双方均需发送一次FIN报文并获取ACK报文,故总共发生了4次握手


四次挥手为什么有TIME-WAIT状态

确保有足够的时间让对方收到ACK包:在等待时间内,若被动关闭端长时间未收到主动关闭端的ACK包,那么会触发超时重传。
避免新旧连接混淆:2MSL对应数据包一来一回的最大时长,等待2MSL可以让网络中的所有旧报文都失效,这样在下次建立TCP连接时不会受到超时报文的影响。


服务器出现大量CLOSE-WAIT状态的原因?

客户端发送FIN包后,服务器忙于读写业务,没有及时给予答复。
需检查服务端释放资源的代码以及处理请求的线程配置。


请简述UDP和TCP的区别

- UDP TCP
连接方式 无连接,不需建立连接即可传输数据 面向连接,需要三次握手建立连接后才可以传输数据
数据可靠性 不可靠,数据可能丢失 可靠,运用停止等待协议或连续ARQ协议确保数据完整送达
有序性 无序,直接传输报文 拆分字节流,利用序列号进行排序
速度 慢,因为要经历三次握手
量级 轻,头部仅8字节 重,头部20字节起步
适用场景 发送邮件等可靠性要求高的场景 视频通话等效率要求高的场景

请简述TCP的滑动窗口

TCP使用滑动窗口做可靠传输和流量控制。

  • 可靠传输:TCP会将数据视作字节流,当滑动窗口范围内位于首部的字节发送并被确认后,窗口将会向后推动。当某段字节长时间未被确认,将触发选择重传,以确保数据的完整性。
  • 流量控制:接受方会将自身可用的窗口大小实时通知给发送方,发送方根据接受方的处理能力来动态控制发送速率。若发送方收到窗口大小为0的通知后,长时间未收到新的窗口通知,将发送窗口探测报文。

请简述浏览器键入URL后发生的过程

  1. 首先进行DNS解析,沿着本地浏览器缓存、系统缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存的顺序查找,直至解析出该域名对应的IP地址
  2. 然后与该IP地址建立TCP连接,客户端发送SYN包后进入同步已发送状态,服务端回复SYN+ACK包后进入同步已接收状态,客户端发送ACK包后完成三次握手
  3. 客户端发送HTTP请求
  4. 服务器处理请求并返回HTTP响应
  5. 浏览器解析响应并渲染页面
  6. 最后关闭TCP连接,客户端发送FIN包后进入完成等待态1,服务端答复ACK包后进入关闭等待态,客户端进入完成等待态2;服务端也发送一个FIN包并进入最终确认态,客户端答复ACK包后开启2MSL时长的定时器,最终完成四次挥手

简述HTTP状态码

五种大类:

类型 含义
1xx 请求已接收,需继续执行操作
2xx 请求已被成功处理
3xx 请求重定向
4xx 客户端错误
5xx 服务端错误

常见状态码:

状态码 英文 含义
100 Continue 服务器告知客户端继续传输数据
200 OK 请求成功,正常返回信息
301 Permanently Moved 资源被永久转移,需重定向
302 Temporarily Moved 资源被临时转移,需重定向
400 Bad Request 请求有语法错误
401 Unauthorized 请求未经授权
403 Forbidden 服务器拒绝提供服务
404 Not Found 请求的资源不存在
500 Internal Server Error 服务器内部错误
503 Server Unavailable 服务器当前无法处理请求

简述GET和POST的区别

- GET POST
HTTP报文层面 请求信息位于URL中,有长度和编码的限制 请求信息在报文体中,无长度和编码的限制
数据库层面 符合幂等性和安全性 不符合幂等性和安全性
其它层面 可以被缓存 无法被缓存

简述Cookie和Session的区别

- Cookie Session
存储位置 客户端浏览器 服务器
安全性 易被窃取,存在安全隐患 安全
性能 无性能问题 过多的会话会加重服务器负担

简述HTTP和HTTPS的区别

- HTTP HTTPS
传输方式 明文传输 密文传输
连接方式 80端口 443端口
数字证书 无需申请 需要在CA申请
安全性 无保护措施 对称加密+非对称加密+数字证书+SSL

开发必备的网络知识极简版 (用于快速梳理)相关推荐

  1. Atlas 200 DK开发者套件环境部署(1.0.9.alpha)极简版

    Atlas 200 DK开发者套件环境部署(1.0.9.alpha)极简版 前言 Atlas 200 DK开发者套件介绍 环境部署介绍 资源要求 开发环境部署 安装Docker 获取镜像(两种方法任选 ...

  2. 很多小伙伴不太了解ORM框架的底层原理,这不,冰河带你10分钟手撸一个极简版ORM框架(赶快收藏吧)

    大家好,我是冰河~~ 最近很多小伙伴对ORM框架的实现很感兴趣,不少读者在冰河的微信上问:冰河,你知道ORM框架是如何实现的吗?比如像MyBatis和Hibernate这种ORM框架,它们是如何实现的 ...

  3. 10分钟手撸极简版ORM框架!

    最近很多小伙伴对ORM框架的实现很感兴趣,不少读者在冰河的微信上问:冰河,你知道ORM框架是如何实现的吗?比如像MyBatis和Hibernte这种ORM框架,它们是如何实现的呢? 为了能够让小伙伴们 ...

  4. 【极简版GH60】【GH60剖析】【五】壳和键帽的装配

    既然没有什么问题了,下面就可以装壳上螺丝了, 上好键帽后,这样我们极简GH60的硬件部分就完成了,连接USB数据线,就是一个实用的小键盘了. ​ 这里我用的USB数据线是TI原厂的MSP430开发板数 ...

  5. 7句话让Codex给我做了个小游戏,还是极简版塞尔达,一玩简直停不下来

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 梦晨 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 什么,7 ...

  6. 美团推出极简版 为用户提供“米面粮油”等生活用品采购服务

    近日,有用户反馈,安卓应用商店显示,美团更新推出了极简版,对主应用的功能进行了删减,保留了美团主应用中涉及生活用品采购的相关业务.用户在打开极简版后,首页会呈现出采购蔬果.米面水油等生活用品的购买入口 ...

  7. decimal转换为int_FPGA基础知识极简教程(10)二进制到BCD转换算法

    写在前面 正文 快速认识 实现方式一 实现方式二 写在最后 写在前面 FPGA基础知识极简教程(9)[1]讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编码是 ...

  8. python3web库_基于 Python3 写的极简版 webserver

    基于 Python3 写的极简版 webserver.用于学习 HTTP协议,及 WEB服务器 工作原理.笔者对 WEB服务器 的工作原理理解的比较粗浅,仅是基于个人的理解来写的,存在很多不足和漏洞, ...

  9. openGauss 极简版安装

    openGauss 官网   openGauss 下载地址 支持的操作系统 ● ARM:   ● openEuler 20.03LTS(推荐采用此操作系统)   ● 麒麟V10   ● Asianux ...

最新文章

  1. 优雅地处理重复请求(并发请求)
  2. JDBC操作步骤及数据库连接操作
  3. 一步一步理解Paxos算法
  4. generator 1【矩阵快速幂】
  5. mysql中生成列与JSON类型的索引
  6. 阿里云再降价 数据库产品降20%
  7. SQL server 第三方驱动 JDTS
  8. 那些年,我考过的IT证书
  9. Java JDK 自带监控工具 jps.exe、jconsole.exe、jvisualvm.exe
  10. 怎么制止qq刷屏代码-vbs
  11. vb中查询mysql_vb数据库查询语句-vb中使用sql语句-vb读取sql语句的字段
  12. Multisim 10软件介绍
  13. 【附源码】计算机毕业设计SSM小区宠物管理系统
  14. Sketch使用教程(四)
  15. cocos2d-html5教程之重要概念
  16. 一款免安装、多平台兼容的 拾色器(Color Picker)
  17. PRA2020.4 平台 API 接口调用
  18. 书签 自动更新浏览器的书签_最有用的书签,可增强您的浏览体验
  19. Microsoft Visual Studio 2008安装教程
  20. APP兼容性测试 (二) 最新 iPhone 机型分辨率总结

热门文章

  1. 修改hosts文件,用谷歌翻译
  2. UE 导入人物fbx模型眉毛变黑
  3. JS判断当前设备(手机、电脑、iPad)
  4. linux修改主机名(永久)
  5. 回流(Reflow)与重绘(Repaint)
  6. 完整的浏览器统计信息-2012年9月
  7. 对DAO 的恶意收购,我们能做些什么?
  8. qprocess回调_从QProcess说开来(一)
  9. 刷题记录:牛客NC14975方块与收纳盒
  10. Sandcastle Help File Builder[Missing summary documentation for ]