网络协议分层Word文档下载推荐.docx

上传人:b****1 文档编号:5205561 上传时间:2023-05-04 格式:DOCX 页数:25 大小:465.38KB
下载 相关 举报
网络协议分层Word文档下载推荐.docx_第1页
第1页 / 共25页
网络协议分层Word文档下载推荐.docx_第2页
第2页 / 共25页
网络协议分层Word文档下载推荐.docx_第3页
第3页 / 共25页
网络协议分层Word文档下载推荐.docx_第4页
第4页 / 共25页
网络协议分层Word文档下载推荐.docx_第5页
第5页 / 共25页
网络协议分层Word文档下载推荐.docx_第6页
第6页 / 共25页
网络协议分层Word文档下载推荐.docx_第7页
第7页 / 共25页
网络协议分层Word文档下载推荐.docx_第8页
第8页 / 共25页
网络协议分层Word文档下载推荐.docx_第9页
第9页 / 共25页
网络协议分层Word文档下载推荐.docx_第10页
第10页 / 共25页
网络协议分层Word文档下载推荐.docx_第11页
第11页 / 共25页
网络协议分层Word文档下载推荐.docx_第12页
第12页 / 共25页
网络协议分层Word文档下载推荐.docx_第13页
第13页 / 共25页
网络协议分层Word文档下载推荐.docx_第14页
第14页 / 共25页
网络协议分层Word文档下载推荐.docx_第15页
第15页 / 共25页
网络协议分层Word文档下载推荐.docx_第16页
第16页 / 共25页
网络协议分层Word文档下载推荐.docx_第17页
第17页 / 共25页
网络协议分层Word文档下载推荐.docx_第18页
第18页 / 共25页
网络协议分层Word文档下载推荐.docx_第19页
第19页 / 共25页
网络协议分层Word文档下载推荐.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

网络协议分层Word文档下载推荐.docx

《网络协议分层Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络协议分层Word文档下载推荐.docx(25页珍藏版)》请在冰点文库上搜索。

网络协议分层Word文档下载推荐.docx

也为以后制订实用协议或产品打下基础。

OSI模型共分七层:

从上至下依次是

图-1

应用层:

指网络操作系统和具体的应用程序,对应WWW服务器、FTP服务器等应用软件

表示层:

数据语法的转换、数据的传送等

会话层:

建立起两端之间的会话关系,并负责数据的传送

传输层:

负责错误的检查与修复,以确保传送的质量,是TCP工作的地方。

网络层:

数据链路层:

物理层:

对应网线、网卡、接口等物理设备(位)

1.1.2.TCP/IP协议栈

TransmissionControlProtocol/InternetProtocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议

由网络层的IP协议和传输层的TCP协议组成。

TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。

通俗而言:

TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。

而IP是给因特网的每一台电脑规定一个地址。

TCP/IP协议栈(按TCP/IP参考模型划分),TCP/IP分为4层,不同于OSI,他将OSI中的会话层、表示层规划到应用层:

应用层,传输层,IP网络层,网络接口层

1.2.IP层协议

1.2.1.IP协议简介

IP是英文InternetProtocol(网络之间互连的协议)的缩写,也就是为计算机网络相互连接进行通信而设计的协议。

在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。

任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。

1.2.2.路由器简介

路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。

当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。

因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互连环境中,建立灵活的连接,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。

1.2.3.IP地址及其含义

互联网协议地址(InternetProtocolAddress,又译为网际协议地址),缩写为IP地址(IPAddress)。

IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。

IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。

例:

点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

1.3.传输层协议

1.3.1.TCP协议简介

TCP(TransmissionControlProtocol)和UDP(UserDatagramProtocol)协议属于传输层协议。

其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。

通过面向连接、端到端和可靠的数据包发送。

“面向连接”就是在正式通信前必须要与对方建立起连接。

比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。

1.3.2.UDP协议简介

UDP是UserDatagramProtocol的简称,中文名是用户数据报协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

是与TCP相对应的协议。

它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

1.3.3.端口号的概念

一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务通过1个IP地址来实现。

通过“IP地址+端口号”来区分不同的服务的。

不同的协议间端口不冲突。

比如我们可以同时使用UDP打开8088端口的与TCP的8088端口。

1.3.4.TCP协议与UDP协议的区别

TCP协议需要创建连接,而UDP协议则不需要。

TCP是可靠的传输协议,而UDP是不可靠的。

TCP适合传输大量的数据,而UDP适合传输少量数据。

TCP的速度慢,而UDP的速度快。

1.4.应用层协议

1.4.1.HTTP协议简介

HTTP协议(HyperTextTransferProtocol,超文本转移协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。

它可以使浏览器更加高效,使网络传输减少。

它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。

HTTP是一个无状态的协议。

1.4.2.FTP协议简介

FTP是TCP/IP协议组中的协议之一,是英文FileTransferProtocol的缩写。

该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。

1.4.3.SMTP协议简介

SMTP(SimpleMailTransferProtocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。

SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供与来信有关的通知。

2.TCP通信

2.1.Socket原理

2.1.1.Socket简介

socket通常称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。

在Internet上的主机一般运行了多个服务软件,同时提供几种服务。

每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。

应用程序通常通过“套接字”向网络发出请求或者应答网络请求。

Socket和ServerSocket类库位于java.net包中。

ServerSocket用于服务端,Socket是建立网络连接时使用的。

在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。

2.1.2.获取本地地址和端口号

.Socket为套接字类,其提供了很多方法,其中我们可以通过Socket获取本地的地址以及端口号。

1. 

 

intgetLocalPort()

该方法用于获取本地使用的端口号

InetAddressgetLocalAddress()

该方法用于获取套接字绑定的本地地址

使用InetAddress获取本地的地址方法:

StringgetCanonicalHostName()

获取此IP地址的完全限定域名。

StringgetHostAddress()

返回IP地址字符串(以文本表现形式)。

代码如下:

publicvoidtestSocket()throwsException{

2. 

Socketsocket=newSocket("

localhost"

8088);

3. 

InetAddressadd=socket.getLocalAddress();

//获取本地地址信息

4. 

System.out.println(add.getCanonicalHostName());

5. 

System.out.println(add.getHostAddress());

6. 

System.out.println(socket.getLocalPort());

7. 

}

2.1.3.获取远端地址和端口号

Socket也提供了获取远端的地址以及端口号的方法:

intgetPort()

该方法用于获取远端使用的端口号。

InetAddress.getInetAddress()

该方法用于获取套接字绑定的远端地址。

 

InetAddressinetAdd=socket.getInetAddress();

System.out.println(inetAdd.getCanonicalHostName());

System.out.println(inetAdd.getHostAddress());

System.out.println(socket.getPort());

2.1.4.获取网络输入流和网络输出流

通过Socket获取输入流与输出流,这两个方法是使用Socket通讯的关键方法。

封装了TCP协议的Socket是基于流进行通讯的,所以我们在创建了双方连接后,只需要获取相应的输入与输出流即可实现通讯。

InputStreamgetInputStream()

该方法用于返回此套接字的输入流。

OutputStream.getOutputStream()

该方法用于返回此套接字的输出流。

代码如下:

InputStreamin=socket.getInputStream();

OutputStreamout=socket.getOutputStream();

2.1.5.close方法

当使用Socket进行通讯完毕后,要关闭Socket以释放系统资源。

voidclose()

当关闭了该套接字后也会同时关闭由此获取的输入流与输出流。

2.2.Socket通讯模型

2.2.1.Server端ServerSocket监听

.ServerSocket是运行于服务端应用程序中。

通常创建ServerSocket需要指定服务端口号,之后监听Socket的连接。

监听方法为:

Socketaccept()

该方法是一个阻塞方法,直到一个客户端通过Socket连接后,accept会封装一个Socket,该Socket封装与表示该客户端的有关的信息。

通过这个Socket与该客户端进行通信。

//创建ServerSocket并申请服务端口8088

ServerSocketserver=newServerSocket(8088);

/*方法会产生阻塞,直到某个Socket连接,并返回请求连接的Socket*/

Socketsocket=server.accept();

2.2.2.Client端Socket连接

通过上一节我们已经知道,当服务端ServerSocket调用accept方法阻塞等待客户端连接后,我们可以通过在客户端应用程序中创建Socket来向服务端发起连接。

需要注意的是,创建Socket的同时就发起连接,若连接异常会抛出异常。

我们通常创建Socket时会传入服务端的地址以及端口号。

//参数1:

服务端的IP地址,参数2:

服务端的服务端口

Socketsocket=newSocket(“localhost”,8088);

2.2.3.C-S端通信模型

C-S的全称为(Client-Server):

客户端-服务器端

客户端与服务端通信模型如下:

图-2

1.服务端创建ServerSocket

2.通过调用ServerSocket的accept方法监听客户端的连接

3.客户端创建Socket并指定服务端的地址以及端口来建立与服务端的连接

4.当服务端accept发现客户端连接后,获取对应该客户端的Socket

5.双方通过Socket分别获取对应的输入与输出流进行数据通讯

6.通讯结束后关闭连接。

/**

Server端应用程序

*/

publicclassServer{

publicstaticvoidmain(String[]args){

ServerSocketserver=null;

try{

8. 

//创建ServerSocket并申请服务端口为8088

9. 

server=newServerSocket(8088);

10. 

11. 

//侦听客户端的连接

12. 

13. 

14. 

//客户端连接后,通过该Socket与客户端交互

15. 

//获取输入流,用于读取客户端发送过来的消息

16. 

17. 

BufferedReaderreader

18. 

=newBufferedReader(

19. 

newInputStreamReader(

20. 

in,"

UTF-8"

21. 

22. 

);

23. 

24. 

//获取输出流,用于向该客户端发送消息

25. 

26. 

PrintWriterwriter

27. 

=newPrintWriter(

28. 

newOutputStreamWriter(

29. 

out,"

30. 

),true

31. 

32. 

33. 

//读取客户端发送的消息

34. 

Stringmessage=reader.readLine();

35. 

System.out.println("

客户端说:

"

+message);

36. 

37. 

//向客户端发送消息

38. 

writer.println("

你好客户端!

39. 

}catch(Exceptione){

40. 

e.printStackTrace();

41. 

}finally{

42. 

if(server!

=null){

43. 

44. 

server.close();

45. 

}catch(IOExceptione){

46. 

}

47. 

48. 

49. 

50.}

51.

52./**

53.*Client端应用程序

54.*/

55.publicclassClient{

56. 

57. 

Socketsocket=null;

58. 

59. 

socket=newSocket("

60. 

//获取输入流,用于读取来自服务端的消息

61. 

62. 

63. 

64. 

65. 

66. 

67. 

68. 

69. 

//获取输出流,用于向服务端发送消息

70. 

OutputStreamout

71. 

=socket.getOutputStream();

72. 

OutputStreamWriterosw

73. 

=newOutputStreamWriter(out,"

74. 

75. 

=newPrintWriter(osw,true);

76. 

77. 

//向服务端发送一个字符串

78. 

你好服务器!

79. 

80. 

//读取来自客户端发送的消息

81. 

82. 

服务器说:

83. 

84. 

85. 

86. 

87. 

if(socket!

88. 

//关闭Socket

89. 

socket.close();

90. 

91. 

92. 

93. 

94. 

95. 

96.}

2.2.4.Server端多线程模型

通过上一节我们已经知道了如何使用ServerSocket与Socket进行通讯了,但是这里存在着一个问题,就是只能“p2p”点对点。

一个服务端对一个客户端。

若我们想让一个服务端可以同时支持多个客户端应该怎么做呢?

这时我们需要分析之前的代码。

我们可以看到,当服务端的ServerSocket通过accept方法侦听到一个客户端Socket连接后,就获取该Socket并与该客户端通过流进行双方的通讯了,这里的问题在于,只有不断的调用accept方法,我们才能侦听到不同客户端的连接。

但是若我们循环侦听客户端的连接,又无暇顾及与连接上的客户端交互,这时我们需要做的事情就是并发。

我们可以创建一个线程类ClientHa

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2