TCP和UDP网络通讯的区别及实现方式是什么?

TCP和UDP网络通讯的区别及实现方式是什么?,第1张

TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,在 OSI模型中,它完成第四层传输层所指定的功能。\x0d\UDP:是User Datagram Protocol的简称,用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。\x0d\TCP和UDP传输就类似于我们的手机通电话和手机发短信,一种必需连通了,才能够通话,相对来说比较可靠,传输速度比较快,另一种可以在关机状态(无连接)发送信息,相对来说,可靠性比较差,传输速度较慢。具体的差别如下:\x0d\TCP协议面向连接,UDP协议面向非连接 \x0d\ TCP协议传输速度慢,UDP协议传输速度快 \x0d\ TCP协议保证数据顺序,UDP协议不保证 \x0d\ TCP协议保证数据正确性,UDP协议可能丢包 \x0d\ TCP协议对系统资源要求多,UDP协议要求少\x0d\不管是基于TCP还是基于UDP的网络通讯编程,都要区分服务器端和客户端,下面以TCP为例,实现客户端和服务器端通讯的实现步骤:\x0d\TCP服务器端的编写步骤:\x0d\1 首先,你需要创建一个用于通讯的套接口,一般使用socket调用来实现。这等于你有了一个用于通讯的电话:) \x0d\ 2 然后,你需要给你的套接口设定端口,相当于,你有了电话号码。这一步 一般通过设置网络套接口地址和调用bind函数来实现。 \x0d\ 3 调用listen函数使你的套接口成为一个监听套接字。 以上三个步骤是TCP服务器的常用步骤。 \x0d\ 4 调用accept函数来启动你的套接字,这时你的程序就可以等待客户端的连接了。 \x0d\ 5 处理客户端的连接请求。 \x0d\ 6 终止连接。\x0d\TCP编程的客户端一般步骤是:\x0d\1、创建一个socket,用函数socket();\x0d\ 2、设置socket属性,用函数setsockopt(); 可选\x0d\ 3、绑定IP地址、端口等信息到socket上,用函数bind(); 可选 \x0d\ 4、设置要连接的对方的IP地址和端口等属性;\x0d\ 5、连接服务器,用函数connect()(相当于拨号); \x0d\ 6、收发数据,用函数send()和recv(),或者read()和write()(相当于通话);

  TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。面向连接意味着两个使用TCP的进程(一个客户和一个服务器)在交换数据之前必须先建立好连接,然后才能开始传输数据。建立连接时采用客户服务器模式,其中主动发起连接建立的进程叫做客户(Client),被动等待连接建立的进程叫做服务器(Server)。

  TCP提供全双工的数据传输服务,这意味着建立了TCP连接的主机双方可以同时发送和接收数据。这样,接收方收到发送方消息后的确认可以在反方向的数据流中进行捎带。“端到端”的TCP通信意味着TCP连接发生在两个进程之间,一个进程发送数据,只有一个接收方,因此 TCP不支持广播和组播。

  TCP连接面向字节流,字节流意味着用户数据没有边界,例如,发送进程在TCP连接上发送了2个512字节的数据,接收方接收到的可能是2个512字节的数据,也可能是1个1024字节的数据。因此,接收方若要正确检测数据的边界,必须由发送方和接收方共同约定,并且在用户进程中按这些约定来实现。

  TCP接收到数据包后,将信息送到更高层的应用程序,如FTP的服务程序和客户程序。应用程序处理后,再轮流将信息送回传输层,传输层再将它们向下传送到网际层,最后到接收方。

  UDP与TCP位于同一层,但与TCP不同,

  IP(网际)协议是TCP/IP模型的核心,也是网络层最重要的协议。

  网际层接收来自网络接口层的数据包,并将数据包发送到传输层;相反,也将传输层的数据包传送到网络接口层。
  IP协议主要包括无连接数据报传送,数据报路由器选择以及差错处理等功能。

  由于网络拥挤、网络故障等问题可能导致数据报无法顺利通过传输层。IP协议具有有限的报错功能,不能有效处理数据报延迟,不按顺序到达和数据报出错,所以IP协议需要与另外的协议配套使用,包括地址解析协议ARP、逆地址解析协议RARP、因特网控制报文协议ICMP、因特网组管理协议IGMP等。
  IP数据包中含有源地址(发送它的主机地址)和目的地址(接收它的主机地址)。

  IP协议对于网络通信而言有着重要的意义。由于网络中的所有计算机都安装了IP软件,使得许许多多的局域网构成了庞大而严密的通信系统,才形成了如今的Internet。其实,Internet并非一个真实存在的网络,而是一个虚拟网络,只不过是利用IP协议把世界上所有愿意接入Internet的计算机局域网络连接起来,使之能够相互通信。

QQ里的连接方式吧,登陆方式选UDP,对方也是UDP的话基本上都是UDP直连,速度最快,否则大多都是TCP中转,速度最慢,也要从这两个网络协议的原理开始说起,TCP,UDP都是TCP/IP协议栈里面的第四层(传输层)的运输协议,一个是提供面向连接服务的TCP,一个是无连接服务的UDP,TCP提供可靠稳定的服务因为他建立连接前和传输信息乃至结束连接都是需要通过确认的,而UDP是不管这些的,直接发了就发了,不管你收不收到所以效率来说UCP都是比TCP要快的所以UDP连接语音聊天的话比TCP要快的多,中转就更慢了,因为要通过腾讯的服务器做一个中继的作用

TCP是面向连接的传输控制协议,而UDP提供了无连接的数据报服务;


TCP具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;


UDP具有较好的实时性,工作效率较TCP协议高。

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能顺序地从一端传到另一端。


UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,不保证数据按顺序传递,故而传输速度很快。

NAT 俗称网络地址转换,基本 NAT 都部署在路由器或者交换机上。

主要还是IP地址的不足,使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。用大白话:比如你有一个路由器(家用的那种就可以)这个路由器本身链接了公网(被分配到了一个公网的IP地址)。路由器后面有接了N多个设备,每个设备都分配到了一个私有的地址(内网地址),这些地址可以通过这个路由器和外网交互(并非是代理的中继方式)。

1 基本NAT: 这种NAT下的私有IP只有少部分(并不是全部)可以和外网通讯。每次这些私有地址向外网发送数据的时候,NAT就会把这个数据报的 源地址IP 修改成NAT的 公网地址 (这样接收方以为这个数据报是从NAT发给我的,我后面数据报在会给这个NAT就好了),并在NAT内存下对应的 映射关系 (端口和内网私有IP的映射)。当NAT收外网的数据报的时候,根据数据报的端口号找到内网的私有IP地址,将这个数据报的目的IP地址修改成内网私有IP地址(整个过程NAT负责了IP地址来回替换,辅助完成了内网机器和外网设备通讯,这里的外网设备有可能也是一个NAT)。如果收到的数据报在映射表中找不到对应映射,这个数据报就会被丢弃。

存在问题: 基本的NAT由于不会改动端口信息,当内部2个不同机器(2个不同的私有IP)使用同样的端口会出现映射错误了。

2 NPAT: 这类的NAT是在基本NAT基础上演化而来,它不仅修改 IP地址 还有 端口号 。基本可以满足NAT内全部的网络访问要求。NAT内的私有IP地址第一次向外网发送数据,NAT会选一个 映射表 里面还没有被使用过的 端口号 ,然后修改 发送数据报 的 源IP地址 和 源端口号 并发送出去,并把 私有IP地址 和 源端口号 ,和修改后的 端口号 映射关系记录下来。之后这个私有IP地址发送数据会首先判别之前是不是已经有这个映射关系,如果有就继续按照映射关系修改数据报。当NAT收到外部的数据,会从映射表找到对应关系。修改数据报的 目的IP地址 和 目的端口号 ,如果映射表中没有记录这个数据报就会被丢弃了。

解决了基础NAT的端口问题: 通过修改端口的可以让NAT内的多个私有IP地址可以使用相同的端口进行通信。因为NPAT更加灵活所以现在基本的NAT技术就是指的NPAT技术。

如果2台机器在同一个NAT下,那么他们可以直接通信了。

情况 1: 如果2台机器有一台在NAT下另一个在外网,那么只能NAT内的私有机器主动链接外网机器,因为外网的机器主动链接内网的机器,NAT映射表并不存在这个数据转发项,这个数据报就被丢弃了。

情况 2: 如果2台机器都在不同的NAT下,那么不管哪一方发起链接请求数据报都不会到达对应的机器。这种情况非常常见。

那么最简单的方式解决上面2个问题:就是在公网部署一台 中继服务器 ,双方机器都链接这台服务器。然后 中继服务器 帮助这2台服务器转发数据。这种方式最简单也是效率最低的。

到这里P2P正式登场了: 比如有下面这样的网络拓扑结构(就是上面情况2)

如果 NAT-A, IP:40325125 和 NAT-B, IP:2341238 需要直接通信的话,基本不可能,所以需要做些手段。

假设需要 手机 (图中)建立TCP链接到 电脑 (图中)需要如下手续:

1 由被链接方发送数据报(可以是UDP甚至是TCP的SYNC握手包)

[上传失败(image-4b61ae-1528199423593)]
绿色线表示了数据报流动的方向

图中 电脑 给 NAT-A IP:40325125 / 端口:4553 发出了一个数据报,这个数据报在经过 NAT-B 的时候 源IP地址 被修改成了 NAT-B的IP地址2341238 , 源端口 被修改成了 678 。这个数据报在到达 NAT-A 的时候,在映射表中找不到 678 端口对应的内部私有IP的映射。所以这个数据报一定会被 NAT-A 丢弃掉。但是经过这次数据报发送,在 NAT-B 的映射表里面就会标记 40325125:4553 我已经发送过数据过去了,那么后面只要从这个地址发送来的数据报,我就可以转发到内网正确的设备上面。

2 完成第一步后,链接方可以发起数据请求

p2p可以合理的利用互联网的资源,比如两个人视频聊天。完全可以通过p2p打穿NAT后互发数据(QQ就是这么办的)。但是有的时候设备之间的直连性能很差,比如:电信的用户和移动的用户视频。这个问题是ISP厂商之间的过渡带宽太窄,就算是设备直连但是依旧速度不快。所以这里情况下需要自己搭建服务器中继(中继也不是完全无作用)。这个服务器就是网关的作用,一般有多个网卡。不同的网卡对接不同的ISP厂商,然后互相转发。

DNS即使用tcp,又使用udp;不过是分情况的: 区域传输的时候用tcp,其它时候用udp; 区域传输:dns的规范规定了2种类型的dns服务器,一个叫主dns服务器,一个叫辅助dns服务器。在一个区中主dns服务器从自己本机的数据文件中读取该区的dns数据信

联创优科 幼儿园智能化解决方案提供商 为您解答


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10565332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存