TCP/IP笔记——UDP

OSI模型中最下面的两层用来解决两个硬件设备在物理上的通信问题(如规定怎么将电平信号转换为数字信号),相对应的TCP/IP模型中,这部分代表将会将机器封装为一个MAC地址来实现通讯。网络层是关于,具体到应该由谁、哪一个设备来接受传输的信号,所以对应的TCP/IP模型中,用IP地址来表示“接收方”的地址,用于建立连接。

对应到怎么实现的问题,看上图,可以看到每一层对应的包里面的头部信息,即发送的时候,从应用层到数据链路层一层层下来进行“包装”,加上用于对应层的标识部分,在接收方则是从数据链路层一层层上去到具体应用,一层层对应地进行拆包装,最终送达。可以当成邮递快递那样理解,在快递发送的时候,最先看的是哪个省份、哪个市区,把送到某个地区的快递统一装在卡车上送到一个集中的地点,然后一步步分发,最后在目标地点附近的派送中心看快递具体到哪个位置、房号,最后才送到用户手里。如果好奇具体内容是怎么样的可以用wireshark来抓包看一下,这里就不展开来说了。
运输层的两个主要协议
- 用户数据报协议UDP(User Datagram Protocol)
- 传输控制协议TCP(Transmission Control Protocol)
UDP在传输数据前不需要建立连接,远地主机的运输层在接收到UDP报文之后不需要给出任何确认,所以UDP提供的是一种不可靠的连接,不过通常效率更加高(所以如果是更加讲究传输速率而不是保证数据的正确的话,更常用UDP,如视频通话,图像扭曲或部分图像丢失是可以接受的,所以通常用UDP实现)。
TCP提供面向连接的服务,传输数据前必须要先建立连接,数据传送结束后要释放连接。TCP提供可靠的、面向连接(即在传输数据前一定要建立连接)的运输服务,所以不可避免地增加了许多开销,因此代价较大。
关于端口
这里的端口指的是使用在运输层的协议端口号(protocol port number)。这种在协议栈层间的抽象的协议端口是软件端口,而不是类似于路由器或者交换机上面的硬件端口。硬件端口用于不同硬件设备的交互,软件端口是用于应用层的各种协议进程与运输实体进行层间交互的一种地址。UDP和TCP的首部格式中都有源端口和目的端口两个字段。运输层收到IP曾交上来的运输层报文的时候根据首部中目的端口号来交付数据给应用层的目的应用进程。
TCP/IP的运输层用一个16位端口号来标志一个端口,端口号只具有本地意义,用来标志本计算机应用层中的各个进程在和运输层交互时的层间端口,如果是在不同计算机中,那么相同端口号其实没有关联。16位端口号允许65535个不同的端口号。
计算机通信的时候需要知道对方的IP地址和端口号,IP地址用于找到目标计算机,端口用于找到目标应用进程。
互联网上计算机通信方式是客户-服务器方式,所以端口号分为两大类:
- 服务器端使用的端口号:这里又有分两类,一类是熟知端口号(well-known port number)或系统端口号,0~1023,分配给了TCP/IP中最重要的一些应用程序;另一类是等级端口号,1024~49151,使用这类端口号的时候需要在IANA按照规定的手续登记以防重复;
- 客户端使用的端口号,49152~65535,尽在客户进程运行时才动态选择,因此又名短暂端口号。这类端口号可以在当前客户进程结束之后分配给另一个客户进程使用
UDP
主要特点:
- 无连接:发送数据前不需要建立连接,因此减少了开销和发送数据前的时延
- 尽最大努力交付:不保证可靠交付
- 面向报文:UDP对应用层交下来的报文,直接保留这些报文的边界然后进行发送,即收到多长的报文就直接照样发送
- 没有拥塞控制:所以源主机可以按照恒定速率来发送数据,因为不会受到网络情况的影响
- 支持一对一、一对多、多对一、多对多的交互通信
- 首部开销小:首部只有8个字节,TCP有20个
首部格式
用户数据报UDP有两个字段:数据字段和首部字段。首部字段有8个字节,4个字段,每个字段长2个字节,4个字段意义如下:

目标计算机接收到UDP数据报时会根据首部中的目的端口把UDP数据报通过对应的端口交给应用进程,但是,如果该端口不存在,那么会直接丢弃掉这个报文并用网际控制报文协议ICMP来发送“端口不可达”差错报文给发送方(traceroute就是基于这个机制来运作的)。
UDP使用到端口号,但是因为不需要事先建立连接,所以不需要套接字socket(TCP才必须要在socket之间建立连接)。
校验和
在计算校验和之前要在UDP用户数据报前面添加12个字节的伪首部,这是只在计算校验和的时候才临时加的,不下传或者上交,只是用于计算校验和。


直接截图自书上了,没什么好说的。
参考
《计算机网络》 谢希仁著:不用说了,经典教材。
TCP/IP笔记——UDP的更多相关文章
- 网络协议: TCP/IP 和UDP/IP
网络协议: TCP/IP 和UDP/IP TCP/IP TCP/IP(Transmission Control Protocol/Internet Protocol)是一种可靠的网络数据传输控制协议. ...
- 【网络编程】TCP/IP、UDP、网络概…
计算机刚刚发明出来的时候,两台计算机之间是无法通信的,为了使计算机之间能够进行数据的交流,制定了OSI(Open SystemInterconnection)开放系统互联模型,而TCP/IP(我们所使 ...
- TCP/IP与UDP区别
最近面试,问到这方面的问题,这里总结一下: TCP (Transmission Control Protocol 传输控制协议):面向连接的,不可靠的,数据流服务.UDP (User Dat ...
- TCP/IP笔记 一.综述
1. TCP/IP分层 TCP/IP 是四层的体系结构:应用层.运输层.网际层和网络接口层,如下图: OSI协议是国际标准的网络协议,但是由于OSI的实用性等问题造成OSI没有流行起来.目前国际上广泛 ...
- http与https与socket tcp/IP与UDP 协议等
网络由下往上分为: 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- ...
- TCP/IP笔记(四)IP协议
前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...
- TCP/IP笔记(五)IP协议相关技术
IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP时无法实现通信的.必须还要又能够解析主机名称和MACdivide功能,以技术包在发送过程中异常情况处理的功能. 这篇主要介绍下DNS.ARP ...
- TCP/IP和UDP之间的区别(转载)
在分析两者之间的区别之前,我们先搞清楚这两者的关系, TCP/IP协议簇 是一种网络控制协议,简单点说就是一种网络协议,我们网络中的计算机就是通过这套协议簇来进行数据通信的.这套协议簇里面包含了很多 ...
- SOCKET 编程TCP/IP、UDP
TCP/IP 资源:http://download.csdn.net/detail/mao0514/9061265 server: #include<stdio.h> #include&l ...
随机推荐
- ASP.NET 中 取得 Repeater 里的checkbox值
前言:这两天在维护ASP.NET的项目,需要做一个checkbox来选择数据进行导出,下面提供两种解决思路 1.ASP:CheckBox asp:CheckBox自带控件,没有Value值 <a ...
- php:页面乱码的解决方法
在 <?php header("Content-Type:text/html;charset=utf-8"); ////设置页面显示的文字编码 头部就写header函数处理成 ...
- VxWorks引导启动过程
https://blog.csdn.net/phunxm/article/details/6979089
- 浅谈MySQL存储引擎选择 InnoDB还是MyISAM
如果是一些小型的应用或项目,那么MyISAM 也许会更适合.当然,在大型的环境下使用MyISAM 也会有很大成功的时候,但却不总是这样的.如果你正在计划使用一个超大数据量的项目,那么你应该直接使用In ...
- mac下phpize编译提示Cannot find autoconf解决办法
mac下phpize编译如下报错: /usr/bin/phpizeConfiguring for:PHP Api Version: 20121113Zend Module Api No: 201212 ...
- 【BZOJ1999】树网的核
题目大意:题目过长,无法简单描述... 题解: 由于树网的核一定是树直径的一段,因此考虑先将直径取出,通过两次 BFS 即可.要求的东西是树上任意一点到这条取出的线段的距离的最大值,发现这个最大值有可 ...
- 数据结构和算法(java版本)学习指南
1 数据结构和算法内容介绍 2 数据结构和算法的概述 3 稀疏数组SparseArray
- Scala class和case class的区别
在Scala中存在case class,它其实就是一个普通的class.但是它又和普通的class略有区别,如下: 1.初始化的时候可以不用new,当然你也可以加上,普通类一定需要加new: scal ...
- 【leetcode】Heaters
Winter is coming! Your first job during the contest is to design a standard heater with fixed warm r ...
- vue学习-day02(自定义指令,生命周期)
目录: 1.案例:品牌管理 2.Vue-devtools的两种安装方式 3.过滤器,自定义全局或私有过滤器 4.鼠标按键事件的修饰符 5.自定义全局指令:让文本框获取焦点 ...