互联网协议
arminzheng Lv2

总体思路

  • 网络接口层

    • 0、1 电信号
    • 以太网协议
    • 帧 Frame(以太数据包):
      • 标头 head 18 B (头部 14 + 尾部:冗余校验码 FCS 4)Frame check sequence
        以太帧结构(格式)
      • 数据 data 46 ~ 1500 B (数据很长就分多个帧)(总共 64 ~ 1518 B)
      • 前同步码:用来使接收端的适配器在接收 MAC 帧时能够迅速调整时钟频率,使它和发送端的频率相同。前同步码为 7 个字节,1 和 0 交替。
      • 帧开始定界符:帧的起始符,为 1 个字节。前 6 位 1 和 0 交替,最后的两个连续的 1 表示告诉接收端适配器:“帧信息要来了,准备接收”。
    • MAC 地址:48 位 = 6 B = 12 个十六进制数表示(6 对),前 6 个十六进制(3 对)是厂家编号,后 6 个(3 对)是该厂家的网卡流水号(用来定位网卡和数据包的路径)
    • ARP 协议:网卡知道网卡的 MAC 地址
      • 所查询主机的 IP,在对方 MAC 地址一栏填的是 FF:FF:FF:FF,表示这是一个广播
      • 它所在子网络的每一台主机,都会收到这个数据包,从中取出 IP 地址,与自身的 IP 地址进行比较。如果两者相同,都做出回复,向对方报告自己的 MAC 地址,否则就丢弃这个包。
  • 网络层

    • 网络地址(子网络)
    • IP 协议(32 位)
      • 子网掩码(ip AND 掩码 == 网络部分)
    • IP 数据包
      • Head: 20~60
      • Data: 65535 - Head
      • 标头和数据放进帧的数据里面(可以分多个帧)
    • “网络层”的功能是建立”主机到主机”的通信。
  • 传输层

    • 端口:不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

    • “传输层”的功能,就是建立”端口到端口”的通信。

    • 只要确定主机和端口,我们就能实现程序之间的交流。主机+端口,叫做”套接字”(socket)。

    • UDP 协议

      • UDP 数据包,也是由”标头”和”数据”两部分组成。
      • “标头”部分主要定义了发出端口和接收端口 8 字节 Bit
      • “数据”部分就是具体的内容。总长度不超过 65535 字节 Bit

      img

      • 以太数据包 头 + IP 数据包 头 + UDP 数据包 头
    • TCP 协议

      • 有确认机制的 UDP 协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。
      • TCP 数据包和 UDP 数据包一样,都是内嵌在 IP 数据包的”数据”部分。TCP 数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常 TCP 数据包的长度不会超过 IP 数据包的长度,以确保单个 TCP 数据包不必再分割。
  • 应用层

    • TCP 协议可以为各种各样的程序传递数据,比如 Email、WWW、FTP 等等。那么,必须有不同协议规定电子邮件、网页、FTP 数据的格式,这些应用程序协议就构成了”应用层”。
      img

用户角度

  • 以太网标头需要知道:

    • 对方的 MAC 地址
    • 对方的 IP 地址
  • 但不在同一子网,无法知道对方 MAC 地址,必须通过 Gateway 网关转发

  • 上网设置

    • 静态 IP 地址
      • 本机的 IP 地址
          * 子网掩码
        • 网关的 IP 地址
        • DNS 的 IP 地址
    • 动态 IP 地址
      • DHCP 协议(应用层协议)
        • 不知道对面的 MAC 地址:就设置对方 MAC 地址为广播地址(FF-FF-FF-FF-FF-FF)
        • 我方对方的 IP 地址都不知道:就设置我方:0.0.0.0;对方 255.255.255.255
        • 双方端口:协议规定好了,我方:68,对方:67
        • 由于 MAC 地址是广播,每个都收到,但 IP 地址是 0….、255….DHCP 知道 ”这是发给我的“ ,其他计算机都丢弃。
        • DHCP 服务器读出数据,分配好 IP,发回一个 DHCP 响应包
          • 结构为:以太网标头的 MAC 地址是双方的网卡地址,IP 标头的 IP 地址是 DHCP 服务器的 IP 地址(发出方)和 255.255.255.255(接收方),UDP 标头的端口是 67(发出方)和 68(接收方),分配给请求端的 IP 地址和本网络的具体参数则包含在 Data 部分。
          • 计算机收到响应包,就知道了自己的 IP 地址、子网掩码、网关地址、DNS 服务器等参数。
  • 实例:访问一个网站

    • DNS 协议:已知 DNS 服务器为 8.8.8.8,于是我们向这个地址发送一个 DNS 数据包,53 端口。网址会转换为 IP 地址,得到响应,我们就知道对方的 IP 地址。

    • 子网掩码,判断是否为一个网段,不为一个网段,就必须通过网关的转发,于是接收方 MAC 地址将是本机网关的 MAC 地址。

    • 应用层协议:HTTP 协议。请求头请求体等,假定长度为 4960 字节,将会被嵌入到 TCP 数据包中。

    • TCP 协议:接收方默认端口为 80 端口,本机端口是一个随机生成的 1024~65535 之间的整数,假定为 51755。加入一个 TCP 数据包 20 字节,总大小+20,4980 字节

    • IP 协议:TCP 数据包嵌入 IP 数据包,会设置双方 IP 地址。IP 数据包的标头长度为 20 字节,加上嵌入的 TCP 数据包,总长度变为 5000 字节。

    • 以太网协议:IP 数据包嵌入以太数据包,需要设置 MAC 地址,设置本机 MAC 地址,接收方设置为网关 192.168.1.1 的 MAC 地址(通过 ARP 协议得到,也就是广播获得的 MAC 地址)
      image

    • 服务端响应

      • 通过多个网关转发,网站服务器收到 4 个以太网数据包。
      • 根据 IP 标头的序号,将 4 个包拼起来,读取出完整的 TCP 数据包,读出请求,作出响应,再用 TCP 协议发回来。
      • 本机收到响应后,就可以将网页显示出来了,通信完成。

三次握手

  • SYN(synchronous 建立连接) (标志位 1 bit) 最后一次握手 SYN 不为 1 是不消耗序号的
  • ACK(acknowledgement 确认)
  • PSH(push 传送)
  • FIN(finish 结束)
  • RST(reset 重置)
  • URG(urgent 紧急)

以上是标志位


以下是序号和确认号

  • Sequence number (seq 序号)
  • Acknowledge number (AN 确认号) 是对方的序号。如果占用己方序号和对方确认号都加一
  • ack 确认报文段不占用序号,只有三种情况需要占用
    • 1、syn=1
    • 2、fin=1
    • 3、携带数据一个字节占用一个序号
  • 序号和确认号是相对的,seq 表示上次发送的数据量,an 代表上次接收的数据量(都是累加还算上初始值)
  • [ip 首部 + ip 数据部分{ tcp 首部 + 数据部分 } ]
  • ip 数据部分包含 tcp 包(8位倍数的可选项,如果未达到 32 则进行填充)

img