网络编程与OSI模型
一、网络编程简介
1.什么是网络编程
基于网络编程代码,能够实现数据的远程交互
2.学习网络编程的目的
能够开发cs架构的软件
3.网络编程的发展史
网络编程起源于美国军事,主要是想实现远程数据传输
而要想实现远程通信,第一个需要具备的条件就是:物理连接介质
4.网络编程必备条件
(1)数据的远程交互
1)早期的电话 --> 依赖于电话线
2)早期的电脑 --> 网线
3)笔记本电脑、移动电话 --> 网卡
综上,可以发现实现数据的远程交互必备的基础条件是物理连接介质
二、OSI七层协议模型简介
0.操作系统基础
操作系统OS,是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行
计算机(硬件)--> os --> 应用软件
1.osi七层协议模型
Orders Sources Identification Technology
(1) osi七层协议规定的内容概括:
1)所有的计算机在远程数据交互的时候必须经过相同的处理流程
2)计算机在制造过程中必须拥有相同的功能硬件
(2)osi七层协议模型:应、表、会、传、网、数、物
这个模型把网络通信的工作分为7层,分别物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
1至4层被认为是低层,这些层与数据移动密切相关。
5至7层是高层,包含应用程序级的数据。每一层负责一项具体的工作,然后把数据传送到下一层
常见的是整合之后的tco/ip五层或者tco/ip四层:
(3)接收网络消息,数据由下往上传递;发送网络消息,数据由上往下传递
2.osi七层协议之物理层
第1层是物理层(也即[OSI模型]中的第一层也是最底层),物理层实际上就是布线、光纤、网卡和其它用来把两台网络通信设备连接在一起的东西。
物理连接层:主要用于确保计算机之间的物理连接介质 -->接收的数据都是二进制格式(在python中为bytes类型、二进制)
3.osi七层协议之数据链路层
第2层是数据链路层,作用是将数据帧转换成而二进制位供1层处理。最重要的是我们应该理解网桥是什么,交换机可以看作是网桥,网桥仅关注以太网上的MAC地址。
数据链路层:
1)规定了电信号的分组方式
2)以太网协议 :规定了计算机在出厂的时候都必须有一块网卡,网卡上有一串数字;该数字相当于上计算机的身份证号码是独一无二的;该数据的特征(以太网地址/MAC地址)是12位16进制数据(前六位产商编号,后六位流水线号码)
4.osi七层协议之网络层
第3层是网络层,网络层的作用就是选择合适的网间路由和交换结点, 确保数据及时传送,网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息-->源站点和目的站点地址的网络地址。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。
(1)IP协议:规定了所有接入互联网的计算机都必须有一个IP地址,类似于身份证号
MAC地址是物理地址,可以看成是永远无法修改的
IP地址是动态分配的,不同的局域网内IP地址是不同的
IP地址特征:可以跨局域网传输,可以用来标识接入互联网的计算机
IPV4:点分十进制
0.0.0.0 - 255.255.255.255
总共42个IP地址
IPV6:点分十六进制
(2)ARP协议:即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。其工作原理如下:ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成以太网数据包,最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出包头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
(3)路由协议:如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,然后再通过ARP获取目标机MAC,最终也是通过广播形式将数据包发送给接收方。而完成这个路由协议的物理设备就是路由器,路由器扮演着交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。
5.osi七层协议之传输层
第4层是处理信息的传输层,第4层的数据单元也称作数据包(packets,第4层提供端对端的通信管理。
(1)PORT协议(端口协议):
给应用程序分配端口号,通过端口号来标识一台计算机上面的某一个应用程序
端口号的范围:0-65535
端口号的特征:动态分配
端口号建议:
端口号:0-1023 系统默认需要使用
端口号:1024-8000 常见软件的端口号
(2)URL:统一资源定位符
uniform resource locator
网址:本质是由IP和PORT组成的
IP+PORT:能够定位全世界独一无二的一台计算机上面的某一个应用程序
(3)域名解析:将网址解析成IP+PORT
IP:PORT ip地址:端口
180.101.49.13:80 --> 百度的IP地址:百度的PORT端口
(4)TCP与UDP协议
TCP与UDP协议规定通信方式(数据交互的方式),彼此之间通信要有通信的通道,双方都必须能和对方发消息
1)TCP协议:三次握手建链接,四次挥手断链接
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
三次握手建链接:
1. TCP协议也称为可靠协议,数据不容易丢失,造成数据不容易丢失的原因不是因为有双向通道,根本原因是因为有反馈机制。
2.反馈机制:TCP协议,在发送消息的过程中,会将消息复制一份副本,直到对方回应消息收到后反馈才会删除副本,否则会在一定时间内反复发送(反馈机制有时间限制,超过这个时间限制也会删除副本)。
3.洪水攻击:同一时间有大量的客户端请求建立链接,会导致服务端一直处于SYNZ_RCVD状态(避免洪水攻击,可以在服务端前建立缓冲池,分流用户请求)
4.服务端如何区分建立链接的请求:seq = x 表示不同的客户端请求的标识,区分不同的客户端请求
步骤三和步骤四可以合并成一步,一起发送消息,即允许又请求
四次挥手断链接:
1.步骤2和步骤3不能合并为一步,因为中间需要确认消息是否发完(时间等待期TIME_WAIT)
步骤2和步骤3是
listen:监听态 SYN_RCVD:洪水攻击后的状态
TIME_WAIT:时间等待,确认消息是否发完
Seq 表示:序列号Sequence Number - SN
ACK表示:确认序列号Acknowledgment Number字段有意义
PSH表示:Push功能,RST表示复位TCP连接
SYN表示SYN报文(在建立TCP连接的时候使用)
FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)
2)UDP协议:
不可靠协议,也称为数据报协议
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
早期的QQ使用的是纯生的UDP协议,现在的QQ自己添加了很多技术和功能
相对TCP更加简单、便捷,没有三次握手四次挥手洪水攻击等等
6.osi七层协议之应用层
应用层相当于是程序员自己写的应用程序,里面的协议非常多,常见的有HTTP、HTTPS、FTP等等等等
三、网络相关专业名词
计算机之间想要实现数据集交互必须要‘连接’到一起
1.交换机
能够将计算机互连在一起
2.广播
首次查找接入同一个交换机的其他计算机,需要进行广播
3.单播
首次被查找的计算机回应查找它的计算机,叫做单播
4.广播风暴
接入同一台交换机的多台计算机同时进行广播
5.局域网
单个交换机组成的网络,可以看作是一个局域网;同一个局域网中的计算机,可以基于MAC地址作数据交互(不是一个局域网无法直接通过MAC地址访问)
6.广域网
可以简单的理解为范围更大的局域网
7.互联网
由所有的局域网、广域网连接到一起形成的网络
互联网 <-- 广域网 <-- 局域网
8.路由器
不同的局域网之间是无法直接实现数据交互的,需要路由器连接并分配ip地址 (路由器可以实现不同局域网之间的数据交互)
路由器:常见路由器、基站(4G 5G网络)
9.网关Gateway
网关(Gateway)又称网间连接器、协议转换器。
网关在网络层以上实现网络互连,是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间。仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。
网关是一个翻译器,网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同层--应用层