TCP+IP的深入介绍

从XSA到Linux应用:Petalinux与Vitis的嵌入式开发全流程解析 本文详细解析了从XSA文件到Linux应用的嵌入式开发全流程,重点介绍了Petalinux与Vitis工具链的使用技巧和实战经验。通过XSA硬件描述、Petalinux工程搭建、系统镜像优化及Vitis开发配置等关键步骤,帮助开发者高效完成ZYNQ平台开发,解决常见问题并提升开发效率。 阅读详情

简介

TCP协议出现的目的就是在不可靠的IP通信协议上加上一层稳定的通信协议。1981年rfc791,rfc793制定的。可以说一个非常的古老的协议了。另外,HTTP并非必须建立在TCP上,也可以实现在UDP上,但是需要在应用层自己处理丢包,乱序等问题。所以基本没人这么搞。TCP的主要问题是过度设计,导致效率有一定问题。

TCP和UDP在IP协议的基础上增加了一个端口设定。注意,TCP和UDP可以绑定同一个端口。

1024-65535为用户端口,又分为: BSD临时端口(1024-5000)和BSD服务器(非特权)端口(5001-65535).
0-1023: BSD保留端口,也叫系统端口,这些端口只有系统特许的进程才能使用;
1024-5000: BSD临时端口,一般的应用程序使用1024到4999来进行通讯;
5001-65535: BSD服务器(非特权)端口,用来给用户自定义端口.

一个TCP/UDP连接的四元组如下

Client_IP1:Client_Port1 <---> Server_IP:Server_Port

操作系统可以根据上面四元组不同将一个连接绑定到一个句柄供应用读取和写入。

IP地址

在这里插入图片描述
D类IP地址为组播地址,E类IP地址为实验性地址。
对于一般用路由器的家庭,你PC上的地址是一个C类的私有地址。路由器上显示的WAN地址则是一个A类或者是B类的私有地址。而你实际上百度自己IP得到的地址,才是A B C类中的非私有地址。因为目前IPV4目前的地址肯定是不够用的。因为你的wan ip和公网IP都是ISP随机分配的,所以在自己家搭网站相当于一个流动商贩,人家根本找不到你。

TCP的三次握手

在这里插入图片描述

TCP为什么需要三次握手

在《计算机网络》一书中其中有提到,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是:一端(client)A发出去的第一个连接请求报文并没有丢失,而是因为某些未知的原因在某个网络节点上发生滞留,导致延迟到连接释放以后的某个时间才到达另一端(server)B。本来这是一个早已失效的报文段,但是B收到此失效的报文之后,会误认为是A再次发出的一个新的连接请求,于是B端就向A又发出确认报文,表示同意建立连接。如果不采用“三次握手”,那么只要B端发出确认报文就会认为新的连接已经建立了,但是A端并没有发出建立连接的请求,因此不会去向B端发送数据,B端没有收到数据就会一直等待,这样B端就会白白浪费掉很多资源。如果采用“三次握手”的话就不会出现这种情况,B端收到一个过时失效的报文段之后,向A端发出确认,此时A并没有要求建立连接,所以就不会向B端发送确认,这个时候B端也能够知道连接没有建立

TCP的四次挥手

在这里插入图片描述
挥手过程任何一方都可以主动发起。要求断开连接的一方必然已经没有要主动发送的事情了。所以,他现在需要的就是等待对方把没说完的化说完,然后等待对方提供终止,然后等待一段时间后终止。

如果是客户端发起。
在这里插入图片描述
注意2MSL可不是说的2ms。而是Maximum Segment Lifetime.TCP报文在网络中最长存活时间。跟IP协议的TTL的概念类似。RFC规范中要求该值是2分钟,要就是要等四分钟。这个确实优点恐怖。等待这么长时间的理由有以下两个

1、为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。

2、他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

一般而言主动断开连接的是客户端,所以进入TIME-WAIT状态的也是客户端。

如果服务器端也发生了TIME-WAIT,服务端为了解决这个TIME_WAIT问题,可选择的方式有三种。

  • 保证由客户端主动发起关闭(即做为B端)
  • 关闭的时候使用RST的方式
  • 对处于TIME_WAIT状态的TCP允许重用。

在这里插入图片描述

一个完整的TCP状态机如下

在这里插入图片描述

  • 被动打开的意思不是指外部可以唤醒一个端口从CLOSED到LISTEN状态,而是指打开端口用于接受连接。主动打开的意思是打开端口用于发起连接。

TCP序列号

双方都会建立自己的seq序列号。双方的seq序列号没有关联。确定初始的seq号后,下一次发送的seq号等于上次的seq号+上次报文。接到对方的报文,回复ack中,所携带的ack序列号是上次对方发过来的seq号+上次报文的长度。上两个数是一致的。

报文

数据格式如下
在这里插入图片描述
IP报文如下
在这里插入图片描述

数据大小问题

在链路层,由以太网的物理特性决定了数据帧的长度为(46+18)-(1500+18),其中的18是数据帧的头和尾,也就是说数据帧的内容最大为1500(不包括帧头和帧尾),即MTU(Maximum Transmission Unit)为1500;  
在网络层,因为IP包的首部要占用20字节,所以这的MTU为1500-20=1480; 
在传输层,对于UDP包的首部要占用8字节,所以这的MTU为1480-8=1472;   
所以,在应用层,你的Data最大长度为1472。当我们的UDP包中的数据多于MTU(1472)时,发送方的IP层需要分片fragmentation进行传输,而在接收方IP层则需要进行数据报重组,由于UDP是不可靠的传输协议,如果分片丢失导致重组失败,将导致UDP数据包被丢弃。  
从上面的分析来看,在普通的局域网环境下,UDP的数据最大为1472字节最好(避免分片重组)。   
类似的TCP 包的大小就应该是 1500 - IP头(20) - TCP头(20) = 1460 (Bytes)
但在网络编程中,Internet中的路由器可能有设置成不同的值(小于默认值),Internet上的标准MTU值为576,所以Internet的UDP编程时数据长度最好在576-20-8=548字节以内。
物理设备碰见超过自己的MTU的数据包,就直接会丢弃。所以,TCP必须要协商MSS(Maximum Segment Size,最大报文长度)。
最古老的策略是PMTUD+ICMP
在这里插入图片描述
思科给出的解决方案是
在这里插入图片描述

拆包粘包

TCP是个“流”协议,所谓流,就是没有界限的一串数据。大家可以想想河里的流水,是连成一片的,其间并没有分界线。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。
拆包,粘包

  1. 要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
  2. 待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
  3. 要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
  4. 接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

滑动窗口机制

在这里插入图片描述

Delay ACK机制

一个简单的本地和远程server的命令行交互的过程是这样的。本地发送要输入的字节,服务器响应字节的确认。服务其发送要求回显的字节,本地对回显字节进行确认。为了提高效率,远程server可以把对字节的确认和发送的数据字节合并为一条报文。这种机制被称为延时确认机制。
在这里插入图片描述

手把手教你学Simulink实例:基于Simulink的超级电容器充放电仿真 超级电容器(Supercapacitor)是一种高容量电容器,具有快速充放电能力、长寿命和高功率密度等优点。它在能量存储系统、电动汽车、不间断电源(UPS)等领域有广泛应用。为了更好地理解和设计超级电容器的应用系统,通常需要进行详细的仿真分析。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证超级电容器充放电系统的控制策略。本教程将详细介绍如何使用 Simulink 进行超级电容器充放电的仿真实例。通过本教程,我们详细介绍了如何使用 Simulink 进行超级电容器充放电的仿真实例。 阅读详情

相关推荐

深入解析Android Thermal框架:从应用层到驱动层的温度管理机制

本文深入解析Android Thermal框架的温度管理机制,从应用层到驱动层详细介绍了温度监测、热状态评估和降温策略执行的全过程。通过分层架构解析和关键组件交互,帮助开发者理解Android设备如何实现高效的温度控制,确保硬件安全并优化性能。

weixin_29303701的博客 256

TCP/IP协议详解

TCP/IP协议是互联网和许多现代网络通信的基础。它提供了一套标准化的通信协议,使得不同设备和系统能够在同一网络上互相通信。本文将详细介绍TCP/IP协议的各个方面,帮助读者理解其工作原理和应用场景。

qq_47012987的博客 5795

小米手机安装Burp证书失败原因与DER格式改造指南

CA证书是HTTPS抓包和移动安全测试的基础组件,其本质是遵循X.509标准的数字凭证,依赖ASN.1/DER编码格式与完整证书链实现可信验证。Android系统默认支持PEM和DER两种编码,但MIUI自14版本起强化安全策略,仅识别DER二进制格式,并强制校验Subject Alternative Name(SAN)、Basic Constraints及证书链完整性。这种企业级加固逻辑导致Burp Suite导出的PEM格式.cer文件在小米设备上‘安装成功但无效’。本文聚焦证书格式转换、SAN字段注入

weixin_33646989的博客 625

TCP/IP的作用

**为什么会出现TCP/IP协议?TCP/IP协议的出现是为了解决什么问题?协议是什么?internet和Internet的区别是什么?** 首先,协议,是网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。 为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规...

jokismithjs的博客 3516

STM32F407ZGT6最小系统:从原理图到PCB的实战设计与避坑指南

本文详细介绍了STM32F407ZGT6最小系统的设计与实现,从原理图到PCB布局的完整流程。重点解析了电源、时钟、复位和调试接口等核心模块的设计要点,提供了实用的PCB布局技巧和常见问题解决方案,帮助开发者避开设计陷阱,快速完成稳定可靠的STM32F407ZGT6最小系统设计。

weixin_30955617的博客 198

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

Tcp/UDP协议详解

为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。 但是简单的...

寂蝶难双,窃窃思羽. 938

Android 埋点信息分析——statsd框架

StatsPullAtomService 用以采集数据,并将数据填充到参数中,在StatsManager.PullAtomCallbackInternal 中会转换成 Parcel 格式传入到 native。 StatsCallbackPuller::PullInternal 中会回调StatsManager.PullAtomCallbackInternal 的onPullAtom,该函数中会回调StatsCallbackPuller::PullInternal 中定义的PullResultRecei

私房菜 2629

全网最全的万字详解TCP/IP协议深入解析(非常详细)零基础入门到精通教程,收藏这一篇就够了

TCP/IP协议包含了一系列的协议,也叫TCP/IP协议族(TCP/IP Protocol Suite,或TCP/IPProtocols),简称TCP/IP。TCP/IP协议族提供了点对点的连结机制,并且将传输数据帧的封装、寻址、传输、路由以及接收方式,都予以标准化。

白帽阿叁的博客 6814

OSCP-Algernon(SmarterMail)

从前面的结果中,确实有.NET远程处理在端口17001上运行。因此,此漏洞应适用于目标计算机。下载了漏洞并编辑了以下部分以匹配我的IP并使用本地端口21。端口9998引导到一个SmarterMail的登录页面。设置监听,获得一个反弹shell。端口80重定向到默认IIS页。已经是system权限了。google搜索漏洞。

墨痕诉清风的博客 489

国产数据库全解析:openGauss、OceanBase、TiDB与KingbaseES的核心优势与应用场景指南

本文将深入剖析openGauss、OceanBase、TiDB和KingbaseES这四款主流国产数据库的核心内容,并针对国产化过程中给出使用建议,以帮助企业根据自身需求选择合适的数据库解决方案。国产数据库在性能、扩展性、兼容性、安全性等方面展现出强大实力,能够满足不同行业、不同场景的需求。企业在进行国产化过程中,应充分考虑业务特点、技术栈、团队能力等因素,结合上述分析,选择最适合自身的国产数据库产品。随着国产数据库技术的持续发展与生态完善,它们将成为推动企业数字化转型、保障数据安全的重要力量。

java专栏 8781

TCP/IP协议简述+常见面试题

TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers) 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(sy...

不坠青云 3万+

从入门到精通:3D视觉与SLAM实战全流程 mastery 教程

本文系统介绍了3D视觉与SLAM技术的应用前景、核心技术和实战路径。3D视觉通过RGB-D相机、激光雷达等传感器获取环境三维信息,SLAM技术实现自主定位与地图构建,二者结合广泛应用于自动驾驶、机器人导航等领域。文章详细拆解了点云处理、视觉里程计、回环检测等关键技术,并提供了ORB-SLAM2算法复现、语义SLAM开发的实战教程,涵盖硬件选型、环境配置到代码实现全流程。最后规划了从入门到专家的学习路径,推荐了相关书籍、开源项目和数据集资源,为读者掌握这一前沿技术提供了完整指南。

m0_71589036的博客 135

TCP IP介绍及举例

例如,在浏览网页时,浏览器会使用TCP/IP协议将请求发送到服务器,服务器接收请求并使用TCP/IP协议将响应发送回浏览器。除了TCP和IP,TCP/IP协议还包括一些其他的协议,例如用户数据报协议(UDP)、互联网控制消息协议(ICMP)和地址解析协议(ARP)等。TCP/IP协议的广泛应用也促进了信息技术的发展和普及,给人们的生活和工作带来了很多便利。4. 在一个终端窗口中运行客户端:`./tcp_client <IP> <port>`(将`<IP>`和`<port>`替换为服务器的IP地址和端口号)

zero2100的专栏 368

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

TCP、IP 各层的介绍,都有哪些协议

xiaocl123的博客 665

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

网络 UDP 和 TCP / IP详细介绍

本文介绍了网络传输中UDP和TCP协议的关键特性及应用,像UDP无连接、不可靠传输和面向数据报,TCP有连接、确认应答、超时重传等机制实现的可靠传输和面向字节流等等

2401_89019969的博客 4692

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

python IP 端口 socket tcp 介绍

了解网络编程

qq_64993426的博客 806

IP地址、端口、TCP介绍、socket介绍、程序中socket管理

文章摘要:IP地址用于标识网络中的设备,类似于现实中的家庭地址,确保每台设备的唯一性。端口则代表不同的进程,用于区分同一设备上的不同服务。Socket是进程间网络数据传输的工具,其创建与IP地址和端口号无关。Socket可以比喻为手机,而IP和端口号则类似于区号和电话号码,用于程序间的通信。有效的端口号范围为0到65535,其中小于1024的端口号通常为系统预留。在程序中,Socket的管理包括初始化和维护全局变量TCP_SOCKET_CFG,以保存套接字信息,并在网络连接或断开时进行相应的更新和初始化。

Zhangdfhvxdul的博客 1197

TCP与IP的对比,TCP的报文头介绍,TCP的三次握手和TCP的安全机制

IP协议是无连接的通讯协议不会占用两个正在通讯的计算机之间的通讯线路,这样IP就降低了对网络线路的需求,每条线可以同时满足许多不同计算机之间的通讯需要. 通过IP,消息或者其他数据会被分割为较小的独立的包并通过因特网在计算机之间传送 IP负责将每个包路由到目的地,但是IP协议没用做任何工作去确认数据是否按顺序发送或者包是否被破坏,所以IP数据包是不可靠的,因此需要它的上层传输层TCP协议来做控制...

轻狂博客 491

以太网头介绍(IP头、TCP头、UDP头)

文章目录QT 常用快捷键 QT 常用快捷键 Ctrl + Shitf +F 快捷键方式搜索,具体搜索选项可以根据自己需要选择

mayue_web的博客 1万+

IP数据包格式,TCP介绍,常见TCP端口号

IP数据包格式 (1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,还处于草案阶段 (2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。

weixin_56665913的博客 1338

MAC首部 IP首部 TCP首部介绍

了解数据传输过程中的MAC帧首部,IP数据包首部,TCP首部。了解结构是基本,为了直观显示,本文采用抓包的方式逐层验证这些首部结构。同时,列出这些首部结构在系统中C语言结构体的实现。

大草的博客 1万+

TCP、IP、HTTP协议的简单介绍

TCP协议的流量控制是通过使用滑动窗口实现的,TCP的发送窗口由四个部分组成,已经发送并且确认的TCP段(已经发送并确认),已经发送但是还没有确认的TCP段(已经发送未确认),未发送但是接收方准备接收的TCP段(可以发送),未发送并且接收方也不准备接收的TCP段(不可发送)。此时客户端就能确定自己的发送和接收是正常的,而且可以确定服务器的发送和接收也是正常的,服务器此时没有得到客户端的反馈,因此还不知道自己的发送是不是正常的,也不知道客户端的接收是不是正常的。5XX 服务器错误状态码,服务器处理请求出错。

Ahjbvj的博客 474

TCP / IP 介绍

茂盛博客 159

TCP协议和IP协议介绍

TCP协议和IP协议是两种不同的协议,用于管理传输数据。TCP协议是一种面向连接的协议,用于可靠的数据传输,而IP协议是一种无连接的协议,用于确定数据包的最佳路径。尽管它们是不同的协议,但它们之间有很多联系,包括TCP协议依赖于IP协议来传输数据包,并使用IP地址来确定数据包的来源和去处。在建立连接和断开连接时,TCP协议都使用握手和挥手的技术来确保连接的可靠性。无连接协议是一种网络通信协议,它不需要在通信之前建立连接。

qq_42538588的博客 403

极简版本的 TCP / IP 协议栈介绍

极简版本的 TCP / IP 协议栈介绍,只需要10分钟就能对 TCP IP有一个大概印象。

tzy233的专栏 1324
上一篇: DevOps
下一篇: 技术行业的一些新闻——会议
define_us
博客等级 码龄14年 157粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值