网络层

简介: 网络层

网络层是 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): 功能:负责将原始比特流分割成帧并添加地址信息,以便在直接连接的设备之间传输数据。 示例设
4940 0
|
XML Java 应用服务中间件
一文了解Tomcat
Tomcat是一个开放源代码的Java Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范。由于Tomcat是一个Java应用程序,它可以在多个操作系统上运行,如Windows、Linux和Mac OS等。Tomcat的主要作用是提供一个运行Java Web应用程序的环境。它可以处理从客户端发送的HTTP请求,并将请求传递给相应的Java Servlet或JSP进行处理。Servlet和JSP是用Java编写的服务器端组件,用于生成动态的Web内容。
1265 4
|
搜索推荐 云计算
在线教育平台
在线教育平台
1410 3
|
域名解析 存储 Java
一步步教你搭建自己的云服务器
一步步教你搭建自己的云服务器
|
存储
【机组期末速成】指令系统|机器指令概述|操作数类型与操作类型|寻址方式|指令格式
【机组期末速成】指令系统|机器指令概述|操作数类型与操作类型|寻址方式|指令格式
487 1
|
算法 安全 数据安全/隐私保护
散列值数据完整性验证
散列值数据完整性验证
594 11
|
域名解析 缓存 网络协议
TCP传输层详解(计算机网络复习)
本文详细解释了TCP/IP协议族的分层模型、各层的功能、TCP报文的格式以及TCP连接建立的三次握手和断开的四次挥手过程。
1933 2
TCP传输层详解(计算机网络复习)
|
弹性计算
阿里云服务器租用价格表,2024年5月最新报价整理
2024年5月,阿里云发布了最新的服务器租用价格表。其中,ECS云服务器2核2G3M带宽年费99元,ECS u1实例2核4G5M年费199元。轻量应用服务器香港30M带宽月费24元,年费288元。此外,还提供4核16G10M和8核32G10M的不同配置选项,价格分别为30元/月和109元/月起。阿里云服务器分为ECS和轻量应用服务器,当前优惠主要针对ECS。更多详细配置和价格可在官方页面查看。同时,阿里云有多种优惠活动,包括免费试用、学生优惠等,可在活动中心了解。
1744 9
|
安全 网络协议 网络安全
应用层常见的协议有哪些?
应用层常见的协议有哪些?
3210 1
|
自然语言处理 监控 搜索推荐
使用 LangChain 创建高度互动和智能的聊天机器人
【8月更文第3天】随着自然语言处理(NLP)技术的进步,聊天机器人已成为企业和用户之间互动的重要渠道。LangChain 是一个强大的框架,旨在简化构建复杂语言模型应用程序的过程。本文将详细介绍如何使用 LangChain 框架创建高度互动和智能的聊天机器人,包括选择合适的语言模型、设计对话流程、上下文管理以及集成外部API和服务等内容。
749 0