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. 【洛谷P4393】Sequence

    题目大意:给定一个长度为 N 的序列,每次可以合并相邻的两个元素,代价是两者中较大的值,合并之后的值也为两者较大的值,求合并 N-1 次后的最小代价是多少. 题解: 除了最大值以外,每个值均只会被合并 ...

  2. 【洛谷P1490】买蛋糕

    题目大意:给定一个正整数 N,求至少从 [1,N] 中选出多少个数能够表示出 [1,N] 中的所有整数,每个数只能被选 1 次,并求出对于最优解有多少种不同的选择方案. 题解:好题. 仅考虑用最少的不 ...

  3. chrome模拟慢速3G网络

    谷歌调试控制台中network中可以设置,add为自定义

  4. Python中最常见括号()、[]、{}的区别

    在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. Python中的小括号(): 代表tuple元祖数 ...

  5. postman添加测试

    我们有的时候可能需要登陆才能使用下面的接口 解决方案.在浏览器中找到cookie.然后放在postman中的Headers中

  6. 【Leetcode】二分法

    题目: 在排序数组中查找元素的第一个和最后一个位置. 二分法的思想非常简单,然而其中的实现细节非常繁琐,容易出错.本推文非常详细地介绍二分法的实现细节. 总结几点注意事项: 初始上.下界的取值: 判断 ...

  7. SWPUCTF2019 | Network

    这题真的就靠百度的,第一次接触TTL型的misc,直接拿了一个大佬的脚本,改了一丢丢: with open('t.txt') as f: lines = f.readlines() n_num = [ ...

  8. es之批量提交操作

    1:批量查询操作 1):插入测试数据 PUT /costumer/doc/1{ "name": "zhangsan", "age": 20} ...

  9. Zookeeper选举机制(转)

    源:http://blog.csdn.net/tototuzuoquan/article/details/54426684 1.Zookeeper选举机制 Zookeeper虽然在配置文件中并没有指定 ...

  10. HTTPS协议详解(一):HTTPS基础知识

    HTTPS基础知识:HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息. ...