Linux网络编程(1)——网络基础
网络:跨主机的 “进程间” 通信。
协议:一种彼此双方都认可的协议。
为什么分层?
网络协议非常复杂,不分层就太复杂了。
好处:
拆分成多个层,就是类似分成多个模块,同时降低了系统的耦合程度。
根据需要,可以随意替换其中的某一层协议
网络的协议分层:
OSI七层模型<只存在教科书中>:
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP/IP五层(四层)协议:
- 物理层:光电信号传输——以太网协议;集线器
- 链路层:相邻设备的数据传输——Ethernet;交换机
- 网络层:地址管理和路由选择——典型协议IP协议;路由器
- 传输层:负责端与端之间的数据传输——TCP/UDP
- 应用层:负责应用程序之间的数据沟通——HTTP/FTP
HTTP/TCP 这两个协议最重要的两个协议。
网络层和传输层都是操作系统由操作系统的内核实现的,内核提供了一组系统调用,供程序员来使用。程序员写的所谓的"网络程序",其实就是调用这些内核提供的传输层的系统调用(socket api),来完成应用层的程序。
一般来说:
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容。
对于一台路由器, 它实现了从网络层到物理层。
对于一台交换机, 它实现了从数据链路层到物理层。
对于集线器, 它只实现了物理层。
网络传输流程图:
网络中地址管理:
IP地址:
唯一标识一台主机
IP协议有两个版本, IPv4和IPv6。主要IPv4因为 6 成本太高,而且不兼容 IPv6 。
uint32_t (IPv4 版本的) 43亿。肯定不够,就会有特殊的分配地址的方式。
IPv6:uint8_t addr[16] 128位IP地址
每条数据都包含:源IP地址,目的IP地址