一些常见的网络协议

FTP(文件传输协议)

FTP(文件传输协议,应用层协议)使用两个端口进行通信:端口 20 和端口 21。

  1. 端口 21:FTP 控制连接端口。客户端连接到服务器的端口 21,通过该端口发送命令(如登录、列出目录、下载文件等)和接收响应。

  2. 端口 20:FTP 数据连接端口。在文件传输期间,数据通过端口 20 进行传输。例如,当客户端从服务器下载文件时,数据将通过服务器的端口 20 发送到客户端。

DHCP(自动分配IP)

DHCP(Dynamic Host Configuration Protocol,应用层)是一种网络协议,用于动态分配 IP 地址、子网掩码、默认网关等网络配置信息给连接到网络的设备。通过 DHCP,网络管理员可以更加方便地管理大量设备的网络配置,而不需要手动为每个设备分配 IP 地址等信息。

在典型的 DHCP 配置中,有一个 DHCP 服务器负责分配 IP 地址和其他网络配置信息,而客户端设备通过 DHCP 协议向 DHCP 服务器发送请求,并接收服务器分配的配置信息。

在 Unix/Linux 系统中,通常使用 DHCP 客户端来自动获取网络配置信息。常见的 DHCP 客户端包括 dhclient 和 dhcpcd。这些客户端会在系统启动时向网络中的 DHCP 服务器发送请求,并根据服务器的响应自动配置网络。

关于 DHCP 的配置文件,主要包括以下几个方面:

  1. DHCP 客户端配置文件:用于配置 DHCP 客户端的参数,例如发送 DHCP 请求的接口、超时时间等。在不同的 Linux 发行版中,配置文件的位置和名称可能会有所不同,但一般位于 /etc 目录下或其子目录中。

  2. DHCP 服务器配置文件:用于配置 DHCP 服务器的参数,包括分配的 IP 地址范围、子网掩码、默认网关、DNS 服务器等。常见的 DHCP 服务器软件包括 ISC DHCP Server 和 DHCPd。它们的配置文件通常位于 /etc/dhcp 目录下,具体文件名可能是 dhcpd.conf 或类似的。

在配置 DHCP 服务器时,管理员需要根据网络规划和需求来编辑 DHCP 服务器的配置文件,指定适当的 IP 地址范围、子网掩码、默认网关等参数,以便 DHCP 服务器能够正确地为连接到网络的客户端设备分配配置信息。

需要注意的是,配置 DHCP 服务器时应当注意网络安全性和网络性能等因素,确保 DHCP 服务器的配置符合实际需求,并且能够防止潜在的安全风险

ARP(MAC地址解析)

ARP(Address Resolution Protocol,网络协议栈的数据链路层(OSI模型中的第二层))是一种用于将网络层地址(通常是IP地址)解析为数据链路层地址(通常是MAC地址)的协议。它的主要作用是在局域网中解决目标设备的MAC地址。

在计算机网络中,当一个设备需要发送数据包到另一个设备时,它通常知道目标设备的IP地址,但不知道目标设备的MAC地址。这时候就需要使用ARP协议来解析目标设备的MAC地址。

ARP工作原理如下:

  1. 当一个设备(例如计算机A)需要知道另一个设备(例如计算机B)的MAC地址时,它首先检查自己的ARP缓存表,看是否已经有了对应IP地址的MAC地址的映射记录。
  2. 如果ARP缓存中没有目标IP地址的MAC地址映射记录,计算机A就会在局域网上发送一个ARP请求广播,请求所有设备告知它们拥有目标IP地址的设备的MAC地址。
  3. 其他设备收到ARP请求后,如果发现自己的IP地址与ARP请求中的目标IP地址相匹配,就会向计算机A回复一个ARP响应,包含自己的MAC地址。
  4. 当计算机A收到对应的ARP响应后,就会将目标IP地址和MAC地址的映射关系存储到自己的ARP缓存中,以便后续使用。
  5. 一旦计算机A知道了目标设备的MAC地址,它就可以将数据包发送到目标设备,局域网上的路由器或交换机负责将数据包传递给目标设备。

总的来说,ARP协议允许网络设备在局域网中通过IP地址解析目标设备的MAC地址,从而实现数据包的传输和通信。

NFS(Network File System)

NFS(Network File System,应用层)是一种允许在网络上共享文件系统的协议。它允许在不同的计算机系统之间共享文件和目录,就像这些文件和目录本地存在一样。NFS 最初由 Sun Microsystems 开发,是 UNIX 和类 UNIX 系统中广泛使用的网络文件系统标准。

NFS 的工作原理基于客户端-服务器模型。在该模型中,NFS 服务器维护着文件系统,并通过网络向客户端提供对文件和目录的访问。客户端可以通过 NFS 协议挂载(mount)服务器上的文件系统,使得这些文件系统在客户端上就像本地文件系统一样可访问。

NFS 的主要优点包括:

  1. 共享性:NFS 允许多个客户端系统访问同一个文件系统,实现了文件和数据的共享。

  2. 透明性:对于客户端而言,访问远程文件系统和访问本地文件系统没有显著区别,因此用户无需关心文件实际存储位置的细节。

  3. 灵活性:NFS 支持各种类型的操作系统和网络环境,使得不同平台间的文件共享成为可能。

  4. 可伸缩性:NFS 允许添加多个服务器以提供冗余和负载平衡,从而提高了系统的可用性和性能。

然而,NFS 也存在一些缺点和注意事项,比如安全性方面的考虑、网络性能的影响等。因此,在设计和配置 NFS 系统时,需要综合考虑安全性、性能和可用性等因素。

RTSP流媒体协议(应用层)

rtsp,英文全称 Real Time Streaming Protocol,RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议!协议主要规定定了一对多应用程序如何有效地通过IP网络传送多媒体数据。RTSP体系结位于RTP和RTCP之上(RTCP用于控制传输,RTP用于数据传输),使用TCP或UDP完成数据传输!

RTSP(TCP)建立连接过程:

C->B客户端向服务端发送OPTION报文,询问服务端支持哪些方法
B->C

服务端向客户端回复所支持的方法,一般包括:

  • DESCRIBE:用于获取媒体资源的描述信息。

  • SETUP:用于建立媒体传输通道。

  • PLAY:用于开始播放媒体资源。

  • PAUSE:用于暂停播放媒体资源。

  • TEARDOWN:用于关闭媒体传输会话。

C->B客户端发送DESCRIBE报文获取媒体资源的描述信息
B->C服务端返回媒体资源的详细信息,包含SDP信息
C->B发送SETUP报文,请求建立连接
B->C回复建立连接请求(UDP返回数据会多client_port和 server_port两个字段)
C->B发送PLAY报文,请求开始传输媒体数据
B->C...

socket套接字

用于描述地址和端口,是一个通信链的句柄。本质是编程接口,对TCP/IP的封装,不能算协议。

SIP(Session Initiation Protocol

SIP(Session Initiation Protocol)是一种用于建立、修改和终止多媒体会话的通信协议,常用于互联网电话(VoIP)和实时通信系统。它属于应用层协议,用于在网络上发送控制信息,以便在两个或多个参与者之间建立通信会话。

SIP 协议的主要功能包括:

  1. 会话管理:SIP 允许用户发起、接受和终止通信会话,包括语音通话、视频通话和即时消息等。

  2. 用户定位:SIP 可以帮助确定通信参与者的位置,并将通信请求路由到正确的终端。

  3. 状态通知:SIP 允许用户发送状态通知,例如忙碌、在线或离线状态,以便其他用户知道他们是否可用。

  4. 会话协商:SIP 允许参与者协商会话参数,如编解码器和传输协议,以便在不同终端之间实现兼容性。

  5. 故障处理:SIP 提供了故障处理机制,允许在会话建立和终止过程中处理错误和异常情况。

总之,SIP 是一种功能强大的通信协议,为实时通信系统提供了灵活性和可扩展性,使得不同终端和应用程序可以无缝地进行多媒体通信。

Telnet远程登陆协议(应用层)

Telnet协议是一种用于远程登录和控制远程计算机的协议,它允许用户通过网络连接登录到远程主机,并在该主机上执行命令。Telnet协议通常运行在TCP/IP协议栈上,使用默认端口23。

使用Telnet协议,用户可以通过命令行界面远程登录到另一台计算机,并执行各种操作,比如查看文件、管理系统、修改配置等。Telnet协议是一种基于文本的协议,传输的数据都是明文的,没有加密保护,因此在安全性方面存在一定的风险。

虽然Telnet协议在过去广泛使用,但由于其传输数据不加密的特性,现在已经逐渐被更加安全的SSH(Secure Shell)协议所取代。SSH协议提供了加密的数据传输和会话管理,更适合于安全远程访问和操作。

总的来说,Telnet协议是一种用于远程登录和控制计算机的协议,但由于其安全性相对较低,在实际应用中比较少见,更多的情况下会选择使用SSH协议来实现远程访问和操作。

TCP三次握手四次挥手

OSI(Open Systems Interconnection)七层模型

是一个用于描述计算机网络体系结构的参考模型,由国际标准化组织(ISO)制定。它将网络通信过程分解为七个抽象的层次,每个层次负责特定的功能,从而使不同的网络设备和软件能够相互通信和协作。以下是OSI七层模型的各个层次:

  1. 物理层(Physical Layer):
    物理层是最底层的层次,负责在物理媒介上传输原始比特流,它定义了电气、光学和机械特性,例如电压、电缆类型、接口等。

  2. 数据链路层(Data Link Layer):
    数据链路层负责通过物理连接传输数据,将原始比特流组织成帧(Frame),并提供错误检测和纠正。它通常分为两个子层:逻辑链路控制(LLC)和介质访问控制(MAC)。

常见协议ARP协议、国网376.1协议
相关设备交换机
  1. 网络层(Network Layer):
    网络层负责在网络上寻址和路由数据包,使数据能够从源节点传输到目标节点,它定义了 IP 地址和路由协议。

  2. 传输层(Transport Layer):
    传输层提供端到端的通信,负责在源主机和目标主机之间建立、维护和终止数据传输连接。它定义了 TCPUDP 等协议。

  3. 会话层(Session Layer):
    会话层负责建立、管理和终止会话或连接,提供数据交换的方式,例如对话控制和同步。

  4. 表示层(Presentation Layer):
    表示层负责数据的格式化、加密和压缩,以确保数据在不同系统之间的兼容性和可读性。

  5. 应用层(Application Layer):
    应用层是 OSI 模型的最高层,负责提供网络服务和应用程序之间的接口,为用户提供各种网络服务,例如电子邮件、文件传输、远程登录等。

    常见协议HTTP,NFS,FTP,DHCP,SIP

OSI七层模型提供了一种标准的方式来理解和设计计算机网络体系结构,但在实际应用中,常用的是 TCP/IP 协议栈,它是根据 OSI 模型发展而来的。

描述一下TCP三次握手,四次挥手?

在TCP报文的报文头中包含的信息有:

目的端口号与源端口号,用于区分应用程序。

序列号,防止乱序

确认号,防止丢包

标志位:ACK用于回复,SYN用于建立连接,FIN用于断开连接,rst同于重新连接等等

窗口大小:用于流量控制。

在建立连接之初,客户端处于CLOSE状态,而服务端处于监听状态。

第一次握手由客户端向服务端发送建立连接请求报文,包含SYN标志位,目的是检验客户端的发送能力,发送完后客户端处于SYN_send状态。

第二次握手是由服务端在收到客户端的请求连接报文后,需要对客户端发送回复报文,主要有两个目的,一是告知客户端的发送没有问题,而是验证服务端的发送能力。所以会包含SYN标志位以及ACK回复标志位。收到建立连接请求回复后会转为SYN_recive状态

第三次握手是由在客户端第一次接收到服务段的回复报文后发送回复,包含ACK标志位主要是告知服务端的发送能力没有问题。发送回复后客户端转为estabelished状态,服务端在接收到此报文后转为该状态。

关于TCP分割数据?

当我们的应用层需要发送的数据过多时会会对数据进行拆分,在以太网中(IP层)最大的网络包一般为1500个字节,也就时我们说的MTU。除去IP层的ip头部以及TCP头部剩下的就是我们应用层一次能发送的数据长度MSS.

假设客户端有多个网卡,就会有多个 IP 地址,那 IP 头部的源地址应该选择哪个 IP 呢?

当设备中包含多张网卡的时,linux系统会根据目标地址查找本机路由表,将目的地址与路由表中每个网卡的掩码进行与运算,找到相匹配的的作为发送网卡,并以其IP为源地址。

MAC包头格式?

MAC包头中包含了接收方的MAC地址以及发送方的mac地址,还会包含协议类型,在TCP/ip中MAC包的协议类型只有ARP与IP协议两种。

其中MAC数据帧中的发送方的MAC地址是在发送网卡的ROM只读存储器中出厂写入的,也就是自带的,而对于MAC的目的接收地址则需要通过ARP协议根据目的IP确认。

关于交换机你知道多少

以前的交换机主要工作在数据链路层现在也称之为二层交换机或者傻瓜交换机,其将接收到的数据的mac地址以及接收的端口记录在自己的MAC表中,从而实现根据mac对接收的数据进行转发。如果本地的MAC表中没有对应的目的MAC的端口,那么交换机会将数据包广播出去。

在现在的三层交换机中,交换机不止工作在数据链路层还会工作在IP层用于划分地址域,地址域之间通信,以及做VLAN隔离,避免广播风暴等作用。

操作系统是怎么知道接收发送数据的?

最容易想到的是网卡接收到数据后触发硬件中断,但是这样会导致频繁的硬中断触发,影响系统的执行效率,在Linux的2.6版本中引入了NAPI机制,当我们开始接收到数据由DMA向内存中写入数据时会触发硬中断,然后CPU暂时屏蔽此中断,告诉网卡直接将数据写入内存中不用再进行硬件中断。然后发起软中断 (ksoftirqd 是专门用来处理软中断(softirq)任务的线程)启用轮询方法负责后续写入内存的数据,软中断处理函数会从ringBuffer中读取一帧数据利用协议栈进行解析(数据链路层的传输单位),再恢复屏蔽的硬中断。

发送数据过程,首先内核态时,系统会将用户区的发送数据进行CPU拷贝至内核缓冲区(sk_buff)填充协议头并发送。对于TCP通信,sk_buff在拷入发送缓冲区后会保存副本,等收到ACK回复报文的时候彻底释放。如果IP层发现sk_buff的数据大于了最大发送单元MTU会进行分片。

不同协议层的发送数据采用的结构体都是复用的同一个sk_buff。因为数据结构中包含重叠类型。

发送网络数据的时候涉及几次内存拷贝?

首先是将用户需要发送的数据从用户缓冲CPU拷贝至内核缓冲区(sk_buff结构体)。然后添加协议头。对于TCP通信,在进行IP包封装时会先进行拷贝一次sk_buff用于备份。在网络层如果数据大于了MTU会对sk_buff拆分封装还会涉及拷贝操作。

http常见的状态码你了解那些?

http中的状态码由三位整数组成,可以分为五类。

以1开头的状态标识标识协议的中间处理状态

以2开头的状态往往标识数据交互成功

以3开头的状态表示请求发生了重定向,往往是在向后端发送请求后由缓存返回的结果的情况。

以4开头的状态表示客户端请求向服务端发送失败,往往时因为客户端没能与服务端正常连接,或者访问被拒绝导致。

以5开头的状态表示客户端的请求成功到达了服务端,但是服务端在处理请求的过程中发生了异常。

http常见的字段有哪些?

host:表示请求发往的主机地址 content:包含内容的格式,长度等信息 connection:建立长连接等。

TCP为什么会出现粘包问题,怎么避免粘包问题?

UDP是面向报文的协议,操作系统不会对消息进行拆分,会直接送到IP层进行处理。对于TCP传输协议,为保证传输的可靠性需要进行拥塞控制和滑动窗口控制,当接收方的接收能力不足而发送方需要发送的数据过多,而后序需要发送的数据会被拷贝至内核缓冲区等待发送造成累计,从而出现两次或者多次发送的数据被分在了同一个TCP报文段(sk_buff)中,所以我们不能认为TCP协议是面向报文的协议因为没法确定一个用户消息对应一个TCP报文。

为了避免这种情况的出现可以固定长度消息,使用特殊字符作为信息边界,自定义消息结构体等操作。

http与TCP的keeplive的区别?

http的保活是指http在进行通信时保持当前的TCP连接进行通信,而不是当前通信结束后就断开TCP连接,而下次进行通信再建立连接。

TCP的保活属于内核的系统实现,其是在TCP建立连接后如果长时间没有通信,内核为保证该链接

是否还有效就会发送一个探测报文检测对方是否还在线如果还在线就继续,不在线就断开连接。

GET和POST的区别?

get与post都是http协议中提高的两种进行数据交互的方法。

在编程规范中get通常用于数据查询,而post方法通常用于数据提交。但并不是强制规定,POST很多场景下都能替代post方法。至于安全,还是看具体怎么使用。

get方法传递数据的方式是通过直接在URL中传递,在url的?后就是请求所携带的数据用&隔开。当前的浏览器一般对URL的长度有限制所以对于get方法来说想后端提交数据的长度是有限的,同时get方法只能通ascll字符传递数据。

对于post方法,他有们的请求段用于搭载要向后端传递的数据body,支持多种类型的传递格式,同时没有长度的限制。

http的两种缓存机制?

一种是强制缓存,当后端服务向客户端返回response相应数据的时候会包含cache-control或者expires记录者缓存的有效期,当浏览器再次发送该请求请求数据时会先检查之前的请求数据是否过时,如果没有就将之前的相应返回同时状态码显示为304.

另一种是协商缓存,当客户端本地的缓存失效时,如果请求头中携带有协商缓存的字段,前端回服务端发送请求,请求中会携带失效数据的最后修改时间或者标志位,服务端检查最后修改时间或者标志位有没有变动判断是否使用缓存数据还是发送新的数据。

cookie的作用是什么?

cookie主要是用于服务端鉴别客户端的状态,在初次发送请求浏览器会产生一个COOKIE并发送给客户端,后续客户端携带该cookie浏览器就知道客户端的主机状态,如会话状态,安全状态等。

由于http是超文本协议,信息都是明文传输,存在很强的安全漏洞风险。所以在应用层与传输层之间我们引入SSL\TLS加密也就是我们常说的https。https采用对称加密与非对称加密结合的方式对http传输内容进行加密。https在建立TCP连接的基础上加入了加密握手。

首先是客户端向服务端发送一个数字,同时将自己支持的加密算法的列表发送给服务端。

服务端接收到后选择一类加密算法比如rsa加密,然后将自己的数字证书和公钥与选择的加密算法以及一个数字发送回客户端。

客户端收到服务端的数字证书后向本地缓存或者第三方机构通过在机构注册的服务端的公钥证明数字证书的有效性,最后利用服务端的公钥加密携带的随机数字发送给服务端。并告知服务端后续采用会话密钥进行通信

服务端收到后使用自己本地的私钥进行解密,此时本地得到在三个数字,一个由自己发出一个由客户端接收。客户端同样持有这三个数字,利用这三个数字结合RSA算法生成仅双方持有的新的会话钥,并告知客户端后续采用会话密钥进行通信。后续双方的通信使用该会话密钥进行加密。

数字证书是怎么生成的?

数字证书是由注册方的公钥以及注册的一些其他信息组成并生成hash,同时认证机构会利用自己的私钥对该hash值进行加密或者说签名生成最终的ca数字证书。客户端只需要根据发送来的公钥信息进行hash值计算,同时利用浏览器集成的ca公钥对数字证书进行解码得到hash将两个hash进行比对即可。

但是大多数时候我们使用的数字证书并不是根证书,而是由根证书被授予机构签发。这种请况浏览器不能直接利用本地的根证书的公钥进行解密,他会向当前证书的签发机构发送请求,由该证书的签发机构查找该证书根据某一根证书进行签发,他根据该根证书的预载清单确认该证书可信后,客户端再使用根证书的公钥进行验证。

https如何保证数据的完整?

https涉及握手与记录两部分协议,握手主要用于协商会话密钥,而记录协议部分会将数据分割成合适长度并进行压缩,对压缩后的数据还会加上一个hash值用于鉴别数据是否被篡改。然后再利用协商的对称密钥进行加密

https一定是可靠的吗?

不一定,如果根证书的私钥泄露就会被用于伪造证书。另一种方式就是客户端自己接收了别人恶意的根证书公钥。对于装包工具能抓到明文的https包主要是因为抓包工具向客户端安装了证书受到信任。为保证数据不被中间人抓取可以采用双向认证。

简述http1.0、http1.1,http2,http3的区别

http1.1在http1.0的基础上加入了长连接,但是header消息越多越容易出现延迟,同时容易出现队头阻塞,也就是前一个请求处理过慢导致后续的请求堆积。

http2.0使用将文本格式改为了二进制格式传输,同时进行了头部压缩,对于相同的头部信息用索引号代替。同时其实现了TCP连接的复用,在同一TCP连接上可以包含多个steam,这些STREAM通过id区分属于哪一个http请求。但是http2依旧会存在队头阻塞问题。但是http2与http1队头阻塞赵造成的原因略有不同,http1.1队头阻塞的原因是只能一条一条发送请求,若前一请求的响应过慢导致后一请求无法进行。而http2采用了TCP连接复用,可以在同一TCP连接上穿行接收多个HTTP请求的数据,但是在在传输层如果出现了某一个包丢失后续的包(包含不同stream的包)即使已经收到也不能被处理,只能等前一个丢失的包重传回来才能被处理。

这是TCP本身为了维持数据的稳定传输所带来的弊端,于是在HTTP3.0中将传输层TCP改为了基于UDP传输的QUIC协议,他可以实现类似TCP的可靠传输。当出现包的丢失QUIC会将当前流进行阻塞,而其他流正常接收。同时在原本的http链接涉及三次tcp握手三次TLS握手,但是QUIC协议将这两个三次握手集成在了一次握手当中。这意味着一旦建立了TLS拿到了会话密钥,只要密钥不时效,后续就无需再进行握手操作。同时QUIC还支持连接迁移,他通过ID来标记自己,而不依靠IP与端口来标记。

对http做的优化?

减少http请求的次数,利用缓存策略。

减少重定向次数。

减少头部信息的重复发送,http2中对头部进行压缩,利用索引代替重复的http头部信息。

合并多个请求,将多个数据合到一个响应返回

在TCP建立连接中客户端与服务端有什么异同?

对于服务端首先是要创建一个套接字,套接字是通信双方的一个通信端点,可以理解为一个文件描述符的抽象,通过绑定了对应的端口,通信双方只需要根据向对方的缓冲区中写入数据进行数据通信。服务端创建好套接字后需要为该套接字绑定端口以及IP,主要作用是高速操作系统特定的通信应用程序将使用指定的IP以及端口进行通信。该套接字为监听套接字,主要用于与客户端建立连接。绑定好后启用listen进行监听,当收到连接请求后accpet会根据协议完成握手操作,完成后会返回一个新的套接字,该套接字包含了原地址端口以及远程端口与地址,和自动分配的读写缓冲区指针,还包含一些控制信息,状态信息。客户端侧不需要为应用程序bind特定的端口,他是连接的发起者,由系统自动分配源地址与端口,只需要确定服务端的IP以及端口,通过建立连接connect完善socket结构体内容即可。

关于传输层会什么要在TCP层进行分包而不是在网络层进行分包呢?

如果是在网络层当超过了MTU得长度才进行分包,那么如果一个包中得数据丢失了,就没法在目标主机中组成一个完整得TCP数据段,就只有将整个传入网络层得数据进行重新发送,效率很低。而如果经过通信双方协商,在传输层根据mss将数据进行拆分并都加上TCP报头那么如果其中一个数据包丢失了也就只需要按照mss位单位进行数据得重传。

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值