网络编程(TCP与UDP协议)

news2024/12/24 2:22:43

文章目录

    • 1. 网络编程
      • 1.1 软件架构
      • 1.2 网络基础
    • 2. 网络通信要素
      • 2.1 如何实现网络中的主机互相通信
      • 2.2 通信要素一:IP地址和域名
        • 2.2.1 IP地址
        • 2.2.2 域名
      • 2.3 通信要素二:端口号
      • 2.4 通信要素三:网络通信协议
    • 3. 传输层协议:TCP与UDP协议
      • 3.1 TCP协议与UDP协议
      • 3.2 三次握手
      • 3.3 四次挥手

1. 网络编程

Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。

Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库,程序员面对的是一个统一的网络编程环境

1.1 软件架构

  • C/S架构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、美团app、360安全卫士等软件。

在这里插入图片描述

B/S架构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有IE、谷歌、火狐等。

在这里插入图片描述

两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。

1.2 网络基础

  • 计算机网络:
    把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。

  • 网络编程的目的: 直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。

  • 网络编程中有三个主要的问题:

    • 问题1:如何准确地定位网络上一台或多台主机
    • 问题2:如何定位主机上的特定的应用
    • 问题3:找到主机后,如何可靠、高效地进行数据传输

2. 网络通信要素

2.1 如何实现网络中的主机互相通信

  • 通信双方地址
    • IP
    • 端口号
  • 一定的规则:不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议,即网络通信协议。

2.2 通信要素一:IP地址和域名

2.2.1 IP地址

IP地址:指互联网协议地址(Internet Protocol Address),俗称IP。IP地址用来给网络中的一台计算机设备做唯一的编号。假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”。

IP地址分类方式一:

  • IPv4:是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d 的形式,以点分十进制表示,例如192.168.65.100 。其中a、b、c、d都是0~255之间的十进制整数。

在这里插入图片描述

  • 这种方式最多可以表示42亿个。其中,30亿都在北美,亚洲4亿,中国2.9亿。2011年初已经用尽。

  • IP地址 = 网络地址 +主机地址

    • 网络地址:标识计算机或网络设备所在的网段
    • 主机地址:标识特定主机或网络设备

在这里插入图片描述

其中,E类用于科研。
  • IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。

    为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,共16个字节,写成8个无符号整数,每个整数用四个十六进制位表示,数之间用冒号(:)分开。比如:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,按保守方法估算IPv6实际可分配的地址,整个地球的每平方米面积上仍可分配1000多个地址,这样就解决了网络地址资源数量不够的问题。2012年6月6日,国际互联网协会举行了世界IPv6启动纪念日,这一天,全球IPv6网络正式启动。多家知名网站,如Google、Facebook和Yahoo等,于当天全球标准时间0点(北京时间8点整)开始永久性支持IPv6访问。2018年6月,三大运营商联合阿里云宣布,将全面对外提供IPv6服务,并计划在2025年前助推中国互联网真正实现“IPv6 Only”。

    在IPv6的设计过程中除了一劳永逸地解决了地址短缺问题以外,还考虑了在IPv4中解决不好的其它问题,主要有端到端IP连接、服务质量(QoS)、安全性、多播、移动性、即插即用等。

IP地址分类方式二:

公网地址( 万维网使用)和 私有地址( 局域网使用)。192.168.开头的就是私有地址,范围即为192.168.0.0–192.168.255.255,专门为组织机构内部使用。

常用命令:

  • 查看本机IP地址,在控制台输入:
ipconfig
  • 检查网络是否连通,在控制台输入:
ping 空格 IP地址
ping 192.168.1.222

特殊的IP地址:

  • 本地回环地址(hostAddress)127.0.0.1
  • 主机名(hostName)localhost

2.2.2 域名

Internet上的主机有两种方式表示地址:

  • 域名(hostName):https://www.csdn.net/
  • IP 地址(hostAddress):202.108.35.210

域名解析: 因为IP地址数字不便于记忆,因此出现了域名。域名容易记忆,当在连接网络时输入一个主机的域名后,域名服务器(DNS,Domain Name System,域名系统)负责将域名转化成IP地址,这样才能和主机建立连接。

在这里插入图片描述

  1. 在浏览器中输入www.qq.com 域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(http://qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找(http://qq.com)域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
  6. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

2.3 通信要素二:端口号

网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢?

如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)。

不同的进程,设置不同的端口号。

  • 端口号:用两个字节表示的整数,它的取值范围是0~65535
    • 公认端口:0~1023。被预先定义的服务通信占用,如:HTTP(80),FTP(21),Telnet(23)
    • 注册端口:1024~49151。分配给用户进程或应用程序。如:Tomcat(8080),MySQL(3306),Oracle(1521)。
    • 动态/ 私有端口:49152~65535。

如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。

在这里插入图片描述

2.4 通信要素三:网络通信协议

通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。

  • 网络通信协议:在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤、出错控制等做了统一规定,通信双方必须同时遵守才能完成数据交换。

新的问题:网络协议涉及内容太多、太复杂。如何解决?

计算机网络通信涉及内容很多,比如指定源地址和目标地址,加密解密,压缩解压缩,差错控制,流量控制,路由控制,如何实现如此复杂的网络协议呢?通信协议分层思想

在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信、上一层可以调用下一层,而与再下一层不发生关系。各层互不影响,利于系统的开发和扩展。

这里有两套参考模型

  • OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广
  • TCP/IP参考模型(或TCP/IP协议):事实上的国际标准。

在这里插入图片描述

上图中,OSI参考模型:模型过于理想化,未能在因特网上进行广泛推广。 TCP/IP参考模型(或TCP/IP协议):事实上的国际标准

  • TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),TCP/IP 以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。是Internet最基本、最广泛的协议。

在这里插入图片描述

TCP/IP协议中的四层介绍:

  • 应用层:应用层决定了向用户提供应用服务时通信的活动。主要协议有:HTTP协议、FTP协议、SNMP(简单网络管理协议)、SMTP(简单邮件传输协议)和POP3(Post Office Protocol 3的简称,即邮局协议的第3个版)等。
  • 传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。TCP(Transmission Control Protocol)协议,即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。UDP(User Datagram Protocol,用户数据报协议):是一个无连接的传输层协议、提供面向事务的简单不可靠的信息传送服务。
  • 网络层:网络层是整个TCP/IP协议的核心,支持网间互连的数据通信。它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。而IP协议是一种非常重要的协议。IP(internet protocal)又称为互联网协议。IP的责任就是把数据从源传送到目的地。它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。
  • 物理+数据链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。

在这里插入图片描述

3. 传输层协议:TCP与UDP协议

通信的协议还是比较复杂的,java.net 包中包含的类和接口,它们提供低层次的通信细节。我们可以直接使用这些类和接口,来专注于网络程序开发,而不用考虑通信的细节。

java.net 包中提供了两种常见的网络协议的支持:

  • UDP:用户数据报协议(User Datagram Protocol)。
  • TCP:传输控制协议 (Transmission Control Protocol)。

3.1 TCP协议与UDP协议

TCP协议:

  • TCP协议进行通信的两个应用进程:客户端、服务端。
  • 使用TCP协议前,须先建立TCP连接,形成基于字节流的传输数据通道
  • 传输前,采用“三次握手”方式,点对点通信,是可靠的
    • TCP协议使用重发机制,当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体确认信息,如果没有收到另一个通信实体确认信息,则会再次重复刚才发送的消息。
  • 在连接中可进行大数据量的传输
  • 传输完毕,需释放已建立的连接,效率低

UDP协议:

  • UDP协议进行通信的两个应用进程:发送端、接收端。
  • 将数据、源、目的封装成数据包(传输的基本单位),不需要建立连接
  • 发送不管对方是否准备好,接收方收到也不确认,不能保证数据的完整性,故是不可靠的
  • 每个数据报的大小限制在64K
  • 发送数据结束时无需释放资源,开销小,通信效率高
  • 适用场景:音频、视频和普通数据的传输。例如视频会议

TCP生活案例:打电话

UDP生活案例:发送短信、发电报

3.2 三次握手

TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠。

  • 第一次握手,客户端向服务器端发起TCP连接的请求
  • 第二次握手,服务器端发送针对客户端TCP连接请求的确认
  • 第三次握手,客户端发送确认的确认

在这里插入图片描述

1、客户端会随机一个初始序列号seq=x,设置SYN=1 ,表示这是SYN握手报文。然后就可以把这个 SYN 报文发送给服务端了,表示向服务端发起连接,之后客户端处于同步已发送状态。

2、服务端收到客户端的 SYN 报文后,也随机一个初始序列号(seq=y),设置ack=x+1,表示收到了客户端的x之前的数据,希望客户端下次发送的数据从x+1开始。
设置 SYN=1 和 ACK=1。表示这是一个SYN握手和ACK确认应答报文。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于同步已接收状态。

3、客户端收到服务端报文后,还要向服务端回应最后一个应答报文,将ACK置为 1 ,表示这是一个应答报文
ack=y+1 ,表示收到了服务器的y之前的数据,希望服务器下次发送的数据从y+1开始。
最后把报文发送给服务端,这次报文可以携带数据,之后客户端处于 连接已建立 状态。服务器收到客户端的应答报文后,也进入连接已建立状态。

完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛,例如下载文件、浏览网页等。

3.3 四次挥手

TCP协议中,在发送数据结束后,释放连接时需要经过四次挥手。

  • 第一次挥手:客户端向服务器端提出结束连接,让服务器做最后的准备工作。此时,客户端处于半关闭状态,即表示不再向服务器发送数据了,但是还可以接受数据。
  • 第二次挥手:服务器接收到客户端释放连接的请求后,会将最后的数据发给客户端。并告知上层的应用进程不再接收数据。
  • 第三次挥手:服务器发送完数据后,会给客户端发送一个释放连接的报文。那么客户端接收后就知道可以正式释放连接了。
  • 第四次挥手:客户端接收到服务器最后的释放连接报文后,要回复一个彻底断开的报文。这样服务器收到后才会彻底释放连接。这里客户端,发送完最后的报文后,会等待2MSL,因为有可能服务器没有收到最后的报文,那么服务器迟迟没收到,就会再次给客户端发送释放连接的报文,此时客户端在等待时间范围内接收到,会重新发送最后的报文,并重新计时。如果等待2MSL后,没有收到,那么彻底断开。

在这里插入图片描述

1、客户端打算断开连接,向服务器发送FIN报文(FIN标记位被设置为1,1表示为FIN,0表示不是),FIN报文中会指定一个序列号,之后客户端进入FIN_WAIT_1状态。也就是客户端发出连接释放报文段(FIN报文),指定序列号seq = u,主动关闭TCP连接,等待服务器的确认。

2、服务器收到连接释放报文段(FIN报文)后,就向客户端发送ACK应答报文,以客户端的FIN报文的序列号 seq+1 作为ACK应答报文段的确认序列号ack = seq+1 = u + 1。接着服务器进入CLOSE_WAIT(等待关闭)状态,此时的TCP处于半关闭状态(下面会说什么是半关闭状态),客户端到服务器的连接释放。客户端收到来自服务器的ACK应答报文段后,进入FIN_WAIT_2状态。

3、服务器也打算断开连接,向客户端发送连接释放(FIN)报文段,之后服务器进入LASK_ACK(最后确认)状态,等待客户端的确认。服务器的连接释放(FIN)报文段的FIN=1,ACK=1,序列号seq=m,确认序列号ack=u+1。

4、客户端收到来自服务器的连接释放(FIN)报文段后,会向服务器发送一个ACK应答报文段,以连接释放(FIN)报文段的确认序号 ack 作为ACK应答报文段的序列号 seq,以连接释放(FIN)报文段的序列号 seq+1作为确认序号ack。

之后客户端进入TIME_WAIT(时间等待)状态,服务器收到ACK应答报文段后,服务器就进入CLOSE(关闭)状态,到此服务器的连接已经完成关闭。客户端处于TIME_WAIT状态时,此时的TCP还未释放掉,需要等待2MSL后,客户端才进入CLOSE状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/465772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速查询Git的config配置文件的本地路径

如何快速查询Git的config配置文件的本地路径 命令作用git config --local --list --show-origin查看仓库级别 git 配置信息,并打印配置文件本地路径最高优先级(仓库下)git config --global --list --show-origin查看全局级别 git 配置信息&a…

2022年全国职业院校技能大赛网络系统管理赛项模块B:Windows部署(样题1)

2022年全国职业院校技能大赛 网络系统管理赛项 模块B:Windows部署 (样题1) 目录 一、 初始化环境 (一)默认账号及默认密码 二、项目任务描述 (一)基本配置 (二)拓…

C语言控制语句

文章目录 前言一、分支语句1.if语句2.if else else if3.switch语句 二、循环语句1.for循环2.while循环3.do-while循环 三、跳转语句1.break语句2.continue语句3.goto语句 四、嵌套语句1.if语句嵌套2.for语句嵌套3.while语句嵌套 总结 前言 C语言中的控制语句是非常重要的一个知…

JVM入门必备

1、JVM 的位置 2、JVM 的体系结构 JVM(Java虚拟机)是Java程序的运行环境,它对于Java平台的运行和跨平台特性的实现有着重要的作用。JVM的体系结构有以下几个部分: 类加载器(ClassLoader):负责将…

day4 IP地址与端口号

IP地址及其表示方式 IP地址表示方法: 分类的IP地址: 多归属主机: 当一个主机通过两个网卡同时连接到两网络时,也就是该主机同时拥有两个IP地址,该主机被称为多归属主机; 一个路由器至少连接到两个不同的网…

C++语法(21)---- 模拟map和set

(1条消息) C语法(20)---- 模拟红黑树_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130296772?spm1001.2014.3001.5501 目录 1.stl中的设计思想 2.模拟set和map 1.set和map的类 2.BRTree的仿函数实现 3.红黑树的迭…

C语言力扣简单题-两数之和

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 两数之和 题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和…

从数据处理到人工智能(常用库的介绍)

Python库之数据分析 ​​​​​​​​​​​​ 可以这么理解pandas通过扩展了对一维数据和二维数据的一种表示,因而能够形成更高层对数据的操作,简化数据分析的运行 Python库之数据可视化 Matplotlib — Visualization with Python seaborn: statistic…

DNS基础:通过dig命令理解DNS域名解析中的A记录,AAAA记录,CNAME记录,MX记录,NS记录

参考博文:https://blog.csdn.net/zxl1990_ok/article/details/125432123 目录 参考资料DNS简介查询过程直接显示DNS寻址结果向特定DNS服务器寻址查询A记录查询AAAA记录CNAME记录MX记录NS记录PTR记录SOA记录查看DNS服务器的主从关系 参考资料 http://ruanyifeng.com…

C++ Primer阅读笔记--异常处理机制

目录 1--异常处理机制 2--throw表达式 3--try语句块 4--标准异常类 5--代码实例 1--异常处理机制 异常处理机制为程序中的异常检测和异常处理这两部分的协作提供支持;在 C 语言中,异常处理包括:throw表达式、try语句块和异常类&#xff…

线程池【Linux】

文章目录 1. 引入2. 应用3. 实现封装线程封装线程池线程函数生产消费逻辑互斥锁条件变量线程函数主线程测试1 4. 优化5. 日志日志的重要性实现日志级别提取参数stdarg.h 头文件日志文件 懒汉实现单例模式什么是懒汉模式什么是单例模式实现 1. 引入 线程池是一种池化技术&#…

Vue后台管理系统-前端登录设计

在做后台管理系统时,登录模块是必不可少的,访模块看似简单,在开发涉及到许多细节,一般来说主要有以下这些: 1. 登录输入的信息要进行正则校验; 2. 密码输入要可以查看明文; 3. 密码输入时要对…

JavaWeb——IP协议的相关特性

目录 一、IP协议 1、地址管理 (1)、动态分配IP地址 (2)、NAT机制 (3)、IPv6协议 2、路由选择 (1)、定义 (2)、原理 二、路由器 三、IP地址的组成 1…

Postman登录注册指导

在做后端开发的小伙伴经常需要测试自己写的接口是否可以用 这时Postman就是一个很好的选择 如果您还没有下载 可以参考我的文章 API接口调试工具Postman下载安装步骤 安装好之后 我们就需要处理 它的一个注册和登录 我们点击右上角 这里就有一个创建一个账户 我们点击一下 …

CF - Playing in a Casino

题意:一个数的幸运值计算规则是用里面最大的数字-最小的数字所得值 给出一个范围,求这个范围里幸运值最大的是哪个数 解: 这道题相对来说就很简单了,注意数值限制范围在1道1e6,虽然这道题确实暴力就能做出来&#xf…

手把手教你用几行代码给winform多个控件(数量无上限)赋值

前言: 我们在开发winform程序的过程中,经常会遇到这样一个场景,我们设计的界面,比如主窗体有一百多个TextBox,然后初始化的时候要对这个一百多个TextBox的Text属性赋值,比如赋个1,如果是winfor…

CAD DLL 15 crack增加了对SLDASM、FSAT

CAD DLL 15 crack增加了对SLDASM、FSAT 改进的3D: 提高了打开三维文件的速度。 提高了SAT、STEP、SLDPRT、X_T、X_B、OBJ格式的阅读能力。 增加了对SLDASM、FSAT、SAB、SMT、IPT、IFC格式的支持。 增加了导出为SAT、SAB、STL、OBJ格式的功能。 改进了SAT、STE…

系统错误 无法启动此程序,因为计算机中丢失MSVCP140_1.dll。尝试重新安装该程序已解决此问题

Qt系列文章目录 文章目录 Qt系列文章目录前言一、解决方法 前言 我在windows10系统,使用Qt5.15.2 打包命令:windeployqt.exe ImageManageSys.exe ,把ImageManageSys.exe 拷贝到windows7系统下,报错:ImageManageSys.ex…

红海云CEO孙伟解密智能化人力资源新范式

4月25日,由广州人力资源服务协会联合HRflag主办的“2023广州人力资源创新与科技展”在广州越秀国际会议中心举办,大会邀请红海云CEO孙伟出席并发表主题演讲,分享人力资源数字化的创新,实践以及思考。 红海云持续高增长的密码 在…

jsp内置对象

request 将要介绍request对象的作用范围及其常用的方法。用户每访问一个页面, 就会产生一个HTTP请求。这些请求中一般都包含了请求所需的参数值或者信息, 如果将request对象看作是客户请求的一个实例, 那么这个实例就包含了客户请求的所有数…