tnblog
首页
视频
资源
登录

TCP与UDP

5097人阅读 2022/6/5 14:35 总访问:3664406 评论:0 收藏:0 手机
分类: 网络

TCP与UDP

简介


TCP和UDP协议是TCP/IP协议的核心。 TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和
UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数
据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它
是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复
功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。


在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol、UDP(用户数据报协议,User Data
Protocol)是传输层最重要的两种协议,为上层用户提供级别的通信可靠性。

TCP简介


传输控制协议(TCP):TCP(传输控制协议)定义了两台计算机之间进行可靠的传输而交换的数据和确认信息
的格式,以及计算机为了确保数据的正确到达而采取的措施。协议规定了TCP软件怎样识别给定计算机上的多个
目的进程如何对分组重复这类差错进行恢复。协议还规定了两台计算机如何初始化一个TCP数据流传输以及如何
结束这一传输。TCP最大的特点就是提供的是面向连接、可靠的字节流服务。

UDP简介


用户数据报协议(UDP):UDP(用户数据报协议)是一个简单的面向数据报的传输层协议。提供的是非面向
连接的、不可靠的数据流传输。UDP不提供可靠性,也不提供报文到达确认、排序以及流量控制等功能。它只是
把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。因此报文可能会丢失、重复以及乱
序等。但由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速
度很快。

二者区别


TCP/IP 和UDP最大的区别就是:TCP/IP是面向连接的,UDP是无连接的。

在实际的使用中,TCP主要应用于文件传输精确性相对要求较高且不是很紧急的情景,比如电子邮件、远程登录
等。有时在这些应用场景下即使丢失一两个字节也会造成不可挽回的错误,所以这些场景中一般都使用TCP传输
协议。由于UDP可以提高传输效率,所以UDP被广泛应用于数据量大且精确性要求不高的数据传输

TCP格式


关于TCP的包格式如下图所示。


TCP把连接作为最基本的对象,每一条TCP连接都有两个端点,这种断点我们叫作套接字(socket),它的定义为
端口号拼接到IP地址即构成了套接字。例如,若IP地址为192.168.1.16 而端口号为80,那么得到的套接字为
192.168.1.16:80。

三握四挥

三次握手


当一个客户端要与服务器建立TCP通信时,它们的过程如下图所示:


客户端发送Seq=0请求服务器连接,服务器返回Ack=1 Seq=0表示对客户端说同意与你的连接,客户端向服务器发起Ack=1 Seq=1的包表示我也准备好了。大致的过程如下图抓的包所示。(pingtcpdump便可以抓取)

四次挥手


当一个客户端要与服务器断开链接时,过程如下图所示:


客户端发送FIN ACK断开与服务器的连接,服务器发送ack=X+1FIN ack=X+1表示同意客户端端口连接的请求,最后客户端发送ack=Y+1 Seq=X+1到服务器端表示真正意义上的断开。

TCP流控

简介


接收端处理数据的速度是有限的,如果发送方的速度太快,就会把缓冲区打满。这个时候如果继续发送数据,就会
导致丢包等一系列连锁反应。 所以 TCP 支持根据接收端能力来决定发送端的发送速度。这个机制叫做流控制。

具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。
该大小限度就被称作窗口大小。窗口大小的值就是由接收端主机决定的。 在 TCP 报文头部,有一个 16 比特的窗口字段,用来表示接受方的缓冲区大小,接收主机将自己可以接收的缓冲区
大小放入这个字段中通知给发送端。这个字段的值越大,说明网络的吞吐量越高。不过,接收端的这个缓冲区一旦
面临数据溢出时,窗口大小的值也会随之被设置为一个更小的值通知给发送端,从而控制数据发送量。也就是说,
发送端主机会根据接收端主机的指示,对发送数据的量进行控制。 TCP 的流量控制由连接的每一端通过声明的窗口
大小来提供 。窗口大小为字节数 ,起始于确认序号字段指明的值,这个值是接收端期望接收的字节。窗口大小是一
个 16 bit 字段,因而窗口大小最大为 65535 字节。
TCP 基于通告窗口大小的机制,运行发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个
分组就停下来等待确认,因此该协议可以加速数据的传输。TCP 传输速率和窗口大小成正相关,在某些情况下,提
高窗口大小能够提高传输速率。 但 TCP 窗口大小只有 16bit,最大表示 65535 字节,对当前千兆接口已经是标配,
在数据中心对服务器上开始部署 10G 接口的现实情况下,65535 字节的窗口显然是不够的。
选项的第一个字段kind说明选项的类型。有的TCP选项没有后面两个字段,仅包含1字节的kind字段。第二个字段
length(如果有的话)指定该选项的总长度,该长度包括kind字段和length字段占据的2字节。第三个字段info(如果
有的话)是选项的具体信息。常见的TCP选项有7种。
kind=3是窗口扩大因子选项。TCP连接初始化时,通信双方使用该选项来协商接收通告窗口的扩大因子。在TCP的头
部中,接收通告窗口大小是用16位表示的,故最大为65?535字节,但实际上TCP模块允许的接收通告窗口大小远不
止这个数(为了提高TCP通信的吞吐量)。窗口扩大因子解决了这个问题。假设TCP头部中的接收通告窗口大小是N,
窗口扩大因子(移位数)是M,那么TCP报文段的实际接收通告窗口大小是N乘2M,或者说N左移M位。注意,M的
取值范围是0~14。我们可通过修改/proc/sys/net/ipv4/tcp_window_scaling内核变量来启用或关闭窗口扩大因子选项。

UDP包格式


UDP传输协议是一种不可靠的、面向无连接、可以实现多对一、一对多和一对一连接的通信协议。UDP在传输数据前既不要建立通道,在数据传输完毕后也不需要将通道关闭。只要客户端给服务端发送一个请求,服务端就会一次性地把所有数据发送完毕。UDP在传输数据时不会对数据的完整性进行验证,在数据丢失或数据出错时也不会要求重新传输,因此也节省了很多用于验证数据包的时间,所以以UDP建立的连接的延迟会比以TCP建立的连接的延迟更低。UDP不会根据当前的网络情况来控制数据的发送速度,因此无论网络情况是好是坏,服务端都会以恒定的速率发送数据。虽然这样有时会造成数据的丢失与损坏,但是这一点对于一些实时应用来说是十分重要的。基于以上三点,UDP在数据传输方面速度更快,延迟更低,实时性更好,因此被广泛地用于通信领域和视频网站当中。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

wcf net.TCP 双向通讯,以及发布iis问题

一:新建wcf服务 UserCallBack.svc[ServiceContract(CallbackContract=typeof(ICallback))]//指定UserCallBack回调接口 pu...

winform+wcf(netTCPBinding)双向通讯 自定义用户名密码验证

一:创建证书 使用vs的命令创建 makecert.exe -sr LocalMachine -ss My -a sha1 -n CN=TestServer -sky exchange -p...

TCPUDP的最完整的区别

TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重...

Soap、Http、TCP/IP 三个基本的通讯协议有什么区别?

TCPTCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯...

Cannot connect to the Docker daemon at TCP://localhost:2375. Is the docker daemon running?

vi ~/.bashrc # 在最下面添加一行: export DOCKER_HOST='unix:///var/run/docker.sock' source .bashrc

分布式服务架构微服务架构概念的区别联系

分布式:分散压力。微服务:分散能力。当下理解分布式:不同模块部署在不同服务器上作用:分布式解决网站高并发带来问题集...

jsController中分割字符串的方法

js: varstr=OpenRule; varstrs=newArray(); strs=str.split(","); for(vari=0;i<strs.length;i++){ $(&q...

Service-stack.redis配置连接池读写分离(处理并发相关等)

配置连接池与读写分类 //写节点(主节点) List<string>writes=newList<string>(); writes.Add("123456a...

CSS相对定位绝对定位

一般相对定位和绝对定位可以配合起来使用 例如实现如下的效果 只需要在外层div设置为相对定位,在内部设置为绝对定位就...

C委托事件

1.什么是委托?  委托在C#里的意义和在现实里差不多,从字面意思理解即可。举个例子:领导委托小张去传递个文件,这就是...

asp.net core2.0 依赖注入 AddTransientAddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

Vue.js+Layer实现表格数据绑定更新

一:使用Vue.js绑定好数据与更新事件 使用v-on绑定好事件,在事件里边直接把该行数据传递进去,在更新方法里边就可以直接...

下划线、换行、回车、空格ASCII码值对照表

下划线,ASCII码95换行 , ASCII码10回车 , ASCII码13空格 , ASCII码32ASCII码表:Bin(二进制)Oct(八进制)Dec(十进制)Hex(...

数据读取器指定的"xx"不兼容。某个类型为"xx"的成员在同名的数据读取器中没有对应的列

报错的地方var result= _db.Database.SqlQuery<SMachine>(sql).FirstOrDefault();经过分析,是因为SqlQuery方法查询...

git 下载提交命令

一.先使用git clone下载一个项目 git clone '项目地址' 这里要注意: clone的项目里边会自带git的一些信息,...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术