网络层

简介: 网络层

网络层是 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)


相关文章
|
运维 Kubernetes Cloud Native
腾讯云私有云平台运维面试
根据会议将面试问题进行总结,很多问题感觉当时没回答好,这是为啥呢?应该还是不熟练吧,或者不善于表达。将次经历分享出来,大家多练练。
733 0
|
4月前
|
数据采集 人工智能 自动驾驶
《突破AI数据标注高成本枷锁,势在必行!》
在人工智能快速发展的背景下,数据标注作为AI模型训练的基础,其高成本问题成为制约行业发展的关键因素。主要体现在人力、时间和管理成本上,尤其是在复杂领域和大规模数据处理中。为解决这一难题,行业探索了多种创新方案:技术层面,自动化标注工具与半监督学习技术显著提升效率;商业模式上,分布式众包和专业平台降低运营成本;人才培养方面,校企合作与激励机制优化标注质量。尽管仍存挑战,但通过多方协同,有望推动AI数据标注行业的高效发展,助力AI技术广泛应用。
233 9
|
机器学习/深度学习 数据采集 搜索推荐
机器学习在智能推荐系统中的个性化算法研究
机器学习在智能推荐系统中的个性化算法研究
|
7月前
|
算法 安全 数据安全/隐私保护
散列值数据完整性验证
散列值数据完整性验证
246 11
图片修复
该技术在图片重新上色和色彩增强方面表现突出,图像去噪效果也很好。如果能加入人像增强功能以提升清晰度,将更加完美。
|
9月前
|
Linux
网络IO管理
网络IO管理
615 0
多功能在线二维码生成源码
上传即可使用,可以把电子名片、文本、wifi网络、电子邮件、短信、电话号码、网址等信息生成对应的二维码图片。
321 24
多功能在线二维码生成源码
|
安全 数据安全/隐私保护 网络虚拟化
亲测有效:注册谷歌邮箱账号gmail的最新教程
谷歌邮箱,也被称为 Gmail,是由谷歌公司开发的一项电子邮件服务。自 2004 年首次推出以来,Gmail 迅速成为全球最受欢迎的电子邮件服务之一。截至 2023 年,Gmail 拥有超过 18 亿活跃用户。Gmail 以其简洁易用的界面、强大的功能和高可靠性著称,成为个人、企业和组织广泛使用的电子邮件平台。
1283 1
|
监控 Linux Shell
Linux命令ionice:优化磁盘I/O优先级
`ionice`是Linux工具,用于调整进程的磁盘I/O优先级,改善系统响应。它设置三种I/O调度类:Idle(低优先级),Best-effort(默认)和Real-time(高优先级)。通过 `-c` 和 `-n` 参数分别设定调度类和优先级。示例:`ionice -c3 -n7 command`(低优先级I/O)和`ionice -c2 -p 1234`(改变PID为1234的进程为Idle类)。使用时注意平衡系统资源,避免干扰其他任务,并结合`iostat`、`iotop`监控性能。
|
弹性计算
阿里云服务器租用价格表,2024年5月最新报价整理
2024年5月,阿里云发布了最新的服务器租用价格表。其中,ECS云服务器2核2G3M带宽年费99元,ECS u1实例2核4G5M年费199元。轻量应用服务器香港30M带宽月费24元,年费288元。此外,还提供4核16G10M和8核32G10M的不同配置选项,价格分别为30元/月和109元/月起。阿里云服务器分为ECS和轻量应用服务器,当前优惠主要针对ECS。更多详细配置和价格可在官方页面查看。同时,阿里云有多种优惠活动,包括免费试用、学生优惠等,可在活动中心了解。
1104 9