重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

UDP传输时IP层的分片是怎么回事?

时间:2020-09-23 04:40:07 作者:重庆seo小潘 来源:
我们知道,当应用层程序之间进行网络数据传输时,在发送端,数据会从应用层沿着协议栈向下传输,通过TCP/IP层,然后经由链路层发送出去,而在接收端,则是相反的顺序,数据经由链路层接收,然后沿着协议栈向上传输,通过IP/TCP层,最后由应用层程序进行读

我们知道,当应用层程序之间进行网络数据传输时,在发送端,数据会从应用层沿着协议栈向下传输,通过TCP/IP层,然后经由链路层发送出去,而在接收端,则是相反的顺序,数据经由链路层接收,然后沿着协议栈向上传输,通过IP/TCP层,最后由应用层程序进行读取。

先来看程序, 服务端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h> int main(){struct sockaddr_in srvAddr;bzero(&srvAddr,sizeof(srvAddr));srvAddr.sin_family = AF_INET;srvAddr.sin_addr.s_addr = htonl(INADDR_ANY);srvAddr.sin_port = htons(8765);int srvAddrLen = sizeof(srvAddr);int iSock = socket(AF_INET, SOCK_DGRAM, 0);// udpbind(iSock, (struct sockaddr *)&srvAddr, sizeof(srvAddr));while(1){getchar();char szBuf[50001] = {0};recvfrom(iSock, szBuf, sizeof(szBuf) - 1, 0, (struct sockaddr *)&srvAddr, (socklen_t*)&srvAddrLen);printf("msg from client [%s]n", szBuf);}close(iSock);return 0;} 客户端:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <errno.h> int main(int argc, char *argv[]){struct sockaddr_in srvAddr;bzero(&srvAddr, sizeof(srvAddr));srvAddr.sin_family = AF_INET;srvAddr.sin_addr.s_addr = inet_addr("10.100.70.140");srvAddr.sin_port = htons(8765);int iSock = socket(AF_INET, SOCK_DGRAM, 0); // udp#define N 2000char szBuf[N] = {0};for(unsigned int i = 0; i < N; i++) //字符数组最后一个字符不要求是‘’{szBuf[i] = 'a';}int iRet = sendto(iSock, szBuf, sizeof(szBuf), 0, (struct sockaddr *)&srvAddr, sizeof(srvAddr));printf("send size is %d, iRet is %d, errmsg[%s]n", sizeof(szBuf), iRet, strerror(errno));close(iSock);return 0;}我们在服务端抓包, 结果为:xxxxxx$ sudo tcpdump -iany src host 10.100.70.139 -Xnlps0tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes00:13:57.187159 IP 10.100.70.139.46671 > 10.100.70.140.ultraseek-http: UDP, length 20000x0000:4500 05dc 0510 2000 4011 ae22 0a64 468bE.......@..".dF.0x0010:0a64 468c b64f 223d 07d8 116e 6161 6161.dF..O"=...naaaa0x0020:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0030:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0040:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0050:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0060:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0070:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0080:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0090:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00a0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00b0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00c0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00d0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00e0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00f0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0100:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0110:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0120:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0130:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0140:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0150:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0160:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0170:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0180:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0190:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01a0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01b0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01c0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01d0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01e0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01f0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0200:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0210:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0220:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0230:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0240:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0250:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0260:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0270:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0280:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0290:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x02a0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x02b0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x02c0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x02d0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x02e0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x02f0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0300:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0310:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0320:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0330:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0340:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0350:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0360:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0370:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0380:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0390:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x03a0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x03b0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x03c0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x03d0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x03e0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x03f0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0400:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0410:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0420:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0430:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0440:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0450:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0460:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0470:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0480:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0490:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x04a0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x04b0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x04c0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x04d0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x04e0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x04f0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0500:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0510:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0520:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0530:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0540:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0550:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0560:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0570:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0580:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0590:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x05a0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x05b0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x05c0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x05d0:6161 6161 6161 6161 6161 6161 0000 0000aaaaaaaaaaaa....0x05e0:0000 0000 0000 0000 0000 0000............00:13:57.187161 IP 10.100.70.139 > 10.100.70.140: ip-proto-170x0000:4500 0224 0510 00b9 4011 d121 0a64 468bE..$....@..!.dF.0x0010:0a64 468c 6161 6161 6161 6161 6161 6161.dF.aaaaaaaaaaaa0x0020:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0030:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0040:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0050:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0060:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0070:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0080:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0090:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00a0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00b0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00c0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00d0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00e0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x00f0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0100:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0110:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0120:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0130:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0140:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0150:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0160:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0170:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0180:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0190:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01a0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01b0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01c0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01d0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01e0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x01f0:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0200:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0210:6161 6161 6161 6161 6161 6161 6161 6161aaaaaaaaaaaaaaaa0x0220:6161 6161 0000 0000 0000 0000 0000 0000aaaa............0x0230:0000 0000....我们发现, 有两个IP包, 为什么会这样呢? 受到MTU的限制, IP包长度限制在1500字节, 我们看第一个包, 刚好就是1500字节, 第二个包刚好就是剩余的信息, 这就是IP分片(只针对UDP)的原因和原理。 而且要注意到, 第二个IP包是IP头+data, 并没有UDP头信息(更无端口信息可言), 所以, 如果抓包的时候, 采用端口过滤, 那么后面这个包肯定就丢了。 这个大坑, 好多人遇到过。

相关推荐:

Nodejs实现的一个简单udp广播服务器、客户端_node.js以上就是UDP传输时IP层的分片是怎么回事?的详细内容,更多请关注小潘博客其它相关文章!