IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 网络编程-第一阶段-第二十一天 -> 正文阅读

[网络协议]网络编程-第一阶段-第二十一天

网络编程

1.网络的基本概念

1.1 计算机网络

使用通信线路将分布在不同地理位置的多台计算机连接起来形成一个网络系统,主要的目的是为了实现网络中任意两台计算机之间的信息传输和资源的共享

网络编程需要解决的两个问题:

  1. 如何在整个网络中精准的找到通信的对方?
  2. 如何实现通信双方有效的沟通?
  1. 问题一的解决办法:
    使用IP地址可以在整个网络中唯一确定某一台主机,IP地址具有“唯一性”
  2. 关于IP地址的一些常识
    2.1 IP地址的分类按照版本可分为IPV4和IPV6
    2.1.1 IPV4的格式:采用4个字节 32位二进制来表示的(如192.168.25.25)
    2.1.2 IPV6的格式:采用16个字节 128位
    2.2 IP地址的分类按照应用范围可分为内网ip和公网ip,内网ip是在一个路由下的设备的ip,公网ip是全球互联网的一个设备终端身份标识,公网ip是有全球互联网根服务器管理着,网站程序是我们通过各种编程语言编写的服务程序。内网ip范围(192.168.0.0—192.168.255.255)
    2.3 域名:俗称“网址” 可以认为是IP地址的另一种表示方式
    2.4 特殊的IP地址:本机回环地址 127.0.0.1 自己连接自己 对应的名称 localhost
    2.5 IP地址只能从整个网络中唯一定位一台主机,而一台主机上可能同时运行多个不同的网络应用,这时采用端口号的方式来区分,端口 号代表某台主机中具体某个网络应用程序
    2.6 IP+端口号构成了网络通信中的一个唯一的节点 我们也将它两的组成称为“套接字” socket网络编程具体来说是实现点对点的通信,每个点就是由一个套接字唯一描述
    2.7 端口号必须设置在一个规定的范围内 0-65535,0-1023这个区间段的端口不要使用,因为已经被其他的网络应用预先占领,例如 http的通信端口号是80 ftp默认占用的是21 端口
  1. 问题二的解决办法:
    为通信的双方指定标准的通信协议,因为网络的通信协议非常复杂,在实际中分为不同的层进行分别的定义,比如应用层协议 http ftp … 传输层:tcp upd 网络层 数据链路层
  2. 计算机网络分层
    1、实体层(物理层)
    物理层说白了就是那些连线,光纤、双绞线之类的。
    2、链接层(数据链路层)
    他也是计算机网络的低层,他的作用就是将网络层交下来的数据封装成帧交给物理层,以及将从物理层接收的帧解析出数据交给网络层。(ps:数据在物理层一般叫帧,在网络层交IP数据报或者包)。像适配器、转发器、集线器、网桥、交换机都被归在链接层。
    3、网络层
    网络层的作用是向上层提供简单灵活的、无连接的、尽最大努力交付的数据报服务,它不提供服务质量的承诺,它是为主机间提供逻辑通信。这里涉及到地址解析,路由等内容。常见的路由器可以归为网络层。
    因特网的网络层包括著名的IP协议,该协议定义了数据报中的各个字段以及端系统和路 由器如何作用于这些字段。仅有一个IP协议,所有具有网络层的因特网组件都必须运行IP协议。
    4、运输层
    运输层是为应用进程之间提供端到端的逻辑通信。传说中的TCP三次握手、四次握手就发生在这里。这里需要重点关注。
    常见协议:① 传输控制协议TCP (Transmission Control Protocol)
    ② 用户数据报协议UDP (User Datagram Protocol)
    5、应用层
    域名解析、HTTP、电子邮件等等都是应用层的范畴。应用层的协议比较多,我们重点关注HTTP 协议。

2.编码部分

2.1 基于TCP协议的编码(重点)

TCP协议的特点:通信的双方在进行信息的传输之前必须首先建立好连接,在连接过程中有一个三次握手的动作,保证通信的可靠,一旦建立好连接可以发送大量的数据,在通信结束的时候要关闭连接(四次挥手),相比来说效率比较低

UDP协议的特点:通信之前无需建立双方的连接,通信结束后也无需进行资源的释放,通信效率比较高,UDP协议的通信是不可靠的,传输的过程中可能会发生数据的丢失,发送方也不关系接受者是否成功的接受到消息,每次发送的数据只能在64K的范围内

需求:设计两个JAVA工程分别表示通信的双方(客户端 和 服务端)

public static void main(String[] args) throws IOException {
    //1.创建一个侦听的端口:只能用于侦听工作,不能作为通信端口
    ServerSocket ss=new ServerSocket(7788);
    //调用ServerSocket对象的accept方法来接收客户端发起的连接请求
    System.out.println("准备接收客户端的连接....");
    Socket socket = ss.accept();//是一个阻塞的方法,返回和接收到的客户端进行通信的专用端口
    //一台服务器可以通过和多个客户端进行连接,侦听端口只有一个,但是通信的端口,每个客户端分别对应一个
    System.out.println("接收到一个客户端的连接...");

    InputStream in = socket.getInputStream();
    byte[] buffer=new byte[1024];
    System.out.println("等待客户端发送的消息...");
    int r=in.read(buffer);
    System.out.println("客户端说:" + new String(buffer,0,r));
    in.close();
    socket.close();
    ss.close();

}
public static void main(String[] args) throws UnknownHostException, IOException {
    //1.创建一个通信端口Socket,并指定要连接的对方(IP+端口号)
    //该对象在创建的时候就会建立和远程服务器的连接
    Socket socket=new Socket("127.0.0.1", 7788);
    //客户端向连接到的服务器发送一条消息
    //获取到一个输出流(是一个字节流)
    String message;
    System.out.println("请输入消息:");
    message=new Scanner(System.in).next();
    OutputStream os = socket.getOutputStream();
    os.write(message.getBytes());
    os.flush();
    os.close();
    socket.close();		
}

2.2基于UDP协议的编码(了解)

	public static void main(String[] args) throws Exception {
		DatagramSocket socket=new DatagramSocket();
		byte[] buffer="一个导弹...".getBytes();
		//数据包中不仅有发送的内容还有收件人的地址
		DatagramPacket packet=
				new DatagramPacket(buffer, 0,buffer.length,InetAddress.getByName("127.0.0.1"), 6677);
		//将数据包发送出去
		socket.send(packet);
		System.out.println("发送成功");
		
	}
public class Receiver {
	public static void main(String[] args) throws Exception {
		DatagramSocket socket=new DatagramSocket(6677);
		byte[] buffer=new byte[1024];
		DatagramPacket packet=new DatagramPacket(buffer, 0,buffer.length);
		socket.receive(packet);
		//从数据包中获取接收到的信息
		byte[] data = packet.getData();
		System.out.println(new String(data,0,data.length));
		
		
	}
}
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 12:04:52  更:2021-08-16 12:07:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 13:05:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计