

一、操作位置
写的代码 100% 都是应用层,网络操作并不是跟随数据包随层部署执行的,而是始终站全局能跃层部署执行的。
二、通信路径
1. 单工
一条单向固定通道,永远只能某向通信。
2. 半双工
一条双向互通通道,一时间只能在进行一向通信。
3. 全双工
两条互逆的单向固定通道,可以同时进行双向通信。
三、丢包现象
物理信号干扰篡改、设备转发上限或接收方处理不过来的数据转接拥塞丢弃造成数据混乱就是丢包。
四、协议类型
1. UDP
面向 DatagramPacket 的通信。
1.1 单位
面向数据包 Packet 单位。
1.2 存储
四元组:源 + 目的 IP,源 + 目的端口号存储在 DatagramPacket 对象里面。
1.3 操作者
DatagramPacket 操作它包对象里面存储的通信标识。
1.4 不可靠
1.4.1 信号干扰时
UDP 头部的校验和计算发现丢包后结束丢弃数据包。
1.4.2 转接拥塞时
UDP 无视数据转接时的拥塞状态始终以恒定速率发包不管丢弃。
2. TCP
面向 Socket 的通信。
2.1 单位
面向字节流 Stream 单位。
2.2 存储
五元组:源 + 目的 IP,源 + 目的端口号,协议号、序列号、对方接收窗口大小存储在内核内存中的 TCB 结构体里面。
2.3 操作者
Socket 存的文件描述符 fd 交由内核操作对应 TCB 里面存储的通信标识。
2.4 可靠
2.4.1 信号干扰时
TCP 头部的校验和计算发现丢包后接收方丢弃数据包、不发回复 ACK 直到发送方等待超时后重发新包。
2.4.2 转接拥塞时
TCP 会缩小发送窗口来降低发送速率以减少丢弃。
五、服务接口
网络协议栈中,下层都会为上层提供服务接口。
1. Socket 文件
操作系统把传输层及以下层的硬件抽象成 Socket 文件,传输层把 Socket 文件交应用层,给针对指向。
1.1 DatagramPacket
DatagramPacket 是网卡接手的压缩五层网络数据的快递包裹,里面填写有:
| 源 IP | 本机站点地址 |
|---|---|
| 目的 IP | 对机站点地址 |
| 源端口 | 本机存储单类货物间的入门号 |
| 目的端口 | 对机存储单类货物间的入门号 |
1.2 DatagramSocket
DatagramSocket 是运输货物系统,在构造时搭起在源端口号的本机货物房间。
2. Socket API
操作系统把传输层及以下层的内核操作封装成 Socket API,传输层把 Socket API 交应用层,给指挥执行:
应用层代码调用 Socket API 时会触发程序中断,执行权限从应用层的用户态转变成操作系统的内核态执行传输层及以下层的内核操作。
2.1 DatagramSocket API
2.1.1 搭起房间
2.1.1.1 服务器
能看见自己主机端口分布的服务器适合自定义选择端口号搭起,在指定源端口搭起本机货物房间开启运输货物系统。
2.1.1.2 客户端
未探明用户主机端口分布的客户端适合由操作系统随机分配空闲端口号搭起,在随机空闲源端口搭起本机货物房间开启运输货物系统。
2.1.2 接收包裹
运输系统接收二进制数据覆进网卡数据包,接收为空则进入阻塞等待。
2.1.3 发送包裹
运输系统发送网卡数据包里的二进制数据。
2.2 DatagramPacket API
2.2.1 制造包裹
构造五层压缩的网卡数据包,指定字节数组起始 + 长度部分为应用层数据包、目的 IP、目的端口号。
2.2.2 提取包裹
2.2.2.1 应用层数据包
网卡数据包获取里面的字节数组形式的应用层数据包。
2.2.2.2 应用层数据包的字节长度
网卡数据包获取里面的字节数组形式的应用层数据包的字节长度。
2.2.2.3 源 IP
网卡数据包获取里面的源 IP。
2.2.2.4 目的 IP
网卡数据包获取里面的目的 IP。
2.2.2.5 源端口
网卡数据包获取里面的源端口。
2.2.2.6 目的端口
网卡数据包获取里面的目的端口。
2.2.2.7 目的 IP+ 目的端口
网卡数据包获取里面的目的 IP+ 目的端口。
转化
- String->InetAddress:将 String 字符串转为 InetAddress IP 地址。
- InetAddress->String:将 InetAddress IP 地址转为 String 字符串。



