网络协议:
网络协议:电脑或设备在互相发送和接收数据时,都要遵守的一些规定或约定
网络协议必须包含三要素:
- 语法:规定数据的格式和样子
- 语义:定义数据的含义
- 时序:确定数据什么时候发送和接收
协议的两种形式:
- 标准协议:这是由国际组织或行业组织制定并广泛使用的协议。
- 专有协议:这是由某个公司或组织自行制定的协议,只在其内部或特定合作伙伴之间使用。
标准类文档:RFC(是一种标准类文档,主要用于描述互联网及其他网络协议、程序、过程和概念)
**程序:**计算机可以解释执行的软件代码或硬件指令序列
协议栈:
-
为了规范网络协议设计,通常采用层次化结构来组织和协调网络软、硬件功能。
-
分层结构简化了功能组件的组织,使系统更新和迭代更加容易。
-
每种功能只属于某一层,一个协议层可以包含多个功能,并可通过软件、硬件或两者结合来实现。这样的协议组称为协议栈。
-
一个特定的系统所使用的一组协议称为协议栈
OSI模型与TCP/IP模型比较
- 7层模型与4层模型
TCP/IP模型的网络接口层定义主机与传输线路之间的接口,描述了链路为无连接的互联网层必须提供的基本功能
TCP/IP模型的互联网层、传输层与OSI模型的网络层、传输层大致对应
TCP/IP模型的应用层包含了OSI模型的表示层与会话层
- 基本设计思想:通用性与实用性
OSI:先有模型后设计协议,不局限于特定协议,明确了服务、协议、接口等概念,更具通用性
TCP/IP模型:仅仅是对已有协议的描述
- 无连接与面向连接
OSI模型网络层能够支持无连接和面向连接通信
TCP/IP模型的网络层仅支持无连接通信(IP)
数据链路层的三个基本问题:
-
封装成帧:添加首部和尾部,明确帧的边界,确保数据能够被正确打包和解析。
-
透明传输:避免数据中的内容与帧定界符号冲突,保证数据完整性。
-
差错控制:检测和纠正传输错误,提高数据传输的可靠性。
现在全世界使用最广泛的数据链路层协议是PPP
PPP中,常用的认证协议有 口令认证协议PAP 和 基于挑战的握手认证协议CHAP。
- CHAP询问握手认证协议通过三次握手周期性地校验对方身份;
PPP协议流程:
-
5个阶段
-
链路不可用阶段(Dead)
-
链路建立阶段
-
认证阶段
-
网络层协议阶段
-
链路终止阶段
以太网的两个标准
-
DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约。
-
IEEE 802.3 是第一个 IEEE 的以太网标准。
常用的以太网MAC帧格式有两种标准 :
-
DIX Ethernet V2 标准
-
IEEE 的 802.3 标准
- 最常用的 MAC 帧是以太网 V2 的格式。
数据链路层的两个子层
-
逻辑链路控制 LLC 子层;(Logical Link Control)
-
媒体接入控制 MAC 子层。(Medium Access Control)
与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关。
不管采用何种协议的局域网,对 LLC 子层来说都是透明的。
IP协议在网络互联中的地位和作用
-
IP是互联网的核心协议之一,工作在 TCP/IP 网络体系结构的 网络层。
-
目前互联网中广泛采用的是 IPv4 协议。
-
IPv4 地址是一个 32 位的二进制数,可采用“点分十进制”形式表示
-
IPv6地址是128位的二进制数,地址空间地址空间大于 3.4 x1038,是IPv4的296倍。
-
IPv6 使用冒号十六进制记法
子网划分
基本思想:将A类或B类网络划分为更小的子网,通过借用主机号的几位来标识子网号,网络号和子网号共同标识一个网络。
默认子网掩码:用于界定分类地址中的网络号,A类为255.0.0.0,B类为255.255.0.0。
CIDR:采用无分类的地址块管理,将32位的IPv4地址分为网络前缀和主机号两部分。
-
CIDR 使用斜线记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(对应于三级编址中子网掩码中 1 的个数)。如192.168.1.0/24。
-
CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
-
128.14.32.0/20 表示的地址块共有212个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。
IPv6:地址长度为128位,分三种类型:单播地址、任播地址和组播地址。
地址解析协议: 用于将IP地址转换为物理MAC地址,从而实现局域网内设备之间的通信。
**ICMP协议概述:**ICMP协议是网络中重要的控制和错误报告机制,帮助网络设备和主机在IP分组传输过程中发现和报告问题,确保网络通信的可靠性和有效性。
ICMP差错消息
- 目的不可达消息
- 超时消息
- 参数错误消息
目的不可达报文的代码字段:
代码 (Code) | 含义 | 例子 |
---|---|---|
0 | 目的网络不可达 | 路由器中的路由表指明目的网络不可达 |
1 | 目的主机不可达 | 目的主机不在线 |
2 | 协议不可达 | 目的主机无法识别封装数据的交付协议 |
3 | 目的端口不可达 | 目的主机上对应接收数据处理协议的端口未打开 |
4 | 需要分片但 DF 位设置为1 | 分组长度超过了下一跳网络的 MTU,但该分组不允许分片 |
5 | 源路由失败 | 路由器无法按分组选项中指定的路由进行转发 |
socket(套接字)
套接字是本地主机与远程主机之间进行数据通信的接口,通过它,应用程序可以在操作系统的控制下发送和接收数据,实现网络通信。
-
socket 是进行程序间通讯的 BSD 方法。
-
客户将插头插入一个服务器端口建立一个双向的连接管道
套接字类型:
① 流式套接字: 提供面向连接的、可靠的字节流服务,用于TCP。
② 数据报套接字: 提供无连接的,不可靠的数据报服务,用于UDP。
③ 原始套接字: 允许对较低层的协议,如IP、ICMP直接访问。
socket编程步骤
-
建立一个socket
-
配置socket
-
连接socket
-
通过socket发送数据
-
通过socket接收数据
-
关闭socket
路由协议概述
路由原理:IP 协议负责为互联网上的任意两台计算机之间的分组传输寻找一条合适的路径。
-
当IP协议接收到一个IP分组时:
- 查询路由表:根据目的地址查询路由表,确定下一跳路由器的地址。
- 转发分组:将分组转发给下一跳路由器。如果目的主机在同一网络上,直接转发给目的主机。
- 多次转发:通过多次转发,分组从源主机传输到目的主机。
总结:IP协议通过查询路由表、确定下一跳、并多次转发分组,最终实现从源主机到目的主机的数据传输。
路由表:
-
IP 协议的工作依赖于路由表中的路由信息
-
路由表是一种数据结构,为路由器提供了到达不同目的地址的最佳路径。
路由项的基本信息:
-
<目的网络地址,下一跳地址,转发接口,路由代价>
-
路由表还可以存储到达特定 IP 地址的路由(特定主机路由)。
IP路由协议分类 - - 按使用范围分类
互联网通过分级路由策略,将其划分为多个自治系统(AS),在AS内部使用内部网关协议(IGP),在AS之间使用外部网关协议(EGP)来建立路由表,实现高效的路由管理。*
RIP:路由信息协议,是一种基于距离向量算法的动态路由选择协议。
-
优点:简单
-
缺点:适用于小型互连网
OSPF:开放最短路径优先协议,一种基于链路状态选路算法的路由协议。
-
支持在多条相同代价路由之间的负载均衡;
-
支持路由信息交换的认证;
-
可用作大型自治系统的内部路由协议。
RIP与OSPF比较
RIP:距离矢量路由协议,基于跳数选择最优路径,每隔30s向邻居广播自己的整个RIP路由表
OSPF:链路状态路由协议,基于链路开销选择最优路径,触发更新或每隔30分钟向邻接路由器发送链路状态信息的摘要,增量更新机制
0SPF报文类型:
-
Hello报文
-
数据库描述报文
-
链路状态请求报文
-
链路状态更新报文
-
链路状态确认报文
0SPF协议工作过程
- 发现邻居:
- 路由器通过组播发送Hello包,发现网络中的其他邻居。
- 所有邻居都可以相互识别,但并不一定建立邻接关系。
- 建立邻接关系:
- 只有建立了邻接关系的邻居路由器才会交换链路状态信息。
- 在广播型网络中,会选举一个DR(指定路由器)和一个BDR(备份指定路由器),所有路由器只与DR和BDR建立邻接关系。
- 在PPP(点对点)网络中,不会选举DR和BDR。
- 传递链路状态信息:
- 每台设备都有一个LSDB(链路状态数据库),其中存储了LSA(链路状态公告)。
- LSA描述网络中路由器的编号、直连网段和开销等信息。
- 链路状态信息每隔30分钟更新一次,或者在网络变化时立即触发更新。
- 采用增量更新机制,只发送邻居需要的LSA。
- 收敛后,区域内所有路由器拥有相同的LSDB,反映全网链路状态。
总结:
- 发现邻居:通过Hello包组播发现邻居。
- 建立邻接关系:选举DR和BDR,广播型网络中所有路由器与DR和BDR建立邻接关系。
- 传递链路状态信息:维护LSDB,增量更新,反映全网链路状态。
BGP简介
动态路由协议可以按照工作范围分为IGP以及EGP。IGP工作在同一个AS内,主要用来发现和计算路由,为AS内提供路由信息的交换;而EGP工作在AS与AS之间,在AS间提供无环路的路由信息交换,BGP则是EGP的一种。*
BGP报文种类BGP报文有五种类型:
**Open:**负责和对等体建立邻居关系。
**KeepAlive 😗*该消息在对等体之间周期性地发送,用以维护连接。
**Update 😗*该消息被用来在BGP对等体之间传递路由信息。
**Notification 😗*当BGP Speaker检测到错误的时候,就发送该消息给对等体。
**Route-refresh:**用来通知对等体自己支持路由刷新能力。
TCP/IP 协议栈的传输层的两个主要协议都是因特网的正式标准:
用户数据报协议 UDP;传输控制协议 TCP。
在TCP/IPIP体系中,根据使用的协议是TCP还是UDP,分别称为TCP报文网络接口段或UDP用户数据报。
端口:
熟知端口(系统端口号):0~1023
登记端口号:1024~49151
客户端口号/短暂端口号:49152~65535
常用的熟知端口:
**RPC:**111 **DNS:**53 **TFTP:**69 **SNMP:**161 **SNMP(trap):**162
**SMTP:**25 **FTP:**20数据连接端口 21 控制连接端口 **Telnet:**23
**HTTP:**80 **HTPS:**443
UDP协议的特点:
-
UDP 是无连接的,即发送数据之前不需要建立连接。
-
UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。
-
UDP 是面向报文的。
-
UDP 没有拥塞控制,很适合多媒体通信的要求。
-
UDP 支持一对一、一对多、多对一和多对多的交互通信。
-
UDP 的首部开销小,只有 8 个字节。
TCP传输控制协议是一个面向连接的、端到端的提供高可靠性服务的传输层通信协议。
TCP可靠数据传输机制
-
面向字节流和缓存机制
-
超时重传
-
确认机制
-
检验和机制
-
字节编号机制
-
自动丢弃重复机制
-
流量控制机制
TCP采用滑动窗口机制提供流量控制,利用滑动窗口机制可以很方便地在 TCP 连接上实现流量控制。
TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许对端发送可被接收端缓冲区接纳的数据,以防止较快主机使较慢主机的缓冲区溢出。
流量控制:就是让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
在网络通信中,特别是传输控制协议(TCP)和用户数据报协议(UDP)的数据包处理中,伪首部(pseudo header)用于计算校验和。伪首部包括了一些用于数据包传输的重要信息,确保数据包在不同网络层的传输过程中保持完整性。
伪首部的组成
伪首部一般包括以下字段:
- 源IP地址(32位)
- 目的IP地址(32位)
- 保留位(8位,通常为0)
- 协议号(8位,例如TCP为6,UDP为17)
- TCP/UDP长度(16位,表示TCP或UDP报文段的长度,包括头部和数据)
(计算校验和在篇末尾)
DNS服务器种类
根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器
**解析:**递归查询、迭代查询
**DNS有两种类型的报文:**查询报文、响应报文
DHCP协议
-
DHCP 中继代理以单播方式转发发现报文
-
DHCP 报文只是 UDP 用户数据报中的数据
DHCP报文一共有8种类型:
DHCP报文类型 | 传输方式 | 作用描述 |
---|---|---|
DHCP Discover | 广播 | 客户端用来寻找DHCP服务器 |
DHCP Offer | 单播 | 服务器用来响应DHCP Discover报文 |
DHCP Request | 广播 | 客户端请求配置确认,或者续借租期 |
DHCP ACK | 单播 | 服务器对Request报文的确认响应 |
DHCP NAK | 广播 | 服务器对Request报文的拒绝响应 |
DHCP Release | 单播 | 客户端要释放地址时用来通知DHCP服务器 |
DHCP Decline | 广播 | 通知服务器所分配的IP地址不可用,以期获得新的IP地址 |
DHCP Inform | 不常用 | 通知服务器配置的附加信息(目前基本不用) |
DHCP协议工作过程
- 地址自动分配过程
-
发现阶段
-
提供阶段
-
选择阶段
-
确认阶段
- 地址续约过程
- 释放过程
DNS工作过程
- 客户端请求:
- 用户在浏览器中输入域名
- 本地缓存查询:
- 计算机首先检查本地DNS缓存中是否有该域名的对应IP地址。
- 查询本地DNS服务器:
- 若本地缓存中没有对应IP地址,客户端会向本地DNS服务器(通常由ISP提供)发送查询请求。
- 本地DNS服务器缓存查询:
- 本地DNS服务器检查其缓存中是否有该域名的记录。
- 递归查询:
- 若本地DNS服务器缓存中没有记录,本地DNS服务器会代表客户端发起递归查询,逐级查询其他DNS服务器。
- 根DNS服务器:
- 本地DNS服务器首先查询根DNS服务器,根DNS服务器提供顶级域(如.com)的DNS服务器地址。
- 顶级域DNS服务器:
- 本地DNS服务器查询顶级域DNS服务器(如.com的DNS服务器),获取权威DNS服务器(如example.com的DNS服务器)的地址。
- 权威DNS服务器:
- 本地DNS服务器查询权威DNS服务器,获取最终的域名对应的IP地址。
- 返回结果:
- 本地DNS服务器将IP地址返回给客户端,并缓存该结果以便未来查询。
- 访问网站:
- 客户端使用获取到的IP地址,与目标服务器建立连接,访问网站内容。
总结: DNS通过本地缓存、本地DNS服务器、根DNS服务器、顶级域DNS服务器和权威DNS服务器的逐级查询,最终将域名解析为IP地址,确保用户能够访问目标网站。
DHCP的工作过程
- DHCP Discover:
- 客户端广播:客户端在网络中发送DHCP Discover广播报文,寻找可用的DHCP服务器。
- DHCP Offer:
- 服务器单播:所有收到Discover报文的DHCP服务器会响应并发送DHCP Offer单播报文,提供可用的IP地址和其他配置信息。
- DHCP Request:
- 客户端广播:客户端从收到的多个DHCP Offer中选择一个,并发送DHCP Request广播报文,向特定的DHCP服务器请求分配提供的IP地址。
- DHCP ACK:
- 服务器单播:DHCP服务器收到Request报文后,发送DHCP ACK单播报文,确认IP地址分配并提供最终的配置信息(如子网掩码、网关地址、DNS服务器)。
- IP地址续约:
- 客户端单播:在租期过半时,客户端会发送DHCP Request单播报文,向DHCP服务器请求续租IP地址。
- 服务器单播:如果DHCP服务器同意续租,将发送DHCP ACK单播报文,延长IP地址的租期。如果服务器不同意续租或地址不可用,将发送DHCP NAK报文,拒绝续租请求。
其他报文类型:(了解)
- DHCP NAK:
- 服务器广播:如果请求的IP地址不可用,DHCP服务器会发送DHCP NAK广播报文,拒绝客户端的请求。
- DHCP Release:
- 客户端单播:客户端在释放IP地址时,发送DHCP Release单播报文,通知DHCP服务器释放该IP地址。
- DHCP Decline:
- 客户端广播:如果客户端检测到分配的IP地址已被占用,会发送DHCP Decline广播报文,通知服务器IP地址不可用,并请求新的IP地址。
- DHCP Inform:
- 客户端单播:客户端发送DHCP Inform单播报文请求附加配置信息(基本不用)。
总结: DHCP的工作过程包括Discover、Offer、Request、ACK四个主要步骤,确保客户端动态获取IP地址和配置信息。续约过程在租期过半时进行,确保客户端可以继续使用已分配的IP地址。此外,DHCP还包括其他报文类型处理异常情况和特殊请求。
SMTP(简单邮件传输协议)的工作流程
- 建立连接:
- 客户端与服务器连接:邮件客户端(MUA,Mail User Agent)与邮件服务器(MTA,Mail Transfer Agent)通过TCP连接,通常使用端口25。
- 握手过程:服务器响应客户端的连接请求,客户端和服务器通过一系列的HELO/EHLO命令进行握手。
- 邮件发送:
- 发件人地址:客户端通过
MAIL FROM
命令向服务器指定发件人的邮箱地址。 - 收件人地址:客户端通过
RCPT TO
命令向服务器指定收件人的邮箱地址,可以指定多个收件人。 - 邮件数据传输:客户端通过
DATA
命令开始传输邮件内容,邮件内容包括邮件头和邮件体,以单独一行的“.”结束数据传输。
- 发件人地址:客户端通过
- 确认和错误处理:
- 服务器确认:服务器确认每一个步骤(发件人地址、收件人地址、邮件数据)的成功与否,并返回相应的状态代码。
- 错误处理:如果服务器返回错误代码,客户端需要处理错误并采取相应措施,如重试发送或通知用户。
- 结束连接:
- QUIT命令:客户端发送
QUIT
命令,通知服务器结束会话。 - 关闭连接:服务器响应并关闭TCP连接。
- QUIT命令:客户端发送
SMTP命令:
命令 | 参数 | 命令 | 参数 |
---|---|---|---|
HELO | 发送方的主机域名 | NOOP | |
MAIL FROM | 发件人 | TURN | |
RCPT TO | 预期的收件人 | EXPN | 邮件发送列表 |
DATA | 邮件的主体 | HELP | 命令 |
QUIT | SEND FROM | 预期的收件人 | |
RSET | SOML FROM | 预期的收件人 | |
VRFY | 收件人名字 | SAML FROM | 预期的收件人 |
MIME(多用途互联网邮件扩展)主要有以下几个作用:
- 支持附件:可以在邮件中附加各种类型的文件,如文档、图片、音频和视频。
- 多种格式:允许邮件包含多种格式的内容,比如纯文本和HTML格式。
- 国际化:支持多种字符集,使得邮件可以包含非英语字符和符号。
- 内容标识:通过标识邮件内容的类型,确保邮件客户端能够正确显示内容。
简单来说,MIME扩展了电子邮件的功能,让它不仅能发送文字,还能发送文件、图片和多媒体内容,并支持多种语言字符。
TCP(传输控制协议)的工作流程
- 连接建立(握手过程):
- 三次握手:用于建立可靠的TCP连接。
- 第一次握手:客户端向服务器发送SYN(同步序列号)包,请求建立连接。
- 客户端:
SYN
(序列号X)
- 客户端:
- 第二次握手:服务器收到SYN包,向客户端发送SYN+ACK包,表示同意连接,并同步序列号。
- 服务器:
SYN
(序列号Y) +ACK
(确认号X+1)
- 服务器:
- 第三次握手:客户端收到SYN+ACK包,向服务器发送ACK包,确认连接。
- 客户端:
ACK
(确认号Y+1)
- 客户端:
- 第一次握手:客户端向服务器发送SYN(同步序列号)包,请求建立连接。
- 连接建立后,客户端和服务器进入通信状态,可以开始数据传输。
- 三次握手:用于建立可靠的TCP连接。
- 数据传输:
- 数据分段:数据被分成多个段,每个段都有序列号,确保数据按正确顺序到达。
- 可靠传输:
- 确认机制:每次收到数据段后,接收方发送ACK包确认接收到的数据。
- 超时重传:若发送方未在指定时间内收到ACK包,将重传数据段。
- 窗口控制:接收方通过窗口大小控制发送方发送数据的速率。
- 流量控制:TCP使用滑动窗口机制,确保发送方不会使接收方的缓冲区溢出。
- 拥塞控制:包括慢启动、拥塞避免、快速重传和快速恢复等机制,避免网络拥塞。
- 连接终止:
- 四次挥手:用于可靠地终止TCP连接。
- 第一次挥手:客户端发送FIN(终止)包,表示不再发送数据。
- 客户端:
FIN
(序列号U)
- 客户端:
- 第二次挥手:服务器收到FIN包,向客户端发送ACK包,确认收到终止请求。
- 服务器:
ACK
(确认号U+1)
- 服务器:
- 第三次挥手:服务器发送FIN包,表示也不再发送数据。
- 服务器:
FIN
(序列号V)
- 服务器:
- 第四次挥手:客户端收到FIN包,向服务器发送ACK包,确认终止。
- 客户端:
ACK
(确认号V+1)
- 客户端:
- 第一次挥手:客户端发送FIN(终止)包,表示不再发送数据。
- 连接终止后,双方进入TIME_WAIT状态,确保所有数据包都被正确接收,然后关闭连接。
- 四次挥手:用于可靠地终止TCP连接。
总结:
- 连接建立:通过三次握手建立TCP连接。
- 数据传输:可靠的双向数据传输,包括确认机制、超时重传、流量控制和拥塞控制。
- 连接终止:通过四次挥手终止TCP连接,确保所有数据传输完成。
计算校验和的步骤
我们将讨论如何计算包括伪首部在内的校验和。假设我们需要计算一个TCP报文的校验和,包括伪首部。
步骤1:准备伪首部和TCP报文段
首先,需要准备伪首部和实际的TCP报文段。
假设以下是伪首部和TCP报文段的信息:
伪首部信息:
- 源IP地址:192.168.1.1
- 目的IP地址:192.168.1.2
- 保留位:0
- 协议号:6(TCP)
- TCP报文长度:40字节
TCP报文段:
- TCP头和数据部分(假设我们有一些示例数据)。
步骤2:将IP地址和其他字段转换为16位块
首先,将IP地址转换成16位块:
- 源IP地址:192.168.1.1 -> 0xC0A8 0x0101
- 目的IP地址:192.168.1.2 -> 0xC0A8 0x0102
其他字段:
- 保留位和协议号:0x00 06
- TCP报文长度:40字节 -> 0x0028
步骤3:将16位块相加
将所有16位块相加。如果有进位,加入到低16位。
0xC0A8
0x0101
0xC0A8
0x0102
0x0000
0x0006
0x0028
相加过程如下:
0xC0A8 + 0x0101 = 0xC1A9
0xC1A9 + 0xC0A8 = 0x18251(进位1)
0x8251 + 0x0102 = 0x8353
0x8353 + 0x0000 = 0x8353
0x8353 + 0x0006 = 0x8359
0x8359 + 0x0028 = 0x8381
步骤4:添加TCP报文段的每个16位块
假设我们的TCP报文段(头和数据部分)如下(16位块):
0x4500
0x003C
0x1C46
0x4000
0x4006
0xB1E6
0xC0A8
0x0101
0xC0A8
0x0102
相加过程如下:
0x8381 + 0x4500 = 0xC881
0xC881 + 0x003C = 0xC8BD
0xC8BD + 0x1C46 = 0xE503
0xE503 + 0x4000 = 0x12503(进位1)
0x2503 + 0x4006 = 0x6509
0x6509 + 0xB1E6 = 0x116EF(进位1)
0x16EF + 0xC0A8 = 0xD797
0xD797 + 0x0101 = 0xD898
0xD898 + 0xC0A8 = 0x19940(进位1)
0x9940 + 0x0102 = 0x9A42
步骤5:处理进位
如果有进位,需要加到低16位:
0x9A42(无进位)
步骤6:取反
对结果取反,得到最终的校验和:
取反前:0x9A42
取反后:0x65BD
所以,校验和为 0x65BD
。
8353
0x8353 + 0x0000 = 0x8353
0x8353 + 0x0006 = 0x8359
0x8359 + 0x0028 = 0x8381
#### 步骤4:添加TCP报文段的每个16位块
假设我们的TCP报文段(头和数据部分)如下(16位块):
0x4500
0x003C
0x1C46
0x4000
0x4006
0xB1E6
0xC0A8
0x0101
0xC0A8
0x0102
相加过程如下:
0x8381 + 0x4500 = 0xC881
0xC881 + 0x003C = 0xC8BD
0xC8BD + 0x1C46 = 0xE503
0xE503 + 0x4000 = 0x12503(进位1)
0x2503 + 0x4006 = 0x6509
0x6509 + 0xB1E6 = 0x116EF(进位1)
0x16EF + 0xC0A8 = 0xD797
0xD797 + 0x0101 = 0xD898
0xD898 + 0xC0A8 = 0x19940(进位1)
0x9940 + 0x0102 = 0x9A42
#### 步骤5:处理进位
如果有进位,需要加到低16位:
0x9A42(无进位)
#### 步骤6:取反
对结果取反,得到最终的校验和:
取反前:0x9A42
取反后:0x65BD
所以,校验和为 `0x65BD`。
这是计算伪首部和TCP报文段校验和的基本步骤。这个示例假设的TCP报文段是简化的,实际报文段会根据具体的TCP头和数据变化。