网络编程常见面试题

==================================================================================================================================================

答:IP(Internet Protocol)是互联网中最基本的网络协议之一,定义了互联网上的数据传输方式和规则。它是网络层(第三层)的协议,

作用:通过在数据包中添加源IP地址和目标IP地址来实现数据的路由和传递。它定义了数据包的格式和传输规则,确保数据包能够正确地从源主机传输到目标主机。

 TCP是一种面向连接的协议,提供可靠的、有序的、面向字节流的数据传输。它使用三次握手建立连接,并使用序列号和确认应答机制保证数据的可靠传输。

UDP是一种无连接的协议,提供不可靠的、无序的、面向数据报的数据传输。它不需要建立连接,直接将数据报发送给目标主机,适用于对实时性要求较高的应用场景。

==================================================================================================================================================

交换机是在数据链路层(第二层)上实现的设备,主要用于局域网内部的数据转发。它通过学习和维护MAC地址表来实现数据的转发。当交换机接收到一个数据帧时,它会查看数据帧中的目标MAC地址,并在MAC地址表中查找对应的接口。如果找到了对应的接口,交换机就将数据帧发送到该接口,否则将数据帧广播到所有接口(除了接收端口)。交换机的主要特点是转发速度快、无需配置和管理。

路由器是在网络层(第三层)上实现的设备,主要用于不同网络之间的数据转发。它通过学习和维护路由表来实现数据的转发。当路由器接收到一个数据包时,它会查看数据包中的目标IP地址,并在路由表中查找对应的下一跳。路由表中记录了不同网络之间的连接关系和最佳路径。路由器根据路由表选择最佳路径将数据包转发到下一跳,直到数据包到达目标网络。路由器的主要特点是能够实现不同网络之间的互连和路由选择。

总结起来,交换机和路由器在网络中起着不同的作用。交换机在数据链路层上实现,用于局域网内部的数据转发;而路由器在网络层上实现,用于不同网络之间的数据转发。

==================================================================================================================================================

TCP的建立过程(三次握手,四次挥手)

第一次挥手
客户端发送FIN给服务器,客户端状态由 ESTABLISHED 变为 FIN_WAIT_1。

第二次挥手
服务器收到FIN且发送ACK给客户端,服务器状态由 ESTABLISHED 变为 CLOSE_WAIT。
服务器将缓存中没发送完的数据继续发送给客户端
客户端收到ACK后状态由FIN_WAIT_1变为FIN_WAIT_2.

第三次挥手
服务器发送FIN给客户端,这时服务器的状态由CLOSE_WAIT变为 LAST_ACK。

第四次挥手
客户端收到FIN后返回ACK给服务器,然后客户端的状态由FIN_WAIT_2变为TIME_WAIT,TIME_WAIT = 2MSL (maximum segement lifetime 分节在网络中最长生存时间,30秒到2分钟,根据系统实现不同而不同) 2MSL 范围是 1分钟到4分钟。
服务器收到ACK后,状态由LAST_ACK变为CLOSED。
而客户端再经过TIME_WAIT时间后变为CLOSED状态。

==================================================================================================================================================

网络编程如何解决粘包问题

答:粘包问题:发送方发送的数据被接收方粘在一起,导致接收方无法正确解析数据的问题。

  1. 定长消息:发送方将消息固定长度进行发送,接收方按照固定长度进行接收和解析。这种方法简单直接,但会导致消息长度不足时出现浪费,消息长度过长时出现截断。

  2. 分隔符:发送方在消息之间添加特定的分隔符,接收方根据分隔符进行消息的分割和解析。常见的分隔符可以是换行符、制表符等。这种方法需要保证分隔符不会在消息内容中出现,否则会导致解析错误。

  3. 固定长度头部:发送方在消息前添加固定长度的头部,头部包含消息的长度信息,接收方首先读取头部,然后根据头部中的长度信息读取相应长度的消息。这种方法可以灵活处理不同长度的消息,但需要额外的头部开销。

  4. 使用消息边界:发送方在每个消息的末尾添加消息边界标识,接收方根据消息边界进行消息的分割和解析。常见的消息边界标识可以是特定字符序列、特定字节序列等。

  5. 使用消息长度字段:发送方在消息前添加表示消息长度的字段,接收方首先读取长度字段,然后根据长度字段读取相应长度的消息。这种方法可以灵活处理不同长度的消息,且不需要额外的头部开销。

==================================================================================================================================================

socket如何解决断点续传问题 

答:断点续传是指在文件传输过程中,如果传输中断或者出现错误,可以从断点处继续传输,而不需要重新传输整个文件。

  1. 文件分片:将文件分成多个固定大小的片段,每个片段都有一个唯一的标识符。传输过程中,可以记录已经传输完成的片段,以及正在传输的片段的偏移量。如果传输中断,可以根据已经传输完成的片段和偏移量,从断点处继续传输。

  2. 断点续传标记:传输过程中,可以使用一个标记来记录已经传输完成的字节数。如果传输中断,可以根据标记的字节数,从断点处继续传输。

  3. Range请求:在HTTP协议中,可以使用Range请求头来指定需要传输的文件范围。传输过程中,可以根据已经传输完成的字节数,发送Range请求,从断点处继续传输。

  4. 文件校验和:在传输文件之前,可以计算文件的校验和,例如MD5或SHA1。传输过程中,可以使用校验和来验证文件的完整性。如果传输中断,可以重新计算断点处之后的文件内容的校验和,然后继续传输

==================================================================================================================================================

多路复用select poll epoll区别,功能 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值