定义:

TCP(Transmission ControlProtocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,完成第四层传输层所指定的功能。


UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP在IP报文的协议号是17。

UDP首部的各字段

1)端口号表示发送进程和接收进程。

2)UDP长度字段指的是UDP首部和UDP数据的字节长度。该字段的最小值为8字节(发送一份0字节的UDP数据报是OK)。这个UDP长度是有冗余的。IP数据报长度指的是数据报全长,因此UDP数据报长度是全长减去IP首部的长度。

3)UDP检验和 覆盖UDP首部和UDP数据。UDP检验和是一个端到端的检验和。它由发送端计算,然后由接收端验证。其目的是为了发现UDP首部和数据在发送端到接收端之间发生的任何改动。

UDP检验和的基本计算方法 与 IP首部检验和计算方法相类似(16 bit字的二进制反码和),但是它们之间存在不同的地方。首先,UDP数据报的长度可以为奇数字节,但是检验和算法是把若干个16 bit字相加。解决方法是必要时在最后增加填充字节0,这只是为了检验和的计算。

其次,UDP数据报和TCP段都包含一个12字节长的伪首部,它是为了计算检验和而设置的。伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地(例如,IP没有接受地址不是本主机的数据报,以及IP没有把应传给另一高层的数据报传给UDP)。UDP数据报中的伪首部格式如图所示。

如果检验和的计算结果为0,则存入的值为全1(65535),这在二进制反码计算中是等效的。如果传送的检验和为0,说明发送端没有计算检验和。

如果发送端没有计算检验和而接收端检测到检验和有差错,那么UDP数据报就要被悄悄地丢弃。不产生任何差错报文(当IP层检测到IP首部检验和有差错时也这样做)。

用途:

TCP和UDP是OSI模型中的运输层中的协议。

TCP提供可靠的通信传输,而UDP则常被用于即时通信,广播和细节控制交给应用的通信传输。


TCP与UDP基本区别:

1、基于连接与无连接。
2、TCP要求系统资源较多,UDP较少。
3、UDP程序结构较简单。
4、流模式(TCP)与数据报模式(UDP)。
5、TCP保证数据正确性,UDP可能丢包。
6、TCP保证数据顺序,UDP不保证。
7、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
8、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
9、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
10、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
11、TCP首部开销20字节;UDP的首部开销小,只有8个字节。
12、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠的即时信道。


TCP与UDP区分:

TCP协议:面向连接、可靠的流协议。连接是指两个应用程序为了相互传递信息而专有的、虚拟的通信线路,也叫做虚拟电路。流是指不间断的数据结构,类似于管道中的水流。可靠性指TCP协议提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具有“流量控制”、“拥塞控制”提供网络利用率等众多功能。

UDP协议:不具有可靠性的数据报协议。只确保发送消息,其他处理都由上层应用来完成。

哇!TCP这么多特点,是不是一定比UDP厉害呢?其实不然,他们各有自己的应用场景。
TCP应用场景:效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录。

UDP应用场景:效率要求相对高,对准确性要求相对低的场景。举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)。

传输通信:

两个协议是进程间通信,也就是说应用间的通信,那么如何在众多程序中找到自己的目的应用呢?在传输层,使用端口号来识别同一台计算机中进行通信的不同应用程序。

一般情况下可以根据“源IP地址”、“目标IP地址”、“源端口号”、“目标端口号”来进行识别一个通信,但是有些特殊情况,比如IP地址和端口号都一样,只是使用的传输协议不一样,怎么进行区分?数据到达IP层(网络层)之后,会先检查IP头部的协议号,然后再传给相应协议的模块。

因此,TCP/IP或UDP/IP通信中通常使用5个信息来识别一个通信:“源IP地址”、“目标IP地址”、“源端口号”、“目标端口号”以及“协议号”。(知名端口号与传输层协议没有关系,例如53端口在TCP、UDP中都用于DNS服务)

端口号如何确定:标准既定的端口号,0-1023为知名端口号,其他已正式注册的端口号是1024-49151;动态分配端口号,操作系统来为应用程序分配互不冲突的端口号,下一个端口号是在前一个分配号上加1,动态分配端口号范围49152-65535.

UDP详解

UDP是User Datagram Protocol缩写。UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。

UDP为何存在?有哪些优点呢?

  • 无需建立连接(减少延迟)
  • 实现简单:无需维护连接状态
  • 头部开销小
  • 没有拥塞控制:应用可以更好的控制发送时间和发送速率

UDP头部:

UDP的头部是由源端口号、目标端口号、包长和校验和组成。checksum主要是用来检测UDP段在传输中是否发生了错误。还有就是,校验和计算中也需要计算UDP伪头部,伪头部包含IP头部的一些字段。我们刚才介绍了识别一个通信需要5项信息,而UDP头部只有端口号,余下的三项在IP头部,所以引入了伪头部的概念。(IPv6的IP头部没有校验和字段)

目前有一些场景需要兼顾可靠性和高效性,那么如何在UDP上实现可靠数据传输呢?

TCP详解

TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

连接管理:

数据通信之前必须先做好连接工作,在TCP中连接的建立需要三次握手,同时在通信结束时会进行断开连接的处理(四次挥手)。一个连接的建立与断开,正常过程至少需要来回送7个包才能完成。

在TCP中,当发送端的数据到达主机时,接收端主机会返回一个已收到消息的通知,这个消息叫ACK(确认应答,Positive Acknowledgement)。如果没有收到ACK,那么很可能出现了丢包或者返回的确认在途中丢失,此外,也可能是由于其他原因,ACK延迟到达。发送方没有收到ACK的话就会进行重发,但是针对延迟和ACK丢失的情况,会存在重复发送和接收。于是我们就引入了一种机制,来识别是否已经接收数据,又能识别是否已经接收。

上述重复控制的功能可以通过序列号来实现。序列号是按照顺序给发送数据的每一个字节都标上号码的编号,接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接收的 序号作为确认应答号返送回去。通过序列号和确认应答号,TCP实现可靠传输。

利用窗口控制提高速度

如果我们每发送一个段就进行一次确认,那么包的往返时间越长,网络的吞吐量量就会越差,通信性能就会越低。

为了解决这个问题,TCP引入了窗口的概念。确认应答不再是以每个片段,而是以更大的单位(窗口大小)进行确认,转发时间就被大幅度的缩短。至于窗口的大小是由接收端主机决定的,也方便进行流控制。

窗口控制与重发控制

允许发送方在收到ACK之前连续发送多个分组,针对段丢失的情况,我们来讨论窗口控制。

针对以前的延迟ACK,使用窗口控制之后,可以收到确认应答之前继续发送报文,这样整体速度就大大提高。

针对确认应答未能返回的情况。没有使用窗口控制的时候,没有收到确认应答的数据都会被重发,而使用了窗口控制,某些确认应答即便丢失也无需重发。可以根据自己的确认应答或者下一个确认应答来确认。

针对报文段丢失的情况。当一个报文丢失时,发送端会连续收到多个序号为1001的确认应答,来提醒发送端再次发送报文。对于发送端,如果连续三次收到同一个确认应答,将会对其对应的数据进行重发。


网络:TCP/UDP相关推荐

  1. 设备状态检测系统串口网络TCP UDP带有modbus

    设备状态检测系统串口网络TCP UDP带有modbus报警声 音 提供详细注释 提供源代码 1.功能介绍: 根据设备状态监测的需要,编写了支持串口.Tcp网口.Udp网口三种端口的Modbus通信协议 ...

  2. 网络 #TCP #UDP #文件下载器 #网络通信

    网络 网络基础 1)IP地址 1>查看网卡信息 2>IP地址分类 3>私有IP 2)端口 1>端口的分类(部分) 1.知名端口 2.动态端口 2>查看端口号 3)sock ...

  3. [网络]------TCP UDP HTTP Socket 区别

    关于这几个的概念,网上已经很全面了,在这个做个笔记: 前提须知: 1.协议就是大家提前约定的一种规范,后人照着这个遵循就可以,也可以将语言理解为一种协议 2.网络通信的世界中,有七层协议(应用层,表示 ...

  4. Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程

    目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...

  5. 【Java 网络编程】Socket TCP UDP 联系

    文章目录 I 信息传输关注点 II Socket 与 TCP UDP 关系 III Socket 连接组成 ( IP地址 + 端口号 ) IV Socket TCP V Socket UDP VI C ...

  6. [网络] SOCKET, TCP/UDP, HTTP, FTP

    (一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...

  7. 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手

    网络的五层划分是什么? 应用层,常见协议:HTTP.FTP 传输层,常见协议:TCP.UDP 网络层,常见协议:IP 链路层 物理层 TCP 和 UDP 的区别是什么 TCP/UDP 都属于传输层的协 ...

  8. 网络编程—网络基础概览、socket,TCP/UDP协议

    网络基础概览 socket概览 socket模块-TCP/UDP的实现 TCP/UDP总结 网络基础概览 osi七层协议各层主要的协议 # 物理层传输电信号1010101010 # 数据链路层,以太网 ...

  9. Java 网络编程(二) 两类传输协议:TCP UDP

    两类传输协议:TCP,UDP TCP TCP是Transfer Control Protocol(传输控制协议)的简称,是一种面向连接的保证可靠传输的协议. 在TCP/IP协议中, IP层主要负责网络 ...

  10. 一文入门网络编程:常见协议、通信过程、Socket、CS/BS、TCP/UDP

    网络编程三要素:ip地址.端口.协议,在网络通信协议下,不同计算机上运行的程序,可以进行数据传输 常见协议: 传输层 常见协议有TCP/UDP协议. 应用层 常见的协议有HTTP协议,FTP协议. 网 ...

最新文章

  1. 转:初探 jQuery 的 Sizzle 选择器
  2. 只要掌握这三组公式,便可以在AI学习中如鱼得水了
  3. myeclipse安装svn插件
  4. 工大附中、铁一太牛了,2019年高分段人数令人震惊!
  5. PE结构绑定导入实现
  6. 使用固态存储SSD或PCIe卡
  7. 20岁没有学历能学计算机,20岁没学历学什么技术怎么办?学什么比较吃香?
  8. 2怎么开机_MacBook如何取消开盖自动开机
  9. 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(下)
  10. 谈谈技术原则,技术学习方法,代码阅读及其他的(引用)
  11. python 2.7.9 安装beautifulsoup4
  12. 航空——模拟飞行之飞行术语
  13. 导出WPS office文档格式的说明
  14. aliases节点解析
  15. ionic 显示手机本地图片
  16. 【Spring Boot JPA】ManyToOne OneToMany学习笔记
  17. php 文件预览 水印,PHP图片上传,预览图上传,水印设置
  18. 【阿里聚安全·安全周刊】战斗民族黑客入侵德国政府|“猫脸识别”门禁
  19. CleanMyMac4.12.3最新版本Mac系统清理工具
  20. XCTF sherlock WP

热门文章

  1. @import和@class的区别
  2. Execute permission missing on User-Defined table Type
  3. ZABBIX 企业级分布式监控系统 1 监控系统简介
  4. 排序算法大集锦_合并排序_1(分治思想)
  5. 实验室机器OracleXE客户端连接远程Oracle服务器
  6. 突破Outlook2003附件格式限制
  7. awk print 的用法
  8. QTextCodec中的setCodecForTr等终于消失了 (Qt5)
  9. windows7下硬盘安装32位ubuntu12.04LTS
  10. css 右上角 翻开动画_css简单动画(transition属性)