#来自 woshigzp
1 基本概要
需要记住的基本知识点:
分用就是,从底层来的数据,看看它的端口号,然后对应发送到上层
- 一个故事
tcp 的前身是 ncp ,这是一个半双工的协议,所以留着2个端口才行,后来有了tcp ,但是还保留这那些奇数端口用。
2 数据链路层
040520181056
以太网 的 封装 最短64, 最长1500字节;一般我们的路由器就是发这个协议的包。比如:
- ARP的包:知道ip,要得到mac地址;
- RARP:知道mac,想要找对应的ip地址。
802封装 现在比较少见。
经典的网络协议可能是使用802.3封装的
环回接口
https://blog.csdn.net/TODD911/article/details/21180777
大多数的产品都支持环回接口(lookback interface),以允许运行在同一台主机上的客户程序和服务器通过TCP/IP进行通信。
A类网络号127就是为环回接口预留的。大多数系统把IP地址127.0.0.1分配给这个接口,并命名为localhost。一个传给环回接口
的IP数据报不能在任何网络上出现。
MTU and path MTU
**注意:**每次遇到出口mtu的限制,就会拆分比较大的包;在最后的c端才会有报文的组装
所谓路径MTU就是这条链路上的最小的MTU, 对应上图,就是600;以它来发送的话,就没有分包的发生。
3 网络层IP
几乎你知道的都是IP流量: TCP, HTTP, TELNET…
arp, appleTalk…是非IP的流量
IP precedence/TOS位/DSCP位
IP总长度不超过65535字节:ping of death 攻击 win 98
040620181214
一个IP 报文 的举例
用scapy 发送一个IP pkt
p_join = Ether(dst='01:00:5e:00:00:16', src='ff:ff:ff:ff:ff:ff') / IP(src='172.20.210.139', dst='172.20.210.22', tos=0xc0)
p_join.show()
sendp(p_join,iface='en4')