TCP/IP协议粗解

2024-03-24 00:20
文章标签 ip 协议 tcp 粗解

本文主要是介绍TCP/IP协议粗解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本人软件开发人员,在此对TCP/IP做一个了解,所以有的问题并没有深入去探究。

为什么会有IP协议的存在?

底层的以太网协议规定了电子信号如何组成数据包,解决了子网内部的点对点通信,可以使用MAC地址。但是它无法解决多个局域网如何互通的问题,所以就出现了IP协议及IP地址。所以说,IP协议实现了路由功能;

我的理解:MAC是物理层次表明设备的唯一标识,一般不可更改,IP是在网络拓扑中表示设备的唯一标识,可以更改,即使你更改了IP地址,数据仍然会是以之前的IP地址在网络拓扑中传输,此时并不涉及现实设备端口。

以太网的数据包大小是固定的,最初是1518个byte,现在是1522个byte,1500个byte是负载,22byte是头信息,IP数据包在以太网数据包的负载里面,它的头信息最少需要20byte,所以IP数据包最多负载1480byte,TCP数据包在IP数据包里面,头信息最少20byte,所以TCP最大负载为1460byte。但是由于TCP/IP协议往往有额外头信息,所以TCP负载实际为1400byte左右,所以1500byte的数据需要2个TCP数据包。
这里写图片描述

日常开发中,如果要传输10MB的数据,需要发送7100多个包,发送时,TCP协议为每个包编号(seq),以便接受方按照顺序还原,万一丢包,也可以知道丢失的是哪个包。第一个包编号是随机数,假设是1,如该数据负载长度为100,则第二个包编号为101;所以 每个数据包可以得到两个编号:自身的编号和下一个的编号。接受方可以方便排序。

OSI的七层协议

物理层–>数据链路层–>网络层–>传输层–>会话层–>表示层–>应用层

OSI七层模型和TCP/IP四层模型的关系

1.1 OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。

1.2 OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。

1.3 OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。

TCP:transmission control protocol 传输控制协议

UDP:user data protocol 用户数据报协议

这里写图片描述

这里特别提一下HTTPS:我们知道HTTPS与HTTP的主要区别可以简单的认为是HTTPS多了一个SSL加密,但是SSL加密是在TCP/IP四层协议模型中的传输层进行的,HTTP是属于应用层协议,所以HTTPS可以说是介于传输层和应用层之间的一个协议

常用协议端口: HTTP:80; FTP:21; HTTPS:443; TELNET:23; SSH:22;

数据链路层: 并没有确定的描述这一层的实现,只要求可以提供给其上层—网络层,提供一个访问接口,以便在其上传递IP分组。

网络层: 整个协议栈的核心,功能是把分组发往目标网络或主机。同时为了尽快发送分组,需要沿不同的路径进行分组传递,因此,分组到达的顺序和发送的顺序可能不同,需要上层必须对分组进行排序;

传输层: 使源端主机和目标主机的对等实体可以进行对话。

应用层: 面向不同的网络应用引入了不同的应用层协议。基于TCP协议的,如:FTP、TELNET、HTTP;还有基于UDP协议的;

IP协议提供不可靠、无连接的服务,依赖其他层的协议进行差错控制:在局域网环境中IP协议往往被封装在以太网帧中传递,所有的TCP、UDP协议都封装在IP数据报中传送。

IP报文格式:
这里写图片描述

其中IP头部格式为:
这里写图片描述
版本: 4bit,标识当前协议的版本号,如IPV4为0100,IPV6为0110;
报头长度: 4bit;标识IP头部长度占IP报文头部长度的数目,普通的IP头部值为5,最多可以有60字节的长度。
服务类型: 8bit,前3bit已被忽略,第8bit保留未用,4-7bit分别表示延迟、吞吐量、可靠性、花费。当都取1时表示最小延时、最大吞吐量、最高可靠性、最小费用。全为0表示一般服务。作用举例:TELNET协议可能要求最小延时,FTP可能要求最大吞吐量,SNMP可能要求最高可靠性,NNTP可能要求最小费用,ICMP可能无特殊要求;
总长度字段: 16bit,指明整个数据报的长度,最大长度为65535字节;
标识: 16bit,用来标识主机发送的每一份数据报,通常每发一份则自动加1;
标志位: 3bit,表示一份数据报是否需要分段;
段偏移量: 13bit,如果一份数据报需要分段的话,此字段指明该段位偏移数据距原始数据包开始的位置。
生存期: 8bit,用来表示数据报最多经过的路由器数量,由发送数据的源主机设置:通常为32、64、128,每经过一个路由,其值减1,直到为0时则被丢弃。
协议: 8bit,表示此报文封装的上层协议,如ICMP(1),IGMP(2),TCP(6),UDP(17)
头部校验和: 16bit,内容是根据IP头部计算得到的校验和码。计算方法是:对头部中每个16比特进行二进制反码求和。(和ICMP、IGMP、TCP、UDP不同,IP不对头部后的数据进行校验)。
可选项: 32bit,用来定义一些任选项:如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求。

其中TCP数据头部结构为:
这里写图片描述
源端口号: 16bit,注意并不是IP地址,是应用的端口号,0~65535之间;
顺序号: 32bit,来标识从TCP源端向TCP目标端发送的数据字节流;
确认号: 32bit,只有ACK为1时,这个才有效,包含目标端所期望收到源端的下一个数据字节;
头部长度: 4bit;标识TCP头部长度占IP报文头部长度的数目,没有任何选项的TCP头部长20字节,最多可以有60字节的长度。
URG: 1bit,紧急指针。
ACK: 1bit,确认序列号;
PSH: 1bit,接受方应该尽快将这个报文段交给应用层;
RST: 1bit,重建链接;
SYN: 1bit,发送链接;
FIN: 1bit,释放链接;
窗口大小: 16bit,接受缓冲区,用来告诉TCP链接对方端自己能接受的最大长度;
紧急指针: 只有URG标识位为1时才有意义;

请阅读下一遍文章:
TCP协议讲解(一)

这篇关于TCP/IP协议粗解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/839976

相关文章

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

Linux之UDP和TCP报头管理方式

《Linux之UDP和TCP报头管理方式》文章系统讲解了传输层协议UDP与TCP的核心区别:UDP无连接、不可靠,适合实时传输(如视频),通过端口号标识应用;TCP有连接、可靠,通过确认应答、序号、窗... 目录一、关于端口号1.1 端口号的理解1.2 端口号范围的划分1.3 认识知名端口号1.4 一个进程

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过