程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

关于TCP协议的基础知识(关于tcp/ip协议)

balukai 2025-02-03 11:21:36 文章精选 11 ℃

TCP协议(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,下面我们就来看看关于TCP协议相关的内容。

什么是TCP?

它是一种面向连接的、可靠的、基于字节流的传输层通信协议。

面向连接

一定是进行一对一的连接,而不是像是UDP一样可以一个主机同时向多个主机进行广播,也就是说使用TCP是无法进行广播的。

可靠的

根据我们的了解知道TCP协议是安全可靠的,也就是说无论网络链路中出现了什么样的变化,最终TCP都可以保证一个报文一定能够到达接收端。

字节流

当用户使用TCP协议传输消息的时候,消息数据可能会被操作系统拆分成多个TCP的报文,如果在接收端不知道所要接收的消息数据在什么时候结束的话,那么就无法去分割出一个有效的用户消息。并且TCP报文是有序进行传递的,当前一个报文没有接到的话,那么即使出现了后面发送的报文被接到,也不会先将这个包丢给应用层处理。如果出现了重复报文的时候TCP还会自动进行丢弃。

为什么需要TCP协议?

计算机网络有两种分层模式,一种是OSI参考模型,一种是TCP/IP分层模型。我们知道IP层其实是不可靠的,因为他不能保证网络数据包可以正常的发送和接收,也不能保证在整个的发送数据的过程中数据的完整性。既然这样的话为了保证网络数据包的可靠性,那么就需要传输层的协议进行控制。

这是因为TCP协议是一个为传输层工作的可靠协议,它能够保证接收端接收到的网络包是无损的、并且是没有间隔的、而是根据上面的介绍它对数据冗余进行了自动处理,并且这些数据包虽然被进行了拆分,但是还是按照顺序有序进行处理的。

TCP格式

我们是如何确定一个TCP链接的唯一性呢?

就需要我们的四个基本信息,源地址、源端口、目标地址、目标端口。

其中,源地址和目标地址的信息描述都在IP的32为头部中,其作用是通过IP协议将数据报文发送给对应的主机。

而源端口和目标端口则在TCP的头部信息中各占16位,其作用是告诉TCP协议应该讲报文数据发送到哪个进程中。

既然这样如果一个IP服务端监听了一个端口?那么它所对应的TCP最大连接数应该如何计算呢?

我们知道一般在实现服务端服务的时候,我们会固定一个端口号进行监听,然后等待客户端去连接服务端的对应接口。所以客户端的IP和端口是不固定的。所以对于一个端口它所能连接的最大的TCP连接数应该是,客户端的IP数量与客户端端口号的乘积。

也就是说在IPV4的体系下,最大的TCP连接数应该是 2的32次方乘以2的16次方,因为IP的数量是2的32地方,而端口的数量是2的16次方。二者的乘积最大应该是2的48次方的连接数。

当然在实际使用的过程中,TCP的连接数是远远小于这个值的。原因有如下几个

  • 文件描述符的数量:我们知道对于Linux服务器来讲,一切皆是文件,也就是说一个TCP链接就需要一个文件描述符进行描述,这个时候如果文件描述符被占满了就会出现Too many files的问题。而在Linux中对文件描述符做了如下的几种规定,第一、系统级别、也就是说当前系统支持打开最大的数量可以通过cat /proc/sys/fs/file-max,来进行查看。第二、用户级别,指定的用户打开的最大数量可以通过 cat /etc/security/limits.conf 来进行查看。第三、进程级别,单个进程打开的最大数量。通过cat /proc/sys/fs/nr_open进行查看。
  • 内存限制:影响TCP连接数的另一个原因就是内存,在每一次TCP连接进行建立连接到的时候就会开辟一块内存空间来进行数据处理。但是毕竟操作系统内存是有限的,所以并不能支持无限制的去建立TCP连接,如果内存被占满则会出现内存溢出的问题。

TCP参数介绍

除了上面介绍到的源端口、目标端口,TPC协议头部还有序列号、确认应答号、头长度、校验位等信息。

序列号

在连接建立的时候计算机会随机生成一个数作为初始值,通过SYN数据包传递到接收的主机,然后每次应答就会自动进行加一操作。用来保证网络传输数据包的顺序问题。

确认应答号

其实就是TCP协议希望能够收到的应答信息中的序列号,当发送端接收到这个应答之后就可以确认数据是被正常接收的。这主要是用来解决数据丢包的问题。

控制位

在TCP头部就几个控制位,其中比较重要的有如下几个。

  • ACK:当这个位置为1的时候,就表示确认应答的字段是有效的,在TCP中除了第一次建立连接的的SYN包之外,其他的时候这个位置必须为1。
  • RST:当这个位置为1的时候,表示TCP连接出现了异常,必须马上强制断开。
  • SYN:当这个位置为1的时候,表示需要去建立TCP连接,并且在序列号的位置进行初始值的设定。
  • FIN:当这个位置为1的时候,表示数据发送完成,希望可以断开TCP连接,当我们的数据传输完成之后,需要断开连接了,这个时候客户端和服务端就会相互交换带有FIN标识位1的数据包进行断开连接。
最近发表
标签列表