文章目录

  • 传输层协议
    • 一、端口
    • 二、UDP概述
    • 三、UDP报文
    • 四、程序测试

传输层协议

从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址,但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此严格地说,通信双方不是主机,而是主机中的进程
主机中常常有多个应用进程同时在于外部通信,如下图:

A主机的AP1进程在于B主机的AP3进行通信,同时主机A的AP2进程也在与B主机的AP4进程通信。

两个主机的传输层之间有一个灰色双向箭头,写者“传输层提供应用进程间的逻辑通信”。

逻辑通信
看起来数据似乎是沿着双向箭头在传输层水平传输的,但实际上是沿图中的虚线经多个协议层次而传输。

TCP/IP协议栈传输层有两个重要协议——UDP和TCP,不同的应用进程在传输层使用TCP或UDP之一。

一、端口

端口的作用体现在传输层。

在上图中,AP1与AP3的通信与AP2与AP4的通信可以使用同一个传输层协议来传输(TCP/UDP),根据IP地址或MAC地址都只能把数据传到正确的主机,但具体需要传到哪一个进程,是通过端口来辨认的。

比如同时使用浏览器和QQ,浏览器占用80端口,QQ占用4000端口,那么发送过来的QQ消息便会通过4000端口显示在QQ客户端,而不会错误地显示在浏览器上。

端口号有0~65535的编号,其中:

  • 编号0~1023为系统端口号,这些端口号可以在网址[www.iana.org](http://www.iana.org/)查询到,它们被指派给了TCP/IP最重要的一些应用程序,以下是一些常见的系统端口号:
  • 编号1024~49151为等级端口号,为没有系统端口号的应用程序使用,使用这类端口号必须在IANA按规定手续等级,以防止重复。
  • 编号49152~65535为短暂端口号,是留给客户进程选择暂时使用的,使用结束后,这类端口号会被放开以供其他程序使用。

二、UDP概述

UDP用户数据报协议,它只在IP数据报服务之上增加了很少一点功能,它的主要特点有:

  • UDP是无连接的,发送数据之前不需要建立连接(TCP需要),减少了开销和时延;
  • UDP尽最大努力交付,不保证交付可靠性;
  • UDP是面向报文的,对于从应用层交付下来的IP数据报,只做很简单的封装(8字节UDP报头),首部开销小;
  • UDP没有拥塞控制,出现网络拥塞时发送方也不会降低发送速率。这种特性对某些实时应用很重要,比如IP电话,视频会议等,它们允许拥塞时丢失一些数据,因为如果不抛弃这些数据,极可能造成时延的累积;
  • UDP支持一对一、一对多、多对一、多对多的交互通信。

从应用层到传输层,再到网络层的各层次封装:

三、UDP报文

UDP数据报可分为两部分:UDP报头和数据部分。其中数据部分是应用层交付下来的数据。UDP报头总共8个字节,这8个字节分为4个字段:
* 源端口:2字节,在对方需要回信时可用,不需要时可以全0;

  • 目的端口:2字节,必须有,也是最重要的字段;
  • 长度:2字节,长度值包括报头和数据部分;
  • 校验和:2字节,用于检验UDP数据报在传输过程中是否有出错,有错就抛弃。

四、程序测试

基于Linux下的C实现,想指定IP地址的指定端口发送一个指定内容的UDP数据报
参考实验楼UDP协议 tcpdump抓取UDP报文
test.c文件:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <string.h>
// test.c文件
int main(void)
{int sockfd;struct sockaddr_in server;char msg[20]={0};sockfd = socket(AF_INET,SOCK_DGRAM,0);if (sockfd < 0) {perror("socket error!\n");exit(-1);}memset(&server,0,sizeof(server));server.sin_family = AF_INET;server.sin_addr.s_addr = inet_addr("192.168.1.1");server.sin_port = htons(7777);strncpy(msg,"hello",sizeof("hello"));printf("send message:%s\n",msg);if (sendto(sockfd,msg,20,0,(struct sockaddr *)&server,sizeof(server)) != 20) {perror("sendto error!\n");exit(-1);}        exit(0);
}

1、编译上述test.c文件
gcc -o test test.c
2、启用tcpdump抓包工具
如果没有安装的话需要先执行第一二行代码安装一下,有的话直接执行第三行代码:

sudo apt-get update
sudo apt-get install tcpdump
sudo tcpdump -vvv -X udp port 7777

3、在刚刚编译test程序的文件夹下新开一个终端(或者cd命令进入目录也行),运行刚刚编译的test程序
./test

test程序运行结束,返回刚刚tcpdump的终端查看抓包结果


前20个字节是IP报头,在 【TCP/IP网络协议】(三)IP网络协议 部分有所介绍,后面8个字节是UDP报文:
803e:源端口,2 字节,换成十进制也就是 32830
1e61:目的端口,2 字节,十进制为 7777
001c:包长度,单位为字节,换为十进制可知包长度为 28 字节
7f05:校验和
后面的就是数据内容的ASCII码。

【TCP/IP网络协议】(五)传输层UDP协议相关推荐

  1. 网络 传输层 | UDP协议与TCP协议详解(三次握手及四次挥手、滑动窗口、拥塞控制)

    概念 传输层:是负责应用程序之间的数据传输(通过端口的描述,描述了哪两个进程间的通信):传输层的两个主要协议:UDP 和 TCP UDP协议 UDP协议全称:用户数据报协议(User Dategram ...

  2. 网络编程之 传输层的协议TCP与UDP

    传输层协议: TCP和UDP的区别: TCP:面向连接(经历三次握手).传输可靠(保证数据正确性,保证数据顺序).用于传输大量数据(流模式).速度慢,建立连接需要开销较多(时间,系统资源). 服务端和 ...

  3. 前端网络基础-传输层UDP协议

    UDP(User Dategram Protocol)即用户数据报协议 它也是传输层协议. 我们需要知道数据分为重要数据和不重要数据,比如你发了一封邮件,下载文件,这些都是重要数据,少了一点,可能文件 ...

  4. 传输层——UDP协议

    文章目录 传输层 再谈端口号 端口号划分 认识及查看知名端口号 linux下网络命令 **netstat(查看当前主机的连接情况,高频重要)** pidof(查看服务器的进程id) UDP协议 UDP ...

  5. TCP/IP详解--学习笔记(6)-UDP协议

    1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议. 2.UDP协议头 2.1.UDP端口号 ...

  6. 5.2 计算机网络之传输层UDP协议

    文章目录 1.用户数据报协议UDP概述及特点优势 2.UDP首部格式 3.当传输层从IP层收到UDP数据报时 4.UDP校验 1.用户数据报协议UDP概述及特点优势 为什么应用开发人员宁愿在UDP之上 ...

  7. 计算机网络传输层UDP协议--龙之介计算机网络学习(3)

    概述: 其实计算机网络主要聊的就是因特网五层协议栈的那几种协议,通过对各个协议的构成,了解一个数据包(报文)是如何从网络中完成传输的作用. 这是一个系列的,主要用于自己复习计网. 计算机网络应用层–龙 ...

  8. 计算机网络 --- 传输层UDP协议

    UDP只在IP数据报服务之上增加了很少功能,即复用分用和差错检测功能. UDP的主要特点 UDP是无连接的,减少开销和发送数据之前的时延. UDP使用最大努力交付,即不保证可靠交付. UDP是面向报文 ...

  9. [转](传输层)UDP协议

    目录 数据单位 特点 具体实现 要求 UDP首部格式 发送UDP请求的客户端图释 数据单位 UDP 传送的数据单位协议是 UDP 报文或用户数据报 特点 UDP 是无连接的,即发送数据之前不需要建立连 ...

最新文章

  1. 真没想到中国有这么猛的软件,杀伤力太强了!
  2. 《生命是什么》读书笔记
  3. OpenCV cv :: UMat与DirectX9曲面的互操作性的实例(附完整代码)
  4. 关于java连接sqlserver2000 和sqlserver2005的初识
  5. oracle取日期最大的一条数据_Tableau可视化分析【2】如何连SQL数据查询
  6. Qt学习笔记-QSS装饰控件
  7. Leetcode PHP题解--D68 283. Move Zeroes
  8. Percona XtraDB cluster--第一部分:XtraDB cluster安装 (Centos7)
  9. Java多线程学习十一:你知道哪几种锁?各有什么特点
  10. 编译Sqoop2错误解决
  11. 下载SAP hana镜像文件
  12. 一个java项目的开发流程
  13. 第四届江西省高校网络安全技能大赛初赛WebMisc—Writeup
  14. 数据结构与算法分析——Hash表
  15. BZOJ1140: [POI2009]KOD 编码
  16. es6 混合commjs_嵌入式JavaScript引擎 – mjs
  17. 2021年全国计算机南京考点,2021考研考场安排:往年南京市考研考点及考场安排
  18. SAP ABAP ZBA_R004 批量导入角色里的事务代码,解放BASIS的双手
  19. BNUZ-ACM 2018国庆新生欢乐赛部分题解+思路(已解出答案部分)
  20. camera相关术语

热门文章

  1. orientDB——导入关系数据库数据
  2. java 通过JSch操作Linux
  3. wampserver打开localhost显示域名重定向怎么办?localhost显示域名重定向解决办法
  4. 对于谷歌搜索引擎,李彦宏有话说
  5. [创业-5]:强大企业九大要素圆模型案例2-乐视
  6. 虚拟机启动提示Probing EDD (edd=off to disable)错误
  7. 相片怎么做音乐相册?这些方法帮助你搞定
  8. 基于Pytorch+CNN实现英文文本语义相似度
  9. 阿里云的数据风控试用总结
  10. 浅析从DWARF到BTF @龙蜥社区eBPF SIG