IP/UDP/TCP/ICMP数据报协议的校验和的区别和计算

IP,TCP,UDP,ICMP校验和的区别和计算 IP校验和的计算IP数据报的校验和只检验IP数据报的首部。当发送IP包时,需要计算IP报头的校验和: 把校验和字段置为0; 对IP头部中的每16bit进行二进制求和; 如果和的高16bit不为0,则将和的高16bit和低16bit反复相加,直到和的高16bit为0,从而获得一个16bit的值; 将该16bit的值取反,存入校验和字段。 当接收IP包时,需要对报头进行确认,检查IP头是否有误,算法同上 阅读详情

IP/UDP/TCP/ICMP数据报协议的校验和的区别和计算




1、现针对各种协议数据包校验的区别总结如下:

(1)IP校验和:

IP数据报的校验和只检验IP数据报的首部。

(2)UDP校验和:

UDP数据报计算校验和的方法和IP数据报校验和的方法相似,但是UDP的校验和是将首部和数据部分一起都校验。
并且在计算UDP校验和之前需要封装一个伪首部,伪首部结构如下(具体结构定义见后面代码部分):

源IP地址 | 目的IP地址 | 全 0 | 协 议 | UDP长度


(3)TCP校验和:

TCP 的校验和计算方法同UDP一样,同样要加上一个伪头部,区别是伪头部的协议码是0x06,长度是整个TCP报文的长度(包含TCP头部)。

(4)ICMP校验和:

ICMP校验和的计算方法一样,只不过只是对ICMP包整个进行校验和,没有伪头部,也不包括IP包头部。

总结如下: 计算IP数据报和ICMP的校验和时不需要封装伪首部,他俩不同的是IP数据报只检验IP数据报的首部,而ICMP数据报校验包括ICMP头部和数据部分(整个ICMP长度),TCP和UDP的校验方法和IP、ICMP校验方法一样,但是TCP和UDP校验之前需要封装伪首部。还有一个需要注意的是校验的顺序是从上(层)到下(层),如校验ICMP时,先校验ICMP后校验IP(ICMP数据包结构=ether + IP + ICMP), 并且校验之前需要先将校验和的值初始化为0.

2、以上的几种数据报的校验和的计算方法都一样,把校验部分看成以16位为单位的数字组成,依次进行二进制反码求和。

具体如下:
unsigned short check_sum(unsigned short *packet,int packlen)
{
register unsigned long sum = 0;
while (packlen > 1)
{
sum += *(packet++);
packlen -= 2;
}
if (packlen > 0)
sum += *(unsigned char *) packet;
while (sum >> 16)
sum = (sum & 0xffff) + (sum >> 16);


return (unsigned short) (~sum);
}

3、应用举例(UDP校验):

注:当一个数据包中有多个数据报协议时,校验的顺序必须是从上往下,
例:一个数据报的封装为 以太网首部+IP首部+UDP首部+数据,那么在计算校验和的步骤如下:
(1)分别将IP和UDP的校验和置0;
(2)计算UDP校验和(包括已封装伪首部的UDP头+数据);
(3)计算IP校验和;

下面为计算UDP校验和的示例:
//定义校验UDP时的伪首部结构体
typedef struct {
struct in_addr s_addr;         //源IP
struct in_addr d_addr;         //目的IP
unsigned char mbz;             //全0
unsigned char ptcl;            //协议
unsigned short plen;           //UDP长度(UDP头+数据)
}udp_psd_header;



udph->check = 0;           //不能省略
udph->check = udp_chksum(iph, udp_len); 
//校验和,这里传入参数iph(IP首部指针)是因为封装UDP伪首部时需要知道源IP、目的IP,而知道了IP首部指针,自然也就知道了UDP首部指针
iph->ip_sum = 0;            //不能省略
iph->ip_sum = check_sum((unsigned short*)iph, sizeof(struct ip));  //校验和

//UDP校验和程序
//校验UDP/TCP首部首先需要封装一个为首部,然后再校验,校验长度包括头和数据部分
unsigned short udp_chksum(void *data_ip,int udp_len)   //udp_len = UDP首部+数据
{
udp_psd_header * pudp_psd_header;
pudp_psd_header = (udp_psd_header *)malloc(udp_len+sizeof(udp_psd_header));
if(!pudp_psd_header) 
return -1;
memset(pudp_psd_header,0,udp_len+sizeof(udp_psd_header));
//封装伪首部
pudp_psd_header->s_addr= ((struct ip *)data_ip)->ip_src;
pudp_psd_header->d_addr= ((struct ip *)data_ip)->ip_dst;
pudp_psd_header->mbz=0;
pudp_psd_header->ptcl=IPPROTO_UDP;
pudp_psd_header->plen=htons(udp_len);

memcpy((unsigned char *)pudp_psd_header+sizeof(udp_psd_header),(unsigned char *)data_ip+sizeof(struct ip),udp_len);
return check_sum((unsigned short *)pudp_psd_header,udp_len+sizeof(udp_psd_header));

}



计算机网络—IP头部结构,TCP头部结构,UDP头部结构 IP头部结构 IP头部结构图如下 注意:一行32bit为4字节,扩展的时候总是一行一行的拓展,也就是4个字节4个字节的扩展 版本号(Version):长度4bit,标识目前采用的IP协议的版本号,一般的值0100(IPv4),0110(IPv6) 首部长度(Header Length):长度4bit,这个字段的作用是为了描述IP头部的长度,IP头部长度是可变的(最常用的是红框中的部分,一共占20字节)。 - 首部长度部分占4个bit位,取值范围是0-15,单位为32bit(4个字节) - 整个IP头部 阅读详情

相关推荐

以太网协议介绍(ARP、UDP、ICMP、IP)

IP:internet protocol(网际协议)IP协议是TCP/IP协议簇中的核心协议之一,也是TCP/IP协议的载体,IP协议规定了数据传输时的基本单元和格式。所有的TCP、UDP以及ICMP数据都是以IP数据报格式传输的。IP数据报格式:IP首部是以4(32bit)个字节为单位,版本:IPv4 or IPv6;IPv4的地址是4个字节,即为0100,IPv6是6个字节,即0110;

xzs520xzs的博客 1万+

ip数据报计算首部检验和

需要注意的是,在计算IP数据包首部检验和时,应该将源地址和目的地址转换成网络字节序,即大端序。网络字节序是一种规范化的字节序,用于在网络中传输数据,它的顺序与我们平时使用的主机字节序是不同的。当我们在使用互联网进行数据传输时,数据可能会被篡改或者损坏。为了保证数据传输的可靠性和完整性,计算IP数据包首部检验和是一种非常重要的校验机制。本文将会介绍计算IP数据包首部检验和的方法。首先,我们需要了解IP数据包首部的结构。

bigBbug的博客 8155

【计算机网络实验】IP协议和ICMP协议的抓包分析(wireshark)

计算机网络实验——基于wireshark的IP协议和ICMP协议抓包分析

发布一些个人学习笔记,分享一些可能在安全学习道路上遇到的问题、心得,一起学习一起进步 5745

IP校验和(checksum)原理

IP头部校验和原理,原始套接字自行组包用到,附带示例。

weixin_28673511的博客 6312

【计算机网络】Linux下的网络通信协议(TCP、UDP、IP、ICMP、ARP、DNS)

各层协议的作用:https://www.cnblogs.com/pengjie-py/p/11256483.htmlTCP/IP 意味着 TCP 和 IP 在一起协同工作。TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。IP 负责将包发送至接受者。 TCP 详细总结戳:https:...

weixin_41646851的博客 1527

Python-OPCUA 实现西门子PLC数据批量读写与自动化监控

本文详细介绍了如何使用Python结合OPC UA协议,实现对西门子PLC数据的批量读写与自动化监控。通过搭建开发环境、利用KEPserverEX作为通信桥梁,并配合Python代码实战,读者可以掌握高效的数据采集、批量写入以及构建带报警功能的监控系统的方法,从而大幅提升工业自动化场景下的数据处理效率和系统灵活性。

www00的博客 181

学习记录_网络层基础

初次学习网络协议记录,如有错误请见谅,欢迎大家补充修改哈。 目录 网络层_大概的结构: 网络层的首部由下述几个部分构成: 大概的字段功能: 具体的字段功能解释: [4位]-IP协议版本:指该IP包用于IPV6还是IPV4 [4位]-整个首部长度(缩放系数为4) [8位]-区分服务SOQ:用于在网络中通过优先级来调整传输先后 [16位]-总长度(首部长度+数据长度):用于记录整个IP包的长度,最大长度为65535个字节(即0xFFFF=216-1) [16位]-标识字段:用于给每一个IP.

LP的博客 435

【论文精读】Latent Diffusion

Latent Diffusion

weixin_44934783的博客 4476

ICMP(协议)

ICMP协议

m0_62665450的博客 3098

Kimi K3大模型API实战:从调用到本地知识库问答系统构建

大语言模型(LLM)作为人工智能的核心技术,通过海量数据训练获得理解和生成自然语言的能力。其工作原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。这项技术的核心价值在于能够将非结构化文本转化为可计算、可交互的智能体,极大地提升了信息处理和自动化任务的效率。在应用场景上,大模型广泛应用于智能对话、代码生成、文档总结与问答等领域。其中,国产大模型如月之暗面推出的Kimi K3,凭借其在**长文本处理**和**中文场景优化**方面的优势,为开发者提供了新的技术选项。本文将以Kimi K3为例

weixin_30694389的博客 299

ComfyUI 的 LoRA 训练:素材打标签与调优全攻略

标签是 LoRA 训练的"地基"——地基打不牢,后续调参再精细也难出好效果。记住:标签要"少而精",聚焦独特点,用触发词控效果。下一篇我们将讲解参数设置,让你的优质标签发挥最大价值~

2301_78150483的博客 3098

ip,icmp,tcp,upd,ftp的简单含义

ip 网络层标记转发数据包 不具有重发机制,不可靠传输协议 icmp ip传输异常,无法到达目标地址,就会利用icmp协议给发送端发一个异常通知 tcp -

u014698430的博客 1645

AI系统架构设计实战:AI应用架构师的深度指南

核心概念:AI系统架构是指设计和组织人工智能系统各个组件(包括数据、算法、计算资源、集成接口等)的结构框架,以及这些组件之间的交互方式和原则。它为AI应用提供了技术蓝图,决定了系统的性能、可扩展性、可维护性和可靠性。数据的本质:数据是对客观事物的符号表示,是可识别的、抽象的符号。在AI系统中,数据不仅是输入,也是系统学习和改进的基础。数据就像AI系统的"燃料",其质量和数量直接决定了AI系统的能力边界。

AI天才研究院 1198

IP TCP UDP ICMP校验和的区别和计算

IP校验和的计算 IP数据报的校验和只检验IP数据报的首部。 当发送IP包时,需要计算IP报头的校验和: 把校验和字段置为0; 对IP头部中的每16bit进行二进制求和; 如果和的高16bit不为0,则将和的高16bit和低16bit反复相加,直到和的高16bit为0,从而获得一个16bit的值; 将该16bit的值取反,存入校验和字段。 当接收IP包时,需要对报头进行确认,检查IP头是否有误,算法同上2、3步,然后判断取反 的结果是否为0,是则正确,否则有错。 代码如下: unsigned

輚至消亡 2708

OPPO 数据分析面试题及参考答案

如何设计共享单车数据库的各个字段? 对于共享单车的数据库设计,首先考虑用户相关的字段。用户表可以包含用户 ID,这是一个唯一标识符,用于区分不同用户;姓名,记录用户的真实姓名;联系方式,比如手机号码,方便在出现问题时联系用户;注册时间,记录用户何时开始使用共享单车服务;信用分数,用于衡量用户使用共享单车过程中的行为是否合规,比如是否按时归还车辆等。 车辆信息表要有车辆 ID,这是车辆的唯一标识;车辆类型,例如普通单车、电动单车等;投放时间,即车辆投放到市场的时间;车辆状态,包括是否可用(如正

大模型大数据攻城狮的专栏 1185

Agent 智能体学习指南:从入门到求职的完整路线

AI Agent 不是更长的 prompt,而是一类系统设计——模型在受控环境里观察状态、选择动作、调用工具、接收反馈。本文系统梳理 Agent 的 5 个核心概念、7 个关键模块(Goal/State/Context/Tools/Loop/Guardrails/Eval)、三条学习路线(工程落地/研究算法/求职作品)、框架选型策略(LangGraph/OpenAI Agents SDK/Pydantic AI 等场景推荐),以及可执行的 7 天最小项目计划(从概念到简历 bullet)。

program哲学 229

基于FPGA的万兆以太网UDP/IP协议栈讲解

31bit,这种传输次序为big endian(大端对齐)。TCP/IP所有二进制整数在网络中传输时都要求采用这种次序,因此这种传输次序又称为网络字节序。版本(Version)+首部长度(IHL):长度为1字节。版本[0:3]就是IPv4或者IPv6,一般选择IPv4,即版本值为4。首部长度[4:7]是指首部有多少个32位数,因为4位的最大值为15,因此首部最长为60字节,5表示固定最小值为20字节。选项部分(可选字段)的最大值为40字节,不够4的倍数要用0填充,使数据部分的起始地址为4的倍数。...

ltqdxl的博客 1万+

点云体积计算方法之一 附python代码

另外需要注意,这个只适合点云密集分布的场景来计算体积,比如树木扫描的体积;如果只是有表面积扫描的点云,该方法就不能计算整个物体的体积了。通过计算点云所占用的体素的数量来计算点云的近似体积。这是一个非常粗略的近似值,对于复杂的形状可能不准确。

三维点云技术探索 1888

IP、ICMP、UDP、TCP 校验和算法

以前看计算机网络相关的书,每次看到IP或者UDP报头校验和时,都一瞥而过,以为相当简单,不就是16bit数据的相加吗。最近在研究《TCP/IP详解 卷1:协议》这本书,看到校验和是16bit字的二进制反码和(晕,以前都没注意原来是反码和,看来以前看书不仔细啊!罪过,罪过~~),觉得很奇怪,为什么会用反码和,而不是直接求和呢?(因为我认为TCP/IP协议里面的算法和思想一般都是非常经典的,人家这么做

春风得意,马蹄仍急;少年豪情,一笑难回。 910

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ICMP、ARP、TCP/UDP协议

这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录 一级目录 二级目录 三级目录 一级目录 二级目录 三级目录

weixin_56422027的博客 1104

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

关于checksum校验和算法

今天复习计网的时候看到了UDP头部有差错校验,其中的checksum算法没理的太清楚,索性写一篇博客,顺便回顾一下其他的。 校验和覆盖的内容: IP校验和:IP首部。 ICMP校验和:ICMP首部+ICMP数据; UDP、TCP校验和:首部+数据+12个字节伪首部(源IP地址、目的IP地址、协议、TCP/UDP包长)。 计算校验和的步骤: [1]把校验和字段设置为0。 [2]把需要校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和。 [3]把得到的结果存入校验和字段中。 另外UDP、TCP数据报

weixin_42268798的博客 8494

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

UDP/IP传输协议

一、传输层最重要的协议就是TCP和UDP。TCP协议复杂,是面向连接的传输协议且传输可靠;而UDP协议简单,是面向无连接的传输协议,传输速度快但传输不可靠。可以将UDP协议看作IP协议暴露在传输层的一个接口。 UDP协议同样以数据报(datagram)的方式进行数据传输,而且UDP协议提出了端口(port)的概念。IP协议进行的是IP地址到IP地址的传输。但是每台计算机有多个通信通道,并将多个通...

大不列颠小小咸鱼 1万+

udp校验和计算方法_程序员必备基础知识-UDP协议的详细解析

【关注我】,学习不迷路。关于C/C++,Linux,golang,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,ffmpeg,TCP/IP,协程,DPDK,嵌入式等学习资料,请大家加群私聊管理领取。QQ群:1106675687。一、UDP的概述(User Datagram Protocol,用户数据报协议)UD...

weixin_39630880的博客 5260

IP、TCP、UDP首部详解

IP首部 IP首部字段图 IP首部字段详情 4位版本: 协议版本号,IPv4是0100,IPv6是0110,目前基本都是IPv4版本。 4位首部长度: 指首部占32bit字的数目,包括选项区,也就是说单位是4个字节,如图1-1首部是20个字节,那首部字段值为5,即0101,首部最大值是1111,也就是说首部长度字段最大可表示15(1111)*4 = 60字节长度(包含选项段)。普通IP数据报(没...

xupeng1644的博客 5433

IP,TCP,UDP,ICMP校验和的区别

IP,TCP,UDP,ICMP校验和的区别 IP校验和=IP头部的计算 TCP, UP校验和=伪首部+TCP/UDP报头+数据 ICMP校验和=ICMP报头+数据

一天不学习,就浑身难受 599
上一篇: Linux系统在未登录的情况下修改root密码方法(linux系统忘记root密码,进不去系统怎么办)
下一篇: 怎样修改Linux的hostname
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值