• ARP 协议原理

    前面介绍网络层和 IP 协议时,有个问题被我们束之高阁——如何由 IP 地址找到与之对应的 MAC 地址呢?

    阅读全文
  • TCP 协议简介

    传输层引入了 端口port )的概念,很好地实现了进程间通信能力。我们已经学过这一层中的 UDP 协议,它是一种 面向数据报 的传输层协议。

    UDP 协议的局限性

    UDP 协议非常简单,它只是在 IP 协议的基础之上,加入 端口号 来区分收发进程,因此也有不少局限性。

    网络丢包

    我们知道,UDP 数据报需要借助 IP 包提供的点对点传输能力,从一台主机发往另一台主机。

    阅读全文
  • TCP 报文段格式

    上一小节,我们简单介绍了 TCP 协议的基本机制,但很多细节还来不及展开。此时此刻,我们甚至对 TCP 的传输单元长啥样都一无所知。不过没关系,本节我们再接再厉,争取将它一举拿下!

    报文结构

    由于 TCP 协议位于传输层,它的传输单元一般叫做 TCP段segment ),也可译为 TCP分组 。当然了,也有不少文献将它笼统地称为 TCP报文

    那么,一个 TCP 报文段的格式到底是怎样的呢?它跟 UDP 数据报又有哪些异同呢?

    与 UDP 数据报一样,TCP 报文也分为头部和数据两个部分。所不同的是,TCP 报文头部要比 UDP 复杂很多:

    阅读全文
  • 网络实验:观察ARP协议通信过程

    本节,我们用一个极简的局域网,来观察 ARP 协议的通信步骤,以此加深理解:

    实验环境由 Docker 容器提供,只需执行这个 docker 命令,即可一键启动:

    1
    
    docker run --name lan --rm -it --privileged --cap-add=NET_ADMIN --cap-add=SYS_ADMIN -v /data fasionchan/netbox:0.5 bash /script/lan.sh
    
    阅读全文
  • 三次握手,TCP连接的建立

    TCP 是面向连接的传输协议,因此通信双方必须先建立连接,才能传输数据。

    上一小节,我们已经初步学习了 TCP 三次握手建立连接的主要步骤,但有不少细节还来不及展开。现在我们再接再厉,先通过一个实验来观察三次握手的过程,进而深入研究其中的细节。

    观察三次握手过程

    如下图,局域网中有一台服务器,IP 地址是 10.0.0.2 ,其他主机可以通过 SSH 协议来登录服务器:

    阅读全文
  • ARP攻击

    前面我们学习了 ARP 协议,对它的工作原理和报文格式有了深入的了解。现在正是讨论 ARP攻击 的好时候,大家对 网络安全 这种高级话题应该更有兴趣吧!

    废话不多说,马上进入安全模式,带大家捋捋 ARP 攻击的来龙去脉:

    • ARP 攻击的原理是什么?
    • 如何发起 ARP 攻击?
    • 通过 ARP 攻击可以做什么?可以窃取信息吗?
    • 如何应对 ARP 攻击?

    ARP攻击原理

    由于 ARP 协议没有真伪校验机制,因此网络中的坏蛋可以发出一些假报文,来欺骗其他主机,以达到不可告人的目的。以下面这个网络为例:

    阅读全文
  • 四次挥手,TCP连接的关闭

    上一小节,我们通过一个实验,深入地研究了 TCP 三次握手建立连接的过程。

    我们退出 telnet 命令后,TCP 将关闭连接。于此同时,我们通过 tcpdump 也观察到 TCP 关闭连接的通信过程。本节,我们继续深入研究 TCP 关闭连接的通信细节。

    上节实验的通信过程,已经被抓包并保存起来,我们直接用 tcpdump 命令将其打开( tcp.pcap ):

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    root@client [ ~ ]  ➜ tcpdump -nr tcp.pcap
    reading from file tcp.pcap, link-type LINUX_SLL (Linux cooked v1)
    17:31:57.624391 ARP, Request who-has 10.0.0.2 tell 10.0.0.3, length 28
    17:31:57.624439 ARP, Reply 10.0.0.2 is-at 0e:bd:60:1c:69:9d, length 28
    17:31:57.624450 IP 10.0.0.3.55692 > 10.0.0.2.22: Flags [S], seq 386101196, win 29200, options [mss 1460,sackOK,TS val 811948031 ecr 0,nop,wscale 7], length 0
    17:31:57.624495 IP 10.0.0.2.22 > 10.0.0.3.55692: Flags [S.], seq 1155103769, ack 386101197, win 28960, options [mss 1460,sackOK,TS val 3541712191 ecr 811948031,nop,wscale 7], length 0
    17:31:57.624522 IP 10.0.0.3.55692 > 10.0.0.2.22: Flags [.], ack 1, win 229, options [nop,nop,TS val 811948031 ecr 3541712191], length 0
    17:31:57.635739 IP 10.0.0.2.22 > 10.0.0.3.55692: Flags [P.], seq 1:42, ack 1, win 227, options [nop,nop,TS val 3541712202 ecr 811948031], length 41
    17:31:57.635778 IP 10.0.0.3.55692 > 10.0.0.2.22: Flags [.], ack 42, win 229, options [nop,nop,TS val 811948042 ecr 3541712202], length 0
    17:31:59.808411 IP 10.0.0.3.55692 > 10.0.0.2.22: Flags [F.], seq 1, ack 42, win 229, options [nop,nop,TS val 811950215 ecr 3541712202], length 0
    17:31:59.809175 IP 10.0.0.2.22 > 10.0.0.3.55692: Flags [.], ack 2, win 227, options [nop,nop,TS val 3541714376 ecr 811950215], length 0
    17:31:59.809464 IP 10.0.0.2.22 > 10.0.0.3.55692: Flags [F.], seq 42, ack 2, win 227, options [nop,nop,TS val 3541714376 ecr 811950215], length 0
    17:31:59.809483 IP 10.0.0.3.55692 > 10.0.0.2.22: Flags [.], ack 43, win 229, options [nop,nop,TS val 811950216 ecr 3541714376], length 0
    
    阅读全文
  • QUIC 协议

    QUIC ,即 快速UDP网络连接 ( Quick UDP Internet Connections ), 是由 Google 提出的实验性网络传输协议 ,位于 OSI 模型传输层。 QUIC 旨在解决 TCP 协议的缺陷,并最终替代 TCP 协议, 以减少数据传输,降低连接建立延迟时间,加快网页传输速度。

    QUIC 主要特点有:

    • 多流设计;
    • 低等待延迟;
    • 加密性能更优;
    • 前向纠错;
    • 应用程序实现;
    • 连接保持;
    阅读全文