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地址