TCP /IP 之TCP和UDP
目录
传输层,TCP和UDP基本知识
TCP与UDP的比较:
端口号
1.端口号确定的方法
UDP(User Datagram Protocol)
TCP(Transmission Control Protocol)
通过序列号与确认应答提高可靠性
重发超时
连接管理
TCP 以段为单位发送数据
窗口控制
流控制
拥塞控制
其他传输层协议
UDP-Lite
SCTP
DCCP
首部格式
UDP首部格式
TCP首部格式
传输层,TCP和UDP基本知识
传输层定义:IP 首部中有一个协议字段,用来标识网络层(IP) 的上一层所采用的是哪一种传输层协议。同样,传输层的TCP 和UDP, 为了识别自己所传输的数据部分究竟应该发给哪个应用,也设定了这样一个编号。这个编号就是端口号。
通信处理:传输协议TCP、UDP通过接受数据中的目标端口号识别目标处理程序。
TCP定义:TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管道中的水流。当应用程序采用TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。
TCP的功能:TCP 为提供可靠性传输,实行“顺序控制”或“重发控制“机制。此外还具备“流控制(流量控制)”、"拥塞控制”、提高网络利用率等众多功能。
UDP的定义:UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在UDP 的情况下,虽然可以确保发送消息的大小, 却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。
TCP与UDP的比较:
- TCP用于在传输层有必要实现可靠传输的情况。由于它是面向有连接并具备顺序控制、重发控制等机制的,所以它可以为应用提供可靠传输。
- UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。
- 在多播与广播通信中也使用UDP 而不是TCP 。RIP 、DHCP 等基于广播的协议也要依赖于UDP 。
端口号
定义:端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。
根据端口号识别应用:
不同通信的标识:TCP/IP 或UDP/IP 通信中通常采用5 个信息来识别一个通信。它们是"源IP 地址”、“目标IP 地址”、“协议号”、"源端口号”、“目标端口号”。只
要其中某一项不同,则被认为是其他通信。
1.端口号确定的方法
- 标准既定的端口号(静态方法)
定义:它是指每个应用程序都有其指定的端口号。但并不是说可以随意使用任何一个端口号。每个端口号都有其对应的使用目的。
知名端口号一般由0到1023 的数字分配而成。应用程序应该避免使用知名端口号进行既定目的之外的通信,以免产生冲突。除知名端口号之外,还有一些端口号也被正式注册。关千知名端口号以及注册端口号的最新消息,请参考如下网址:https://www.iana.org/assignments/service-names-port-numbers
- 时序分配法(动态方法)
定义:服务端有必要确定监听端口号,但是接受服务的客户端没必要确定端口号。
在这种方法下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。。这样,操作系统就
可以动态地管理端口号了。
端口号与协议的关系:关系:端口号由其使用的传输层协议决定。因此,不同的传输协议可以使用相同的端口号。例如, TCP 与UDP 使用同一个端口号,但使用目的各不相同。这是因为端口号上的处理是根据每个传输协议的不同而进行的。
UDP(User Datagram Protocol)
UDP的定义:UDP(用户数据报协议) 不提供复杂的控制机制,利用IP 提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。
特点:出现网络拥堵的情况下, UDP 也无法进行流量控制等避免网络拥塞的行为。此外,传输途中即使出现丢包, UDP 也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交由采用UDP 的应用程序去处理。
应用:
- 包总量较少的通信(DNS 、SNMP 等)
- 视频、音频等多媒体通信(即时通信)
- 限定于LAN 等特定网络中的应用通信
- 广播通信(广播、多播)
TCP(Transmission Control Protocol)
TCP的定义:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
特点和目的:TCP 通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
通过序列号与确认应答提高可靠性
确认应答(ACK):在TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答。
TCP 通过肯定的确认应答(ACK) 实现可靠的数据传输。当发送端将数据发出之后会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大。
第三种情况:对方已经收到数据,但是返回的确认应答在途中丢失,或者因为其他原因导致确认应答延迟到达。这种情况也会导致发送端没有收到确认应答,认为数据没有到达目的地,从而进行重发。
引发的问题:对于源主机来说,只要按照重发机制重发数据即可。但是对于目标主机来说,这简直是一种“灾难”。它会反复收到相同的数据。而为了对上层应用提供可靠的传输,必须得放弃重复的数据包。
解决的问题:要能够识别目标主机是否已经接收数据,又能判断目标主机是否需要接收。
序列号机制的引入
定义:序列号是按顺序给发送数据的每一个字节(8 位字节)都标上号码的编号。
工作原理:目标i主机查询接收到的数据中的TCP 首部中的序列号和数据的长度,将自己下一步应该接收的序号(即TCP首部序列号+数据长度)作为确认应答返送回去。就这样,通过序列号和确认应答号, TCP 可以实现可靠传输。
问题?似乎并未解决第三种情况出现的问题?????
重发超时
定义:重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过了这个时间仍未收到确认应答,发送端将进行数据重发。
需要考虑的因素:TCP要求无论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵发生何种变化,都必须保持这一特性。
计算方式:每次发包时都会计算往返时间(Round Trip Time,RTT)及其偏差(RTT时间波动的值、方差。有时也叫抖动)。将这个往返时间和偏差相加,重发超时的时间就是比这个总和要稍大一点。
实际工作方式:在BSD 的Unix 以及Windows 系统中,超时都以0.5 秒为单位进行控制,因此重发超时都是0.5 秒的整数倍。初始值,重发超时一般设置6秒左右。数据被重发之后若还是收不到确认应答,则进行再次发送。此时,等待确认应答的时间将会以2 倍、4 倍的指数函数延长。达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接。并且通知应用通信异常强行终止。
连接管理
面向有连接:指的是指在数据通信开始之前先做好通信两端之间的准备工作。
TCP 提供面向有连接的通信传输。UDP 是一种面向无连接的通信协议,因此不检查对端是否可以通信,直接将UDP 包发送出去。TCP 与此相反,客户端会在数据通信之前,通过TCP 首部发送一个SYN 包作为建立连接的请求等待服务端的确认应答。如果服务端发来确认应答,则认为可以进行数据通信。如果服务端的确认应答未能到达,就不会进行数据通信。此外,在通信结束时会进行断开连接的处理(FIN 包)。
一个连接的建立与断开,正常过程至少需要来回发送7 个包才能完成(3次握手,4次挥手)
TCP 以段为单位发送数据
MSS:“最大消息长度”(MSS: Maximum Segment Size) 。最理想的情况是,最大消息长度正好是IP 中不会被分片处理的最大数据长度。TCP 在传送大量数据时,是以MSS 的大小将数据进行分割发送。进行重发时也是以MSS 为单位。
怎么确定MSS:MSS 是在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在TCP 首部中写入MSS 选项,告诉对方自己的接口能够适应的MSS 的大小。然后会在两者之间选择一个较小的值投入使用。
窗口控制
1.利用窗口控制提高速度
问题出现:TCP 以1 个段为单位,每发一个段进行一次确认应答的处理。这样的传输方式有一个缺点,那就是,包的往返时间越长,网络的吞吐量会越差,通信性能就越低。
窗口解决的问题:即使往返时间较长也能控制网络性能的下降。
窗口大小:指无需等待确认应答而可以继续发送数据的最大值。如图,窗口大小为4个段。
滑动窗口机制+缓冲区
在这个窗口内的数据即便没有收到确认应答也可以发送出去。不过,在整个窗口的数据确认应答没有达到之前,如果部分数据出现丢包,那么发送端仍然要负责重发。因此,客户端要设置缓冲区来保留这些带重发的数据,直到收到它们的应答。当数据发出后若如期收到确认应答就可以不用再进行重发,此时数据就可以从缓存区清除。收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也被称为滑动窗口控制。
上述工作过程的还有一种情况:部分数据不是出现丢包,服务器已经收到数据,但是确认应答未能返回。这种情况下,客户端应该是不需进行重发的。在没有使用窗口控制的时候,客户端会重发。
2.窗口控制使得某些确认应答即便丢失也无需重发。
3.窗口控制比之前的超时管理更加高效
当某一报文段丢失后,发送端会一直收到序号为1001 的确认应答,这个确认应答好像在提醒发送端“我想接收的是从1001 开始的数据“。因此,在窗口比较大,又出现报文段丢失的情况下,同一个序号的确认应答将会被重复不断地返回。而发送端主机如果连续3 次收到同一个确认应答,就会将其所对应的数据进行重发。
流控制
待填。。。。
拥塞控制
待填。。。
其他传输层协议
UDP-Lite
待填。。。
SCTP
待填。。。
DCCP
待填。。。
首部格式
UDP首部格式
待填。。。
TCP首部格式
待填。。。
TCP /IP 之TCP和UDP相关推荐
- TCP/IP和TCP,UDP
1.TCP/IP协议: 1.1 TCP/IP协议是什么: 很多人认为tcp/ip就是tcp和ip组成的通信协议.其实tcp/ip协议不仅仅指代tcp/ip,它是指一个由FTP,SMTP,TCP,UDP ...
- TOE(TCP/IP Offload / TCP/IP卸载)技术及产品
TOE(TCP/IP Offload / TCP/IP卸载)技术及产品 技术原理 TOE 全称 TCP Offload Engine,是目前主要的网络加速技术,它可以显著的提高网络的数据处理能 力,降 ...
- 深入理解TCP/IP协议-TCP建立与终止连接
转载自 深入理解TCP/IP协议-TCP建立与终止连接 一.引言 TCP 是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.连接创建与终止的状态变化图如下: ...
- TCP/IP 和 TCP/IP的 三/四次握手
什么是TCP/IP 首先来说,TCP/IP协议是浏览器与服务器链接因特网的协议.浏览器使用TCP/IP协议进入服务器,服务器使用TCP/IP协议来发送HTML文件到浏览器. TCP/IP的作用 TCP ...
- TCP/IP协议 TCP包深入理解
详细解释TCP/IP标志位 TCP报格式 继续使用TCP/IP协议 TCP浅析中抓到的包进行分析. no Time Source Destination protocal Length info 3 ...
- 【TCP/IP详解】UDP报文格式
我将工作中用到的报文格式进行了汇总,方便查阅: [TCP/IP协议]各层报文首部数据格式汇总 解析: 16位源端口号:这个字段通常包含发送数据报的应用程序所使用的 UDP 端口.接收端的应用程序利用这 ...
- TCP/IP:TCP/UDP报文格式
目录 TCP报文格式 UDP报文格式 TCP报文格式 报文格式 图1 TCP首部格式 字段 长度 含义 Source Port 16比特 源端口,标识哪个应用程序发送. Destination Por ...
- OSI七层 TCP/IP四层 TCP/IP协议栈: 不同的通信协议的大集合
应用层: 网络服务与最终用户的一个接口. 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 表示层: 数据的表示.安全.压缩.(在五层模型里 ...
- TCP/IP 笔记 - TCP连接管理
TCP是一种面向连接的单播协议,在发送数据之前,通信双方必须在彼此建立一条连接:这与UDP的无连接不同,UDP无需通信双方发送数据之前建立连接.所有TCP需要处理多种TCP状态时需要面对的问题,比如连 ...
最新文章
- 开始使用asp.net ajax的控件工具包AJAX Control Toolkit
- 将时间格式的字符串转换成日期类型浏览器兼容解决方案
- 百度万亿流量的转发引擎BFE开源了!华为折叠屏曝光,采用传统翻盖式手机折叠方案;微软将关闭安卓iOS平台Cortana……...
- python多进程控制gui界面_Python优雅地终止了多进程和gui进程
- Jmeter发送get请求
- uniapp 根据经纬度逆转地理地质
- Git(11)-- Git 别名(alias)
- 分享一份非常强势的Android面试题
- 8.2捷联惯导算法仿真 代码整理分析(一)
- 全球及中国直流调速器行业市场调研及未来发展趋势预测报告2022-2027年
- 【规律】Cunning Friends
- 共享店铺系统如何设计?具体如何做?
- 网页简单整合Skype
- Pycharm新建文件模板配置
- 披荆斩棘,砥砺前行,我是新手奶爸,我仍笑如少年——小康师兄的2022年度总结
- 串口虚拟工具(VSPD)的使用方法
- uniapp简单的身份证照片(正反面)上传
- 【ChatGPT案例】10大ChatGPT谷歌插件神器
- 19年计算机英语统考,抓紧!2019年上半年全国计算机等级考试、全国英语等级考试报名即将截止...
- Grub2启动项的修改和相关操作命令
热门文章
- AI回合制游戏,过程比较简单。程序中的f变量和条件语句用的很经典。
- 利用Dynamo建立桥梁下部结构—桥墩系梁盖梁
- Jlink使用技巧系列教程索引
- 找工作笔试面试那些事儿(17)---linux测试题
- 你离顶尖游戏大厂只差这份招面试攻略啦
- cf微软AIM服务器,CF微软AIM1.1透视自瞄无后坐力
- 云监控无线煤气报警器如何解决联动问题?
- 【C语言】编程实现输出矩阵上/下三角的数值。要求:输入一个正整数n和n阶矩阵的数值,打印输出矩阵、下三角和上三角的数值。
- PCb过孔大小设置 / 丝印层字符尺寸设置
- 转 做个男人,做个成熟的男人,做个有城府的男人