IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 网络通信协议的发展及socket/netty理解 -> 正文阅读

[系统运维]网络通信协议的发展及socket/netty理解

一:网络通信诞生

诞生于冷战期间,起源于美国军方,发展行对成熟后,交予大学及商业机构,开发出民用网络。

二:核心协议发展

ARPANET(ARPA网)
最初的军事研究使用的网络,网络交换的核心是使用专门的小型计算机执行消息交换,专门的计算机被称为接口信息处理器(IMP)。

IMP间使用电话线连接,同时期还有英国、法国等国家发展不同类型的计算机网络。

NPC(网络控制协议)
随着网络的发展,互联的趋势增强。基于互联的需求,发展出了“数据包交换”的数学理论,使用数据包交换成为计算机之间通过网络通信的基本方式,如果进行具体的通信则涉及网络协议。最初的网络协议,称为网络控制协议,即NCP。

MAC
当多个用户同时发送信息的时候,会发生“碰撞”,好比教室里几个人同事大声说话,没人能听清楚说了什么。此时需要一个算法规范来约束,因此产生了MAC--介质访问控制。

以太网、CSMA/CD
基于MAC改进,使用电缆线把局部的计算机连接起来,构成一个局域网,称为以太网。以太网(Ether)描述这个系统的本质特征:物理介质(如网线)传播数字电信号。

改进MAC,减少碰撞的算法--如果碰撞了,同时闭口n秒再说话,而这个n是随机数。例如,你和小明同时发,碰撞了,两个人同时退1s,再发送,还是碰撞,但是,如果你选了一个随机数1,退1秒,他选一个随机数3,退3秒,这样就避开了。改进后的介质访问控制协议称为CSMA/CD。 ? ? ?

TCP/IP
在之前的网络通信,都是在一个局域网中通信。互联网的不断发展,推进产生了不同子网的相互连接通信--开放架构网络概念:互联网对每一个子网没有特别的要求,现有的网络不做任何改变就可以连入互联网;网络必须能够处理数据包传输丢失的情况,一个数据包丢失之后应该随即重发;子网之间通过网关和路由器连接;此外,网络中不存在全局的控制。

由此

IMP进化为TIP(更强大的中断接口处理器)
?
NCP+数据包丢失重发,进化出TCP
?
不同子网间连接,产生IP

三:网络硬件如何连接

国际互联网-->NAP(网络接入节点)-->NSP(网络服务商)-->ISP(本地网络服务商)-->用户网络

中国的互联网通过海底电缆和美国的互联网连接。接入的网络由国家的网络服务商的通信基础设置构建国内的骨干网,再通过地方的网络服务商构建的网络连接到用户

宏观上分为三个部分:1/和国际互联网连接 2/建立国内的骨干网 3/用户接入网络

四:通讯介质

电缆线-->光纤、无线电波、卫星、星链

光纤:使用光的折射原理

无线电波:电磁波传输原理。常用技术为调幅、调频、调相

卫星:电磁波

五:网络七层模型

物理层
解决问题:实现两台机器互联,机器和机器之间是怎么通信?

1.两台机器互联的物理链路,物理介质。网线(双绞线)光纤、无线电波---基本连接

2.存在形式:01001二进制形式存在,电信号、比特流

数据链路层
解决问题:01010比特流其实是没有什么意思的数据,变成有意义的数据呢?确认这个数据是发给我的呢?

比特流进行处理:分组。8位为一组,一个字节,依次按顺序发送数据。

数据格式:帧

定义发送地址,MAC地址---网卡--身份证,唯一的。寄件人地址(源MAC地址)----收件人地址(目的MAC地址)

网络层
解决问题:主机A-B-C-D-E--主机F??路径很多条,怎么选择最优路?要怎么知道对方的MAC地址?

怎么知道对方的MAC地址? ---ARP协议(address resolution Protocol),通过IP地址知晓MAC地址

判断是否在同一个子网,怎么判断?---IP协议

路径很多,怎么选择最优路径?---一组协议 路由协议,动态路由协议(RIP,OSPF,BGP)。

数据格式:数据包

传输层
解决问题:发送数据多,数据包很大需要很长时间??中间网络中断,重传??数据包是否完整的,正确的?

对发送的数据进行封装---TCP协议,UDP协议,使数据包一个一个按顺序依次发送

两个应用通信(qq--qq),怎么判断是用qq来回应的呢,而不是其他应用程序呢,-----定义端口的概念,通过端口寻找对应的程序,对应的进行数据处理。

会话层
解决问题:断点续传功能

可以从校验点继续恢复数据进行重传,适用大文件

自动收发,自动寻址的功能

表示层
解决问题:操作系统win mac linux 语法不一样,不同系统之间进行通信

翻译工作,提供一种公共语言,通信。

应用层
解决问题:字节流格式,不好识别,不好操作。

定义了各种应用协议,规范数据格式: HTTP协议,HTTPs协议,FTP协议,DNS协议,TFTP,SMTP协议等等

六:HTTP和TCP/IP协议的关系

我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上

七:Java Socket网络编程概述

Java的网络编程主要涉及到的内容是Socket编程。Socket,套接字,就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。

应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

Socket,实际上是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的关系,Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现,只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、accept、send、read和write等等。网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:

“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。

实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。socket是对端口通信开发的工具,它要更底层一些。

八:Socket编程流程

??(6条消息) 一篇文章带你了解网络编程(总结)_Dec_tail的博客-CSDN博客_网络编程

Socket编程主要涉及到客户端和服务端两个方面,首先是在服务器端创建一个服务器套接字(ServerSocket),并把它附加到一个端口上,服务器从这个端口监听连接。(端口号的范围是0到65536,但是0到1024是为特权服务保留的端口号,我们可以选择任意一个当前没有被其他进程使用的端口)

客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。

九:Netty网络编程框架理解(很有见解)

Netty 框架文档 - 掘金

问题:

现在我们使用通用应用程序或库来相互通信。例如,我们经常使用HTTP客户端库从Web服务器检索信息并通过Web服务调用远程过程调用。但是,通用协议或其实现有时不能很好地扩展。这就像我们不使用通用HTTP服务器来交换大量文件,电子邮件和近实时消息(如财务信息和多人游戏数据)。

我们所需要的是高度优化的协议实现,专用于特殊目的。例如,您可能希望实现针对基于AJAX的聊天应用程序,媒体流或大文件传输进行优化的HTTP服务器。您甚至可以设计并实施一个完全根据您的需求量身定制的全新协议。

另一个不可避免的情况是,您必须处理传统的专有协议,以确保与旧系统的互操作性。在这种情况下,重要的是我们能够多快地实现该协议,同时不牺牲最终应用程序的稳定性和性能。

解决方案:

Netty项目旨在为可维护的,高性能的,高可扩展性的协议服务器和客户端的快速开发提供异步事件驱动的网络应用程序框架和工具。(简单理解使用Netty开发自己专属的协议服务器和客户端,实现http协议的痛点)

换句话说,Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。Netty极大地简化并简化了TCP和UDP套接字服务器开发等网络编程。

“快速简便”并不意味着最终的应用程序会受到可维护性或性能问题的影响。 Netty经过精心设计,具有丰富的协议实施经验,如FTP,SMTP,HTTP以及各种基于二进制和文本的遗留协议。因此,Netty成功地找到了一种在不妥协的情况下实现易于开发,性能,稳定性和灵活性的方法。

一些用户可能已经找到了声称具有相同优势的其他网络应用程序框架,您可能想问一下是什么让Netty与它们如此不同。答案是建立在它上面的哲学。从第一天开始,Netty旨在为您提供API和实施方面最舒适的体验。这不是有形的东西,但你会意识到,当你阅读本指南并与Netty一起玩时,这种理念将使你的生活更轻松。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-20 23:09:26  更:2022-06-20 23:10:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:45:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码