网络编程chapter1

1.2 计算机网络的概念

在这里插入图片描述

1.3 OSI参考模型

OSI参考模型把网络分为了7层,分别是物理层,数据链路层,网络层,运输层,会话层,表示层,应用层。其中各层的功能如下:

  • 物理层
    物理层的任务就是为他上一层提供物理连接,以及规定通信节点之间的机械和电气等特性,如规定电缆和街头的类型。在这一层,数据作为原始的比特流传输。典型的设备是集线器
  • 数据链路层
    数据链路层负责在两个相邻节点间的线路上,无差错地传送以帧为单位的数据。每一帧包括一定数量的数据和一些必要的控制信息。数据链路层要负责建立、维持和释放数据链路的连接。本层的典型设备是交换机
  • 网络层
    网络层的任务就是选择合适的网间路由和交换节点,确保数据及时传送到目标主机。网络层将数据链路层提供的帧组成数据包,包中封装有网络包头,包头中含有逻辑地址–源主机和目标主机的网络地址典型的设备是路由器
    在这里插入图片描述
  • 运输层
    该层的任务是根据通信子网的特性最佳地利用网络资源,为两个端系统(也就是源主机和目标主机)的会话层提供建立、维护和取消传输连接的功能,以可靠方式或不可靠方式传输数据。所谓可靠方式,是指保证把源主机发送的数据正确发送给目标主机。所谓不可靠方式,则是指不保证把源主机发送的数据正确发送给目标主机,数据有可能丢失或出错。这一层,信息传送单位是报文
  • 会话层
    也可以称为会晤层或对话层,在会话层以及以上层次中,数据传送的单位不在另外命名,统称为报文。会话层管理进程之间的会话过程,及负责建立、管理、终止进程间的会话。会话层还可以通过在数据中插入校验点来实现数据的同步
  • 表示层
    表示层对上层数据进行转换,以保证一个主机的应用层的数据可以被另一个主机的应用层理解。表示层的数据转换包括对数据的加密,解密,解压,压缩和格式转换等
  • 应用层
    应用层确定进程之间通信的实际用途,以满足用户的实际需求
    在这里插入图片描述
    OSI各层的一些典型协议主要有:
  • 应用层: WWW、HTTP、HTTPS、FTP、SMTP、SNMP(简单网络管理协议)、DNS、TELNET(远程登录协议)
  • 表示层:ASCII、ASN.1等
  • 会话层: NetBIOS、ZIP等
  • 传输层: TCP、UDP
  • 网络层:IP、RIP
  • 数据链路层:PPP
  • 物理层:RJ-45等

1.4 TCP/IP参考模型和TCP/IP协议

由于OSI七层协议太过庞大和复杂,使得它难以投入到实际运用中。而TCP/IP参考模型吸取了网络分层的思想,同时对网络的层次做了简化,并在网络各层(主机-网络层)都提供了完善的协议。

TCP/IP参考模型分为4个应用层次:应用层、运输层、网络互连层、主机-网络层.在每一层都有对应的协议。确切说,TCP/IP协议应该称为TCP/IP协议集,它是TCP/IP参考模型的除了主机网络层以外的其他3层的协议的集合,这是因为主机-网络层的协议是第三方提供的,而IP协议和TCP协议则是协议中最核心的2个协议
在这里插入图片描述

在这里插入图片描述
下面介绍TCP/IP各层的主要功能:

  • 主机-网络层
    实际上,TCP/IP参考模型没有真正提供这一层的实现,也没有提供协议,它只是要求第三方实现的主机-网络层能够为上层(网络互联层)提供一个访问接口,使得网络互联层能够利用主机-网络层来传递IP数据包

  • 网络互联层
    网络互联层是整个参考模型的核心。它的功能是把IP数据包发送给目标主机。为了尽快发送数据,IP协议把原始数据分为多个数据包,然后沿不同的路径同时传递数据包。但是数据包到达的先后顺序和发送前的先后顺序可能不同,此时需要上层(运输层)对数据包进行重组,还原为原始数据
    在这里插入图片描述
    网络互联层采用IP协议,规定了数据包的格式,并且规定了为数据包寻找路由的流程。

  • 运输层
    在这里插入图片描述

  • 应用层
    TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。在应用层中的协议主要有:
    在这里插入图片描述
    上面的协议都是基于TCP的,而基于UDP的应用层协议主要有:DNS(域名系统协议),SNMP(简单因特网管理协议)

IP协议

每台主机都有唯一的IP地址,IP地址用于标识网络的每个主机。IP地址是一个32位的二进制数序列(IPV4),为了便于在上层层应用中方便表示IP地址,可以包32位的二进制数序列分为4个单元,每个单元占8个比特,然后用十进制数字表示每个单元

但是新的IPV6的标准则是采用128位的地址,占16个字节,大大扩充了可用地址的数目

IP地址主要有2个部分构成: IP网址和IP主机地址(即网络号和主机号)。IP网址表示网络地址,IP主机地址表示网络中的主机的地址。网络掩码可以确定IP地址中哪一个部分是网址,哪部分是主机地址
网络掩码的形式和IP地址形式相同,但是有一定的限制。在网络掩码的二进制数序列中,前面的数字都是1,后面的都是0.网络掩码和IP地址做与运算,那么就可以得出这个IP地址的网络地址
在这里插入图片描述

子网划分

主机号全为0和全为1不可以作为网络的主机地址,这是因为主机号全为0表示的是网络地址,全为1表示的是广播地址。所以求一个子网中能够作为网络的主机地址个数,记得要减2.

发送数据包的过程

在这里插入图片描述

域名

在这里插入图片描述### URL(统一资源定位器)
URL表示统一资源定位器,专为标识网络上资源位置而设的一种编制方式。URL一般有3个部分组成:应用层协议/主机IP地址或域名/资源所在的路径/文件名.
URL中,常见的应用层协议还有ftp和file等。

TCP协议及端口

在这里插入图片描述

在这里插入图片描述

1.5 Java编写客户/服务器程序

在Java中,有3中套接字类:Socket,ServerSocket,DatagramSocket,其中Socket、ServerSocket类建立在TCP协议基础上,DatagramSocket建立在UDP基础上的。Java网络程序都采用客户/服务器通信模式

  • TCP
    建立TCP客户端
//1、创建TCP客户端Socket对象,同时构造方法中的host表示的连接的服务端的ip地址,port表示的是连接的服务端的端口
String host = InetAddress.getLocalHost();
int port = 10000;
Socket socket = new Socket(host,port);
//2、连接成功之后,就会有返回了socket对象,然后调用对应的输入流和输出流,进行数据的交互
InputStream in = socket.getInputStream();//获取读取流,接收来自服务端的数据
OutputStream out = socket.getOutputStream();//获取写入流,向服务端发送数据
//3、断开连接,释放资源
socket.close();

TCP服务端:

//1、创建TCP服务端ServerSocket对象,同时需要设置该服务端绑定的端口
ServerSocket server = new ServerSocket(10000);
//2、由于ServerSocket对象没有获取流的方法,所以没有办法直接向客户端进行数据交互,所以需要获取和当前服务端建立连接的Socket对象
Socket socket = server.accept();
//3、socket对象调用对应的方法,获取相应的流
InputStream in = socket.getInputStream();//获取读取流,读取客户端发来的数据
OutputStream out = socket.getOutputStream();//获取写入流,向客户端发送数据
//4、断开连接,释放资源
socket.close();
server.close();

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • UDP:
    创建UDP客户端
//1、创建UDP客户端对象,同时需要设置绑定的端口,如果没有设置,则有操作系统任意分配可用的端口
DatagramSocket client = new DatagramSocket(10000);//设置当前客户端绑定的端口
//2、创建数据包,用于存放发送的数据
String text = "hello,this is udp client!";
byte[] bytes = text.getBytes();
//创建数据包对象的时候,如果含有host,port参数的时候,表示这个数据包用于发送的,否则,如果没有,则是用于接受的
String host = InetAddress.getLocalHost();
int port = 10001;
DatagramPacket data = new DatagramPacket(bytes,bytes.length,host,port);
//3、UDP客户端调用send方法,发送数据包
client.send(data);
//4、释放资源
client.close();

创建UDP服务端:

//1、创建UDP服务端,同时设置对应的端口
int port = 10001;//和客户端数据包中的端口号一致
DatagramSocket server = new DatagramSocket(port);
//2、创建数据包,用于存放来自客户端的数据
byte[] bytes = new byte[1024];
DatagramPacket data = new DatagramPacket(bytes,bytes.length);
//3、服务端调用receive方法接收来自客户端的数据,并且存放到数据包中
server.receive(data);
//4、数据包对象调用相关的方法,解析数据,例如客户端的端口号,发送的数据内容等
String text = new String(data.getData(),0,data.getLength());
System.out.println(text);
//5、释放资源
server.close();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值