TCP/IP网络协议基础 02——传输层协议UDP

课程来源 :实验楼

https://www.shiyanlou.com/courses/98

UDP(User Datagram Protocol)用户数据报协议

1 主要特点:

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

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

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

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

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

2 报文格式

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

3 发送并抓取UDP数据报

需要一个小程序,用于向 指定 IP 地址(192.168.1.1) 的 指定端口(7777) 发送一个 指定内容 (“hello”)的 UDP 数据报,(C语言)

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <string.h>

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);

在终端监听7777号端口

sudo tcpdump -vvv -X udp port 7777

之后编译并运行发送报文程序,即可在监听终端得到报文信息。

4 Question:

当切换目标IP和目标端口时,只需要改变监听端口即可,为何不用监听IP只需要监听端口号就可以得到UDP报文?

标题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值