网络编程-osi七层模型
网络编程-osi网络编程
基础概念
网络建立的目的
网络建立的目的是为数据交互(通信)
如何实现通信
- 建立好底层的物质连接介质
- 有一套统一的通信标准,称之为互联网协议
互联网协议:
就是计算机互相交流的语言,计算机界的英语
OSI七层协议
ip+mac可以标识全世界范围内独一无二的一台计算机的位置
port可以标识一台计算机之上唯一的一个基于网络通信的应用软件
ip+mac+port:可以标识全世界范围内独一无二的一个应用软件(基于网络通信)
须知一个完整的计算机系统是由硬件、操作系统、应用软件三者组成。
如果你要跟别人一起玩,那你就需要上网了,什么是互联网?
互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语
如果把计算机比作人,互联网协议就是计算机界的英语。所有的计算机都学会了互联网协议,那所有的计算机都就可以按照统一的标准去收发信息从而完成通信了。
人们按照分工不同把互联网协议从逻辑上划分了层级
每层运行常见的物理设备
以太网封装过程
1.数据包封装过程:
⑦用户在应用层进行文件传输的操作
⑥在表示层把我们的动作和命令翻译成计算机识别的微码,提供数据
⑤CPU 读取文件调用到内存
④要传输的数据在数据层进行数据分片,每片数据最大为 1500 字节。
对数据封装成段,打上段头(段头中包含源端口、目的端口、传输协议 TCP 戒 UDP)
目的端口号 1-1023,源端口号 1024-65535
比如 Telnet(远程登录)协议常用端口:23 HTTP(WEB 页面)协议常用端口:80
数据被转换成数据段,发送主机和目标主机之间建立一条可靠连接(创建虚链路以建立可靠对话)
③数据段传输到网络层,封装成包(包头中包含源 IP、目的 IP、协议号:用来标识上层的应用服务)
②数据包传输到链路层,封装成帧,打上帧头(包含源 MAC、目的 MAC 和类型标示位 0X0800:为哪一个上层提供封装寻址)
① 数据编码成数据信号流通过光戒电的方式传递出去
2.数据包解封过程:
① 比特合并成字节,再将字节封装成帧。
② 进行拆封,先看帧尾再看帧头
③ 拆封,识别目的 IP 和协议号(核对计算机是否有该协议)
④ 核对序列号和端口号,对数据进行重组
⑤ 读取文件调用到内存
⑥ 转换成电脑识别的信息
⑦ 显示到用户窗口
各层次解析
1.物理层
物理层就是网络的硬件设备:中继器,集线器,双绞线
2.数据链路程
由来:单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思
功能:定义了电信号的分组方式
以太网协议
早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet
以太网规定:
- 要有一个块网卡,网卡上要有一个独一无二的地址(mac地址)
- 一组电信号构成一个数据包,也叫做'帧'
- 每一数据帧分成报头head和数据data两部分
head包括:固定18个字节
-
发送者/源地址,6个字节
-
接收者/目标地址,6个字节
-
数据类型,6个字节
data包括:最短46字节,最长1500字节
数据包的具体内容
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
mac地址:
head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址
mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号
广播
有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)
ethernet采用最原始的方式,广播的方式进行通信,即计算机通信基本靠吼
例如:有4台主机, 分别为1号主机,2号主机,3号主机,4号主机. 假如1号主机 要给4号主机发数据! 如果是用广播传输方法的话! 那么4台主机都会收到数据包! 4台主机 在收数据包的时候 会查看数据包里的目标IP地址是不是自已的,是的话就收下,不是就不收!
故障:广播风暴
3.网络层
网络层由来:有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由
一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,
这就不仅仅是效率低的问题了,这会是一种灾难
因此:
必须找出一种方法来区分哪些计算机属于同一广播域,哪些不是,如果是就采用广播的方式发送,如果不是,
就采用路由的方式(向不同广播域/子网分发数据包),mac地址是无法区分的,它只跟厂商有关
网络层功能:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址
# IP协议:
规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
范围0.0.0.0-255.255.255.255
一个ip地址通常写成四段十进制数,例:172.16.10.1
# ip地址分成两部分(点分十进制)
网络部分:标识子网
主机部分:标识主机
注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网
例:172.16.10.1与172.16.10.2并不能确定二者处于同一子网
# 子网掩码
所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.10.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。
知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。
比如,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,
172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
AND运算又叫做"按位与"运算,符号:"&",在编程术语中表示一种运算方法,不可逆
172.16.10.2:10101100.00010000.00001010.000000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是172.16.10.0,因此它们在同一个子网络。
总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络
# ip数据包
ip数据包也分为head和data部分,无须为ip包定义单独的栏位,直接放入以太网包的data部分
head:长度为20到60字节
data:最长为65,515字节。
而以太网数据包的”数据”部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。
172.16.10.1
10101100.00010000.00001010.00000001
172.16.10.2
10101100.00010000.00001010.00000010
255.255.255.0
11111111.11111111.11111111.00000000
### 按位与运算
172.16.10.1
10101100.00010000.00001010.00000001
11111111.11111111.11111111.00000000
10101100.00010000.00001010.00000000
172.16.10.2
10101100.00010000.00001010.00000010
11111111.11111111.11111111.00000000
10101100.00010000.00001010.00000000
1&1=1
1&0=0
0&1=0
0&0=0
# ARP协议(Address Resolution Protocol)
arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到
通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
协议工作方式:每台主机ip都是已知的
例如:主机172.16.10.10/24访问172.16.10.11/24
4.传输层
传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,然后大家使用的都是应用程序,你的电脑上可能同时开启qq,暴风影音,等多个应用程序,
那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
传输层功能:建立端口到端口的通信
补充:端口范围0-65535,0-1023为系统占用端口
TCP三次握手
tcp四次挥手
TCP协议的11种状态
三次握手中:
1.SYN_SENT # 客户端发送SYN建立连接时状态
2.LISTEN # 服务端等待客户端连接时,监听状态
3.SYN_RCVD # 服务端返回ACK和SYN给客户端时的状态
4.ESTABLISHED # 客户端和服务端建立连接时的状态
四次挥手中:
1.FIN_WAIT_1 # 客户端发送FIN断开连接时的状态
2.CLOSE_WAIT # 服务端接收到客户端的断开连接时返回ACK的状态
3.FIN_WAIT_2 # 客户端接收服务端返回ACK时的状态
4.LAST_ACK # 服务端发送FIN给客户端时的状态
5.TIME_WAIT # 客户端返回ACK给服务端,断开连接后的状态
关闭状态:
1.CLOSED(被动关闭端在接收到ack包后,进入CLOSED状态关闭TCP连接)
2.CLOSING(客户端和服务端同时发起断开连接)
5.会话层
1.建立会话:A、B两台网络设备之间要通信,要建立一条会话供他们使用,在建立会话的过程中也会有身份验证,权限鉴定等环节;
2.保持会话:通信会话建立后,通信双方开始传递数据,当数据传递完成后,OSI会话层不一定会立刻将两者这条通信会话断开,它会根据应用程序和应用层的设置对该会话进行维护,在会话维持期间两者可以随时使用这条会话传输局;
3.断开会话:当应用程序或应用层规定的超时时间到期后,OSI会话层才会释放这条会话。或者A、B重启、关机、手动执行断开连接的操作时,OSI会话层也会将A、B之间的会话断
6.表示层
表示层主要三大功能:
1.内码转换
2.压缩与解压缩
3.加密与解密
7.应用层
应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式
应用层功能:规定应用程序的数据格式。
例:TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”