【TCP/IP网络协议学习笔记五】传输层:UDP协议

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

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

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

FTP: 21

TELNET:23

SMTP:25

DNS: 53

TFTP:69

HTTP:80

SNMP:161

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

编号 0~1023 为 系统端口号,它们被指派给了 TCP/IP 最重要的一些应用程序.

编号 1024~49151 为 登记端口号 ,为没有系统端口号的应用程序使用,使用这类端口号必须在 IANA 按规定手续登记,以防止重复。

编号 49152~65535 为 短暂端口号 ,是留给客户进程选择暂时使用的,使用结束后,这类端口号会被放开以供其它程序使用。

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

(1).UDP 是无连接的,发送数据之前不需要建立连接(而 TCP 需要),减少了开销和时延。

(2).UDP尽最大努力交付,不保证交付可靠性。

(3).UDP 是面向报文的,对于从网络层交付下来的 IP 数据报,只做很简单的封装(8 字节 UDP 报头),首部开销小。

(4).UDP 没有拥塞控制,出现网络拥塞时发送方也不会降低发送速率。这种特性对某些实时应用是很重要的,比如 IP 电话,视频会议等,它们允许拥塞时丢失一些数据,因为如果不抛弃这些数据,极可能造成时延的累积。

(5).UDP 支持一对一、一对多、多对一和多对多的交互通信。

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

UDP 报文

UDP 数据报可分为两部分:UDP 报头和数据部分。其中数据部分是应用层交付下来的数据。UDP 报头总共 8 字节,而这 8 字节又分为 4 个字段:

(1)源端口 2 字节 在对方需要回信时可用,不需要时可以全 0;

(2)目的端口 2 字节 必须,也是最重要的字段;

(3)长度 2 字节 长度值包括报头和数据部分;

(4)校验和 2 字节 用于检验 UDP 数据报在传输过程中是否有出错,有错就丢弃。


tcpdump 抓取 UDP 报文

现在我们动手实践,尝试抓取一个 UDP 数据报,并解读其内容。

我们需要一个小程序,用于向 指定 IP 地址 的 指定端口 发送一个 指定内容 的 UDP 数据报,这个程序已经编写好,依次输入以下命令,使用 github 把它下载下来,并编译:

cd Desktop

git clone http://git.shiyanlou.com/shiyanlou/tcp_ip_5

cd tcp_ip_5

gcc -o test test.c


这个 C 程序会向 IP 地址 192.168.1.1 的 7777 端口 发送一条 “hello” 消息。你可以用编辑器修改程序,向不同的 IP 不同的 IP 发送不同的内容。

编译完成后先别运行,我们还需要使用一个知名的抓包工具 tcpdump ,依次输入以下命令安装,并运行 tcpdump:

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


现在最小化当前终端,另开启一个终端,输入以下命令运行刚才编译好的 C 程序 test:

cd Desktop/tcp_ip_5

./test

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

 

图片描述

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注