网络常识

猫/光猫、路由器、wifi

Stock通讯实现​_IP


猫/光猫:解调器,光信号→电信号,可通过网线直接与家庭主机相连。

Stock通讯实现​_IP_02


路由器:猫与家庭主机直连,每次连接都需要拨号上网,且端口较少。路由器可实现自动拨号上网连接,同时发送wifi信号,支持多种设备同时连接上网。

Stock通讯实现​_HTTP_03


IP地址、子网掩码、网段、网关

Ip地址:(ipv4)本机在互联网上的唯一编号地址。当访问某网址(如www.baidu.com)时,DNS(域名控制器)将该网址域名转化为ip地址,当客户端与服务器的地址通过ip地址确定后,两者就可以进行通信。


Stock通讯实现​_HTTP_04

真实的ip地址是由二进制表示的,示例如下:

Stock通讯实现​_客户端_05


以上,192.168.1为网络号,末尾的1(00000001)为主机号。

子网掩码:字码掩码和ip地址进行运算,可以快速确定地址的网络号与主机号。


假设现有一IP地址180.210.242.131,即10110100.11010010.11110010.10000011

同时指定子网掩码为255.255.248.0 即11111111.11111111.11111000.00000000,则


网络号:两者进行与运算,即10110100.11010010.11110000.00000000(180.210.240.0)

主机号:子网掩码取反再和IP做与运算,即00000000.00000000.00000010.10000011(0.0.2.131)

Stock通讯实现​_IP_06


Ip地址需要与子网掩码一同读取,通过指定运算得到网络号与主机号。

实例:本机ip

Stock通讯实现​_IP_07


网关:如果IP在同一网段下,则通信无需经过网关,否则需要。

网段:本地主机ip的网络号的段

Stock通讯实现​_客户端_08


网关一般是软件层面的路由器

Stock通讯实现​_IP_09


电脑1(192.168,123.2)与电脑2(192.168.123.3)通过路由器连接时,不通过软件层面的路由器(网关)。而与internet中的其他不同网段的主机相连时,会通过网关。

路由是一种将网络数据包从源地址传输到目的地址的技术。在网络通信中,当数据包从一个设备(例如电脑或手机)发送到另一个设备时,它必须经过多个网络节点才能到达目的地。这些节点被称为路由器,它们会根据数据包的目的地址来选择下一步的路径,直到数据包到达目的地。

路由器在网络通信中起到非常重要的作用,因为它们可以帮助优化网络流量并提高网络性能。通过选择最佳路径来传输数据包,路由器可以减少网络拥塞和延迟,并确保数据包能够更快地到达目的地。同时,路由器还可以提高网络的安全性,通过防火墙等功能来保护网络不受攻击。


传输过程中需要经过多个网络,每个被经过的网络设备点 (有能力路由的)叫做一个跃点,地址即路由的ip。 跃点数:是经过了多少个跃点的累加器,为了防止无用的数据包在网上流散。 为路由指定所需跃点数的整数值 (范围是 1 ~ 9999),它用来在路由表里的多个路由中选择与转发包中的目标地址最为匹配的路由。

Stock通讯实现​_客户端_10


在网络通信中,经过30个越点通常指的是数据包从源地址到达目的地址时,它经过了30个路由器。这意味着在数据包传输的过程中,数据包经过了至少30个不同的网络节点。

经过30个越点可能会导致网络通信的延迟和拥堵增加,因为每个路由器都需要处理数据包并将其传递到下一个路由器,这需要一定的时间和资源。此外,经过过多的越点还可能增加数据包丢失或被篡改的风险。

因此,在设计网络架构时,通常会尽量减少数据包的跳数,以提高网络性能和稳定性。同时,也可以利用技术手段,如负载均衡、缓存等来优化网络传输,从而减少越点的数量。

端口

物理端口:路由器或者交换机上的网线端口。

Stock通讯实现​_HTTP_11



软件端口:计算机会受到多个数据包,计算机内部识别数据包来自于哪个软件。

简化的数据包:

Stock通讯实现​_客户端_12


软件与端口是一对多的关系。一个软件可以监听多个端口,在指定端口接收到数据包后,再由该软件对数据包进行解释。

附录:

(26条消息) 如何通过网页查看IP与端口_通过网址查询ip地址和端口_C是最好的编程语言的博客-CSDN博客

1.4 宽带拨号

Pppoe协议原理图如下:

Stock通讯实现​_IP_13


Stock通讯实现​_IP_14



1.5 NAT网络地址转换

本机的城域网ip(非公网ip,仍为局域网ip)

Stock通讯实现​_IP_15


几种ip的释义:

源IP地址和目的IP地址是网络通信中非常重要的两个概念。源IP地址指的是发送网络数据包的设备的IP地址,而目的IP地址则是接收网络数据包的设备的IP地址。


城域网IP地址是指在城域网内部使用的IP地址,一般由局域网管理员分配给各个设备使用。城域网通常是一个小范围的网络,比如一个公司或者一个学校的内部网络。


内网IP地址是指在局域网内部使用的IP地址。它们通常由路由器或者交换机等设备自动分配给各个连接到局域网上的设备使用。内网IP地址通常是私有IP地址,不可直接从公网访问。


公网IP地址是指可以被公共互联网访问的IP地址。它们通常由网络服务提供商(ISP)分配给用户使用。公网IP地址可以用于远程访问、网站托管等场景。


城域网IP地址通常是指局域网内部使用的IP地址范围,它们可以是IPv4或者IPv6地址。而源IP地址则是发送网络数据包的设备的IP地址,这个地址可能是城域网IP地址,也可能是公网IP地址,具体取决于发送数据包的设备所处的网络环境。如果你在同一局域网内的两台设备之间进行通信,那么源IP地址和目的IP地址都会是局域网IP地址。如果你从局域网内的某台设备访问公网资源,那么源IP地址将会是该设备的公网IP地址。

本机访问internet过程

Stock通讯实现​_IP_16


Stock通讯实现​_IP_17


Stock通讯实现​_HTTP_18


内网ip想要访问internet上的目的ip → 运营商路由器替换源端口,替换源ip为公网ip → 本机以公网ip及修改过后的端口访问目的ip(替换的是源端口)


Internet向本机发包过程:

Stock通讯实现​_HTTP_19


Stock通讯实现​_HTTP_20


Stock通讯实现​_HTTP_21


Internet向运营商路由器发包 → 运营商将包的目的端口替换,目的ip替换 → 本地主机接收到所访问的源ip及目的端口a的数据包(替换的是目的端口)

运营商可以通过分配同一公网ip的不同端口,节约公网ip。用户实现使用共享公网ip实现上网。


NET替换源端口的意义是为了提高网络通信的安全性和隐私性。在进行网络通信时,源端口是发送数据包的设备所使用的端口号,它可以用于标识发送数据包的应用程序或进程。如果不进行源端口替换,那么发送数据包的设备的真实端口号将会被暴露在外,这可能会被攻击者利用来进行针对性攻击。


通过进行源端口替换,可以使得发送数据包的设备的真实端口号得到隐藏,从而提高网络通信的安全性和隐私性。同时,源端口替换也可以避免同一端口号被多个应用程序或进程占用的问题,从而提高网络通信的稳定性和可靠性。


NET替换目的端口的主要作用是实现端口映射,从而将外部网络请求转发到内部网络中的指定设备或应用程序。在进行网络通信时,目的端口是接收数据包的设备或应用程序所使用的端口号。如果需要将外部网络请求转发到内部网络中的某个设备或应用程序,就需要通过目的端口替换来实现端口映射。


具体来说,当外部网络请求到达网关设备时,网关设备会根据请求的目的IP地址和目的端口号对数据包进行解析,并根据预先配置好的映射规则将数据包转发到内部网络中的指定设备或应用程序。在这个过程中,网关设备会将数据包的目的端口号进行替换,以确保数据包能够被正确地转发到目标设备或应用程序。


通过进行目的端口替换,可以实现内部网络服务的对外访问,同时也可以提高网络通信的安全性,避免内部网络的设备或应用程序直接暴露在公共网络中,从而降低被攻击的风险。


1.6 五层网络协议

Stock通讯实现​_客户端_22


1.7 数据包传输过程

网段是指在一个网络中被划分的一段连续的IP地址范围,而网络则是由多个网段组成的一个更大的网络。一个网络可以包含多个网段,每个网段可以包含多个主机。

通常情况下,一个网络中的所有主机都可以互相通信,而不同网络之间的主机需要通过路由器或者网关进行通信。因此,对于同一个网络中的主机,它们的IP地址应该属于同一个网段,而不同网络的主机则应该属于不同的网段。

网段可以理解为最小的网络。

Stock通讯实现​_HTTP_23


电脑一如何发送数据到电脑二?

电脑一封装一个数据包,通过查询电脑二的ip地址,再通过arp表的映射,得到电脑二的MAC地址。再以比特流形式通过交换机,发送给电脑二。电脑二通过解包得到电脑一发送的信息。

MAC地址和IP地址是两种不同的网络地址,它们在网络中的作用也不同。


MAC地址是指网卡的物理地址,它是由设备厂商制造时分配的唯一标识符,用于在局域网

内唯一标识一个网络设备。MAC地址是一个48位的十六进制数,通常表示为6组2位的十六进制数,例如:00-0C-29-1B-71-8E。


IP地址则是指网络层使用的逻辑地址,它是由网络管理员分配的,用于在网络中唯一标识一个主机。IP地址是一个32位的二进制数,通常表示为4组由点分隔的十进制数,例如:192.168.1.1。


在网络通信过程中,主机之间需要通过IP地址进行通信,因为IP地址可以唯一标识一个主机。而在局域网内,主机之间则可以通过MAC地址进行通信,因为局域网内的设备都可以直接访问彼此的MAC地址。


当一个主机需要向另一个主机发送数据时,它首先会通过ARP协议查询目标主机的MAC地址,然后再将数据封装成数据帧,并通过MAC地址进行传输。因此,MAC地址和IP地址是网络通信中不可或缺的两个概念。


1.8 数据包在网段之间的传输

Stock通讯实现​_客户端_24


实际上都是在同一网段上进行通讯的。


OSI七层网络模型

Stock通讯实现​_IP_25


Stock通讯实现​_IP_26


Stock通讯实现​_客户端_27

Stock通讯实现​_客户端_28



如何实现两台计算机的通讯?

按以下步骤:

  1. 客户端要将报文发送到另一台计算机,报文首先进入传输层,被封装为段。(段包含源端口号,目标端口号)
  2. 封装好的段随后进入网络层,被封装为(包包含源ip,目标ip)
  3. 传输层内,因为源ip与目标ip通常不在同一网段,所以无法通过网关的交换机直接互相传输(同一网段可使用MAC地址,交换机(交换机和路由器集成在一起)等直接通讯,不同网段下的通信必须通过网关)如何使此次通讯获得网关(运营商路由器)的ip地址呢?
    此时可以通过ARP协议地址解析协议,即ARP(Address),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址

交换机会记录所有通讯的MAC地址。

ARP协议本地主机会向本地网络内的广播地址发送ARP请求广播包。在ARP请求过程中,本地主机需要确定目标主机的MAC地址,因此它会向本地网络内的所有主机发送一个ARP请求广播包,请求其它主机响应并提供对应的MAC地址。ARP请求广播包的目的MAC地址为全0,目的IP地址为需要解析的IP地址,源MAC地址为本地主机的MAC地址,源IP地址为本地主机的IP地址。这样,本地网络内的所有主机都能收到该广播包,但只有拥有目标IP地址对应MAC地址的主机会响应ARP请求,将自己的MAC地址返回给本地主机。最终,本地主机通过收到的ARP响应包获得了目标主机的MAC地址,并能够向其发送数据包。

当本地主机通过交换机发送完ARP请求后,最终会得到源MAC地址和目标ip对应网关(路由)的MAC地址。网关解包后,会添加进该网关的MAC地址,最终会返回给客户端主机,客户端主机因此获得完整的客户端MAC与网关MAC,在本地主机的网卡上最终封装为帧。再次发送。

Stock通讯实现​_IP_29


备注:ARP协议响应的网关与目标IP地址之间有以下联系:

在网络通信中,ARP协议用于将一个IP地址解析成对应的MAC地址。当本地主机要向远程主机发送数据时,它首先需要知道远程主机的MAC地址,以便将数据包发送到正确的目标地址。为了获取远程主机的MAC地址,本地主机会通过ARP协议向本地网络内的所有主机发送一个ARP请求广播包,请求提供对应的MAC地址。如果本地网络内的某个主机响应了ARP请求,说明它拥有目标IP地址对应的MAC地址,本地主机就可以获取该MAC地址并向该主机发送数据包。

在一些情况下,本地主机需要向远程主机发送数据,但远程主机不在本地网络内,而是在另一个网络中。这时,本地主机需要将数据包发送到网关(Gateway),由网关将数据包转发到远程网络。在这种情况下,本地主机首先需要获取网关的MAC地址,以便正确地将数据包发送到网关。为了获取网关的MAC地址,本地主机会通过ARP协议向本地网络内的所有主机发送一个ARP请求广播包,请求提供网关IP地址对应的MAC地址。如果本地网络内的某个主机响应了ARP请求,说明它就是网关,本地主机就可以获取该主机的MAC地址并将数据包发送到该主机。这样,网关就能够将数据包转发到远程网络,并将响应数据包返回给本地主机。因此,ARP协议响应的网关与目标IP地址之间的联系是,网关需要将本地主机发送的数据包转发到目标IP地址所在的网络中,从而实现数据的传输。

  1. 本地主机将封装好的帧发送至网关,网关解析目标MAC后发现是发给自己的以后,会将帧发送到互联网(节点)上,再次通过ARP协议广播,直至找到目标ip对应的网关MAC地址(帧里的MAC地址实时更新)。
  2. 当获取最终的网关MAC地址以后,本地封装好的帧(数据包)会发送给目标主机(解析顺序为:确认是否为本机ip,确认该段的端口号找到对应的软件),目标主机里的对应软件最终会根据段里的内容做出响应。

至此,一次客户端向服务器的访问就完成了!


2.1 Ipv4与子网掩码

子网掩码区分不同区域的网络

Stock通讯实现​_HTTP_30


一共32位ip,锁定前30位为1(网络段),最后两位为0(主机号),即一个子网掩码

最后两位能表示的数分别为:

00(0),01(1),10(2),11(3)

共计4台主机

当发现子网掩码锁定的位数不同(如29位,28位)时,就可以确定两台通讯的主机不在同一网段。

2.2 TCP的三次握手和四次挥手

传输层和网络层的区别:

传输层和网络层是OSI模型中的两个不同的层次,它们分别负责不同的功能。


传输层主要负责在网络中传输数据,并提供端到端的可靠数据传输服务。传输层协议通常使用端口号来标识不同的应用程序,例如TCP和UDP协议就是常见的传输层协议。传输层的主要功能包括分段、重组、流量控制和错误恢复等。


网络层主要负责将数据包从源主机传输到目标主机,并在网络中进行路由选择。网络层协议通常使用IP地址来标识不同的主机和子网,例如IP协议就是常见的网络层协议。网络层的主要功能包括寻址、路由选择和分组转发等。


因此,传输层和网络层的区别在于它们所负责的功能不同。传输层主要负责端到端的可靠数据传输,而网络层主要负责将数据包从源主机传输到目标主机并进行路由选择。


HTTP(Hypertext Transfer Protocol)是一种用于在Web浏览器和Web服务器之间传输数据的协议,是应用层协议。HTTP协议使用TCP作为其传输层协议,它定义了客户端和服务器之间传输数据的格式和交互方式。


HTTP协议通过请求-响应模式进行通信,客户端向服务器发送一个HTTP请求,服务器接收请求后返回HTTP响应。HTTP请求由请求行、请求头部和请求正文组成;HTTP响应由状态行、响应头部和响应正文组成。HTTP协议支持多种请求方法,最常用的是GET和POST方法。GET方法用于请求服务器上的资源,而POST方法用于向服务器提交数据。


HTTP协议的特点包括无状态、可靠性较差、安全性较差等,但它仍然是Web应用程序中最为广泛使用的协议之一。随着Web应用程序的发展,HTTP协议也在不断地演化,例如HTTP/1.1、HTTP/2和HTTP/3等版本的出现,使得HTTP协议更加高效、安全和可靠。


HTTP协议是应用层协议,而TCP协议是传输层协议。HTTP协议依赖于TCP协议来进行数据传输。当浏览器向服务器发送HTTP请求时,TCP协议会将请求拆分成数据包并通过网络传输到服务器。服务器收到请求后,TCP协议会将响应拆分成数据包并通过网络传输回浏览器。因此,HTTP协议和TCP协议是密切相关的,可以说HTTP协议建立在TCP协议之上。

三次握手与四次挥手

Stock通讯实现​_客户端_31

Stock通讯实现​_HTTP_32


如果少了最后一次握手,即客户端能够接收服务端发布的信息,但并未将这一信息告知服务端,那服务端就无从得知客户端是否能够接收来自服务端的信息.,所以就不敢轻易发消息。

Stock通讯实现​_IP_33

四次挥手需要保证断开连接前服务端与客户端都已经充分完成彼此的工作。

Socket通讯

3.1什么是socket?


Stock通讯实现​_客户端_34


Socket是一组介于应用层与传输层(确定端口及ip)之间的一组api接口。

Socket(套接字)是一组接口,用于应用程序在不同主机之间进行通信。Socket提供了一种标准的、可编程的接口,使得应用程序可以通过网络进行通信。


在计算机网络中,Socket是应用层与传输层之间的一个抽象层,它可以使用多种传输层协议(如TCP和UDP)来实现数据传输。Socket主要提供了两种类型的通信方式:面向连接的通信和无连接的通信。面向连接的通信需要在通信双方建立连接后才能进行数据传输,而无连接的通信则不需要建立连接,可以直接进行数据传输。


在编程中,Socket通常被认为是一种文件描述符,可以像读写文件一样读写Socket。程序员可以使用Socket API来创建、连接、发送和接收数据等操作,从而实现网络通信功能。常见的Socket编程语言包括C、C++、Java和Python等。


总之,Socket是一种网络通信协议,是应用程序与网络之间的接口,提供了一种标准的、可编程的接口,使得应用程序可以通过网络进行通信。

3.2 为什么会有socket?

在网络通信中,一个应用软件如果需要在不同主机之间通信,需要大量使用TCP/IP协议进行数据传输。而数据传输过程中不仅有本地主机软件层面的解包,校验,还涉及到网卡的使用,所以必须有极高的操作权限。出于安全性和为了方便用户进行网络编程,将复杂的通信协议算法封装进操作系统内核,这样,对应的socket(如socket-tcp)就会成为一个文件,用户可以直接通过简单的句柄,调用该socket进行编程。

3.3 socket是如何工作的?

在计算机科学中,句柄(Handle)是一种特殊的指针,用于标识和操作系统资源相关联的对象或数据结构。句柄通常是一个整数值,它可以被用作指向资源管理器中的对象的引用,如文件、窗口、进程等。

在Linux系统中,“一切皆是文件”(Everything is a file)是一种哲学思想,它认为所有的设备、数据和进程等都可以被抽象成一个文件,并通过文件系统进行管理。

在这种思想下,Linux系统中的文件不仅仅指普通文件,还包括目录、设备、管道、套接字等。每个文件都有一个唯一的标识符句柄),称为文件描述符(File Descriptor),它是一个非负整数,用于标识打开的文件或其他I/O资源。

Socket是文件吗?

创建Socket时,并不是真正意义上的创建了一个文件,而是创建了一个文件描述符。在Linux系统中,一切皆是文件,包括Socket也是以文件描述符的形式存在。

当我们调用socket()函数创建一个Socket时,操作系统会为该Socket分配一个唯一的文件描述符,该文件描述符可以被用作标识这个Socket的唯一标识符。应用程序可以使用该文件描述符来对该Socket进行读写等操作。

文件描述符提供了一种统一的接口来进行I/O操作,可以对各种类型的I/O资源进行读写。在Linux系统中,文件描述符通常使用整数来表示,例如0代表标准输入、1代表标准输出、2代表标准错误输出等,而其他的文件描述符则通过系统调用(如open、socket、accept等)来创建和使用。

因此,创建Socket时并不是真正意义上的创建了一个文件,而是创建了一个文件描述符,该文件描述符可以被用作标识该Socket的唯一标识符。该文件描述符可以像文件一样进行读写操作,但实际上并不是一个真正的文件。


一个socket表示什么?

一个Socket代表一个网络连接的一端,它是一个通信链路的抽象概念。在网络通信中,两个进程之间通过Socket进行通信。


一个Socket由以下几部分组成:


1. IP地址:Socket所连接的远程主机的IP地址。

2. 端口号:Socket所连接的远程主机的端口号。

3. 协议类型:Socket所使用的协议类型,例如TCP或UDP。


在客户端与服务器之间建立连接时,客户端和服务器各自创建一个Socket来表示自己的网络连接。客户端Socket包含目标服务器的IP地址和端口号,而服务器Socket则包含本地IP地址和监听的端口号。


当客户端向服务器发送数据时,它会将数据发送到客户端Socket,客户端Socket将数据通过网络传输到服务器Socket。服务器Socket接收到数据后,将数据传递给服务器应用程序进行处理。反之亦然,当服务器向客户端发送数据时,它会将数据发送到服务器Socket,服务器Socket将数据通过网络传输到客户端Socket,客户端Socket接收数据后,将数据传递给客户端应用程序进行处理。


因此,一个Socket代表一个网络连接的一端,它是客户端和服务器之间通信的通道。在网络编程中,Socket是非常重要的概念,应用程序可以使用Socket API来创建、连接、发送和接收数据等操作,从而实现网络通信功能。


3.4 常见的socket方法

Stock通讯实现​_IP_35


在计算机网络中,Socket是一种通信机制,它提供了一种标准的接口,使得应用程序可以通过网络进行通信。在实际编程中,我们可以使用Socket API来实现Socket编程。


常用的Socket方法包括:


1. socket():创建一个新的Socket,返回一个文件描述符(整数类型)。

创建一个新的Socket

int sockfd = socket(AF_INET, SOCK_STREAM, 0);


2. bind():将Socket绑定到一个本地地址和端口号上。

将Socket绑定到本地地址和端口号

struct sockaddr_in servaddr;

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

servaddr.sin_port = htons(SERV_PORT);

bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));


3. listen():将Socket设置为监听状态,等待客户端连接。

将Socket设置为监听状态

listen(sockfd, LISTENQ);


4. accept():接受一个客户端连接请求,返回一个新的Socket和客户端地址信息。

接受客户端连接请求

struct sockaddr_in cliaddr;

socklen_t clilen = sizeof(cliaddr);

int connfd = accept(sockfd, (struct sockaddr *)&cliaddr, &clilen);


5. connect():向远程主机发起连接请求。

向远程主机发起连接请求

struct sockaddr_in servaddr;

bzero(&servaddr, sizeof(servaddr));

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(SERV_PORT);

inet_pton(AF_INET, argv[1], &servaddr.sin_addr);

connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));


6. send():向连接的另一端发送数据。

向连接的另一端发送数据

char sendbuf[MAXLINE];

fgets(sendbuf, MAXLINE, stdin);

write(sockfd, sendbuf, strlen(sendbuf));


7. recv():从连接的另一端接收数据。

从连接的另一端接收数据

char recvbuf[MAXLINE];

read(connfd, recvbuf, MAXLINE);


8. close():关闭一个Socket。

关闭一个Socket

close(sockfd);


这些方法都是通过系统调用来实现的,具体的实现方式可以参考操作系统的相关文档和源代码。在实际编程中,我们需要根据具体的需求选择合适的Socket方法,并进行相应的参数设置和错误处理,以确保程序的正确性和健壮性。

3.5 TCP报文结构

以下是一个TCP报文头部的详细注释示例


```

Source Port: 49152

Destination Port: 80

Sequence Number: 123456789

Acknowledgment Number: 987654321

Data Offset: 5 (表示TCP首部长度为20字节,即5个32位字)

Flags: SYN, ACK

Window Size: 65535

Checksum: 0x1234 (示意性的校验和值)

Urgent Pointer: 0

Options: (无选项字段)

```


- Source Port(源端口号): 16位字段,表示发送方的端口号。此处为49152。

- Destination Port(目标端口号): 16位字段,表示接收方的端口号。此处为80,通常用于HTTP协议。

- Sequence Number(序列号): 32位字段,表示发送方发送的数据段的起始字节的序号。此处为123456789。

- Acknowledgment Number(确认号): 32位字段,表示接收方期望下一个收到的字节的序号。此处为987654321。

- Data Offset(数据偏移): 4位字段,表示TCP首部的长度,以32位字为单位。此处为5,即20字节。

- Flags(标志位): 6位字段,包含控制TCP连接状态的标志。此处设置了SYN和ACK标志,表示建立连接并确认收到数据。

- Window Size(窗口大小): 16位字段,表示接收方的可用缓冲区大小。此处为65535,表示窗口大小为最大值。

- Checksum(校验和): 16位字段,用于检测TCP报文的完整性。此处为0x1234,示意性的校验和值。

- Urgent Pointer(紧急指针): 16位字段,用于指示紧急数据的位置。此处为0,表示没有紧急数据。

- Options(选项): 可选字段,用于提供额外的功能和控制信息。此处为空,表示没有选项字段。