java学习-网络编程

1、概述

​ 计算机通过传输介质,通信设施和网络通信协议,把不同的计算机连接起来,实现资源共享和传输,网络编程就是不同计算机之间进行通信传输。

2、网络分层

​ 计算网络分为网络协议和体系结构

2.1网络体系结构

​ 通过网络发送数据这个过程靠的是计算机网络通信完成的。分为多层,每层之间通过接口连接,层次实现功能是协议数据单元(PDU)来描述。ISO制定OSI模型是不基于具体机型,操作系统和公司的网络体系结构称为开放系统互联参考模型

但是这个模型过于庞大,复杂,美国国防部提出了TCP/IP协议参考模型,简化了OSI参考模型

2.1.1OSI参考模型

OSI把网络通信分为七层,如图

java学习-网络编程_第1张图片

  1. 物理层(二进制传输)

    物理层处于OSI的最低层,整个系统的基础,涉及到原始数据传输,功能主要是为数据端的设备提供传输数据的通路以及传输数据。

  2. 数据链路层(帧传输)

    实现计算机中相邻节点可靠传输,把原始数据加上数据链路协议,构成逻辑上可靠的数据链路,做的事情有链路管理,成帧,差错管理以及流量控制,其中帧是对物理层的原始数据进行界定,也能对丢失数据进行处理。

  3. 网络层

    涉及源主机节点到目的主机节点之间可靠数据传输,路由选择,网络寻址,流量控制,拥塞控制,网络互连。

  4. 传输层

    承上启下的作用,涉及源节点到目的节点的信息传输,解决跨网络链接和释放,对底层不可靠的网络。建立链接需要三次握手,释放连接需要四次握手。

  5. 会话层和表示层

    会话层功能负责应用程序之间的建立,维持和中断会话,提供对设备和节点之间的会话控制,协调系统和服务之间的交流,并提供单双工,半双工,全双工三种不同的通信方式

    表示层关心信息传输的格式定义,主要功能将应用层的信息转化为共同理解的形式,提供字符代码,数据格式,控制信息格式,加密等

  6. 应用层

    OSI最高层,直接为应用进程提供服务,其作用在实现多个系统进程通信,完成一系列服务

2.1.2TCP/IP参考模型

​ 中文名传输控制协议/因特网互连协议。开发的网络协议簇,采用四层结构,网络接口层,网络层(ip层)、传输层(TCP层)、应用层
java学习-网络编程_第2张图片

  • 网络接口层

TCP/IP协议对网络接口层没有给出具体的描述,网络接口层对应着OSI参考模型的物理层和数据链路层

  • 网络层(IP层)

网络层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。网络层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,互联网层还需要完成拥塞控制的功能。

  • 传输层(TCP层)

TCP层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中。TCP层涉及两个协议,TCP和UDP。其中,TCP协议提供面向连接的服务,提供按字节流的有序、可靠传输,可以实现连接管理、差错控制、流量控制、拥塞控制等。UDP协议提供无连接的服务,用于不需要或无法实现面向连接的网络应用中。

  • 应用层

应用层为Internet中的各种网络应用提供服务。

2.2网络协议

如同人与人之间相互交流是需要遵循一定的规则(如语言)一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。

OSI参考模型和TCP/IP模型在不同的层次中有许多不同的网络协议,如图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFzVRRoc-1619072685009)(C:\Users\kedouer\Documents\网络协议.png)]

网络协议之间的关系图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gwZrXWFq-1619072685013)(C:\Users\kedouer\Documents\网络2.png)]

2.2.1 IP协议

​ IP协议的作用在于把各种数据包准备无误的传递给对方,其中两个重要的条件是IP地址和MAC地址。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的。举例,IP地址就如同是我们居住小区的地址,而MAC地址就是我们住的那栋楼那个房间那个人。IP地址采用的IPv4格式,目前正在向IPv6过渡。

2.2.2 TCP协议

​ TCP(传输控制协议)是面向连接的传输层协议。TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。TCP协议采用字节流传输数据。

组成格式

协议首部数据两部分,协议首部的固定部分是20个字节,首部的固定部分后面是选项部分。

首部还包括源端口号以及目的端口号序号确认序号数据偏移保留字段标志位,6个接收窗口校验和

三次握手和四次握手

三次握手

TCP是面向连接的协议,建立连接有三个阶段,连接建立,数据传送和连接释放,简称三个阶段。

​ 第一次:客户端发送请求

​ 第二次:服务端回传确认信息

​ 第三次:客户端回传确认信息

注意:握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

四次握手

tcp连接是全双工,因此双方都要单独关闭,

第一次:客户端请求切断连接

第二次:服务端返回确认信息

第三次:服务器关闭客户端的连接后,请求切断连接

第四次:客户端发送确认关闭信息到服务端

2.2.3 UDP协议

组成格式

首部和数据。其中,首部仅有8个字节,包括源端口和目的端口、长度(UDP用于数据报的长度)、校验和。

TCP与UDP的区别

  1. TCP基于连接,UDP是无连接的;
  2. 对系统资源的要求,TCP较多,UDP较少;
  3. UDP程序结构较简单;
  4. TCP是流模式,而UDP是数据报模式;
  5. TCP保证数据正确性,而UDP可能丢包;TCP保证数据顺序,而UDP不保证;

2.2.4 HTTP协议

HTTP,超文本传输协议,它是互联网上应用最为广泛的一种网络协议。HTTP是一种应用层协议,它是基于TCP协议之上的请求/响应式的协议。HTTP协议是Web浏览器和Web服务器之间通信的标准协议。HTTP指定客户端与服务器如何建立连接、客户端如何从服务器请求数据,服务器如何响应请求,以及最后如何关闭连接。HTTP连接使用TCP/IP来传输数据。

请求过程

1、客户端在端口80打开与服务端建立tcp连接。URL中还可以指定其他端口

2、客户端向服务端发送消息,请求指定路径的资源

3、服务端向客户端发送响应,响应码

4、服务端关闭连接

HTTP报文

TTP报文主要有请求报文和响应报文两种

请求有get和postz这种

HTTP请求报文由请求行、首部行和实体主体组成,由浏览器发送给服务器。

响应返回状态码200这种

HTTP和HTTPS的区别

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来说就是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URL scheme(抽象标识符体系),句法类同http:体系,用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用开号、密码等。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

HTTPS和HTTP的区别主要为以下四点:

  • https协议需要到ca申请证书,一般免费证书很少,需要缴费。

  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

  • http的连接很简单,是无状态的;https协议是有ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    HTTP和TCP/IP协议的关系

    网络中有一段比较容易理解的介绍:

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

3 java Socket网络编程

3.1 socket概述

​ Java的网络编程主要涉及到的内容是Socket编程。Socket,套接字,就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

​ Socket,实际上是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),

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

3.2 socket整体流程

1、服务器端创建一个服务器套接字(ServerSocket),并把它附加到一个端口上,服务器从这个端口监听连接。端口号的范围是0到65536,但是0到1024是为特权服务保留的端口号,我们可以选择任意一个当前没有被其他进程使用的端口。

2、客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。
java学习-网络编程_第3张图片

总结

你可能感兴趣的:(java)