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

相关文章

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

linux下查看自己的外网ip

局域网的服务器是通过ADSL路由器连接外网的,但ADSL是从ISP运营商那儿通过动态获得IP的,那么我怎么知道自己的外网地址是多少呢? 今天得到几个办法: curl -s http://whatismyip.org wget http://whatismyip.org 然后再  cat index.html 也可以看到

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端。 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配。 服务器端: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.

4G模块、WIFI模块、NBIOT模块通过AT指令连接华为云物联网服务器(MQTT协议)

MQTT协议概述 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,它被设计用来提供一对多的消息分发和应用之间的通讯,尤其适用于远程位置的设备和高延迟或低带宽的网络。MQTT协议基于客户端-服务器架构,客户端可以订阅任意数量的主题,并可以发布消息到这些主题。服务器(通常称为MQTT Broker)则负责接受来自客户端的连接请求,并转发消