赞
踩
定义一些传输数据的协议和端口,传输协议同时进行流量控制,根据接收方的数据吞入熟读,规定适当的发送速率,解决传输效率及能力问题
TCP/IP即传输控制/网络协议,是面向连接的协议,发送数据前要先建立连接(发送方和接收方的成
对的两个之间必须建 立连接),TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢
失,没有重复,并且按顺序到达
TCP三次握手是建立TCP连接的过程,用于确认客户端和服务器之间的发送和接收功能是否正常。以下是TCP三次握手的具体细节:
在三次握手过程中,每个数据包都包含一个序列号(seq)和一个确认号(ack)。序列号用于标识发送方发送的数据包的顺序,而确认号则用于确认接收方已成功接收到的数据包的顺序。通过比较序列号和确认号,双方可以确保数据的正确传输和接收。
此外,值得注意的是,在第二次和第三次握手中,服务器和客户端都会发送SYN和ACK标志位都为1的数据包,这是因为SYN和ACK标志位在不同的阶段有不同的含义。在第二次握手中,服务器的SYN标志位表示它正在请求与客户端建立连接,而ACK标志位则表示它已接收到客户端的连接请求。在第三次握手中,客户端的SYN标志位已不再需要,因为连接已经建立,而ACK标志位则用于确认已接收到服务器的SYN+ACK包。
总之,TCP三次握手是一个非常重要的过程,用于确保客户端和服务器之间的连接是可靠的,并且可以正常地传输数据。通过三次握手,双方可以确认彼此的发送和接收功能是否正常,并建立稳定的连接。
甲给乙打电话
第一次握手 甲拨打乙的电话,乙的手机接收到甲的通话请求 服务器确认客户端发送正常
第二次握手 乙的手机会同步返回一个信令,告诉甲的手机,大哥,我收到了你的信息哦,客户端确认自己发送和接收与服务器发送和接收都正常,此时服务器只知道自己接收正常不知道自己发送是否正常
第三次握手 甲的手机接收到这个信令后,确认了乙的手机可以呼叫的通,继续呼叫(重点是怎么确定是继续呼叫还是第一次呼叫,这也就是那些丢来丢去的数据包做的事情),客户端继续呼叫了,服务器收到它的继续呼叫,说明自己也发送成功了,确认了双方都收发正常,可以建立正常的通讯了
这三次握手是缺一不可的,只要缺少就无法保证双向的接收都正常
实际上以上就已经是建立了可信型通讯通道了,你实际上通讯的拒接或者收听都是建立在这个通讯通道建立的后续操作了
使用TCP(传输控制协议)的协议有很多,以下是一些常见的例子:
以上只是使用TCP协议的一部分协议,实际上还有很多其他的协议也使用TCP进行数据传输。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,广泛应用于各种网络应用中。
TCP例子
- package com.zxs;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
-
- public class TCPServer {
- public static void main(String[] args) {
- try {
- ServerSocket server = new ServerSocket(8081);
- System.out.println("等待客户端连接...");
- while (true) {
- Socket socket = server.accept();
- System.out.println("客户信息为:" + socket.getRemoteSocketAddress());
- InputStream in = socket.getInputStream();
- byte[] buffer = new byte[1024];
- int len = 0;
- while ((len = in.read(buffer)) > 0) {
- System.out.println(new String(buffer, 0, len));
- }
- OutputStream out = socket.getOutputStream();
- out.write("1".getBytes());
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- package com.zxs;
-
- import java.io.IOException;
- import java.io.OutputStream;
- import java.net.Socket;
- import java.util.Scanner;
-
- public class TCPClient {
- public static void main(String[] args) throws IOException {
- Socket socket = new Socket("127.0.0.1", 8081);
- OutputStream outputStream = socket.getOutputStream();
- System.out.println("连接成功请输入:");
- while (true) {
- byte[] car = new Scanner(System.in).nextLine().getBytes();
- outputStream.write(car);
- outputStream.flush();
- }
- }
- }
UDP它是属于TCP/IP协议族中的一种。是无连接的协议,发送数据前不需要建立连接,是没有可
靠性的协议。因为不需要建立连接所以可以在在网络上以任何可能的路径传输,因此能否到达目的
地,到达目的地的时间以及内容的正确性都是不能被保证的。
UDP(User Datagram Protocol)是用户数据报协议,它是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成。
UDP协议的主要特点包括:
假如到了年底放假,具体什么时候放假,人事在群里发一个放假通知,你Y的加没加群屏没屏蔽,收没收到不关他的事,他反正是通知了
使用UDP(用户数据报协议)的协议主要有:
此外,还有一些实时性要求较高、数据量较小的应用场景也会使用UDP协议,例如网络视频会议系统、在线视频、网络语音电话等。
需要注意的是,虽然这些协议使用UDP进行通信,但并不意味着它们完全不依赖TCP。在某些情况下,这些协议可能会使用TCP进行辅助通信,例如当需要建立连接或进行可靠的数据传输时。
UDP例子
- package com.zxs;
-
- import java.io.IOException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
-
- //UDP协议Socket:服务端
- public class UDPServer {
- public static void main(String[] args) {
- try {
- DatagramSocket socket = new DatagramSocket(8082);
- System.out.println("服务端准备中...");
- while (true) {
- byte[] car = new byte[1024];
- DatagramPacket packet = new DatagramPacket(car, car.length);
- socket.receive(packet);
- int length = packet.getLength();
- System.out.println("接收到的数据:" + new String(car, 0, length));
- System.out.println("UDP协议Socket接受成功");
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- package com.zxs;
-
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetSocketAddress;
- import java.util.Scanner;
-
- public class UDPClient {
- public static void main(String[] args) {
- try {
- DatagramSocket socket = new DatagramSocket(2468);
- InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8082);
- System.out.println("请输入你要公告的信息:");
- while (true) {
- byte[] car = new Scanner(System.in).nextLine().getBytes();
- DatagramPacket packet = new DatagramPacket(car, car.length,
- address);
- socket.send(packet);
- System.out.println("UDP协议的Socket发送成功");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。