【译】漫谈网络

462 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情


现将目录贴下:

  • 什么是socket
  • IP地址、struct以及地址转换
    • IP地址,IPv4和IPv6
    • 字节序
    • struct结构
    • 再谈IP地址
  • 从IPv4迁移到IPv6
    • IP地址,IPv4和IPv6
    • 字节序
    • struct结构
    • 再谈IP地址
  • System call 或 Bust
    • getaddrinfo()—准备开始!
    • socket()—拿到文件描述符!
    • bind()—我在监听哪个端口?
    • connect()—嘿,你好啊!
    • listen()—会有人联系我吗?
    • accept()—感谢呼叫3490端口
    • send() and recv()—跟我唠唠吧,宝儿!
    • sendto() and recvfrom()—用DGRAM风格跟我说话
    • close() and shutdown()—滚犊子!
    • getpeername()—你哪位?
    • gethostname()—我是谁?
  • Client-Server基础
    • 一个简单的流服务器
    • 一个简单的流客户端
    • Datagram Sockets
  • 技术进阶
    • Blocking—何谓阻塞?
    • poll()—同步的I/O多路复用
    • select()—老古董的同步I/O多路复用
    • 数据只传了一部分怎么办?
    • Serialization-如何封装数据?
    • 数据封装
    • 广播数据包-大声说「Hello,World」

学习计算机怎么能不谈网络分层呢。下面我们就简单了解一下网络是怎样工作的,并且举一些如何SOCK_DGRAM 封包的例子。

实际上,如果你可以跳过这一节内容,不过,这一节能帮你很好的了解网络背景,有一定的参考意义。

2022-10-01-012138.png

现在是时候了解一下*Data Encapsulation*(数据封装)了,它实在实在是非常重要!即便如此,在大部分的网络课程的学习中,所占的笔墨并不算多。

一般情况下,我们会这么讲:

你发送的数据构成了最初始的数据包,然后将数据包封装到应用层协议(比如TFTP协议)的header中,然后将封装之后的包再次封装到下一个协议(UDP)中,再接着被封装到下一个协议(IP协议),最终被硬件层面的通讯协议(以太网协议)封装。

接收方接收到数据后,硬件层会拆掉以太网headerfooter,操作系统内核会拆开 IPUDP header,最后由应用层程序TFTP 解开TFTP header,最终获取到用户数据。

2022-10-01-080343.png

接下来终于可以聊一聊声名狼藉的网络分层模型(Layered Network Model),也就是 "ISO/OSI"了。

说它声名狼藉,是因为所有入门计算机网络的人首先学习的便是这个分层模型,而对刚接触网络的小白而言很难对分层有很深的理解和感悟,只能是死记硬背,最终的结果就是应付考试而已。

20世界70年代后期,国际标准化组织(ISO)提出计算机网络应该组织为大概7层,并称之为开放系统互连(OSI)模型。事实上,OSI模型的创建者提出这个模型的时候并没有联想到如今使用的因特网,但并不妨碍OSI模型到如今依然适用,这便是抽象的能力。

OSI模型将网络分层为:

  • 应用层
  • 表示层
  • 会话层
  • 传输层
  • 网络层
  • 链路层
  • 物理层

但是这种分层实在是过于繁琐,因此现在介绍网络分层,一般都是拿TCP/IP协议栈来进行说明。

  • 应用层(比如telnetftp等)
  • 传输层(TCPUDP等)
  • 网络层(IPICMP以及IGMP
  • 网络接口层(以太网wi-fi等)

每一层分别负责不同的通信功能:

  1. 应用层负责处理特定应用程序的细节。比如对用户消息的加密解密操作、按照特定格式对数据进行组装或解析等。
  2. 传输层主要为两台主机上的应用程序提供端到端的通信。所谓的端到端,就是能找到真正处理数据包的两个进程。举个例子就是快递能够保证送货上门,而不只是送到小区驿站。
  3. 网络层,用于主机之间的路由,就是只负责找到对应的主机。
  4. 网络接口层,有时候也被称为数据链路层或链路层,通常包括操作系统中的设备驱动程序和计算机的网卡设备,它们一起处理与物理传输媒介的通信细节。