精华内容
下载资源
问答
  • UDP协议和TCP协议

    千次阅读 2019-03-02 17:21:39
    1 UDP协议 UDP通讯协议的特点: 将数据封装为数据包。面向无连接。 每个数据包大小限制在64K。 因为无连接,所以不可靠。 因为不需要建立连接,所以速度快。 UDP通讯是不分服务端客服端的,只分发送端接收端。...
    目录
    1 UDP协议
    2 TCP协议
    

    1 UDP协议


    UDP通讯协议的特点:

    • 将数据封装为数据包。面向无连接。
    • 每个数据包大小限制在64K。
    • 因为无连接,所以不可靠。
    • 因为不需要建立连接,所以速度快。
    • UDP通讯是不分服务端和客服端的,只分发送端和接收端

    发送端的使用步骤:

    1. 建立UDP的服务
    2. 准备数据,把数据封装到数据包中发送。发送端的数据包要带上IP地址与端口号
    3. 调用UDP的服务,发送数据
    4. 关闭资源
    /**
     1. 发送端
    */
    public class Demo1Sender {
    	public static void main(String[] args) throws IOException {
    		// 建立UDP的服务
    		DatagramSocket datagramSocket = new DatagramSocket();
    		// 准备数据,把数据封装到数据包中
    		String data = "这是我的第一个UDP的例子!";
    		// 创建一个数据包
    		DatagramPacket packet = new DatagramPacket(data.getBytes(), data.getBytes().length, InetAddress.getLocalHost(), 9090);
    		// 调用UDP的服务发送数据包
    		datagramSocket.send(packet);
    		// 关闭资源-----实际上就是释放占用的端口号
    		datagramSocket.close();
    	}
    }
    

    接收端的使用步骤:

    1. 建立UDP的服务
    2. 准备空的数据包接收数据
    3. 调用UDP的服务接收数据
    4. 关闭资源
    /**
    * 接收端
    */
    public class Demo1Receive {
    	public static void main(String[] args) throws IOException {
    		// 建立UDP的服务,并且要监听一个端口
    		DatagramSocket socket = new DatagramSocket(9090);
    		// 准备空的数据包用于存放数据
    		byte[] buf = new byte[1024];
    		DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
    		// 调用UDP的服务接收数据   receive() 是一个阻塞型方法,没有接收到数据包之前会一直等待。
    		socket.receive(datagramPacket);  //  实际上是存储到了byte数组中了。
    		System.out.println("接收端收到的数据:" + new String(buf, 0, datagramPacket.getLength())); // getLength() 获取数据包存储了几个字节
    		// 关闭资源
    		socket.close();
    	}
    }
    

    在UDP协议中,有一个IP地址称作为广播地址,广播地址就是主机号为255的地址。给广播地址发送消息时,在同一个网络段的机器都可以接收到信息。

    /*
    * 群聊发送端
    */
    public class ChatSender extends Thread {
    	@Override
    	public void run() {
    		try {
    			// 建立UDP的服务
    			DatagramSocket socket = new DatagramSocket();
    			// 准备数据,把数据封装到数据包中
    			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
    			String line = null;
    			DatagramPacket packet = null;
    			while((line = bufferedReader.readLine()) != null) {
    				// 把数据封装到数据包中
    				packet = new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("10.200.17.255"), 9092);
    				// 发送数据
    				socket.send(packet);
    			}
    			// 关闭资源
    			socket.close();
    		} catch(IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    /**
    * 群聊接收端
    */
    public class ChatReceive extends Thread{
    	@Override
    	public void run() {
    		try {
    			// 创建UDP的服务
    			DatagramSocket socket = new DatagramSocket(9092);
    			// 准备空的数据包存储数据
    			byte[] buf = new byte[1024];
    			DatagramPacket packet = new DatagramPacket(buf, buf.length);
    			boolean flag = true;
    			while(flag) {
    				socket.receive(packet);
    				// packet.getAddress() 获取对方数据包的IP地址对象
    				System.out.println(packet.getAddress().getHostAddress() + "说:" + new String(buf, 0 ,packet.getLength()));
    			}
    			// 关闭资源
    			socket.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    public class ChatMain {
    	public static void main(String[] args) {
    		ChatReceive chatReceive = new ChatReceive();
    		chatReceive.start();
    		ChatSender chatSender = new ChatSender();
    		chatSender.start();
    	}
    }
    

    UDP是一个不可靠(数据包可能会丢失)的协议。

    什么情况下数据包会出现丢失呢?

    • 带宽不足
    • CPU的处理能力不足

    2 TCP协议


    TCP通讯协议的特点:

    • TCP是基于IO流进行数据传输的,面向连接。
    • TCP进行数据传输时是没有大小限制的。
    • TCP是面向连接的,通过三次握手机制保证数据完整性。是可靠协议。
    • TCP是面向连接的,所以速度慢。
    • TCP是区分客户端与服务端的。

    TCP的客户端使用步骤:

    1. 建立TCP的客户端服务
    2. 获取对应的流对象
    3. 写出或读取数据
    4. 关闭资源
    public class Demo1Client {
    	public static void main(String[] args) throws IOException {
    		// 建立TCP的服务
    		Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
    		// 获取到Socket对象的输出流对象
    		OutputStream outputStream = socket.getOutputStream();
    		// 利用输出流对象把数据写出即可
    		outputStream.write("服务端你好!".getBytes());		
    
    		// 获取输入流对象,读取服务端回送的数据
    		InputStream inputStream = socket.getInputStream();
    		byte[] buf = new byte[1024];
    		int length = inputStream.read(buf);
    		System.out.println("客户端接收到的数据:" + new String(buf, 0, length));
    		// 关闭资源
    		socket.close();
    	}
    }
    

    ServerSocket的使用步骤:

    1. 建立TCP服务端的服务
    2. 接收客户端的连接产生一个Socket
    3. 获取对应的流对象读取或者写出数据
    4. 关闭资源
    public class Demo1Server {
    	public static void main(String[] args) throws IOException {
    		// 建立TCP的服务端,并且监听一个端口
    		ServerSocket serverSocket = new ServerSocket(9090);
    		// 接收客户端的连接
    		Socket socket = serverSocket.accept(); // accept() 接收客户端的连接,该方法也是一个阻塞的方法,没有客户端与其连接时,会一直等待下去。
    		// 获取输入流对象,读取客户端发送的内容
    		InputStream inputStream = socket.getInputStream();
    		byte[] buf = new byte[1024];
    		int length = inputStream.read(buf);
    		System.out.println("服务端接收到的数据:" + new String(buf, 0, length));
    		// 获取输出流对象,向客户端发送数据
    		OutputStream outputStream = socket.getOutputStream();
    		outputStream.write("客户端你好啊!".getBytes());
    		// 关闭资源
    		serverSocket.close();
    	}
    }
    

    需求:客户端和服务端一问一答聊天。

    /**
    * 聊天的客户端
    */
    public class ChatClient {
    	public static void main(String[] args) throws IOException {
    		// 建立TCP的客户端服务
    		Socket socket = new Socket(InetAddress.getLocalHost(), 9090);
    		// 获取键盘的输入流,读取数据
    		BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
    		// 获取Socket的输出流对象
    		OutputStreamWriter socketOut = new OutputStreamWriter(socket.getOutputStream());
    		// 获取Socket的输入流对象
    		BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));		
    
    		String line = null;
    		// 不断地读取键盘的录入数据,然后把数据写出
    		while((line = keyReader.readLine()) != null) {
    			socketOut.write(line + "\r\n"); // 这里写一行数据时,是不会写到\r\n的(readLine方法不会读到\r\n),这样在服务端读一行数据时就读不到\r\n,导致读取数据失败
    			// 刷新
    			socketOut.flush();
    			// 读取服务端回送的数据
    			line = socketReader.readLine();
    			System.out.println("服务端回送的数据:" + line);
    		}
    		// 关闭资源
    		socket.close();
    	}
    }
    
    /**
    * 聊天的服务端
    */
    public class ChatServer {
    	public static void main(String[] args) throws IOException {
    		// 建立TCP的服务端服务
    		ServerSocket serverSocket = new ServerSocket(9090);
    		// 接收客户端的连接,产生一个Socket
    		Socket socket = serverSocket.accept();
    		// 获取键盘的输入流对象
    		BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
    		// 获取Socket的输出流对象
    		BufferedWriter keyOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    		// 获取到Socket的输入流对象
    		BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    		// 读取客户端的数据
    		String line = null;
    		while((line = socketReader.readLine()) != null) {
    			System.out.println("服务端接收到的数据:" + line);
    			System.out.println("请输入服务端回送的数据:");
    			line = keyReader.readLine();
    			keyOut.write(line + "\r\n");
    			keyOut.flush();
    		}
    		// 关闭资源
    		serverSocket.close();
    	}
    }
    
    展开全文
  • UDP协议 TCP协议

    千次阅读 2019-06-04 19:58:24
    1.UDP协议 1.1概述 用户数据包协议UDP (User Datagram Protocol),提供无连接的、尽最大努力的数据传输服务(不保证数据传输的可靠性),数据传输单位为 用户数据包。 无连接:不需要建立连接,也不需要释放...

    1. UDP协议 

    1.1 概述

    用户数据包协议UDP (User Datagram Protocol),提供无连接的、尽最大努力的数据传输服务(不保证数据传输的可靠性),数据传输单位为 用户数据包。

    • 无连接:不需要建立连接,也不需要释放连接,减少了开销和发送数据的时延。

    • 最大努力的数据传输服务:不保证数据传输的可靠性,没有超时和重传功能。

    • 面向报文:发送方对应用程序交下来的服务,添加首部后就向下交付给IP层,不合并,也不拆分,保留文本的边界。UDP一次性交付一个完整的报文,因此应用程序一定要选择合适大小的报文,报文太长IP层需要进行分片,太短会导致IP数据包的相对长度过大,效率过低。接收方,去除首部后就交给应用程序。如下图所示(该图出自《计算机网络第七版》,谢希仁老师编著,下同)。

    • 没有拥塞控制:网络出现的拥塞不会使源主机的发送速率降低。对实时应用非常重要。例如:IP电话、实时视频会议、允许丢失数据但不允许有太大时延(即这些应用可以卡一下,但是要保证其实时性)。

    • 支持一对一、一对多、多对一、多对多的交互通信。

    • 首部开销小,只有8个字节,TCP首部需要20个字节。

    1.1 首部格式和端口分用

    UDP 由数据字段 和 首部字段。 首部字段很简单,只有 8 个字节,由四个字段构成。

    • 源端口 : 源端口号, 需要对方回复时选用 ,不需要时可全用 0 。

    • 目的端口号 : 目的端口号,交付报文必须使用。

    • 长度:UDP 数据包长度 ,最小值为 8 。

    • 检验和:检测UDP 用户数据包在 传输 中 是否有错 。 有错就丢弃

    UDP 分用 , 根据首部中的目的端口号,将UDP数据报通过响应的端口,上交给最后的终点:应用进程。如下图所示。

    如果接受方 UDP 发现收到的报文不正确,  丢弃该报文, 并由 ICMP 发送“端口不可达”差错报文给主机 。

    2. TCP 协议

    传输控制协议TCP (Transmission Control Protocol),提供面向连接、可靠的数据传输服务,其数据传输的单位为报文段。

    • 面向连接 : 在使用 TCP 协议之前,必须建立TCP连接,在传送数据完毕之后,必须释放连接。

    • TCP连接只能有两个端点:点对点  即一对一。

    • TCP提供可靠交付的服务。通过TCP连接传送的数据无差错、不丢失、不重复、并且按序到达

    • TCP提供全双工通信。通信双方的应用进程任何时候都可以发送数据。

    • TCP 连接两端都设有发送缓存,接受缓存,用来储存临时通信的数据。发送时,应用程序把数据传送给TCP的缓存,就可以做其他事了。接收时,TCP把收到的数据放入缓存,上层应用程序在合适的时候读取缓存。

    • 面向字节流: TCP中的流指的是流入到进程或从进程中流出的字节序列。”面向字节流 的含义“ 应用程序和TCP是一次一个数据块(大小不等)。如下图所示:

    参考文献:

    • 计算机网络/谢希仁编著. ——7版 ——北京:电子工业出版社,2017.1
    展开全文
  • Day23一、网络编程1、网络编程的概念2、IP地址和端口号二、UDP协议和TCP协议1、通信协议2、UDP协议和TCP协议三、UDP编程和TCP编程1、InetAddress类2、Socket编程3、UDP编程说明4、TCP编程 一、网络编程 1、网络编程...

    一、网络编程

    1、网络编程的概念

    在这里插入图片描述

    2、IP地址和端口号

    IP地址
    在这里插入图片描述
    端口号
    在这里插入图片描述

    二、UDP协议和TCP协议

    1、通信协议

    在这里插入图片描述

    2、UDP协议和TCP协议

    在这里插入图片描述

    三、UDP编程和TCP编程

    1、InetAddress类

    在这里插入图片描述

    2、Socket编程

    在这里插入图片描述

    3、UDP编程说明

    在这里插入图片描述
    UDP编程步骤
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4、TCP编程

    在这里插入图片描述
    在这里插入图片描述
    TCP编程步骤
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 文章目录1 UDP协议2 TCP协议3 可靠传输的基本原理3.1 停止等待协议3.2 连续ARQ协议4 TCP协议的可靠传输5 TCP协议的流量控制6 TCP协议的拥塞控制 注:转载请标明原文出处链接:...

    在这里插入图片描述


    注:转载请标明原文出处链接:https://xiongyiming.blog.csdn.net/article/details/103656698


    在这里插入图片描述


    在这里插入图片描述


    在这里插入图片描述

    传输层的作用:管理端到端的通信连接

    在这里插入图片描述



    1 UDP协议

    用户数据报协议(User Datagram Protocol, UDP), UDP协议相对于TCP协议是一个简单的协议。

    在这里插入图片描述

    UDP协议的特点
    UDP是无连接协议;
    UDP不能保证可靠的交付数据(无法保证数据在网络中是否丢失);
    UDP是面向报文传输的(应用层传输过来的数据);
    UDP没有拥塞控制;
    UDP的首部开销很小。



    2 TCP协议

    传输控制协议(Transmission Control Protocol, TCP)是计算机网路中非常复杂的协议。

    在这里插入图片描述


    TCP协议的特点
    (1) TCP是面向连接的协议;
    (2) TCP的一个连接有两端(点对点通信);
    (3) TCP提供可靠的传输服务;
    (4) TCP协议提供全双工的通信;
    (5) TCP是面向字节流的协议;


    在这里插入图片描述


    在这里插入图片描述


    在这里插入图片描述



    3 可靠传输的基本原理

    3.1 停止等待协议

    停止等待协议通过超时重传保证数据可靠传输,属于最简单的可靠传输协议。

    无差错的情况下的传输如下图所示:
    在这里插入图片描述


    在出差错的情况中有以下三种情况需要进行重传:

    1. 发送的消息在路上丢失了;
    2. 确认的消息在路上丢失了;
    3. 确认的消息很久才到达;

    (1) 发送的消息在路上丢失了,如下图所示:

    在这里插入图片描述

    (2) 确认的消息在路上丢失了,如下图所示:

    在这里插入图片描述


    (3) 确认的消息很久才到达,如下图所示:
    在这里插入图片描述


    在传输过程中,每发送一个消息,都需要设置一个定时器(称为超时定时器)。

    停止等待协议的缺点:停止等待协议对信道利用效率并不高。



    3.2 连续ARQ协议

    针对停止等待协议对信道利用效率并不高这个缺点,引出连续ARQ协议。
    自动重传请求 (Automatic Repeat request, ARQ)

    在这里插入图片描述



    4 TCP协议的可靠传输

    (1) TCP协议的可靠传输是基于连续ARQ协议。
    (2) TCP的滑动窗口是以字节为单位的(不是以报文为单位)。

    在这里插入图片描述


    如果没有按照序号接受的,窗口不滑动,需要进行重传(保证可靠传输)。

    在这里插入图片描述

    如上图所示,因为窗口内的数据有正确接收,因为前面的数据没有正确传输而导致整个窗口内的数据需要进行重新传输,这大大降低了效率,因此可以进行选择重传(需要指定需要重传的字节)。



    5 TCP协议的流量控制

    (1) 流量控制指让发送方发送的速率不要太快;
    (2) 流量控制是使用滑动窗口来实现的;

    在这里插入图片描述


    使用坚持定时器解决传输中的死锁情况
    (1) 当接收到窗口为0的时候,启动坚持定时器;
    (2) 坚持定时器每隔一段时间发送一个窗口探测报文;



    6 TCP协议的拥塞控制

    在这里插入图片描述


    (1) 流量控制考虑点对点的通信量的控制,而拥塞控制考虑整个网络,是全局性的考虑。
    (2) 报文超时则认为是拥塞(简单粗暴)。
    (3) 拥塞控制有慢启动算法拥塞避免算法


    慢启动算法
    (1) 从小到大逐渐增加发送数据量;
    (2) 每收到一个报文确认,就增加1;


    拥塞避免算法
    (1) 维护一个拥塞窗口的变量;
    (2) 只要网络不拥塞,就试探着将拥塞窗口调大(直到发送至拥塞为止);




    参考资料
    [1] https://coding.imooc.com/class/355.html

    展开全文
  • UDP协议和TCP协议的校验

    千次阅读 2019-07-05 20:36:16
    UDP的校验要加上12B伪首部、伪首部5个字段、源IP(4B)、目标IP(4B)、全0字段(1B)、IP首部协议字段的值(1B)、UDP用户数据报的长度(2B)。 然后把16位作为一组,也就是2B作为一组,如果说UDP用户数据报+伪首部是奇数...
  • 1. UDP协议 1.1 流程 服务器:new DatagramSocket(端口号) 启动服务器。 服务器:receive()方法等待接收网络数据包(阻塞方法:服务端先调用该方法,会进入持续等待的状态)。 客户端:通过目的ip+目的port(端口号)...
  • UDPTCP特点 UDP:只提供应用进程寻址简单的差错检错功能,不向应用层提供数据的可靠性传输,实时性好,效率高。 TCP:提供应用进程寻址,还能为应用层提供可靠的数据传输服务,具有流量控制拥塞控制能力。 各...
  • UDP协议和TCP协议的区别

    千次阅读 2010-04-17 00:15:00
     TCP协议是互联网发展过程中非常重要的一个协议,当使用TCP协议作为底层协议时,他能够保证你发送的数据按照一定的时序到达目的地,并且目的地会根据TCP协议的控制数据来校验数据的完整性正确性。同时TCP协议在...
  • Transmission Control Protocol 已经透露了TCP协议是一个传输控制协议。 面向链接 创建一个发送缓冲区接收缓冲区。TCP的读写不需要一一匹配。 看图片都觉得很繁琐,这每一个模块都非常有用,不可或缺...
  • 首先咱们弄清楚,TCP协议和UDP协议与TCP/IP协议的联系,很多人犯糊涂了, 一直都是说TCP协议UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议的,UDP只是其中的...
  • tcp协议和udp协议区别TCP and UDP are two protocols that are part of the transport layer in a TCP/IP model of data transmission. Both share the same core function – transmitting data packets from the ...
  • 终于懂了TCP和UDP协议区别

    万次阅读 多人点赞 2020-03-26 12:03:28
    终于懂了TCP和UDP协议区别
  •  UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才...
  • 在计算机网络中,这些连接通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。   &nb...
  • DNS同时占用UDP和TCP端口53...UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接
  • TCP协议UDP协议,TCP/IP的区别

    千次阅读 2016-11-11 22:20:24
    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中...
  • 介绍了TCP和UDP协议的基本概念首部信息,以及TCP协议的三次握手四次挥手,以及TCP字节流UDP数据报的区别!
  • 本文介绍了UDP\TCP协议的基础知识,主要内容有:UDP\TCP协议在TCP/IP协议栈中的位置作用 UDP\TCP协议数据段格式 TCP协议如何保证数据传输的可靠性 tips:全文阅读需5min 小伙伴们燥起来(づ。◕ᴗᴗ◕。)づTCP/IP...
  • Modbus RTU协议和TCP/UDP协议的区别

    千次阅读 2018-08-31 11:31:41
    Modbus通讯协议和TCP/UDP协议的区别: 1、Modbus协议属于应用层(OSI模型第7层)协议,TCP/UDP协议属于传输层(OSI模型第4层)协议,两者层级不是并列关系。 打个比喻,Modbus协议就像公司里的总经理,TCP/UDP协议...
  • 简言之:使用UDP协议时,不需要建立连接,只需要知道对方的IP地址端口号,就可以直接发数据包。但是,能不能到达就不知道了。速度比tcp发送数据快 from socket import * # 1. 创建udp套接字 udp_socket = socket...
  • 和TCP协议一样,也处于计算机网络的运输层(传输层)。 但是UDP是一种不可靠的协议,正如名字,他是无连接的、面向应用报文的协议。 无连接:不同于TCP的三次握手建立连接、四次挥手释放连接,UDP协议的通信双方...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,475
精华内容 9,790
关键字:

udp协议和tcp协议