目录
- OSI与TCP/IP模型
- UDP发送数据过程
- 以太网协议头
- IP协议头
- UDP协议头
- UDP包
OSI与TCP/IP模型
UDP发送数据过程
以太网协议头
把上面的以太网头用一个结构体表示如下:
#define ETH_LENGTH 6
struct ethhdr {
unsigned char dest[ETH_LENGTH];
unsigned char source[ETH_LENGTH];
unsigned short protocol;
};
IP协议头
struct iphdr {
unsigned char version:4;
hdr_leng:4;
unsigned char tos;
unsigned short totlen;
unsigned short id;
unsigned short flag:3;
offset:13;
unsigned char ttl;
unsigned char protocol;
unsigned short check;
unsigned int sip;
unsigned int dip;
};
UDP协议头
struct udphdr {
unsigned short sport;
unsigned short dport;
unsigned short len;
unsigned short check;
};
UDP包
上面知道了UDP协议头,也知道UDP发送数据时在每层都要封包的。接下来就写一下UDP的包。
struct udppkt {
struct ethhdr eh;
struct iphdr ip;
struct udphdr udp;
unsigned char body[0];
};
TCP头部:
-
序列号:在建⽴连接时由计算机⽣成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送⼀次数据,就
「累加」⼀次该「数据字节数」的⼤⼩。⽤来解决⽹络包乱序问题。
-
确认应答号:指下⼀次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数
据都已经被正常接收。⽤来解决不丢包的问题。
-
控制位:
1 ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建⽴连接时的 SYN 包之外该位必须设置为 1 。
2 RST:该位为 1 时,表示 TCP 连接中出现异常必须强制断开连接。
3 SYN:该位为 1 时,表示希望建⽴连接,并在其「序列号」的字段进⾏序列号初始值的设定。
4 FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双⽅的主机之间就可以相互交换 FIN 位为 1 的 TCP 段。
UDP头部
- ⽬标和源端⼝:主要是告诉 UDP 协议应该把报⽂发给哪个进程。
- 包⻓度:该字段保存了 UDP ⾸部的⻓度跟数据的⻓度之和。
- 校验和:校验和是为了提供可靠的 UDP ⾸部和数据⽽设计。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)