网络层

简介: 网络层

网络层是 OSI 模型中的第三层,负责在不同网络之间传输数据包。其主要任务是确定数据包的路由方式,以确保数据能够从源主机发送到目标主机。网络层使用 IP 协议来完成这些任务,IP 地址用于标识主机和网络,并确定数据包的路由路径。网络层还负责分段和重新组装数据包,以适应不同网络的最大传输单元(MTU)。

 

IP 地址

IP 地址是网络层中的关键概念,用于唯一标识网络上的每个主机和路由器。IPv4 地址由 32 位二进制数字组成,通常以点分十进制表示,如 192.168.1.1。IPv6 地址由 128 位二进制数字组成,以冒号分隔表示,如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。IPv6 地址的引入是为了解决 IPv4 地址枯竭的问题。

 

IP 协议

IP 协议是网络层中最重要的协议之一,负责在网络之间传输数据包。它定义了数据包的格式和路由方式。IP 数据包包括头部和数据两部分,头部包含源地址、目标地址、数据包长度等信息。IP 协议提供的服务是不可靠的,数据包可能会丢失、重复、失序或损坏。为了解决这些问题,通常会与 IP 协议配合使用传输层的 TCP 协议或 UDP 协议。

 

IP 路由

IP 路由是网络层的一个重要功能,它确定数据包从源主机到目标主机的路径。路由器是网络层中负责转发数据包的设备,它根据目标地址和路由表来确定数据包的下一跳路由器。路由表存储了目的网络和下一跳路由器之间的映射关系。路由选择算法通常采用最短路径优先(Shortest Path First,SPF)或距离向量(Distance Vector)算法。

 

ICMP 协议

Internet 控制消息协议(Internet Control Message Protocol,ICMP)是一种网络层协议,用于在 IP 网络上发送错误消息和操作消息。它通常用于诊断网络故障和执行网络管理任务。常见的 ICMP 消息包括回显请求和回显应答,用于检测主机的可达性。

 

IP 地址分配

iP 地址分配是网络层管理中的重要任务。IPv4 地址通常由网络管理员手动分配或使用动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)自动分配。IPv6 地址通常通过无状态地址自动配置(Stateless Address Autoconfiguration,SLAAC)或 DHCPv6 分配。

 

VPN 和 NAT

虚拟专用网络(Virtual Private Network,VPN)是一种通过公共网络(如互联网)建立加密通道的技术,用于保护数据传输的安全性。网络地址转换(Network Address Translation,NAT)是一种将私有 IP 地址转换为公共 IP 地址的技术,用于解决 IPv4 地址不足的问题。

网络层在整个网络通信中起着至关重要的作用,它负责确定数据包的路径并实现不同网络之间的连接。通过深入了解网络层的功能和协议,可以更好地理解计算机网络的工作原理。

 

使用 Python 的 socket 库来手动构建和发送 ICMP 请求。以下是一个示例:

import socket
import os
import struct
import time
import select
 
ICMP_ECHO_REQUEST = 8
 
def checksum(source_string):
    sum = 0
    count_to = (len(source_string) // 2) * 2
    count = 0
 
    while count < count_to:
        this_val = source_string[count + 1] * 256 + source_string[count]
        sum += this_val
        sum &= 0xffffffff
        count += 2
 
    if count_to < len(source_string):
        sum += source_string[len(source_string) - 1]
        sum &= 0xffffffff
 
    sum = (sum >> 16) + (sum & 0xffff)
    sum += (sum >> 16)
    answer = ~sum
    answer = answer & 0xffff
    answer = answer >> 8 | (answer << 8 & 0xff00)
    return answer
 
def create_packet(id):
    header = struct.pack('bbHHh', ICMP_ECHO_REQUEST, 0, 0, id, 1)
    data = struct.pack('d', time.time())
    my_checksum = checksum(header + data)
 
    header = struct.pack('bbHHh', ICMP_ECHO_REQUEST, 0, my_checksum, id, 1)
    return header + data
 
def send_icmp_request(destination_ip):
    icmp = socket.getprotobyname("icmp")
    sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)
    
    packet_id = int((id(timeout) * time.time()) % 65535)
    packet = create_packet(packet_id)
    
    sock.sendto(packet, (destination_ip, 1))
    
    start_time = time.time()
    while True:
        ready = select.select([sock], [], [], 1)
        if ready[0] == []:
            print("Request timed out.")
            return
        
        time_received = time.time()
        rec_packet, _ = sock.recvfrom(1024)
        icmp_header = rec_packet[20:28]
        type, code, checksum, p_id, sequence = struct.unpack('bbHHh', icmp_header)
        
        if p_id == packet_id:
            bytes_in_double = struct.calcsize('d')
            time_sent = struct.unpack('d', rec_packet[28:28 + bytes_in_double])[0]
            print(f"Received ICMP response from {destination_ip} in {time_received - time_sent:.3f} seconds")
            return
 
if __name__ == "__main__":
    destination_ip = "8.8.8.8"
    send_icmp_request(destination_ip)


相关文章
|
网络协议 数据安全/隐私保护 网络虚拟化
深入了解OSI模型:计算机网络的七大层次
OSI模型 OSI模型是一个网络通信的概念模型,用于描述计算机网络中各个不同层次之间的通信和功能。它将网络通信分为七个不同的层次,每个层次负责不同的任务,使得网络通信的设计、开发和管理更加模块化和可维护。以下是OSI模型的七个层次以及它们的主要功能: 1、物理层(Physical Layer): 功能:处理物理传输介质上的原始比特流,确保数据在传输媒体上能够以适当的方式传输。 示例设备:集线器、中继器、网线等。 主要任务:比特编码、电压规范、物理拓扑等。 2、数据链路层(Data Link Layer): 功能:负责将原始比特流分割成帧并添加地址信息,以便在直接连接的设备之间传输数据。 示例设
4496 0
|
域名解析 存储 Java
一步步教你搭建自己的云服务器
一步步教你搭建自己的云服务器
|
11月前
|
数据采集 人工智能 自动驾驶
《突破AI数据标注高成本枷锁,势在必行!》
在人工智能快速发展的背景下,数据标注作为AI模型训练的基础,其高成本问题成为制约行业发展的关键因素。主要体现在人力、时间和管理成本上,尤其是在复杂领域和大规模数据处理中。为解决这一难题,行业探索了多种创新方案:技术层面,自动化标注工具与半监督学习技术显著提升效率;商业模式上,分布式众包和专业平台降低运营成本;人才培养方面,校企合作与激励机制优化标注质量。尽管仍存挑战,但通过多方协同,有望推动AI数据标注行业的高效发展,助力AI技术广泛应用。
525 9
|
机器学习/深度学习 数据采集 搜索推荐
机器学习在智能推荐系统中的个性化算法研究
机器学习在智能推荐系统中的个性化算法研究
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
多功能在线二维码生成源码
上传即可使用,可以把电子名片、文本、wifi网络、电子邮件、短信、电话号码、网址等信息生成对应的二维码图片。
399 24
多功能在线二维码生成源码
|
Kubernetes 应用服务中间件 nginx
搭建高可用k8s
搭建高可用k8s
305 6
|
JavaScript 前端开发
JavaScript的命名规则
JavaScript的命名规则
526 0
|
传感器 监控 供应链
自动化生产线上的应用
自动化生产线广泛应用在汽车、电子、食品和医药等领域,提高生产效率和质量,节约人力成本。其优势包括生产稳定性强、适应恶劣环境、24小时不间断生产及产品一致性高。随着技术进步,未来自动化生产线将更灵活、定制化,人机融合、绿色环保和智能监控将成为趋势。传感器和电动执行器作为关键组件,优化监控和控制,推动生产效率和质量提升,为企业带来更多机遇与挑战。
594 2
|
存储 编解码 网络架构
BackTrader 中文文档(二)(4)
BackTrader 中文文档(二)
292 0

热门文章

最新文章