javaEE-网络原理-2网络编程
目录
为什么需要⽹络编程?
什么是网络编程?
一、网络编程中的基本概念
1.发送端和接收端
2.请求和相应
3.客户端和服务器
4.客户端和服务端之间的模式:
二、TCP/UDP
TCP的特点:
UDP的特点:
1.有连接/无连接:
2.可靠传输/不可靠传输:
3.面向字节流/面向数据报:
4.全双工/半双工:
为什么需要⽹络编程?
⽤⼾在浏览器中,打开在线视频⽹站,如优酷看视频,实质是通过⽹络,获取到⽹络上的⼀个视频资 源。与本地打开视频⽂件类似,只是视频⽂件这个资源的来源是⽹络。
相⽐本地资源来说,⽹络提供了更为丰富的⽹络资源:
所谓的⽹络资源,其实就是在⽹络中可以获取的各种数据资源。所有的⽹络资源,都是通过⽹络编程来进⾏数据传输的。
什么是网络编程?
网络编程,网络上的主机,通过不同的进程,以编程的方式进行网络通信(网络数据传
输)。
只需要满足进程不同就行,对于同一台主机,只要是不同的进程,基于网络来传输数据,就属于网络通信。
特殊的,对于开发来说,在条件有限的情况下,⼀般也都是在⼀个主机中运⾏多个进程来完成⽹络编 程。 但是,我们⼀定要明确,我们的⽬的是提供⽹络上不同主机,基于⽹络来传输数据资源:
• 进程A:编程来获取⽹络资源
• 进程B:编程来提供⽹络资源
网络编程中“数据单位”涉及到的术语:
段:segment TCP数据段
报:datagram UDP数据报
包:packet IP数据包
帧:frame 以太网数据帧
一、网络编程中的基本概念
1.发送端和接收端
在一次的数据传输时:
发送端:数据的发送方进程,称为发送端。即网络通信中的源主机。
接收端:数据的接收方进程,称为接收端。即网络通信中的目的主机。
收发端:发送端和接收端两端,即收发端。
注意:发送端和接收端只是相对的,只是一次数据传输产生数据流向后的概念。
2.请求和相应
获取一个网络资源,涉及到两次网络数据传输:
第一次:请求数据的发送(response);
第二次:响应数据的发送(request).
客户端给服务端发送的数据,称为请求;服务端给客户端返回的数据,称为相应。
就像去餐馆买饭:点一份到炒饭(请求数据的发送),厨师把饭端上来(响应数据的发送)。
3.客户端和服务器
服务端:在网络数据传输的过程中,把提供服务的一方进程,称为客户端。可以提供对外服务,被动接受通信的一方。
客户端:获取服务的进程,称为客户端。主动发起通信的一方。
好比银行存款:用户(客户端)保存资金在银行(服务端)。
4.客户端和服务端之间的模式:
1、“一问一答”:一个请求对应一个响应。
网站开发最常使用这种模式。
2、“一问多答”:一个请求对应多个相应。
在“下载”场景中,较多用到这个模式。
3.“多问多一”:多个请求对应一个相映。
在“上传”场景中,最长用到这个模式。
4.“多问多答”:可能一个请求对应多个响应,也可能一个响应对应多个请求。
远程操控/远程桌面都是多问多答的形式。
二、TCP/UDP
要想进行网络间编程,要使用系统提供的api,本质上这些都是传输层提供的。
传输层涉及到的协议有两个:TCP :TransmissionControlProtocol(传输控制协议),
UDP: User Datagram Protocol(⽤⼾数据报协议)。
这两个协议的差别很大,他们的api差别也很大。
TCP的特点:
有链接,可靠传输,面向字节流,全双工。
UDP的特点:
无连接,不可靠传输,面向数据报,全双工。
1.有连接/无连接:
这里的连接不是物理上的连接,而是抽象的连接,虚拟的连接。
就像两人结婚,买个房子,两人生活在一起,是物理的连接;领结婚证,两人称为夫妻,是抽象的连接。
有连接的通信:就像打电话,一方打电话,另一方只有接通电话才能进行通信,这就是有链接通信。连接的特点是双方都同意才行。
无连接的通信:类似于发微信/发短信,只要发送发发了消息,不论接收方是否想要收到,都能接收到消息。
2.可靠传输/不可靠传输:
网络上的 “异常事件” 非常多,无论使用什么样的软硬件手段,都无法做到100%实现网络数据从A传送到B.
“可靠传输”,就是尽可能的完成数据的传输。虽然无法确保数据从A传送到B,但可以知道这个数据接收方是否收到了。
此处的“可靠传输”,就是发送方能够感知到 接收方发送的数据是否成功到达。
3.面向字节流/面向数据报:
面向字节流:这里的字节流和文件中谈到的字节流是一样的,网络数据传输的基本单位就是字节。
面向数据报:每次传输的单位是一个数据报(一系列数字)的特定结构。
4.全双工/半双工:
全双工:一个信道,可以双向通信。
类似于公路,可以来回行驶。
半双工:只能单向通信。