IP协议全称为Internet Protocol,互联网协议。它的主要作用是实现网络层的数据包路由和转发。
IP协议在TCP/IP协议栈中的位置:
应用层(HTTP、FTP等)
传输层(TCP、UDP)
网络层(IP)
数据链路层(Ethernet等)
物理层
IP协议的主要功能:
- IP地址:使用32位IP地址对网络层数据报(IP数据报)进行标识、分类和寻址。
- 路由选择:根据IP数据报的目的IP地址选择合适的下一跳路由器。IP协议实现网络层的数据包转发。
- 段化和重组:将传输层产生的大的数据块分割成适合网络传输的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))