网络编程(2):TCP、UDP协议详解

Linux网络编程:TCP与UDP详解 本文深入探讨了Linux网络编程中的TCP和UDP协议,包括它们的基本概念、使用方法和通信过程。文章通过示例代码、时序图和异常情况处理,帮助读者全面理解TCP和UDP在服务器编程中的应用。 阅读详情

  1. UDP协议
    1. UDP Header、UDP伪 header、校验和
    2. UDP协议特点:差错检测
    3. IP分组与重组
  2. TCP协议
    1. TCP Header
    2. TCP协议特点
      1. 差错检测
      2. 差错纠正
      3. 队列管理
      4. 重复消除
      5. 流量控制
      6. 拥塞控制
    3. TCP生命周期器
      1. TCP三次握手连接(三次握手)
      2. TCP四个握手断开连接(四次分手)
      3. TCP数据传输



1、UDP协议
     UDP是面向无连接、不可靠的传输层协议,它本质上就是在IP协议上添加了差错检测、超时重传、IP分组与重组等轻量级的功能组成的。
     它的传输速度十分快,但不考虑网络的状态与对其他用户网络的消极影响。但它也非常适合应用于实时要求高的场景。
     它是面向无连接的、不可靠的,因为数据报文是直接发送,并且不关心是否发送成功,而接收端则关心是否能收到数据包和数据报文正确与否。

1.1、UDP头、UDP伪头、校验和
UDP头 & UDP伪头:

UDP头的定义如下结构:

UDP Header一共8个字节,也比较简单。因为是传输层是面向端口传输编程,所以头里面有源端口号、目的端口号用于表明是哪个程序在收发。


UDP头 & UDP伪头的结构:

伪头的作用只是仅仅是用户校验和的的计算,实际上不传送出去(传送到别的层),让UDP层能验证数据是否正确到达目的地。

校验和:

发送方通过UDP头和UDP伪头生成校验和,接收方通过同样的数据生成校验和,通过比对两个校验和是否一致,可得出是否发生传输错误。
若发生传输错误,则舍弃整个报文,或者发起重启。

1.2、差错检测
UDP Header具备一个UDP校验和,通过校验和可以得知数据是否正确地传输,这就是UDP的差错检测。

NOTE:
校验和在IPV4是默认开启,但可关闭。
校验和在IPV6中是强制开启。

1.3、IP分组与重组

当报文超过数据链路层的MTU(max transfer unit)时,会将报文切分层若干IP报文发送,然后在接收端进行重组。而且只有一个IP报文会有UDP头。

重组失败的情况:
在IP层,当收到第一个UDP IP报文后,系统会启动计时器,若在计时器设定的时间内,都没有接收完完整的UDP报文,那么就会UDP重组失败。


2、TCP协议
{
  1. TCP协议
    1. TCP Header
    2. TCP协议特点
      1. 差错检测
      2. 差错纠正
      3. 队列管理
      4. 重复消除
      5. 流量控制
      6. 拥塞控制
    3. TCP生命周期器
      1. TCP三次握手连接(三次握手)
      2. TCP四个握手断开连接(四次分手)
      3. TCP数据传输
}
TCP协议是面向连接、可靠的单播协议。与UDP的数据模型是数据报文不一样,TCP的数据模型是字节流。

TCP Header

TCP的标准头部长度为20字节,若有附加的可选项就另算。
  • 端口:从有源端口和目的端口这点可以看出,TCP也是端口与端口通信的传输层协议。
  • 序列号字段:用于表示报文的顺序,是一个32位的上升方法的无符号数,到了2的32次方后再循环回到0。
  • 确认号字段:确认号包含的字段是该确认号的发送方期待的下一个序列号。
  • 标志位
    • CWR:拥塞窗口减(发送方降低发送速率)
    • ECE:ECN回应(发送方接收到一个更早的拥塞通告)
    • URG:紧急指针有效(很少被使用)
    • ACK:确认(确认字段有效,连接建立后一直有效)
    • PSH:推送(接收方应该尽快给应用程序传送这个数据—没被可靠地实现或者用到)
    • RST:重置连接(取消连接,通常是因为错误)
    • SYN:用于初始化一个连接的同步序列号
    • FIN:该报文段的发送方已经结束向对方发送数据
  • 窗口大小:16位定义窗口大小,同时允许发送多少IP报文
  • TCP校验和:用于差错检测
  • 紧急指针:略

TCP协议特点:
  1. 差错检测
  2. 差错纠正
  3. 队列管理
  4. 重复消除
  5. 流量控制
  6. 拥塞控制
差错检测 & 差错纠正:

TCP同样是使用校验和与CRC来检测分组里的差错。当TCP检测到分组里又差错的时候,会使用重传的方式实现差错纠正,具体流程如下:
(1)因为TCP是一个面向连接的协议,所以每一个数据包的发送成功都会得意一个ACK响应,当某一个ACK丢失了,发送方无法根据其判断出是丢失了那个组,所以只能通过重传所有数据实现差错纠正
(2)同样的,若某一个分组被校验和检测出发生传输错误,那么接收方就不会回应ACK,让发送方超时,从而启动重传。
(3)若发生重传,那必定会有重复分组存在,所以得根据序列号进行去重操作。
队列管理 & 重复消除:

TCP能根据序列号与相应好来轻松实现IP切块与重组。
若发生重传,那必定会有重复分组存在,所以得根据序列号进行去重操作。
流量控制 & 拥塞控制:

TCP是通过变量窗口来实现流量控制和拥塞控制的。
因为TCP是面向连接的协议,能根据ACK的响应速度,改变窗口大小(令牌数量)从而改变IP数据包的发送数量,从而能在恶劣的网络环境保持通信的质量。

TCP生命周期器:
  1. TCP三次握手连接(三次握手)
  2. TCP四个握手断开连接(四次分手)
  3. TCP数据传输
TCP三次握手连接(三次握手):
TCP四个握手断开连接(四次分手):
TCP数据传输:








详细介绍pytorch重要的API Tensor 是 PyTorch 中最基本的数据结构,提供了多种创建和操作张量的函数。Autograd 提供了自动求导功能,可以跟踪 Tensor 上的操作并计算梯度。损失函数用于衡量模型预测值与真实值之间的差异,提供了多种损失函数。是构建神经网络的基础类,提供了定义网络层和前向传播的方法。提供了 GPU 计算的支持,包括设备管理、内存管理等。提供了一些常用的函数式操作,如激活函数、损失函数等。提供了常用的数据集、模型架构和图像转换工具。提供了数据加载和预处理的工具,包括。 阅读详情

相关推荐

Androiud安卓链接sqllite的代码使用案例

【代码】Androiud安卓链接sqllite的代码使用案例。

laterstage的博客 1328

UDP协议详解

一、UDP协议概述 传输层另一个重要协议就是 用户数据报协议 UDP。UDP 只在 IP 的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及差错检测的功能。 UDP(User Datagram Protocol,用户数据报协议) UDP的主要特点是: (1)UDP 是无连接的。即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。 (2)UDP 使用尽最大努力交付。即保证可靠交付,因此主机不需要维护复杂的连接状态.......

yunfan 6万+

音频分割:长语音音频 分割为 短语音音频 - python 实现

音频分割:长语音音频 分割为 短语音音频 - python 实现

DATABALL 的博客 1207

UDP 协议详解

UDP 协议是一种简单、快速的传输协议,具有无连接、不可靠、简单、高效等特点,主要应用于实时传输场景和局域网内的数据传输。UDP 协议的主要问题是可靠性较差,因此在使用时需要根据实际需求进行优化和控制。

兴趣是最好的老师,勤能补拙 9974

利用Python实现纬度加权平均(即NCL中的wgt_areaave)

当处理全球数据的时候,最常见的分析就是全球、北半球平均了,这时候一定要注意要根据纬度等信息进行加权,求加权平均,要不然结果肯定会不准。但是对于Python中,常规的计算包里面是没有的,或许现在有其他包可以实现,也可以告诉我~。

记录基于python语言处理气象问题的一些代码,包括不限于气象数据读取、机器学习和深度学习建模。 5744

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5995

【网络】UDP协议

UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。UDP 提供了不面向连接的通信,且不对传送的数据报进行可靠的保证,适用于一次传送少量的数据,不适用于传输大量的数据。

m0_51064412的博客 1万+

HBF凭什么能挑战HBM?

最近AI圈聊得最多的,除了大模型迭代,就是“算力瓶颈”。大家都知道GPU不够用、HBM抢疯了,但很少有人注意到,存储层正在酝酿一场革命——高带宽闪存(HBF)。今天就结合HBM之父Joungho Kim教授的最新观点,跟大家好好盘盘这门技术:它不是HBM的替代品,却可能重塑AI推理的游戏规则,甚至在2038年超越HBM市场规模。先澄清一个核心认知:HBF不是凭空冒出来的新技术,而是站在HBM肩膀上的“优化款”。

存储随笔 2130

网络编程(2)(对于UDP与TCP协议深层理解)

前期掌握了网络的基础原理,可以简单编写代码完成网络编程。对于我们程序员来说,网络的相关的协议是掌握的重中之重,但是对于5层协议来说,传输层与网络层的协议更是重点。

多敲代码防脱发的博客 1157

MATLAB三元相图实战:从数据准备到高级可视化技巧全解析

本文深入解析了如何使用MATLAB绘制专业的三元相图(ternary plot)。文章从数据归一化、范围映射等预处理技巧入手,详细介绍了散点图、等高线图、凸包计算等高级可视化方法,并提供了多数据集对比与出版级图表美化的实战指南,帮助科研与工程人员高效呈现复杂的三元数据关系。

spark7igniter的博客 258

别再手动查日志了!用Dify+Zabbix打造你的专属运维“嘴替”(保姆级配置流程)

本文详细介绍了如何利用Dify平台与Zabbix监控系统集成,构建智能运维对话系统,实现自然语言交互的运维管理。通过保姆级配置流程,帮助运维工程师提升查询效率、降低学习成本,打造企业级智能运维解决方案。

weixin_27298377的博客 456

网络编程(2)TCP与UDP协议

概念:TCP(Transmission Control Protocol)协议指的是传输控制协议,是一个面向连接的传输协议,他是一个能提供高可靠性的通信协议,所谓高可靠性指的是数据无丢失、数据无误、数据无失序、数据无重到达。(打电话)

深入研究却不会编程的小菜鸟 407

AHP层次分析法在项目风险评估中的实战应用(含Excel模板)

本文详细介绍了AHP层次分析法在项目风险评估中的实战应用。通过构建风险层次模型、利用判断矩阵量化主观判断,并结合Excel工具进行权重计算与一致性检验,将模糊的定性风险转化为清晰的量化排序。文章以新产品上线项目为例,提供了完整的分析流程和可操作的Excel模板,帮助项目经理高效识别并优先处理核心风险。

weixin_29061465的博客 570

JavaSE基础(day21)(1)网络编程的常识 (2)基于tcp协议的编程模型(3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

1.画图题 画出所学IO流类之间的关系。 2.编程题 使用实现继承的方式启动一个线程,在该线程中每隔一秒打印一次当前系统时间,主线程等待5秒之后停止子线程。 今天内容: (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型 1.网络编程的常识(记住) 目前主流的网络通讯软件有:QQ、微信、飞信、阿里旺旺、… 1.1 七层网络协议模...

程序员哦的博客 373

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

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

python(12-2 网络编程 udp ,tcp 协议)

UDP协议 UDP:用户数据报协议,不可靠性,只是把应用程序传给IP层数据报送出去,但是不能保证他们是否能到达目的地,传输数据报钱不用再客户端和服务器之间建立连接,并且没有超时重发机制,所以传输速度快。 UDP特点 -安全性差不稳定,没有顺序, 大小限制64KB内 -速度快 TCP协议 tcp通信,再通讯之前,一定要先建立相关链接,才能发送数据 三次握手 第一次握手:主机A发送位

userez的博客 297

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

网络编程(2)UDP协议、TCP协议、socket概念、socket-udp网络通信、socket-tcp网络通信

UDP协议 UDP:用户数据报协议,不可靠性,只是把应用程序传给IP层数据报送出去,但是不能保证他们是否能到达目的地,传输数据报钱不用再客户端和服务器之间建立连接,并且没有超时重发机制,所以传输速度快。 UDP特点 安全性差不稳定,没有顺序, 大小限制64KB内 -速度快 TCP协议 tcp通信,在通讯之前,一定要先

wiz_333的博客 817

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[linux网络编程]UDP协议和TCP协议的使用

意思就是启动服务器,端口号为8888,这里在服务端我们没有设置ip, 只要端口号正确,任意IP都能和我们的服务器连接。这样做是为了确保结构体的所有未明确赋值的字段都被初始化为0,防止未初始化的内存导致的问题。这是为了确保结构体中的所有字段都被正确地初始化为默认值,避免使用未初始化的内存。函数用于将端口号从主机字节序转换为网络字节序(大端字节序),因为网络通信中通常使用网络字节序。结构体的所有字节设置为0,确保结构体的所有未明确赋值的字段都被初始化为0。函数用于将主机字节序的端口号转换为网络字节序。

2202_75305885的博客 1258

网络编程:深入理解TCP与UDP

这是张富涛的第11篇原创 网络编程:深入理解TCP与UDP 1.概述 在网络编程这篇章中,我们简单介绍了TCP与UDP,包括他们的实现方式,以及C/S方式的代码简单实现及优化,我们已经对TCP与UDP有了一定程度上的理解,那么下面我们稍微深入一下TCP与UDP,将他们更加清晰的进行对比一下。 首先我们回顾一下TCP与UDP之间的优缺点对比: TCP:优点较为安全,缺点是较慢。 UDP:优点较快,缺点是“丢包”。 以上是较直观的结论。那么可能大家都没注意到的一个问题来了:为什么UDP传输较快,TCP传输.

张富涛的博客 243

Socket网络编程学习笔记 (2)网络编程、Socket与TCP/UDP

1.网络编程 (1)什么是网络?计算机网络的构成是什么? 网络,在计算机领域中,网络是信息传输、接收、共享的虚拟平台。它把各个点、面、体的信息联系到一起,从而实现资源的共享。 局域网,指在某一个区域内由多台计算机互联成的计算机组。 互联网,指的是网络(可以是局域网)与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。 (2)什么是网络编程? 网络编程,从大的方面说就是对信息的发送到接收。通过操作相应API调度计算机硬件资源,并利用传输管道(网线)进行数据交换

喜欢历史的码农 315

UDP和TCP协议(详解)

在简介UDP协议和TCP协议之前考虑到有些人可能网络这一块基础不是很牢固的铁子们,所以第一部分是先讲解网络编程中一些基础知识,如果有大佬已经提前了解过的话,就请直接滑到第二部分,那废话就不多说开启本篇博客啦。

weixin_74352792的博客 1万+

网络编程(IP、端口、协议、UDP、TCP)【详解】

网络编程是可以让设备中的程序与网络上其他设备中的程序进行数据交互的技术。

qq_1424674116的博客 1万+

Python 网络编程:TCP 与 UDP 协议详解及实战代码

在万物互联的时代,网络编程已成为开发者必备的核心技能。Python 凭借其简洁优雅的语法和强大的标准库支持,为网络应用开发提供了高效解决方案。本文将深入剖析 TCP 和 UDP 两大核心传输协议,通过代码实例演示其在 Python 中的具体实现,助力开发者构建稳定可靠的网络应用。

qq_63910171的博客 2372

网络编程(TCP与UDP协议)

TCP协议进行通信的两个应用进程:客户端、服务端。UDP协议进行通信的两个应用进程:发送端、接收端。

Lifelong learning 2494

网络编程(TCP协议,UDP协议)

在网络通信协议下,不同计算机上运行的程序,进行的数据传输。

m0_46702681的博客 1843

网络编程及三大协议(TCP + UDP + Http)

UDP(User Datagram Protocol)用户数据报包协议,UDP和TCP位于同一层-传输层,但它对于数据包的顺序错误或重发没有TCP可靠;UDP是一种面向无连接的通信协议。UDP向应用程序提供一种发送封装的原始IP数据报的方法,并且发送时无需建立连接,不保证可靠数据的传输UDP — 发短信TCP — 打电话new SendThread(socket , "127.0.0.1" , 9099 , "马超") . start();} }

GL280599ZL的博客 5025
上一篇: 网络编程(1):计算机网络与TCP/IP网络模型
下一篇: 网络编程(3):HTTP协议详解
luozhiwei_iOS
博客等级 码龄12年 4粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值