本文介绍: 网络面试高频–OSI七层模型、TCP/IP协议相关、TCP的三次握手和四次挥手、TCP/UDP的区别、常用的网络命令、拥塞控制、HTTP报文段、HTTP状态

网络

当前应用系统主要分两大类,一类是C/S(Client/Server客户端/服务器架构的,一类是B/S(Browser/Server浏览器/服务架构的[3],例如:PC上安装的QQ程序是典型的C/S架构中的客户端程序通过浏览器输入淘宝网址打开淘宝主页,就是典型的B/S架构。 无论是哪一种,都需要远端服务器进行网络通信数据交互,同时,服务器之间也需要进行通信,一旦通过网络进行通信,就会不可避免地出现各种网络问题网络故障比如DNS服务器、路由器交换机集线器等,可能是多个原因引起的,需要逐步地进行排查

网络问题主要有两大类,一类是客户端服务器无法建立连接问题(网络不通、客户端使用错误地址或者端口服务没有开启监听端口、中间的网络设备故障了、中间的网络设备启动部分安全规则数据包拦截等),一类是建立连接后有网络延时或严重丢包问题。对于网络不稳定的场景,尽量使用网线连接路由器;对于网络设备拦截数据包的场景查看安全规则。要排查网络通信过程中遇到的一系列网络问题需要掌握一些基础的网络知识,了解一些常用的网络命令,必要时要使用wireshark进行抓包分析

OSI七层模型和TCP/IP四层模型

OSI七层模型全称开放系统互联通信参考模型(Open System Interconnection Reference Model)

TCP/IP的全称传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol),它是一组用于实现网络互连通信协议。也有人将物理数据层拆开变成五层结构,一般我们使用的是四层

应用层:直接为用户应用进程例如电子邮件文件传输终端仿真)提供服务。;使用UDP的应用协议:DNS/DHCP

运输层:报文段/用户数据负责向两台主机进程之间的通信提供通用的数据传输服务

网络层:数据负责分组交换网上的不同主机提供提供连接路径选择

数据链路层,对比特流功能的加强,提供错误检测和纠正,以确保数据可靠传输

物理层传输比特流,定义物理设备标准,如网线的接口类型光纤接口类型、各种传输介质的传输速率等。

在这里插入图片描述

wireshark中抓到的数据包中能看到每一层的数据信息如下所示

在这里插入图片描述

数据进入TCP/IP协议封装过程

最上面的应用层的数据,进入TCP/IP协议栈时的封装过程如下:经过传输层时,会加上TCP头部;经过网络层时,会加上IP头;经过数据链路层时,会加上以太网头。对于数据接收端,会按照相反的方向,将各层的头部剥离掉,最终到上层的数据就是发送应用层的数据。

在这里插入图片描述

协议端口

此处讲的端口是TCP或UDP通信中数字端口号,要进行TCP或UDP通信时,除了要有IP,必须要有端口操作系统会有很多默认端口,是留给指定协议使用的

在这里插入图片描述

UDP:NFS:远程文件服务器。RIP:路由信息协议DHCP:动态主机配置协议。IGMP:网际组管理协议。

对于TCP,需要绑定目标端口调用bind),再开启对目标端口的监听调用listen),准备接收客户端请求。 对于UDP,是无连接的,只需要绑定端口,不需要开启对端口的监听。有时即使程序开启端口,可能也连接不上,可能是路由器或者防火墙禁用了该端口,导致发给该端口的数据(包括连接请求)都被拦截了,此时需要在网络环境中放行该端口,即不再拦截与该端口相关的数据。

在这里插入图片描述

如何判断远端服务器的端口有没有开启监听有个简单方法,只要使用Telnet命令测试即可,比如telnet 192.168.102.176 7800。如果远端的7800端口没有开启监听,就是显示连接失败。如果cmd窗口提示找不到Telnet需要到控制面板->程序功能->启用和关闭Windows功能中开启Telnet客户端

TCP的三次握手与四次挥手

  1. TCP头的构成
  • 源端口和目标端口:源端口是该包数据发送者的端口,目标端口是这包数据要发送到的目的端口。
  • (包)序号:当前数据包的包序号Seq序号,占4字节(32bit),用来标识从TCP源端向目的端已经发送了多少字节的数据,发起方发送数据时对此进行标记。包序号的最大值是65535,如果达到最大值,则会从0开始重新计数
  • 确认号:Ack序号,占4字节(32bit),只有ACK标志位为1时,该确认序号字段有效在TCP中,接收端收到发送端发来的数据后会给客户端回一个ACK确认包,确认收到数据了,这就是TCP的ACK机制。
  • URG紧急:当 URG = 1 时,表明此报文段中有紧急数据,是高优先级的数据,应尽快发送,不用在缓存中排队。

ACK确认:仅当 ACK = 1 时确认号字段才有效,当 ACK = 0 时确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置为 1。

PSH推送:接收方收到 PSH = 1 的报文段时,就直接发送给应用进程,而不用等到整个缓冲区都填满了后再向上传送。

RST复位:当 RST = 1 时,表明 TCP 连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建传输连接。

SYN同步:SYN = 1 表示这是一个连接请求或连接接受报文。当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使 SYN = 1 且 ACK = 1。

FIN终止用来释放一个连接。当 FIN = 1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。

在这里插入图片描述

  1. 三次握手
  • 客户端SYN = 1 连接请求
  • 服务器收到客户端发来的SYN包,给客户端回ACK确认包,SYN = 1 ,ACK=1
  • 客户端收到服务器的ACK包,并给服务器发送一个ACK确认包ACK=1 ,(SYN = 0)

此时,TCP连接建立,established

如果没有连接上,却可以ping通(网络是通的),服务器丢了RST包,一般是端口问题

在这里插入图片描述

  1. 为什么三次握手

tcp在握手过程中并不携带任何数据,而是在三次握手完成之后,才会进行数据的传递

  1. 四次挥手

浏览器向服务器发送报文Fin=1,Ack=z,Seq=x),表示客户端请求报文已经发送完了,准备关闭了。并进入到FIN_WAIT_1状态
服务器收到客户端的断开请求后,发送确认报文(Ack=x+1,Seq=z),表示统一关闭。此时主机进入FIN_WAIT_2状态
服务器在发送完数据以后,也会向客户端发送断开连接的报文(Fin=1,Ack=x,Seq=y),表示我没有响应数据要传了,准备关闭了。此时进入到LAST_ACK状态
客户端收到服务器的关闭请求后,会发送一个确认报文(Ack=y+1,Seq=x),表示同意关闭。服务器收到客户单的确认报文后关闭连接。而浏览器等待一段时间后未收到回复,则正常关闭。

  1. SYN包攻击

SYN 包攻击是指利用 TCP 需要三次握手的特性攻击者伪造 SYN 报文向服务器发起连接,服务器在收到报文后用 ACK 应答,但之后攻击者不再对该响应进行应答,造成一个半连接。最终会导致服务器连接资源耗尽,导致正常的 SYN 请求因为队列满而被丢弃,使得正常用户无法访问

TCP与UDP的区别

在这里插入图片描述

TCP是可靠面向连接的,需要建立连接后才能收发数据,TCP在收发数据时有ACK机制,即数据接收方收到数据后会给数据发送方回一个ACK确认包,表示已经收到对方的数据,如果数据发送方没收到ACK包就会触发丢包重传机制

TCP是有序:数据到达传输层时TCP协议会将乱序的包按前后顺序重组,即排好顺序后再投递给应用层

常用的网络命令

ping命令判断是否连接到远程地址端口

telnet检查服务器上的端口有没有开启监听

ipconfig /all:查看网卡配置信息,比如IP地址子网掩码默认网关

ipconfig /flushdns命令用来清除系统中的DNS缓存

netstat命令:查看本机网络连接与端口占用情况;具体使用netstat /?去查看详细说明

route:主要用来查看路由表添加/删除路由 ,使用route /?

ARP:主要用来显示修改地址解析协议(ARP)使用的“IP 到物理”地址转换

tracert命令:可以追踪访问目标地址所经历的网络节点

TCP的心跳机制和丢包重传机制

TCP心跳检测通过定时链路上发心跳包去保持链路的活性(keepalive,这样链路中的网络设备就不会因为链路上有段时间没有数据在跑,将链路强行断开了,libwebsockets内部的心跳检测,实际上使用的是TCP/IP协议栈的心跳检测

对于TCP连接,数据发送方将数据发出去后,会启动一个定时器等待接收端回ACK确认包,如果在指定的时间内没有收到ACK确认包,就会触发TCP的丢包重传机制。如果发送重传包后还是没收到ACK,下一次重传时间间隔会加倍,当重传次数达到系统上限(Windows默认的上限是5次,Linux默认的上限是15次)后,协议栈就认为网络出故障了,协议栈会直接将对应的连接关闭了。

TCP的滑动窗口流量控制、拥塞控制

滑动窗口机制

ACK确认包的缺点:数据包的往返时间越长,通信的效率就越低,因此引入窗口:就可以指定窗口大小窗口大小(Window)就是指无需等待确认应答,而可以继续发送数据的最大值。

通常窗口大小是由接收方的决定的,发送方发送的数据大小**不能超过(约等于)**接收方的窗口大小,否则接收方就无法正常接收到数据

任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小可以不同。

可用窗口大 小= SND.WND -(SND.NXT – SND.UNA)

在这里插入图片描述

流量控制

如果发送方一直无脑的发数据给接收方,但接收方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。

避免「发送方」的数据填满「接收方」的缓存,但是并不知道网络的中发生了什么

拥塞控制

在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包时延丢失等,这时 TCP 就会重传数据,但是一重传就会导致网络的负担更重,于是会导致更大的延迟以及更多的丢包,这个情况就会进入恶性循环被不断地放大….

拥塞控制,控制的目的就是避免「发送方」的数据填满整个网络

当 cwnd < ssthresh 时,使用慢启动算法
当 cwnd &gt;= ssthresh 时,就会使用「拥塞避免算法」:每当收到一个 ACK 时,cwnd 增加 1/cwnd。当 8 个 ACK 应答确认到来时,每个确认增加 1/8,8 个 ACK 确认 cwnd 一共增加 1,于是这一次能够发送 9 个 MSS 大小的数据,变成了线性增长。

在这里插入图片描述

抓包与网络包分析

HTTP是什么,HTTP和HTTPS的区别是什么

http是超文本传输协议,应用:被用于在Web浏览器网站服务器之间传递信息,以明文方式发送内容,不提供任何方式的数据加密

优点

安全性 默认端口 性能 费用
HTTP 明文传输,不安全 80 较高
HTTPS 使用了SSL/TLS协议进行了加密处理,更安全 443 需要设计加密以及多次握手,较低 高,SSL证书的价格随功能变化

HTTP请求 getpost区别

:HTTP协议中的两种发送请求的方法

GET产生一个TCP数据包;POST产生两个TCP数据包。:GET方式的请求,浏览器会把http headerdata并发送出去,服务器响应200(返回数据);POST,浏览器先发送header,服务器响应100 continue浏览器再发送data,服务器响应200 ok(返回数据)

(1)post更安全(不会作为url的一部分,不会被缓存保存在服务器日志以及浏览器浏览记录中)

(2)post发送的数据更大(geturl长度限制

(3)post能发送更多的数据类型get只能发送ASCII字符

(4)postget

(5)post用于修改写入数据,get一般用于搜索排序筛选之类的操作淘宝支付宝搜索查询都是get提交),目的是资源获取读取数据

GET在浏览器回退时是无害的,而POST会再次提交请求

HTTP报文段是什么样的

HTTP报文段:有请求和响应两种,基本格式主要如下

  • 起始行:请求/响应行,描述请求或响应的状态

请求起始行包括:请求方式(GET)+ 请求的资源在服务器中相对路径(URI) + HTTP的版本

响应起始行:在最后加了状态码,表示本次请求的处理结果

一个普通的get请求:

在这里插入图片描述
在这里插入图片描述

HTTP状态

☆在浏览器输入url地址到显示主页的过程

**DNS解析——**解析域名获取对应ip地址,url(包括因特网服务类型,主机,域名,端口,路径文件名)
TCP连接——TCP三次握手:
浏览器发送http请求:行头空体
服务器处理请求并返回http报文:
浏览器解析返回的数据并渲染页面
断开连接:TCP四次挥手:

浏览器输入URL到网页完全呈现的过程 – 简书 (jianshu.com)

计算

主机数、子网掩码、网络地址

在这里插入图片描述

参考链接

【网络入门】详解常用的基础网络知识(面试笔试常考内容)_dvlinker的博客-CSDN博客_网络基础

原文地址:https://blog.csdn.net/Zlionheart/article/details/134603939

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_22770.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注