详解网络协议栈--IP协议

本文详细介绍了网络的分层模型,从物理层的光电信号传输到应用层的HTTP、FTP等协议。重点讲解了数据链路层的以太网帧结构,网络层的IP协议,以及IP头部各个字段的含义。同时,提到了IP协议提供无连接、不可靠的服务,并在局域网中通常被封装在以太网帧中传输。

1. 网络分层模型

image

1.1 物理层
  • 传输的是光电信号
    • 双绞线(电信号)
    • 光纤(光信号)
1.2 网卡
  • 处于物理层和数据链路层之间,不属于网络分层模型中的任何一层
  • 作用是负责A/D转换和数据搬运
    • 接收数据时将光电信号转换成数字信号
    • 发送数据是将数字信号转换成光电信号
    • 网卡芯片负责数据转换,网卡驱动负责搬运数据
1.3 数据链路层
  • 传输的是数字信号(二进制数据)
  • 以太网数据帧结构

image

  • 以太网帧头:MAC地址只有在局域网内有效,出了局域网就无效了
//以太网帧头 14字节
struct ethhdr {
    unsigned char  dstmac[6];   //目的mac地址
    unsigned char  srcmac[6];   //源mac地址
    unsigned short proto;       //上一层协议类型,0x0800代表上一层是IP协议
};
  • 以太网帧尾
// 以太网帧尾 4字节
struct ethtail {
    unsigned int checksum;      //数据帧尾校验和
};
1.4 网络层
  • IP协议
1.5 传输层
  • TCP协议
  • UDP协议
1.6 应用层
  • HTTP、FTP、RTP/RTSP/RTCP 等

2. IP协议

IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的服务,依赖其他层的协议进行差错控制。在局域网环境,IP协议往往被封装在以太网帧中传送,所有的TCP、UDP数据都被封装在IP数据报中传送。

2.1 IP头部

image

  • 头部封装
// IP头 20字节
struct iphdr {
    unsigned char  version:4,   //版本信息
                   hdrlen:4;    //头长度
    unsigned char  tos;         //服务类型
    unsigned short length;      //数据包长度
    unsigned short id;          //数据包标识
    unsigned short flag:3,      //数据包标志
                   offset:13;   //片偏移
    unsigned char  ttl;         //生存时间
    unsigned char  proto;       //协议
    unsigned short checksum;    //头部校验和
    unsigned int   src_ip;      //源IP
    unsigned int   dst_ip;      //目的IP    
};
  • 字段解释
    • 版本:用来表明IP协议实现的版本号,当前一般为IPv4,即0100
    • 头部长度:是头部占32比特的数字,包括可选项。普通IP数据报,该字段的值是5,即160bit=20字节 此字段最大值为60字节
    • 服务类型:
      • 前3bit为优先权子字段,现已被忽略,第8bit保留未用
      • 4-7bit分别代表延迟、吞吐量、可靠性和花费。当它们取值为1时分别代表要求最小时延、最大吞吐量、最高可靠性和最小费用
      • 服务类型声明数据报被网络系统传输时的处理方式,其中只能置其中1bit为1,可以全为0,若全为0则表示一般服务
        • TELNET协议可能要求有最小的延迟,
        • FTP协议(数据)可能要求有最大吞吐量
        • SNMP协议可能要求有最高可靠性
        • NNTP(Network News Transfer Protocol,网络新闻传输协议)可能要求最小费用
        • ICMP协议可能无特殊要求(4比特全为0)
            - 总长度:指明整个数据报的长度(以字节为单位),最大长度为65535字节
    • 标识:用来唯一地标识主机发送的每一份数据报,通常每发一份报文,它的值会加1
    • 标志:标志一份数据报是否要求分段
      • X(保留)
      • D(不分片)
      • M(分片)
    • 片偏移:如果数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置
    • 生存期:用来设置数据报最多可以经过的路由器数。由发送数据的源主机设置,通常为32、64、128等。每经过一个路由器,其值减1,直到0时该数据报被丢弃
    • 协议类型:指明IP层所封装的上层协议类型,如ICMP(1)、IGMP(2)、TCP(6)、UDP(17)
    • 头部校验和:内容是根据IP头部计算得到的校验和码。计算方法是:对头部中每个16比特进行二进制反码求和。(和ICMP、IGMP、TCP、UDP不同,IP不对头部后的数据进行校验)
    • 源IP地址、目标IP地址:各占32比特。用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址
        - 可选项字段:用来定义一些任选项:如记录路径、时间戳等。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值