19.网络编程之网络基础概念
学习目标
-
了解OSI七层、TCP/IP四层模型结构
-
了解常见网络协议格式
-
掌握网络字节序和主机字节序之间的转换(大端法和小端法)
-
说出TCP服务器端通信流程
-
说出TCP客户端通信流程
-
独立写出TCP服务器端代码
-
独立写出TCP客户端代码
1.网络基础概念
1.1协议
概念: 协议事先约定好,大家共同遵守的一组规则, 如交通信号灯。从应用程序的角度看,协议可理解为数据传输和数据解释的规则;可以简单的理解为各个主机之间进行通信所使用的共同语言。
假设,A、B双方欲传输文件。规定:
第一次: 传输文件名,接收方接收到文件名,应答OK给传输方;
第二次: 发送文件的尺寸,接收方接收到该数据再次应答一个OK;
第三次: 传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。
这种在A和B之间被遵守的协议称之为原始协议,后来经过不断增加完善改进,最终形成了一个稳定的完整的传输协议,被广泛应用于各种文件传输,该协议逐渐就成了一个标准协议。
1.2分层模型
OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。
网络分层 OSI 7层模型:物数网传会表应
▶物理层---双绞线,光纤(传输介质),将模拟信号转换为数字信号
▶数据链路层---数据校验,定义了网络传输的基本单位-帧
▶网络层---定义网络,两台机器之间传输的路径选择点到点的传输
▶传输层---传输数据 TCP,UDP,端到端的传输
▶会话层---通过传输层建立数据传输的通道.
▶表示层---编解码,翻译工作。
▶应用层---为客户提供各种应用服务,email服务,ftp服务,ssh服务
OSI7层模型:
物数网传会表应
应用层: 主要就是应用程序,ftp ssh email http
表示层: 进行编解码和翻译工作
会话层: 建立会话和保持会话
传输层: 定义了端端端的传输,TCP UDP协议
网络层: 定义了点到点的传输,IP协议----路由器
数据链路层: 数据校验,定义了数据格式--帧,ARP协议 RARP协议
物理层: 通信介质-双绞线,光纤 调制解调器modemn(模数转换和数模转换)
1.3 数据通信过程
通信过程:其实就是发送端层层打包,接收方层层解包。
注意:这些操作不是用户自己做的,而是底层帮我们做好的。
数据通信过程:
在发送方是数据层层打包过程,在接收方是层层解包过程。
1.4 网络应用程序的设计模式
▶CS设计模式优缺点:
优点:
客户端在本机上可以保证性能,可以将数据缓存到本地,提高数据的传输效率,提高用户体验效果。
客户端和服务端程序都是由同一个开发团队开发,协议选择比较灵活。
缺点:
服务器和客户端都需要开发,工作量相对较大,调试困难,开发周期长;
从用户的角度看,需要将客户端安装到用户的主机上,对用户主机的安全构成威胁。
▶BS设计模式优缺点:
优点:
无需安装客户端, 可以使用标准的浏览器作为客户端;
只需要开发服务器,工作量相对较小;
由于采用标准的客户端,所以移植性好,不受平台限制。
相对安全,不用安装软件
缺点:
由于没有客户端,数据缓冲不尽人意,数据传输有限制,用户体验较差;
通信协议选择只能使用HTTP协议,协议选择不够灵活;
1.5 以太网帧格式
以太网帧格式就是包装在网络接口层(数据链路层)的协议
以ARP为例介绍以太网帧格式
目的端mac地址是通过发送端发送ARP广播,接收到该ARP数据的主机先判断是否是自己的IP,若是则应答一个ARP应答报文,并将mac地址填入应答报文中;若目的IP不是自己的主机IP,则直接丢弃该ARP请求报文。
详细讲解ARP协议
IP段格式
协议版本: ipv4,ipv6
16位总长度: 最大65536
8位生存时间ttl(网络连接下一跳的次数):为了防止网络阻塞
32位源ip地址,共个4字节!我们熟悉的ip都是点分十进制的,4字节,每字节对应一个点分位,最大为255 ,实际上就是整形数!
32位目的ip地址
8位协议:用来区分上层协议是TCP、UDP、ICMP还是IGMP协议。
16位首部校验和:只校验IP首部,数据的校验由更高层协议负责。
UDP数据报格式
通过IP地址来确定网络环境中的唯一的一台主机;
主机上使用端口号来区分不同的应用程序。
IP+端口唯一确定唯一一台主机上的一个应用程序。
TCP数据流格式:
稳定的, 安全的,可靠的
序号:TCP是安全可靠的,每个数据包都带有序号, 当数据包丢失的时候,需要重传,要使用序号进行重传。控制数据有序,丢包重传。
确认序号:使用确认序号可以知道对方是否已经收到了,通过确认序号可以知道哪个序号的数据需要重传。
16位窗口大小--滑动窗口(主要进行流量控制)