计算机通过传输介质,通信设施和网络通信协议,把不同的计算机连接起来,实现资源共享和传输,网络编程就是不同计算机之间进行通信传输。
计算网络分为网络协议和体系结构
通过网络发送数据这个过程靠的是计算机网络通信完成的。分为多层,每层之间通过接口连接,层次实现功能是协议数据单元(PDU)来描述。ISO制定OSI模型是不基于具体机型,操作系统和公司的网络体系结构称为开放系统互联参考模型
但是这个模型过于庞大,复杂,美国国防部提出了TCP/IP协议参考模型,简化了OSI参考模型
OSI把网络通信分为七层,如图
物理层(二进制传输)
物理层处于OSI的最低层,整个系统的基础,涉及到原始数据传输,功能主要是为数据端的设备提供传输数据的通路以及传输数据。
数据链路层(帧传输)
实现计算机中相邻节点可靠传输,把原始数据加上数据链路协议,构成逻辑上可靠的数据链路,做的事情有链路管理,成帧,差错管理以及流量控制,其中帧是对物理层的原始数据进行界定,也能对丢失数据进行处理。
网络层
涉及源主机节点到目的主机节点之间可靠数据传输,路由选择,网络寻址,流量控制,拥塞控制,网络互连。
传输层
承上启下的作用,涉及源节点到目的节点的信息传输,解决跨网络链接和释放,对底层不可靠的网络。建立链接需要三次握手,释放连接需要四次握手。
会话层和表示层
会话层功能负责应用程序之间的建立,维持和中断会话,提供对设备和节点之间的会话控制,协调系统和服务之间的交流,并提供单双工,半双工,全双工三种不同的通信方式
表示层关心信息传输的格式定义,主要功能将应用层的信息转化为共同理解的形式,提供字符代码,数据格式,控制信息格式,加密等
应用层
OSI最高层,直接为应用进程提供服务,其作用在实现多个系统进程通信,完成一系列服务
中文名传输控制协议/因特网互连协议。开发的网络协议簇,采用四层结构,网络接口层,网络层(ip层)、传输层(TCP层)、应用层
TCP/IP协议对网络接口层没有给出具体的描述,网络接口层对应着OSI参考模型的物理层和数据链路层
网络层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。网络层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,互联网层还需要完成拥塞控制的功能。
TCP层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中。TCP层涉及两个协议,TCP和UDP。其中,TCP协议提供面向连接的服务,提供按字节流的有序、可靠传输,可以实现连接管理、差错控制、流量控制、拥塞控制等。UDP协议提供无连接的服务,用于不需要或无法实现面向连接的网络应用中。
应用层为Internet中的各种网络应用提供服务。
如同人与人之间相互交流是需要遵循一定的规则(如语言)一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。
OSI参考模型和TCP/IP模型在不同的层次中有许多不同的网络协议,如图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFzVRRoc-1619072685009)(C:\Users\kedouer\Documents\网络协议.png)]
网络协议之间的关系图如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gwZrXWFq-1619072685013)(C:\Users\kedouer\Documents\网络2.png)]
IP协议的作用在于把各种数据包准备无误的传递给对方,其中两个重要的条件是IP地址和MAC地址。由于IP地址是稀有资源,不可能每个人都拥有一个IP地址,所以我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。而MAC地址是全球唯一的。举例,IP地址就如同是我们居住小区的地址,而MAC地址就是我们住的那栋楼那个房间那个人。IP地址采用的IPv4格式,目前正在向IPv6过渡。
TCP(传输控制协议)是面向连接的传输层协议。TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。TCP协议采用字节流传输数据。
协议首部和数据两部分,协议首部的固定部分是20个字节,首部的固定部分后面是选项部分。
首部还包括源端口号以及目的端口号、序号、确认序号、数据偏移、保留字段、标志位,6个、接收窗口、校验和
三次握手和四次握手
TCP是面向连接的协议,建立连接有三个阶段,连接建立,数据传送和连接释放,简称三个阶段。
第一次:客户端发送请求
第二次:服务端回传确认信息
第三次:客户端回传确认信息
注意:握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
tcp连接是全双工,因此双方都要单独关闭,
第一次:客户端请求切断连接
第二次:服务端返回确认信息
第三次:服务器关闭客户端的连接后,请求切断连接
第四次:客户端发送确认关闭信息到服务端
首部和数据。其中,首部仅有8个字节,包括源端口和目的端口、长度(UDP用于数据报的长度)、校验和。
HTTP,超文本传输协议,它是互联网上应用最为广泛的一种网络协议。HTTP是一种应用层协议,它是基于TCP协议之上的请求/响应式的协议。HTTP协议是Web浏览器和Web服务器之间通信的标准协议。HTTP指定客户端与服务器如何建立连接、客户端如何从服务器请求数据,服务器如何响应请求,以及最后如何关闭连接。HTTP连接使用TCP/IP来传输数据。
1、客户端在端口80打开与服务端建立tcp连接。URL中还可以指定其他端口
2、客户端向服务端发送消息,请求指定路径的资源
3、服务端向客户端发送响应,响应码
4、服务端关闭连接
TTP报文主要有请求报文和响应报文两种
请求有get和postz这种
HTTP请求报文由请求行、首部行和实体主体组成,由浏览器发送给服务器。
响应返回状态码200这种
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协议安全。
网络中有一段比较容易理解的介绍:
“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也 可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
Java的网络编程主要涉及到的内容是Socket编程。Socket,套接字,就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。
Socket,实际上是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),
传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。socket是对端口通信开发的工具,它要更底层一些。
1、服务器端创建一个服务器套接字(ServerSocket),并把它附加到一个端口上,服务器从这个端口监听连接。端口号的范围是0到65536,但是0到1024是为特权服务保留的端口号,我们可以选择任意一个当前没有被其他进程使用的端口。
2、客户端请求与服务器进行连接的时候,根据服务器的域名或者IP地址,加上端口号,打开一个套接字。当服务器接受连接后,服务器和客户端之间的通信就像输入输出流一样进行操作。