一.网络通信的核心

1.1实现数据从主机A传到主机B跨网络传输(手段)

数据通过处理输出,完成请求或者应答的目的来解决网络,最终达到服务于人的需求。

1.2网络通信过程中产生的问题以及对用TCP/IP层次

(1)数据在两个相邻的设备上进行传递

物理层:最底层,管的是比特流怎么在物理介质上传输。网线,光纤,无线电波这些都是物理层的东西。

数据链路层:把比特流组织成帧,用MAC地址在局域网内寻址,还负责差错检测,以太网,PPP协议在这层

此问题主要涉及上述两层将数据帧在两个主机之间进行可靠传递。

(2)目标主机定位和路径选择的问题

网络层:管的是跨网络传输,用IP地址寻址,负责路由选择。IP协议,ICMP协议在这层。

此问题问的网络层的职责通过寻找IP地址和路由器,确定数据从源到目的的最佳路径。

(3)如果出现了数据丢失的情况怎么办?

传输层:提供端到端的通信,管的是进程级别的通信。TCP提供可靠传输,UDP提供快速,但不保证可靠的传输

传输层的目的便是处理数据丢失,重复,乱序等问题。

(4)使用数据的目的,如何处理这个数据  

应用层:最上层,直接跟用户打交道。HTTP,FTP,SMTP,DNS这些都是应用层协议。

应用层的职责:定义数据格式和语义,完成具体的请求/应答(如HTTP,FTP等),实现业务目的。

1.3解决网络通信问题的方案——TCP/IP协议

二.TCP/IP五层(或四层)模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求

物理层:负责光/电信号的传递方式,比如现在以太网通用的网线(双绞,线),早期以太网采用的同轴电缆(现在主要用于优先电视),光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率,传输距离,抗干扰性等,集线器(Hub)工作在物理层

数据链路层:负责设备之间数据帧的传送和识别,例如网卡设备的驱动,帧同步(就是从网线上检测到什么信号算作新帧的开始),冲突检测(如果检测到冲突就自动重发),数据差错校验等工作,有以太网,令牌环网,无线LAN等标准,交换机(Switch)工作在数据链路层

网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输线路(路由),路由器(Router)工作在网络层。

传输层:负责两台主机之间的数据传输,如传输控制协议(TCP),能够确保数据可靠地从源主机发送到目标主机。

应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等,我们地网络编程主要就是针对应用层

三.OSI七层模型

四.网络分层的必要性

1.描述事件:主机B想向主机C发送消息,经过路由器R,涉及主机A,C,D

2.图标中实体的职责分析

主机B(发送方),主机C(接收方),路由器R(中间设备),主机A和D(网络中的其他节点)

3.中途遇到的问题怎样解决

(1)目标主机C和主机B距离太远,我要发送数据给主机C,得先发送路由器上,如何到达呢?

链路层/物理层

(2)网上这么多主机,怎么定位并找到主机C?(如何寻址/定位找到主机C?)       网络层(IP)

(3)如果我的数据发出去,丢失了?怎么办?(问的是可靠性)   传输层(TCP)

(4)发数据不是目的,只是手段,用数据才是目的,主机C怎么知道我发出去的数据该怎么被处理,被使用呢?(问的是数据处理,C收到数据后如何/使用?) 应用层(HTTP/FTP等)

总结:协议分层解决了不同性质,不同种类的问题,分层之后关注点分离,灵活,互操作性高。

五.TCP/IP协议和操作系统的关系

(1)标准化

上图有明确指向OS可以不同(如Windows),但是协议栈必须相同。这表明,无论是Windows,Linux还是macOS,只要大家把TCP/IP协议栈的实现标准统一了,哪怕底层硬件和操作逻辑千差万别,数据也能无障碍流通

(2)标准化与开源实现的关系

标准化不等同于代码统一。例如:Linux内核用的是自研TCP实现,windows用的是Dual-Stack架构,代码完全不同,但都严格遵循RFC 793(TCP)和RFC791(IP)的规定。标准管的是“网络包长什么样”和“收到包该怎么做”,而不是“内核代码该怎么写”。

(3)同层之间的协议是可以互相认识对方的协议的(类似快递单的例子)

主机A的传输层打包了一个结构体struct protocol(里面装着a=10,b=20,c=30)。

主机B的传输层收到这一堆二进制后,因为自己也认识 struct protocol,所以会拆开,取出10,20,30

主机B的应用层或者网络层,根本不用管这个结构体里面装的是什么,引文不同层不需要认识。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐