1.什么是网络字节序和主机字节序
网络字节序(Network Byte Order)和主机字节序(Host Byte Order)是计算机中用于表示二进制数据的两种不同的字节序。
主机字节序指的是 CPU 或操作系统本身使用的字节序。在主机字节序中,整数的高位字节(MSB,Most Significant Byte)存放在内存的低地址处,而整数的低位字节(LSB,Least Significant Byte)存放在内存的高地址处。
网络字节序是指用于网络通信协议中的规定的字节序,其规定整数的高位字节必须先传输到网络上,也就是采用大端字节序(Big-Endian),即高位字节在前,低位字节在后。 为了在不同主机之间进行通信,需要在发送数据之前将数据按照网络字节序进行转换,而在接收数据之后再将数据转换为本地主机字节序。 在网络编程中,通常使用 htons()、htonl()、ntohs() 和 ntohl
2.子网掩码的作用?
子网掩码通常采用32位二进制数表示,其中网络部分为1,主机部分为0。
例如,对于IP地址192.168.0.1和子网掩码255.255.255.0,网络部分为前24位,
主机部分为后8位,因此可以确定该IP地址属于网络192.168.0.0,主机地址为1。
子网掩码是用于划分网络和主机的掩码,与IP地址配合使用来确定网络地址和主机地址。
子网掩码与IP地址一起构成了IP地址的网络部分和主机部分。
子网掩码的作用是:
**1.划分网络和主机:**通过子网掩码可以将一个IP地址划分为网络地址和主机地址,以便在网络中进行路由转发。
**2.确定网络范围:**通过子网掩码可以确定一个网络的范围,即哪些IP地址属于同一个网络,哪些IP地址不属于同一个网络。
**3.提高网络安全性:**使用子网掩码可以限制网络中主机的访问范围,从而提高网络的安全性。
3.DNS服务器是作用是什么?
DNS(Domain Name System)服务器是一种计算机网络服务,它的作用是将人类易于理解的域名
(例如www.example.com)转换为计算机易于理解的IP地址(例如192.168.1.1),并为互联网上的应用程序提供域名解析服务。
在互联网上,每台计算机都有一个唯一的IP地址,这个地址用于标识计算机在网络上的位置。
但是,IP地址通常是由一串数字组成的,不太容易记忆和理解。而且,在应用程序中,我们更多地使用域名而不是IP地址来访问网络资源。
例如,我们可以通过输入www.baidu.com来访问百度的网站,而不是输入其IP地址。
DNS服务器就是为了解决这个问题而产生的。它将域名与IP地址之间建立了一个映射关系,
当我们在浏览器中输入一个域名时,DNS服务器会通过域名解析将其转换为对应的IP地址,从而实现网络资源的访问。
具体地,当我们在浏览器中输入一个域名时,计算机会首先向本地DNS服务器发起请求。
如果本地DNS服务器缓存中有对应的IP地址,它会直接将IP地址返回给浏览器;
否则,它会向根域名服务器发起请求,根域名服务器会返回下一级域名服务器的地址,
本地DNS服务器再向下一级域名服务器发起请求,直到找到对应的IP地址为止。
总之,DNS服务器是为了解决域名与IP地址之间的映射关系而产生的,它为互联网上的应用程序提供域名解析服务,
是互联网中不可或缺的基础设施之一。
4.linux中管理网络的命令你知道哪些?
在 Linux 下管理网络的常用命令如下:
**ifconfig:**用于查看和配置网络接口的命令,可以查看和配置 IP 地址、子网掩码、网关、MAC 地址等信息。
**ip:**新一代网络配置工具,包含丰富的子命令,可以查看和配置 IP 地址、路由表、网络设备等信息。
**route:**用于管理 IP 路由表的命令,可以查看和配置路由表。
**ping:**用于测试网络连接的命令,可以测试网络延迟和丢包情况。
**traceroute:**用于追踪网络数据包路由的命令,可以查看网络数据包经过的路由。
**netstat:**用于查看网络连接和网络统计信息的命令,可以查看网络连接状态、网络流量等信息。
**ss:**新一代网络连接查询工具,功能比 netstat 更强大,可以查看网络连接状态、网络流量等信息。
**iptables:**用于配置 Linux 内核防火墙的命令,可以配置网络端口、IP 地址等访问控制规则。
**nmap:**用于网络探测和端口扫描的命令,可以扫描目标主机开放的网络端口。
**hostname:**用于查看和配置主机名的命令,可以查看当前主机的主机名。
5.关于数据通信协议的拟定了解多少?/你认为一个通信协议的基本要素是什么?
数据通信协议的拟定需要根据具体的应用场景和需求进行制定,一般需要考虑以下几个方面:
**协议的目标:**需要明确协议的目标,例如传输效率、数据安全、可靠性等,以便在设计协议时能够更好地满足需求。
数据格式和编码: 需要定义数据的格式和编码方式**,以便发送方和接收方都能够理解和处理数据**。
通信过程和控制: 需要定义通信过程和控制方式,例如握手、数据传输、错误处理等 ,以便确保通信的正确性和稳定性。
安全性和加密 :需要考虑通信的安全性和加密方式,以便防止数据被非法获取或篡改。
可扩展性:需要考虑协议的可扩展性,以便在未来增加新的功能或修改协议时不会对已有系统产生影响。
6.TCP和UDP的区别?
TCP(传输控制协议)和UDP(用户数据报协议)是网络通信中常用的两种传输层协议,它们之间的主要区别有以下几点:
连接性:TCP 是一种面向连接的协议,UDP 是一种无连接的协议。TCP 在传输数据前需要先建立连接,而 UDP 则直接发送数据包。
可靠性:TCP 通过确认机制、重传机制、流量控制、拥塞控制等手段保证数据传输的可靠性,UDP 则不保证数据传输的可靠性。
传输效率:TCP 在保证可靠性的前提下,会降低传输效率,因为它需要进行确认、重传等操作,而 UDP 则没有这些额外的操作,
传输效率相对较高。
数据包大小:TCP 在传输数据时,需要将数据分割成大小不等的报文段进行传输,而 UDP 则直接将数据打包成数据报进行传输,
没有大小限制。
应用场景:TCP 适用于要求数据可靠传输、传输量较大、传输时间不敏感的场景,例如文件传输、电子邮件、网页浏览等。
UDP 适用于实时传输、传输量较小、传输时间敏感的场景,例如音视频传输、游戏等。
7.MTU是什么意思?
MTU是"最大传输单元"(Maximum Transmission Unit)的缩写,指在网络上传输的数据包中最大的数据量。 在数据传输过程中,如果数据包的大小超过了MTU,就需要进行分片操作,将大的数据包分成多个小的数据包进行传输。
不同的网络技术和协议都有不同的MTU,通常以字节为单位。 例如,在以太网中,MTU的标准值为1500字节,而在IPv6网络中,MTU的标准值为1280字节。 MTU的大小会对网络性能产生影响。如果MTU太小,数据包需要分成多个小片段进行传输,会增加网络负载和传输时间。 如果MTU太大,数据包分片的频率会减少,但单个数据包的传输时间也会增加,容易导致网络拥塞和数据传输失败。 因此,在设计和配置网络时,需要根据实际情况选择合适的MTU值。
8.ARP/和RARP工作在那一层,作用是什么?
ARP(Address Resolution Protocol)和 RARP(Reverse Address Resolution Protocol)是网络通信协议中的两种协议,
分别工作在ARP网络层和RARP数据链路层。
ARP协议的作用是通过目标IP地址获取目标MAC地址,实现将IP地址映射到MAC地址,从而实现数据帧的发送。
当主机需要发送数据帧时,先查询ARP缓存表,如果有目标主机的IP地址对应的MAC地址,则直接发送数据帧;
如果没有,则发送一个ARP请求广播,请求其它主机帮助查找目标MAC地址,目标主机接收到请求后,
会回复一个包含其MAC地址的ARP响应数据包,发送给请求主机,请求主机收到响应后,就可以将目标IP地址和MAC地址映射到一起,
以后发送数据帧时就可以直接发送到目标MAC地址。
RARP协议则是根据MAC地址获取IP地址,实现MAC地址到IP地址的映射,与ARP协议相反。
当一台机器启动时,由于还没有配置IP地址,无法与网络进行通信,此时可以向网络中的RARP服务器发送请求,
请求其它主机帮助获取该机器的IP地址,RARP服务器返回该机器的IP地址,机器收到响应后就可以正常配置IP地址,以便进行通信。
ARP和RARP协议可以实现IP地址和MAC地址的映射,是实现局域网内通信的关键协议之一。
9.单线程UDP服务器是并发服务器吗?
单线程UDP服务器并不是并发服务器。因为UDP是无连接协议,每次接收到一个数据包都需要单独处理。
在处理一个数据包的同时,服务器不能同时处理其他数据包,因此单线程UDP服务器只能顺序地处理每个数据包,
不能同时处理多个数据包,也就无法支持并发处理请求。如果要实现UDP并发服务器,需要使用多线程或多进程等方式,
或者使用非阻塞IO模型来处理数据包。
10.TCP的三次握手和四次挥手
三次握手
发生在建立连接的过程中,由客户端主动发起。
发生在 服务器的 accept函数(listen函数) 和 客户端的 connect函数之间
三次握手的过程是为了保证通信的双方都知道对方收发数据的能力没问题
同时也是同步序列号的过程。
客户端发送SYN报文请求连接:
- 客户端首先向服务器发送一个SYN报文(同步序列编号),其中包含一个随机生成的序列号(Seq=X)。
- 这个报文告诉服务器客户端想要建立连接,并指明客户端的初始序列号。
- 服务器回复SYN+ACK报文确认请求:
- 服务器收到客户端的SYN报文后,会发送一个SYN+ACK报文作为回复,其中包含了确认号(Ack=X+1)和服务器自己的初始序列号(Seq=Y)。
- 这个报文告诉客户端,服务器已经收到了连接请求,并且愿意建立连接。
- 客户端发送ACK报文确认连接建立:
-
- 最后,客户端收到服务器的SYN+ACK报文后,会发送一个ACK报文作为确认。
- 这个ACK报文中的序列号字段(Seq=Y+1)表示客户端已经收到了服务器的确认,同时确认服务器的序列号。
- 当服务器收到这个ACK报文后,就确认连接建立成功,双方可以开始进行数据传输。
四次挥手
四次挥手发生在连接断开的过程中,由主动关闭方(服务器和客户端都可以发起)发起。
我这里以客户端主动发起为例。
- 客户端发送FIN报文请求关闭:
- 客户端首先决定关闭连接,发送一个带有FIN标志的报文给服务器。
- 这个报文告诉服务器,客户端不再有数据要发送给服务器了,但仍然可以接收数据。
- 服务器收到FIN后,发送ACK确认:
- 服务器收到客户端发送的FIN报文后,发送一个ACK报文作为确认。
- 这个ACK报文告诉客户端,服务器已经收到了关闭请求,并且同意关闭连接。
- 服务器发送FIN请求关闭:
- 服务器决定关闭连接时,也会发送一个带有FIN标志的报文给客户端。
- 这个FIN报文告诉客户端,服务器不再有数据要发送给客户端了,但仍然可以接收数据。
- 客户端收到FIN后,发送ACK确认:
- 客户端收到服务器发送的FIN报文后,发送一个ACK报文作为确认。
- 这个ACK报文告诉服务器,客户端已经收到了关闭请求,并且同意关闭连接。
11.TCP/IP协议族的体系结构
由于OSI开放系统互联模型太繁琐了,所以目前尚没有完整的应用
TCP/IP协议族体系结构相当于将OSI开放系统互联模型做了简化。虽然层次简化了,但是干的活还是一样的。
TCP/IP协议族体系结构是Internet事实上的工业标准。
12.epoll的边沿触发和水平触发有什么区别 应用场景如何选择?
epoll是一种高效的I/O多路复用机制,在Linux系统中被广泛使用。epoll的触发模式可以分为边沿触发和水平触发两种。
边沿触发模式(Edge Triggered,ET):当epoll_wait()函数返回事件时,只会通知那些状态发生改变的文件描述符,
而且只会通知一次。也就是说,只有在文件描述符状态发生变化时,才会触发一次事件,例如读或写操作完成,或者连接或关闭事件。
在边沿触发模式中,需要用非阻塞模式来读写文件描述符,以免出现阻塞。
水平触发模式(Level Triggered,LT):当epoll_wait()函数返回事件时,会通知那些文件描述符的状态发生改变的,直到状态被改变为止。
也就是说,在文件描述符状态变化期间,一直会触发事件。在水平触发模式中,可以使用阻塞模式来读写文件描述符,
因为epoll_wait()函数每次都会通知文件描述符状态是否改变。
一般情况下,边沿触发模式比水平触发模式效率高,因为边沿触发只需要通知状态发生变化的文件描述符,
而水平触发需要通知每个文件描述符的状态是否改变。但是,边沿触发模式也更容易出错,
因为它要求程序员必须使用非阻塞模式来读写文件描述符,避免阻塞。
在应用场景方面,如果需要高性能的网络通信,且对于事件的处理能力要求较高,那么应该使用边沿触发模式。
如果对于事件的处理能力要求不高,可以使用水平触发模式。