您当前的位置:首页 > 电脑百科 > 网络技术 > 网络知识

TCP与UDP协议:网络通信中的两大重要角色

时间:2023-09-01 13:40:19  来源:今日头条  作者:JAVA新视界

引言

在这个像点点滴滴组成的虚拟宇宙中,网络通信就像是我们的超级高速公路系统,让信息在世界间飞速穿梭。想象一下,如果网络是一条繁忙的交通道路,那么协议就是交通信号灯,确保数据的流量在虚拟世界中保持有序。在这篇文章中,我们将揭开TCP和UDP这两个“交通指挥官”的神秘面纱,看看它们是如何在这个数字迷宫中引导我们的数据来去自如的,就像是在网络高速公路上开着各种“车”一样,有小巧敏捷的UDP跑车,也有稳重可靠的TCP家用车,它们共同构筑了一个充满乐趣和奇妙的网络世界!

第一部分:TCP(传输控制协议)

TCP的全称是传输控制协议(Transmission Control Protocol),它是一种网络通信中的基础协议。TCP以建立稳定的连接为特点,就像是你在电话通话前要先拨号,确保双方都在同一个通信频道上。这种面向连接的机制使得TCP能够保证数据的可靠传输,就像是在邮寄东西时使用追踪号一样,你可以随时查看包裹的状态,不用担心丢失或错乱。因此,无论是网页浏览、文件传输还是电子邮件,TCP都扮演着一个安全、可信赖的角色,确保你的数据在网络上无缝传递。

1、特点和优势

可靠性: TCP通过一系列巧妙的机制,保证数据在传输过程中的可靠性。首先,每当接收方收到数据,它都会发送一个确认信号(ACK)回去,告诉发送方数据已经安全接收。如果发送方没有收到确认,它会认为数据可能丢失,于是会重新发送该数据。这种确认和重传的机制就像是你发短信后等待对方的回复,如果没有收到回复,你会再次发送。此外,TCP还会对数据进行编号,确保接收方按照正确的顺序重建数据,就像是在拼图时按照编号拼凑。这种有序控制确保了数据不会乱序,就好像是你不会把拼图块放错位置。

差错检测和纠正: 为了检测和纠正数据传输过程中的错误,TCP使用了校验和(Checksum)机制。在发送数据之前,发送方会计算数据的校验和,并将其附加在数据上。接收方在收到数据后会再次计算校验和,如果发现接收到的校验和与计算得出的不一致,就会发出请求,要求发送方重新传输该数据。这就像是在给朋友传输一串数字时,朋友会重复念回来,确保没有听错。如果有错误,就会进行纠正,就像是纠正朋友听错的数字。这种机制使得TCP能够在数据传输过程中发现并纠正错误,确保数据的准确性和完整性,就像是在寄送重要信件时附带错误检查码一样,确保信件内容不受损。

2、流量控制与拥塞控制

TCP通过活动窗口机制来控制数据流速。发送方维护一个滑动窗口,表示可以连续发送的数据段数量,而无需等待确认。接收方维护一个接收窗口,根据自身处理能力调整窗口大小。发送方根据窗口大小发送数据段,收到确认后窗口滑动,允许发送更多数据。这种机制实现了可靠的数据传输,避免了网络拥塞。

3、三次握手与四次挥手:

TCP的三次握手是建立TCP连接的过程,确保通信双方都愿意开始数据传输。

 

三次握手建立连接过程

 

第一步 - 客户端发送SYN:

客户端向服务器发送一个带有SYN(同步)标志的TCP数据包。

这个数据包中的序列号(Sequence Number)字段随机选择一个初始值,表示客户端的起始序列号。

第二步 - 服务器回应SYN + ACK:

服务器收到客户端的SYN请求后,会发送一个带有SYN和ACK(确认)标志的TCP数据包作为回应。

在这个数据包中,服务器确认客户端的SYN,同时也向客户端发送自己的SYN请求。

服务器的确认号(Acknowledgment Number)字段设置为客户端发送的初始序列号加一,表示服务器期望下一个序列号的数据。

第三步 - 客户端确认ACK:

客户端收到服务器的SYN + ACK 数据包后,发送一个带有ACK标志的TCP数据包作为确认。

客户端的确认号设置为服务器的初始序列号加一,表示客户端期望下一个序列号的数据。

完成了这三个步骤后,TCP连接就建立起来了,双方可以开始进行数据传输。这个过程保证了通信的可靠性和数据同步。每个步骤中的序列号和确认号用于确保数据包的顺序和完整性,同时防止连接的不正当建立。

public class ThreeWayHandshakeSimulation {
    public static void mAIn(String[] args) {
        // 模拟服务器和客户端的IP地址和端口号
        String serverIP = "192.168.1.1";
        String clientIP = "192.168.1.2";
        int serverPort = 8080;
        int clientPort = 12345;

        // 模拟服务器和客户端的初始序列号
        int serverSeq = new Random().nextInt(1000);
        int clientSeq = new Random().nextInt(1000);

        // 模拟服务器和客户端的ACK号
        int serverAck = 0;
        int clientAck = 0;

        // 模拟服务器和客户端的状态
        String serverState = "LISTEN";
        String clientState = "CLOSED";

        // 模拟三次握手过程
        if ("CLOSED".equals(clientState)) {
            // 客户端发送SYN包
            System.out.println("客户端(" + clientIP + ":" + clientPort + ")发送SYN包,序列号" + clientSeq);
            clientState = "SYN_SENT";
        }
        if ("LISTEN".equals(serverState) && "SYN_SENT".equals(clientState)) {
            // 服务器接收SYN包并发送SYN-ACK包
            serverAck = clientSeq + 1;
            System.out.println("服务器(" + serverIP + ":" + serverPort + ")接收到客户端的SYN包,发送SYN-ACK包,序列号" + serverSeq + ",ACK号" + serverAck);
            serverState = "SYN_RCVD";
        }
        if ("SYN_SENT".equals(clientState) && "SYN_RCVD".equals(serverState)) {
            // 客户端接收SYN-ACK包并发送ACK包
            clientAck = serverSeq + 1;
            System.out.println("客户端(" + clientIP + ":" + clientPort + ")接收到服务器的SYN-ACK包,发送ACK包,ACK号" + clientAck);
            clientState = "ESTABLISHED";
            serverState = "ESTABLISHED";
            System.out.println("三次握手完成,连接建立");
        }
        // 在实际TCP连接中,还有更多的细节和错误处理,这里只是一个简单的示例。
    }
}

4、TCP关闭连接的过程:

 

四次挥手断开连接过程

 

第一步 - 客户端发送FIN:

当客户端完成数据传输后,它向服务器发送一个带有FIN(结束)标志的TCP数据包,表示客户端不再发送数据。

客户端的序列号字段设置为客户端发送的数据的最后一个序列号加一。

第二步 - 服务器回应ACK:

服务器收到客户端的FIN后,发送一个带有ACK标志的TCP数据包作为确认。

服务器的确认号字段设置为客户端发送的序列号加一,表示服务器期望接收的下一个数据序列号。

第三步 - 服务器发送FIN:

服务器完成数据传输后,向客户端发送一个带有FIN标志的TCP数据包,表示服务器不再发送数据。

服务器的序列号字段设置为服务器发送的数据的最后一个序列号加一。

第四步 - 客户端回应ACK:

客户端收到服务器的FIN后,发送一个带有ACK标志的TCP数据包作为确认。

客户端的确认号字段设置为服务器发送的序列号加一,表示客户端期望接收的下一个数据序列号。

完成了这四个步骤后,TCP连接就彻底关闭了。每个步骤中的序列号和确认号仍然用于确保数据包的顺序和完整性。这个过程保证了连接的可靠关闭,防止数据的丢失和混淆。

public class FourWayHandshakeSimulation {
    public static void main(String[] args) {
        // 模拟服务器和客户端的IP地址和端口号
        String serverIP = "192.168.1.1";
        String clientIP = "192.168.1.2";
        int serverPort = 8080;
        int clientPort = 12345;

        // 模拟服务器和客户端的序列号
        int serverSeq = 1000;
        int clientSeq = 2000;

        // 模拟服务器和客户端的ACK号
        int serverAck = 0;
        int clientAck = 0;

        // 模拟服务器和客户端的状态
        String serverState = "ESTABLISHED";
        String clientState = "ESTABLISHED";

        // 模拟四次挥手过程
        if ("ESTABLISHED".equals(clientState) && "ESTABLISHED".equals(serverState)) {
            // 客户端发送FIN包
            clientSeq++;
            System.out.println("客户端(" + clientIP + ":" + clientPort + ")发送FIN包,序列号" + clientSeq);
            clientState = "FIN_WAIT_1";
        }
        if ("ESTABLISHED".equals(serverState) && "FIN_WAIT_1".equals(clientState)) {
            // 服务器接收FIN包并发送ACK包
            serverSeq++;
            serverAck = clientSeq + 1;
            System.out.println("服务器(" + serverIP + ":" + serverPort + ")接收到客户端的FIN包,发送ACK包,序列号" + serverSeq + ",ACK号" + serverAck);
            serverState = "CLOSE_WAIT";
            clientState = "FIN_WAIT_2";
        }
        if ("CLOSE_WAIT".equals(serverState) && "FIN_WAIT_2".equals(clientState)) {
            // 服务器发送FIN包
            serverSeq++;
            System.out.println("服务器(" + serverIP + ":" + serverPort + ")发送FIN包,序列号" + serverSeq);
            serverState = "LAST_ACK";
        }
        if ("FIN_WAIT_2".equals(clientState) && "LAST_ACK".equals(serverState)) {
            // 客户端接收FIN包并发送ACK包
            clientSeq++;
            clientAck = serverSeq + 1;
            System.out.println("客户端(" + clientIP + ":" + clientPort + ")接收到服务器的FIN包,发送ACK包,序列号" + clientSeq + ",ACK号" + clientAck);
            clientState = "TIME_WAIT";
            serverState = "CLOSED";
            System.out.println("四次挥手完成,连接关闭");
        }
    }
}

第二部分:UDP(用户数据报协议)

UDP的全称是用户数据报协议(User Datagram Protocol),它也是一种网络通信协议,但与TCP有很大的不同。UDP被设计成一种无连接的协议,就像是你直接在街头大声呼叫一样,不需要先建立连接。这种无连接性让UDP在传输速度和延迟方面更加灵活,适用于实时应用。然而,UDP不提供数据的可靠传输,就像是你在大街上传递消息时,可能会丢失部分信息,也可能会重复听到同样的信息。因此,UDP更适合那些对数据准确性要求不高,但对传输速度和实时性有要求的场景,如音视频流、在线游戏等。



Tags:TCP   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
从零开始了解网络协议:TCP/IP详解
从零开始了解网络协议:TCP/IP详解 在当今数字化的时代,网络协议已经成为我们生活中不可或缺的一部分。作为互联网的基础,网络协议规定了数据如何在不同的网络设备之间传输。TC...【详细内容】
2024-02-01  Search: TCP  点击:(59)  评论:(0)  加入收藏
从零开始学习Python网络编程:探索TCP协议与实例演示!
Python 是一种高级的编程语言,拥有广泛的网络编程库。这些库允许 Python 开发者能够使用 TCP 和其他网络协议进行通信。在本文中,我们将探讨 TCP 协议,并通过一个简单的例子来...【详细内容】
2023-11-23  Search: TCP  点击:(219)  评论:(0)  加入收藏
TCP分段技术:克服IP和MAC层内存限制的关键
IP和MAC层在发送数据包时都面临内存受限的问题,这就导致它们对消息的长度有所限制。为了克服这个限制,TCP在将数据传递给IP层之前,需要将可变长度的字节打包成多个段,确保每个段...【详细内容】
2023-11-22  Search: TCP  点击:(236)  评论:(0)  加入收藏
TCP发送窗口、接收窗口以及其工作原理
可用窗口的计算是理解TCP滑动窗口的关键,要了解可用窗口的计算,我们需要理解三个指针——SND.UNA、SND.NXT和RCV.NXT。上面的图表是从发送方的角度拍摄的快照。我们...【详细内容】
2023-11-13  Search: TCP  点击:(351)  评论:(0)  加入收藏
Wireshark抓包分析TCP协议:三次握手和四次挥手
前言 面试中我们经常会被问到TCP协议的三次握手和四次挥手的过程,为什么总喜欢问这个问题呢? 其实我们平时使用的很多协议都是应用层协议,比如HTTP协议,https协议,DNS协议,FTP协议...【详细内容】
2023-11-01  Search: TCP  点击:(233)  评论:(0)  加入收藏
一台服务器​最大并发 TCP 连接数多少
以一道运维面试题开局:你接触过的单机最大并发数是多少?操作系统最大文件打开数是65535,服务器又是怎么做到支持10w并发的?你认为当前正常配置的服务器物理机最大并发数可以到多...【详细内容】
2023-10-04  Search: TCP  点击:(71)  评论:(0)  加入收藏
C# 如何判断某个 TCP 端口是否被占用?
在C#中使用TcpClient或者其他通用的方式建立的Socket,该如何判断这个端口是否被占用?比如下面的代码:TcpClient tc = new TcpClient(ip,port);在C#中,可以使用 System.Net.Netwo...【详细内容】
2023-09-26  Search: TCP  点击:(53)  评论:(0)  加入收藏
网络层协议详解:理解TCP/IP、HTTP、FTP等协议的功能与工作原理
在计算机网络中,网络层是计算机通讯的重要组成部分,它负责处理数据包的传输和路由,是实现网络通信的必不可少的组件之一。网络层引入了三个协议:IP协议、ARP协议和路由协议。IP...【详细内容】
2023-09-06  Search: TCP  点击:(253)  评论:(0)  加入收藏
TCP与UDP协议:网络通信中的两大重要角色
引言在这个像点点滴滴组成的虚拟宇宙中,网络通信就像是我们的超级高速公路系统,让信息在世界间飞速穿梭。想象一下,如果网络是一条繁忙的交通道路,那么协议就是交通信号灯,确保数...【详细内容】
2023-09-01  Search: TCP  点击:(229)  评论:(0)  加入收藏
TCP、UDP是如何流量、拥塞控制的?今天一口气讲透!
一、TCP TCP首部 流量控制 拥塞控制 三次握手,四次挥手 tcp 怎样保证数据正确性?流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度1、TCP首部源端...【详细内容】
2023-07-18  Search: TCP  点击:(252)  评论:(0)  加入收藏
▌简易百科推荐
学生偷看“不良网站”,手机上3个痕迹无法清除,网友:咋不早说
众所周知,中国的常规教育中,总是“谈性色变”,但在这个信息爆炸的互联网时代,即便是一些年纪很小的孩子,也能轻易接触到一些所谓的不良网站,因此这一方面的教育缺失,其实是很可怕的...【详细内容】
2024-03-28    叶姐生活指南  Tags:不良网站   点击:(11)  评论:(0)  加入收藏
什么是网络中的路由器?核心功能解释
路由器是互联网连接的核心元素,是一种允许多个设备连接到互联网,并促进将数据包转发到各自的目标地址的设备。使用动态路由技术,路由器检查数据并在各种可用路径中选择最有效的...【详细内容】
2024-03-07    千家网  Tags:路由器   点击:(31)  评论:(0)  加入收藏
过年该不该升级Wi-Fi 7路由?看完就知道
打开电商网站不难发现,从2023年第三季度到现在,Wi-Fi 7路由器新品越来越多。而且价格不再是高高在上,已经基本和Wi-Fi 6路由价格差不多了。看到这些Wi-Fi 7新品路由,不少朋友就...【详细内容】
2024-02-27    中关村在线  Tags:Wi-Fi   点击:(35)  评论:(0)  加入收藏
聊聊 Kubernetes 网络模型综合指南
这篇详细的博文探讨了 Kubernetes 网络的复杂性,提供了关于如何在容器化环境中确保高效和安全通信的见解。译自Navigating the Network: A Comprehensive Guide to Kubernete...【详细内容】
2024-02-19  云云众生s  微信公众号  Tags:Kubernetes   点击:(37)  评论:(0)  加入收藏
SSL协议是什么?关于SSL和TLS的常见问题解答
SSL(安全套接字层)及其后继者TLS(传输层安全)是用于在联网计算机之间建立经过身份验证和加密的链接的协议。尽管SSL协议在 1999年已经随着TLS 1.0的发布而被弃用,但我们仍将这些...【详细内容】
2024-02-06  IDC点评网    Tags:SSL协议   点击:(69)  评论:(0)  加入收藏
从零开始了解网络协议:TCP/IP详解
从零开始了解网络协议:TCP/IP详解 在当今数字化的时代,网络协议已经成为我们生活中不可或缺的一部分。作为互联网的基础,网络协议规定了数据如何在不同的网络设备之间传输。TC...【详细内容】
2024-02-01    简易百科  Tags:TCP/IP   点击:(59)  评论:(0)  加入收藏
BGP路由属性:互联网路由的灵活控制器
在互联网的庞大网络中,边界网关协议(BGP)是确保不同自治系统(AS)间路由信息有效交换的关键协议。然而,BGP的功能远不止于此。其核心组成部分,即BGP路由属性,赋予了BGP强大的灵活性,使...【详细内容】
2024-01-26  诺诺爱生活    Tags:互联网路由   点击:(40)  评论:(0)  加入收藏
简易百科之什么是网络延迟?
简易百科之什么是网络延迟?随着互联网的普及和发展,网络已经成为我们生活中不可或缺的一部分。然而,我们在使用网络时可能会遇到一种情况,那就是网络延迟。那么,什么是网络延迟呢...【详细内容】
2024-01-24    简易百科  Tags:网络延迟   点击:(144)  评论:(0)  加入收藏
网络延迟与网络速度有什么区别?分享具体的答案
通常,许多人抱怨网速测试。速度还是不错的,但是他们玩游戏的时候怎么会卡住,还是断开连接等等问题,这一系列问题始终困扰着大家。那么,网络延迟与网络速度有什么区别呢?请不要担心...【详细内容】
2024-01-24  萌新小郭    Tags:网络延迟   点击:(48)  评论:(0)  加入收藏
揭秘IP地址的网络威胁与攻击类型
在当今数字化时代,网络攻击已经成为网络安全的一大挑战。IP地址,作为互联网通信的基础,也成为网络威胁和攻击的焦点之一。本文将深入探讨不同类型的网络威胁和攻击,以及如何防范...【详细内容】
2024-01-22  IP数据云    Tags:IP地址   点击:(76)  评论:(0)  加入收藏
站内最新
站内热门
站内头条