IP 协议的作用是什么?其在 TCP/IP 协议栈中的位置是什么?

IP协议全称为Internet Protocol,互联网协议。它的主要作用是实现网络层的数据包路由和转发。

IP协议在TCP/IP协议栈中的位置:
应用层(HTTP、FTP等)
传输层(TCP、UDP)
网络层(IP)
数据链路层(Ethernet等)
物理层

IP协议的主要功能:

  1. IP地址:使用32位IP地址对网络层数据报(IP数据报)进行标识、分类和寻址。
  2. 路由选择:根据IP数据报的目的IP地址选择合适的下一跳路由器。IP协议实现网络层的数据包转发。
  3. 段化和重组:将传输层产生的大的数据块分割成适合网络传输的IP数据报,并在目的主机上重新组合。
    4.差错检测:IP数据报头部包含校验和,可以在目的主机检测数据是否正确。

代码示例:

python
# IP数据报头部格式 
class IPHeader:
    def __init__(self, src, dst, protocol, total_length):
        self.version = 4             # 版本号      
        self.header_length = 20      # 头部长度    
        self.tos = 0                 # 服务类型  
        self.total_length = total_length   # 总长
        self.identification = 1      # 标识 
        self.flags = 0               # 标志  
        self.fragment_offset = 0     # 分段偏移
        self.ttl = 64                # 生存时间 
        self.protocol = protocol     # 协议(TCP、UDP)
        self.checksum = 0            # 校验和
        self.source = socket.inet_aton(src)    # 源IP地址
        self.destination = socket.inet_aton(dst)# 目的IP地址

# 给IP数据报计算校验和       
def checksum(data):  
    ...

# 封装IP数据报    
ip_header = IPHeader('192.168.1.1', '192.168.1.2', 6, 1000)  
ip_header.checksum = checksum(ip_header.pack())
ip_datagram = ip_header.pack() + data  

# 发送IP数据报  
sock.sendto(ip_datagram, ('192.168.1.2', 80))