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

对应到怎么实现的问题,看上图,可以看到每一层对应的包里面的头部信息,即发送的时候,从应用层到数据链路层一层层下来进行“包装”,加上用于对应层的标识部分,在接收方则是从数据链路层一层层上去到具体应用,一层层对应地进行拆包装,最终送达。可以当成邮递快递那样理解,在快递发送的时候,最先看的是哪个省份、哪个市区,把送到某个地区的快递统一装在卡车上送到一个集中的地点,然后一步步分发,最后在目标地点附近的派送中心看快递具体到哪个位置、房号,最后才送到用户手里。如果好奇具体内容是怎么样的可以用wireshark来抓包看一下,这里就不展开来说了。

运输层的两个主要协议

  1. 用户数据报协议UDP(User Datagram Protocol)
  2. 传输控制协议TCP(Transmission Control Protocol)

UDP在传输数据前不需要建立连接,远地主机的运输层在接收到UDP报文之后不需要给出任何确认,所以UDP提供的是一种不可靠的连接,不过通常效率更加高(所以如果是更加讲究传输速率而不是保证数据的正确的话,更常用UDP,如视频通话,图像扭曲或部分图像丢失是可以接受的,所以通常用UDP实现)。

TCP提供面向连接的服务,传输数据前必须要先建立连接,数据传送结束后要释放连接。TCP提供可靠的、面向连接(即在传输数据前一定要建立连接)的运输服务,所以不可避免地增加了许多开销,因此代价较大。

关于端口

这里的端口指的是使用在运输层的协议端口号(protocol port number)。这种在协议栈层间的抽象的协议端口是软件端口,而不是类似于路由器或者交换机上面的硬件端口。硬件端口用于不同硬件设备的交互,软件端口是用于应用层的各种协议进程运输实体进行层间交互的一种地址。UDP和TCP的首部格式中都有源端口和目的端口两个字段。运输层收到IP曾交上来的运输层报文的时候根据首部中目的端口号来交付数据给应用层的目的应用进程。

TCP/IP的运输层用一个16位端口号来标志一个端口,端口号只具有本地意义,用来标志本计算机应用层中的各个进程在和运输层交互时的层间端口,如果是在不同计算机中,那么相同端口号其实没有关联。16位端口号允许65535个不同的端口号。

计算机通信的时候需要知道对方的IP地址和端口号,IP地址用于找到目标计算机,端口用于找到目标应用进程。

互联网上计算机通信方式是客户-服务器方式,所以端口号分为两大类:

  1. 服务器端使用的端口号:这里又有分两类,一类是熟知端口号(well-known port number)或系统端口号,0~1023,分配给了TCP/IP中最重要的一些应用程序;另一类是等级端口号,1024~49151,使用这类端口号的时候需要在IANA按照规定的手续登记以防重复;
  2. 客户端使用的端口号,49152~65535,尽在客户进程运行时才动态选择,因此又名短暂端口号。这类端口号可以在当前客户进程结束之后分配给另一个客户进程使用

UDP

主要特点:

  1. 无连接:发送数据前不需要建立连接,因此减少了开销和发送数据前的时延
  2. 尽最大努力交付:不保证可靠交付
  3. 面向报文:UDP对应用层交下来的报文,直接保留这些报文的边界然后进行发送,即收到多长的报文就直接照样发送
  4. 没有拥塞控制:所以源主机可以按照恒定速率来发送数据,因为不会受到网络情况的影响
  5. 支持一对一、一对多、多对一、多对多的交互通信
  6. 首部开销小:首部只有8个字节,TCP有20个

首部格式

用户数据报UDP有两个字段:数据字段和首部字段。首部字段有8个字节,4个字段,每个字段长2个字节,4个字段意义如下:

目标计算机接收到UDP数据报时会根据首部中的目的端口把UDP数据报通过对应的端口交给应用进程,但是,如果该端口不存在,那么会直接丢弃掉这个报文并用网际控制报文协议ICMP来发送“端口不可达”差错报文给发送方(traceroute就是基于这个机制来运作的)。

UDP使用到端口号,但是因为不需要事先建立连接,所以不需要套接字socket(TCP才必须要在socket之间建立连接)。

校验和

在计算校验和之前要在UDP用户数据报前面添加12个字节的伪首部,这是只在计算校验和的时候才临时加的,不下传或者上交,只是用于计算校验和。

直接截图自书上了,没什么好说的。

参考

《计算机网络》 谢希仁著:不用说了,经典教材。

TCP/IP笔记——UDP的更多相关文章

  1. 网络协议: TCP/IP 和UDP/IP

    网络协议: TCP/IP 和UDP/IP TCP/IP TCP/IP(Transmission Control Protocol/Internet Protocol)是一种可靠的网络数据传输控制协议. ...

  2. 【网络编程】TCP/IP、UDP、网络概…

    计算机刚刚发明出来的时候,两台计算机之间是无法通信的,为了使计算机之间能够进行数据的交流,制定了OSI(Open SystemInterconnection)开放系统互联模型,而TCP/IP(我们所使 ...

  3. TCP/IP与UDP区别

    最近面试,问到这方面的问题,这里总结一下: TCP (Transmission  Control  Protocol   传输控制协议):面向连接的,不可靠的,数据流服务.UDP (User  Dat ...

  4. TCP/IP笔记 一.综述

    1. TCP/IP分层 TCP/IP 是四层的体系结构:应用层.运输层.网际层和网络接口层,如下图: OSI协议是国际标准的网络协议,但是由于OSI的实用性等问题造成OSI没有流行起来.目前国际上广泛 ...

  5. http与https与socket tcp/IP与UDP 协议等

    网络由下往上分为:   物理层--                       数据链路层-- 网络层--                       IP协议 传输层--               ...

  6. TCP/IP笔记(四)IP协议

    前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...

  7. TCP/IP笔记(五)IP协议相关技术

    IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP时无法实现通信的.必须还要又能够解析主机名称和MACdivide功能,以技术包在发送过程中异常情况处理的功能. 这篇主要介绍下DNS.ARP ...

  8. TCP/IP和UDP之间的区别(转载)

    在分析两者之间的区别之前,我们先搞清楚这两者的关系, TCP/IP协议簇  是一种网络控制协议,简单点说就是一种网络协议,我们网络中的计算机就是通过这套协议簇来进行数据通信的.这套协议簇里面包含了很多 ...

  9. SOCKET 编程TCP/IP、UDP

    TCP/IP 资源:http://download.csdn.net/detail/mao0514/9061265 server: #include<stdio.h> #include&l ...

随机推荐

  1. Java 集合类库

    java类库的基本结构 Iterable public interface Iterable<T> 实现这个接口允许对象成为 "foreach" 语句的目标. 也就是说 ...

  2. 如何使用 vue-cli 3 的 preset 打造基于 git repo 的前端项目模板

    vue-cli 之 Preset vue-cli 插件开发指南 TLDR 背景介绍 vue-cli 3 完全推翻了 vue-cli 2 的整体架构设计,所以当你需要给组里定制一份基于 vue-cli ...

  3. java数据结构4--集合Set

    Set接口 Set接口用来表示:一个不包含“重复元素”的集合Set接口中并没有定义特殊的方法,其方法多数都和Collection接口相同. 重复元素的理解:通常理解:拥有相同成员变量的对象称为相同的对 ...

  4. R语言-六大数据结构

    R语言有六种基本的数据结构(或者说数据类型吧).根据数据的维度和同质/异质可分为5种数据类型,最后再介绍一种特殊的类型“因子”.   同质 异质 1维 原子向量 列表 2维 矩阵 数据框 n维 数组 ...

  5. 【NOIP2016提高A组模拟9.15】Osu

    题目 分析 考虑二分答案, 二分小数显然是不可取的,那么我们将所有可能的答案求出来,记录在一个数组上,排个序(C++调用函数很容易超时,手打快排,时间复杂度约为\(O(>8*10^7)\),但相 ...

  6. java——AtomicInteger 中 incrementAndGet与getAndIncrement 两个方法的区别

    https://blog.csdn.net/chenkaibsw/article/details/81031950 源码: getAndIncrement: public final int getA ...

  7. VSCode编辑器用户设置

    {"gitlens.advanced.messages": {"suppressCommitHasNoPreviousCommitWarning": false ...

  8. 2019 Multi-University Training Contest 3 T7 Find the answer

    Find the answer Time Limit: 4000/4000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...

  9. LSTM细节

    为什么使用tanh? 为了克服梯度消失问题,我们需要一个二阶导数在趋近零点之前能维持很长距离的函数.tanh是具有这种属性的合适的函数. 为什么要使用Sigmoid? 由于Sigmoid函数可以输出0 ...

  10. centos-系统删除多余网卡的方法

    一.删除系统中中多余的ifcfg-eth0.bak Centos系统更改网卡或网卡MAC地址后会出现个eth0.bak配置备份文件解决方法:/etc/sysconfig/networking/devi ...