基本概念
为什么要学习网络协议
为了满足各种需求,有各式各样的网络协议(HTTPS、SMTP、MQTT、RTMP等)
随着物联网、音视频、直播等领域的发展,企业提高对开发人员网络基本功的要求,经常问网络协议的面试题
- TCP 和 UDP 的区别?说一下它们的报文格式?
- TCP 的流量控制和和拥塞控制?TCP 如何实现可靠性传输?
- 为什么连接是 3 次握手,关闭是 4 次挥手?
- 7 层模型与 4 层模型的区别?每一层的作用是什么?
- 交换机与路由器的区别?
环境搭建
客户端-服务器开发环境
- 客户端:浏览器(HTML+CSS+JS)
- 服务器:Java
网络抓包
- 浏览器(Chrome、Firefox)、Fiddler、Wireshark
模拟工具
- Xshell(只有Windows版)、Packet Tracer(注册地址)、GNS3
安装环境可能出现的问题
- 控制台乱码:3种方法完美解决 IntelliJ IDEA 控制台中文乱码问题
- Tomcat404问题:idea启动tomcat服务器访问资源404解决方法
跨平台的原理
Java 的跨平台:一次编译,到处运行。编译生成跟平台无关的字节码文件,由对应平台的 JVM 解析字节码为机器指令
C\C++ 的跨平台:使用平台相关的编译器生成对应平台的可执行文件
网络互连模型(OSI)
为了更好地促进互联网络的研究和发展,国际标准化组织 ISO 在 1985 年制定了网络互连模型
- OSI 参考模型(Open System Interconnect Reference Model),具有 7 层结构
- 物理层(Physical)
- 数据链路层(Data Link)
- 网络层(Network)
- 运输层(Transport)
- 会话层(Session)
- 表示层(Presentation)
- 应用层(Application)
请求过程
计算机之间的联系方式
- 首先需要得知对方的 IP 地址
- 最终是根据 MAC 地址(网卡地址),输送数据到网卡,被网卡接收
- 如果网卡发现数据的目标 MAC 地址是自己,就会将数据传递给上一层进行处理
- 如果网卡发现数据的目标 MAC 地址不是自己,就会将数据丢弃,不会传递给上一层进行处理
网络直连
- 需要用交叉线(不是直通线)
为什么右边会出现 3 个 ARP 包
- 实际上是一次完整的发送请求,接收响应的过程
同轴电缆(Coaxial)
- 半双工通信
- 容易冲突
- 不安全
- 中间断了,整个都瘫了
集线器(Hub)
集线器相比同轴电缆唯一的优点就是:哪怕连着集线器的某一个设备中间线路出问题,不会影响到连着集线器的其他设备
- 半双工通信
- 容易冲突
- 不安全
- 跟同轴电缆一样:没有智商(缓存)
网桥(Bridge)
- 能够通过自学习得知每个接口那侧的 MAC 地址
- 从而起到隔绝冲突域的作用
交换机(Switch)
全球所有的设备都用交换机连接:
- 他们必然处于同一网段,因此 IP 地址可能会不够用
- 即使使用交换机,第一次发送数据包仍然需要 ARP 广播,耗费大量时间
- 形成广播风暴,只要有一个设备发送 ARP 广播,全球设备都能收到
交换机
- 相当于接口更多的网桥
- 全双工通信
- 比集线器安全
路由器(Router)
网络直连、同轴电缆、网桥、交换机
- 连接的设备必须在同一个网段
- 连接的设备处在同一广播域
路由器
- 可以在不同网段之间转发数据
- 隔绝广播域