网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)

简介: 网络编程【网络编程基本概念、 网络通信协议、IP地址 、 TCP协议和UDP协议】(一)-全面详解(学习总结---从入门到深化)

网络编程基本概念


计算机网络


计算机网络是指将地理位置不同的具有独立功能的多台计算机及其 外部设备,通过通信线路连接起来,在网络操作系统,网络管理软 件及网络通信协议的管理和协调下,实现资源共享和信息传递的计 算机系统。


从其中我们可以提取到以下内容:


1 计算机网络的作用:资源共享和信息传递。


2 计算机网络的组成:


   计算机硬件:计算机(大中小型服务器,台式机、笔记本等)、外部设备(路由器、交换机 等)、通信线路(双绞线、光纤等)。

  计算机软件:网络操作系统(Windows 2000 Server/Advance Server、Unix、Linux等)、 网络管理软件(WorkWin、SugarNMS等)、网络通信协议(如TCP/IP协议栈等)。  


网络通信协议



什么是网络通信协议


通过计算机网络可以实现不同计算机之间的连接与通信,但是计算 机网络中实现通信必须有一些约定即通信协议,对速率、传输代 码、代码结构、传输控制步骤、出错控制等制定标准。


国际标准化组织(ISO,即International Organization for Standardization)定义了网络通信协议的基本框架,被称为OSI (Open System Interconnect,即开放系统互联)模型。要制定通 讯规则,内容会很多,比如要考虑A电脑如何找到B电脑,A电脑在 发送信息给B电脑时是否需要B电脑进行反馈,A电脑传送给B电脑的 数据格式又是怎样的?内容太多太杂,所以OSI模型将这些通讯标准 进行层次划分,每一层次解决一个类别的问题,这样就使得标准的 制定没那么复杂。


OSI模型制定的七层标准模型,分别是:应用层, 表示层,会话层,传输层,网络层,数据链路层,物理层。


OSI七层协议模型:


网络协议的分层


虽然国际标准化组织制定了这样一个网络通信协议的模型,但是实 际上互联网通讯使用最多的网络通信协议是TCP/IP网络通信协议。 TCP/IP 模型,也是按照层次划分,共四层:应用层,传输层,网络 层,网络接口层(物理+数据链路层)。 OSI模型与TCP/IP模型的对应关系:


数据封装与解封


数据封装(Data Encapsulation)是指将协议数据单元(PDU)封 装在一组协议头和协议尾中的过程。在OSI七层参考模型中,每层主 要负责与其它机器上的对等层进行通信。该过程是在协议数据单元 (PDU)中实现的,其中每层的PDU一般由本层的协议头、协议尾 和数据封装构成。


数据发送处理过程


1 应用层将数据交给传输层,传输层添加上TCP的控制信息(称为TCP头部),这个数据单元称 为段(Segment),加入控制信息的过程称为封装。然后,将段交给网络层。

2 网络层接收到段,再添加上IP头部,这个数据单元称为包(Packet)。然后,将包交给数据链 路层。

3 数据链路层接收到包,再添加上MAC头部和尾部,这个数据单元称为帧(Frame)。然后, 将帧交给物理层。

4 物理层将接收到的数据转化为比特流,然后在网线中传送。


数据接收处理过程


1 物理层接收到比特流,经过处理后将数据交给数据链路层。

2 数据链路层将接收到的数据转化为数据帧,再除去MAC头部和尾部,这个除去控制信息的过 程称为解封,然后将包交给网络层。

3 网络层接收到包,再除去IP头部,然后将段交给传输层。

4 传输层接收到段,再除去TCP头部,然后将数据交给应用层。


从以上传输过程中,可以总结出以下规则:


1 发送方数据处理的方式是从高层到底层,逐层进行数据封装。

2 接收方数据处理的方式是从底层到高层,逐层进行数据解封。


接收方的每一层只把对该层有意义的数据拿走,或者说每一层只能 处理发送方同等层的数据,然后把其余的部分传递给上一层,这就 是对等层通信的概念。


数据封装与解封:


数据封装


数据解封


IP地址



IP是Internet Protocol Address,即"互联网协议地址"。 用来标识网络中的一个通信实体的地址。通信实体可以是计算机、 路由器等。 比如互联网的每个服务器都要有自己的IP地址,而每个 局域网的计算机要通信也要配置IP地址。 路由器是连接两个或多个网络的网络设备。


IP地址分类:



目前主流使用的IP地址是IPV4,但是随着网络规模的不断扩大, IPV4面临着枯竭的危险,所以推出了IPV6。


IPV4,采用32位地址长度,只有大约43亿个地址,它只有4段 数字,每一段最大不超过255。随着互联网的发展,IP地址不够 用了,在2019年11月25日IPv4位地址分配完毕。 IPv6采用128位地址长度,几乎可以不受限制地提供地址。按保 守方法估算IPv6实际可分配的地址,整个地球的每平方米面积 上仍可分配1000多个地址。


IP地址实际上是一个32位整数(称为IPv4),以字符串表示的IP地 址如 192.168.0.1 实际上是把32位整数按8位分组后的数字表示,目的是 便于阅读。 IPv6地址实际上是一个128位整数,它是目前使用的IPv4的升级版, 以字符串表示类似于 2001:0db8:85a3:0042:1000:8a2e:0370:7334  


公有地址


公有地址(Public address)由Inter NIC(Internet Network Information Center互联网信息中心)负责。这些IP地址分配给注 册并向Inter NIC提出申请的组织机构。通过它直接访问互联网。


私有地址


私有地址(Private address)属于非注册地址,专门为组织机构内 部使用。 以下列出留用的内部私有地址

A类 10.0.0.0--10.255.255.255

B类 172.16.0.0--172.31.255.255

C类 192.168.0.0--192.168.255.255


注意事项


1、127.0.0.1 本机地址

2、192.168.0.0--192.168.255.255为私有地址,属于非注册地址,专门为组织机构内部使用


端口port


端口号用来识别计算机中进行通信的应用程序。因此,它也被称为 程序地址。 一台计算机上同时可以运行多个程序。传输层协议正是利用这些端 口号识别本机中正在进行通信的应用程序,并准确地进行数据传 输。


总结


1、IP地址好比每个人的地址(门牌号),端口好比是房间号。必须同时指定IP地址和端口号才 能够正确的发送数据。

2、IP地址好比为电话号码,而端口号就好比为分机号。


端口分配


端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端 口,可以在一个主机上运行多个网络应用程序。 端口的表示是一个 16位的二进制整数,对应十进制的0-65535。 操作系统中一共提供了0~65535可用端口范围。 按端口号分类:

公认端口(Well Known Ports):从0到1023,它们紧密绑定 (binding)于一些服务。通常这些端口的通讯明确表明了某种服务 的协议。例如:80端口实际上总是HTTP通讯。

注册端口(Registered Ports):从1024到65535。它们松散地绑 定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同 样用于许多其它目的。例如:许多系统处理动态端口从1024左右开 始。


URL


URL作用:


URL(Uniform Resource Locator),是互联网的统一资源定位 符。用于识别互联网中的信息资源。通过URL我们可以访问文件、 数据库、图像、新闻等。 在互联网上,每一信息资源都有统一且唯一的地址,该地址就叫 URL,URL由4部分组成:协议 、存放资源的主机域名、资源文件名 和端口号。如果未指定该端口号,则使用协议默认的端口。例如 http 协议的默认端口为 80。 在浏览器中访问网页时,地址栏显示 的地址就是URL。 在java.net包中提供了URL类,该类封装了大量复杂的涉及从远程站 点获取信息的细节。


Socket


我们开发的网络应用程序位于应用层,TCP和UDP属于传输层协 议,在应用层如何使用传输层的服务呢?在应用层和传输层之间, 则是使用套接字Socket来进行分离。


套接字就像是传输层为应用层开的一个小口,应用程序通过这个小 口向远程发送数据,或者接收远程发来的数据;而这个小口以内, 也就是数据进入这个口之后,或者数据从这个口出来之前,是不知 道也不需要知道的,也不会关心它如何传输,这属于网络其它层次 工作。


Socket实际是传输层供给应用层的编程接口。Socket就是应用层与 传输层之间的桥梁。使用Socket编程可以开发客户机和服务器应用 程序,可以在本地网络上进行通信,也可通过Internet在全球范围 内通信。


TCP协议和UDP协议


TCP协议

TCP(Transmission Control Protocol,传输控制协议)。TCP方 式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专 门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则 客户端会自动重发该数据。


TCP在建立连接时又分三步走:


n 第一步,是请求端(客户端)发送一个包含SYN即同步 (Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用 的端口以及TCP连接的初始序号。

n 第二步,服务器在收到客户端的SYN报文后,将返回一个 SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加 一,ACK即确认(Acknowledgement)。

n 第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序 列号被加一,到此一个TCP连接完成。然后才开始通信的第二步: 数据处理。 n 这就是所说的TCP的三次握手(Three-way Handshake)。


UDP协议


UDP(User Data Protocol,用户数据报协议)


UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地 把它扔到网络上。 在发送端,UDP传送数据的速度仅仅是受应用程 序生成数据的速度、 计算机的能力和传输带宽的限制; 在接收端, UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息 段。


UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需 要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户 端无法获得。 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络 条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网 络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些 实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP  


TCP和UDP区别


这两种传输方式都在实际的网络编程中使用,重要的数据一般使用 TCP方式进行数据传输,而大量的非核心数据则可以通过UDP方式 进行传递,在一些程序中甚至结合使用这两种方式进行数据传递。 由于TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使 用TCP方式的速度稍微慢一些,而且传输时产生的数据量要比UDP 稍微大一些。


总结


TCP是面向连接的,传输数据安全,稳定,效率相对较低。

UDP是面向无连接的,传输数据不安全,效率较高。

目录
相关文章
|
19天前
|
域名解析 网络协议 关系型数据库
tcp和udp的区别是什么
TCP和UDP是互联网协议中的传输层协议。TCP是面向连接的,通过三次握手建立可靠连接,提供数据顺序和可靠性保证,适用于HTTP、FTP等需要保证数据完整性的应用。UDP则是无连接的,数据报独立发送,传输速度快但不保证可靠性,常用于实时通信、流媒体和DNS解析等对速度要求高的场景。根据应用需求选择合适的协议至关重要。
tcp和udp的区别是什么
|
22天前
|
移动开发 网络协议 安全
网络面试题:什么是 TCP/IP?
网络面试题:什么是 TCP/IP?
41 0
网络面试题:什么是 TCP/IP?
|
4天前
|
网络协议 安全 网络性能优化
|
6天前
|
域名解析 监控 网络协议
Linux网卡与IP地址:通往网络世界的通行证 🌐
探索Linux网卡与IP地址关系,理解网卡作为网络通信的关键。Linux网卡需配置IP地址以实现唯一标识、通信、路由、安全管理和网络服务。无IP地址时,网卡在特定情况如局域网服务、网络监控、无线认证和网络启动可有限工作,但通用功能受限。配置IP地址通常通过`ifconfig`(传统)或`ip`(现代)命令,永久配置需编辑网络配置文件。配置错误如IP冲突、子网掩码错误、默认网关和DNS配置不当可能导致服务中断、网络拥堵、安全漏洞和数据丢失。重视网络配置的正确与安全至关重要。
Linux网卡与IP地址:通往网络世界的通行证 🌐
|
14天前
|
缓存 网络协议 数据库连接
【底层服务/编程功底系列】「网络通信体系」深入探索和分析TCP协议的运输连接管理的核心原理和技术要点
【底层服务/编程功底系列】「网络通信体系」深入探索和分析TCP协议的运输连接管理的核心原理和技术要点
8 0
|
26天前
|
机器学习/深度学习 数据采集 人工智能
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
32 0
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的火焰烟雾检测系统matlab仿真
基于yolov2深度学习网络的火焰烟雾检测系统matlab仿真
|
1月前
|
机器学习/深度学习 算法 计算机视觉
m基于深度学习网络的性别识别系统matlab仿真,带GUI界面
m基于深度学习网络的性别识别系统matlab仿真,带GUI界面
26 2
|
26天前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
机器学习/深度学习 算法 数据库
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱