传输层两大战将TCP、UDP的定位

news/2024/5/18 15:13:43 标签: tcp/ip, udp, 网络, 网络协议

传输层

定义一些传输数据的协议和端口,传输协议同时进行流量控制,根据接收方的数据吞入熟读,规定适当的发送速率,解决传输效率及能力问题

什么是TCP

TCP/IP即传输控制/网络协议,是面向连接的协议,发送数据前要先建立连接(发送方和接收方的成
对的两个之间必须建 立连接),TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢
失,没有重复,并且按顺序到达

TCP是怎么建立服务端与客户端双向通信可信型通道的

TCP三次握手是建立TCP连接的过程,用于确认客户端和服务器之间的发送和接收功能是否正常。以下是TCP三次握手的具体细节:

  1. 第一次握手:客户端向服务器发送一个SYN包(即同步序列号),并进入SYN_SENT状态,等待服务器的确认。此时,SYN=1,seq=x(seq为客户端发送的序列号),表示客户端请求与服务器建立连接。
  2. 第二次握手:服务器收到客户端发送的SYN包后,会确认客户的ACK(即确认号),ack=x+1,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。SYN=1,ACK=1,seq=y(seq为服务器发送的序列号),ack=x+1,表示服务器已收到客户端的连接请求,并请求客户端确认。
  3. 第三次握手:客户端收到服务器的SYN+ACK包后,会向服务器发送一个确认包ACK,ack=y+1,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。此时,客户端和服务器都知道彼此有收发能力,可以开始传输数据了。

在三次握手过程中,每个数据包都包含一个序列号(seq)和一个确认号(ack)。序列号用于标识发送方发送的数据包的顺序,而确认号则用于确认接收方已成功接收到的数据包的顺序。通过比较序列号和确认号,双方可以确保数据的正确传输和接收。

此外,值得注意的是,在第二次和第三次握手中,服务器和客户端都会发送SYN和ACK标志位都为1的数据包,这是因为SYN和ACK标志位在不同的阶段有不同的含义。在第二次握手中,服务器的SYN标志位表示它正在请求与客户端建立连接,而ACK标志位则表示它已接收到客户端的连接请求。在第三次握手中,客户端的SYN标志位已不再需要,因为连接已经建立,而ACK标志位则用于确认已接收到服务器的SYN+ACK包。

总之,TCP三次握手是一个非常重要的过程,用于确保客户端和服务器之间的连接是可靠的,并且可以正常地传输数据。通过三次握手,双方可以确认彼此的发送和接收功能是否正常,并建立稳定的连接。

用打电话(IM的信令)来比喻三次握手

甲给乙打电话

 第一次握手  甲拨打乙的电话,乙的手机接收到甲的通话请求    服务器确认客户端发送正常

第二次握手   乙的手机会同步返回一个信令,告诉甲的手机,大哥,我收到了你的信息哦,客户端确认自己发送和接收与服务器发送和接收都正常,此时服务器只知道自己接收正常不知道自己发送是否正常

第三次握手   甲的手机接收到这个信令后,确认了乙的手机可以呼叫的通,继续呼叫(重点是怎么确定是继续呼叫还是第一次呼叫,这也就是那些丢来丢去的数据包做的事情)客户端继续呼叫了,服务器收到它的继续呼叫,说明自己也发送成功了,确认了双方都收发正常,可以建立正常的通讯了

这三次握手是缺一不可的,只要缺少就无法保证双向的接收都正常

 实际上以上就已经是建立了可信型通讯通道了,你实际上通讯的拒接或者收听都是建立在这个通讯通道建立的后续操作了

使用TCP协议的协议

使用TCP(传输控制协议)的协议有很多,以下是一些常见的例子:

  1. HTTP:超文本传输协议,用于在Web浏览器和服务器之间传输数据。
  2. HTTPS:安全超文本传输协议,是HTTP的安全版本,使用SSL/TLS对数据进行加密。
  3. FTP:文件传输协议,用于在客户端和服务器之间传输文件。
  4. POP3:邮局协议,用于从邮件服务器接收电子邮件。
  5. SMTP:简单邮件传输协议,用于发送电子邮件。
  6. Telnet:远程登录协议,允许用户通过终端登录到远程计算机。
  7. SSH:安全外壳协议,用于加密安全登录,替代安全性较差的Telnet协议。

以上只是使用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

UDP它是属于TCP/IP协议族中的一种。是无连接的协议,发送数据前不需要建立连接,是没有可
靠性的协议。因为不需要建立连接所以可以在在网络上以任何可能的路径传输,因此能否到达目的
地,到达目的地的时间以及内容的正确性都是不能被保证的。

我只负责公告,能不能收到是你们自己的事情

UDP(User Datagram Protocol)是用户数据报协议,它是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成。

UDP协议的主要特点包括:

  1. 面向无连接的协议,速度快但是不可靠。
  2. 只管发送数据,不确认对方是否收到,对方接收到数据之后也不会反馈一个信息给发送方。
  3. 基于数据包(报)传输:将要发送的数据,源和目的地址封装的数据包中。
  4. 数据包大小限制在64k以内。
用公司发送放假通知来比喻UDP的不负责

假如到了年底放假,具体什么时候放假,人事在群里发一个放假通知,你Y的加没加群屏没屏蔽,收没收到不关他的事,他反正是通知了

使用UDP协议的协议

使用UDP(用户数据报协议)的协议主要有:

  1. DNS(域名系统):DNS用于将域名转换为IP地址。由于DNS查询和响应通常较小,且不需要建立持续的连接,因此DNS使用UDP进行通信。
  2. TFTP(简单文件传输协议):这是一种简单的文件传输协议,通常用于嵌入式系统和网络设备的固件更新。TFTP使用UDP进行数据传输。
  3. RIP(路由信息协议):RIP是一种用于在自治系统(AS)内部网关之间传递路由信息的动态路由选择协议。RIP使用UDP进行通信。
  4. DHCP(动态主机配置协议):DHCP用于自动为网络中的主机分配IP地址。DHCP客户端和服务器之间使用UDP进行通信。
  5. SNMP(简单网络管理协议):SNMP用于网络管理系统收集和管理网络设备的信息。SNMP使用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();
        }
    }
}


http://www.niftyadmin.cn/n/5399157.html

相关文章

论文阅读:2015ResNet深度残差网络(待补充)

top5错误率:每张图片算法都会给出它认为最可能的五个类别,五个里面有一个是正确则算法预测正确。 技术爆炸1:2012年,DL和CNN用于CV;技术爆炸2:2015年,超过人类水平,网络可以更深&…

HTTPS的加密过程

文章目录 前言一、为什么需要加密?二、只用对称加密可以吗?三、只使用非对称加密四、双方都使用非对称加密五、使用非对称加密对称加密六、引入证书1.如何放防止数字证书被篡改?2.中间人有可能篡改该证书吗?3.中间人有可能掉包该证…

Linux红帽rhce认证多少钱?考个RHCE难不难?

Linux作为开源操作系统的佼佼者,已经广泛应用于各个领域。红帽认证工程师(Red Hat Certified Engineer,简称RHCE)作为Linux领域权威的认证之一,自然成为了众多IT从业者追求的目标。那么,RHCE认证的培训费用是多少?考取这一认证又…

Shell:字符串的截取和替换

#/bin/sha="hello, world, 88"echo ${a:0}echo ${a:2:3}echo ${a/l/ii}echo ${a//l/ii}echo ${a#he}echo ${a#*,}echo ${a##*,}echo ${a%88}echo ${a%,*}echo ${a%%,*} 运行程序输出: hello, world, 88 llo heiilo, world, 88 heiiiio, woriid, 88 llo, world, 88 w…

云畅科技携手飞腾打造智慧园区信创低代码综合解决方案

01 方案概述 随着国家对信创产业的日益重视与大力支持,信创行业的产业化进程正在不断加快。智慧园区,作为信创产业蓬勃发展的核心载体与战略平台,正日益凸显其重要性。与此同时,在政策引导和市场需求的双重驱动下,智慧…

特征值和特征向量及其在机器学习中的应用

特征值和特征向量是线性代数中的概念,用于分析和理解线性变换,特别是由方阵表示的线性变换。它们被用于许多不同的数学领域,包括机器学习和人工智能。 在机器学习中,特征值和特征向量用于表示数据、对数据执行操作以及训练机器学…

unity后期

unity|后处理篇 前言一、Post-Processing 1、 Post-Processing的使用2、Post-Processing后处理效果 抗锯齿①、Ambient Occlusion 环境光遮蔽②、Auto Exposure 自动曝光③、Bloom 辉光/泛光④、Chromatic Aberration | 色差⑤、Color Grading 色调/颜色分级⑥、Depth Of Fiel…

华为HarmnyOS TypeScript基础语法快速入门

华为HarmnyOS TypeScript基础语法快速入门 一、JavaScript、TypeScript、ArkTS二、TypeScript基础语法1. 基础类型2. 条件语句3. 函数4. 类5. 模块6. 迭代器 一、JavaScript、TypeScript、ArkTS ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript(简称TS&am…