OSI网络七层模型

0. OSI网络七层模型

​ 为了使不同计算机厂家的计算机能够相互通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构标准。这个标准就是OSI 网络 七层 模型。
在这里插入图片描述
​ 分层的目的,就是让各个层次的人负责,每个人都能专注于自己的负责的领域

1 各层的主要功能

​ 物理层:使原始的数据比特流能在物理介质上传输(电,光等在网线间传递)

​ 数据链路层:通过校验、确认 和 反馈 重发等手段,形成稳定的数据链路。(在这一层中会将数据转化成 010101二进制的形式)(软硬结合的层次)

​ 网络层:进行路由选择和流量控制。(IP协议,可以定位到某一台具体服务器)(逻辑链路) (ping 这种指令都是基于网络层的指令)(网络层是一个逻辑链路,不是真实存在的)

​ 上述三层属于低三层,分层的目的,就是为了语言开发工程师屏蔽底层网络的复杂性。

​ 传输层:提供可靠的端口到端口的数据传输服务(TCP/UDP 协议等待)(承上启下的一个层次)(保证了跨进程,跨机器间的数据传递的准确性)(开发的应用大多数都是基于传输层进行开发的)

​ 会话层:负责建立、管理和终止进程之间的会话和数据交换。

​ 表示层:负责数据格式转换、数据加密与解密、压缩与解压缩等。

​ 应用层:为用户的应用进程提供网络服务。

​ 会话层,表示层,应用层 ,统称为高三层,也有另一种非规范分层,直接将这一层定义为应用层。

​ http服务器就是典型的高三层的具体体现,实现了高三层的功能,http协议,是基于TCP协议开发的一个应用层协议

​ 这里主要涉及的是一些计算机网络原理方面的知识。

2 传输控制协议TCP

​ 传输控制协议(TCP) 是Internet 一个重要的传输层的协议。TCP提供面向连接、可靠、有序、字节流传输服务。应用程序在使用TCP之前,必须先建立TCP连接。(面向连接,只在数据传递之前,需要建立起连接)

​ TCP数据报文格式如下:
在这里插入图片描述
在这里插入图片描述

3 TCP三次握手机制

在这里插入图片描述

​ TCP协议是在IP协议之上的一个端口到端口之间的协议,在数据传输之前,***最大程度***检测网路是否通畅。

​ 客户端首先会向服务端发送数据包,确认服务端是否能够提供正常的服务,服务端会针对客户端的某一次握手请求,进行相应的,然后客户端建立相应的连接(这里的建立连接,指的是提供安全稳定的网络传输的连接),服务端建立连接。

4 TCP四次挥手流程

在这里插入图片描述
​ 四次挥手流程(断开连接):

​ 客户端是向服务端请求数据的,而且挥手流程也是由客户端发起的。

​ 客户端会先向服务端发送断开连接的请求,然后服务端响应,并调整为半关闭状态,客户端接收到服务端的响应,处于等待释放的状态,然后服务端再次向客户端发送等待确认,客户端接收到服务端的等待确认后,改变状态处于等待状态,然后再给服务端一个响应,服务端接收到客户端的响应,关闭连接,客户端关闭。

5.UDP协议

​ UDP协议同样也是传输层协议。提供无连接、不可靠、数据报尽力传输服务。

​ UDP报文组成:

​ IP首部 + IP数据部分

​ IP数据部分 = UDP首部 + UDP数据部分

​ UDP数据部分 = 源端口号 + 目的端口号 + 发送数据长度 + 校验码 + 应用数据

​ 相对于TCP而言,在UDP协议上构建应用,有哪些优点呢?

​ 1.UDP应用进程更容易控制发送什么数据以及何时发送(TCP协议要建立在三次握手和四次挥手之间才能传输数据)

​ 2.UDP无需连接(TCP需要建立连接)

​ 3.UDP无连接状态 (TCP具有连接状态)

​ 4.UDP首部开销小 (TCP首部开销大)

6.TCP和UDP 比较

TCPUDP
面向连接无连接
提供可靠性保证不可靠
慢(相对于UDP)快(相对于TCP)
资源占用多资源占用少

​ TCP协议应用: 需要数据可靠性高的场景。 大部分接口(web – service)(app – service)

​ UDP协议应用:网络高性能,数据可靠性要求不高的,实时性要求较高的。 比如语音视频等应用的开发。物联网设备日志上报等,对于偶尔丢失一个数据包,影响不大的,就可以使用UDP协议。

7. Socket编程

​ Internet 中应用最广泛的网络应用编程接口,实现与3种底层协议接口:

​ 数据报类型套接字SOCK_DGRAM (面向UDP接口)

​ 流式套接字SOCK_STREAM (面向TCP接口)

​ 原始套接字SOCK_RAW(面向网络层协议接口IP、ICMP等)

​ 在操作系统底层提供的网络编程接口,无论是什么语言, 只要是需要用到网络,都会调用socket API

​ 主要socket API 及其调用过程

​ 创建套接字 --> 端点绑定 --> 发送数据 --> 接收数据 --> 释放套接字

​ 而Java 中的 socket ,以及 bio / nio 等 api 就是 jdk 帮我们 封装的对底层 socket 操作 的工具

8. SocketAPI函数定义

​ listen() 、accept() 函数只能用于服务器端;

​ connect() 函数只能用于客户端;

​ socket()、 bind() 、 send() 、 recv() 、 sendto() 、 recvfrom() 、close() 通用函数

​ 这些函数是底层操作系统提供的API,这些API 大多都是用C语言去实现,在java中,使用的大多是,jdk已经封装好的,对这些函数的调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值