浅谈TCP协议

学习计算机网络的过程中,我们知道可以将网络划分成五层模型。从上到下依次是应用层、传输层(运输层)、网络层、数据链路层、物理层。而TCP协议是tcp/ip协议族中的一个最重要的协议。TCP协议性对于IP协议更接近应用层,对应用程序具有更强的操作性。
对于传输层来说,TCP与UDP是本层两个主要协议。两者的不同在于 TCP提供面向连接、安全可靠的流式服务,UDP提供的是无连接、不可靠的数据报服务。
下面给大家详细介绍TCP协议与UDP协议。
TCP协议
使用TCP协议,双方必须先建立连接、然后才能写入数据,且双方必须分配相对应的内核资源。TCP协议还是全双工,因此双方读写可以通过一个连接进行,但如果数据交换完成以后,必须断开连接,使系统得以释放资源。
TCP协议是一对一的协议,所以基于广播和多播的应用程序不能使用TCP协议。
流式服务:数据没有边界限制,多次发送,可以被一次接收,可能会出现粘包问题。
tcp头部信息
浅谈TCP协议_第1张图片
16位端口号:告知主机该报文的从那个端口发送到那个端口去。进行TCP通信时,通常客户端会临时选择一个端口号,而服务器则使用知名服务端口号。知名服务端口号一般存放在etc/services中。
32位序列号:一次TCP通信过程中(连接到关闭),某一传输方向上字节流的编号。例如:发送1025——2048个字节,那么该字节的编号就是n+1025
32位确认号:用作另一方发送来的TCP报文段的响应,其值是收到的TCP序列号+1.
4位头部长度;标识该TCP报文有多少个32bit的字(4字节)
ACK标志:表示确认号是否有效,我们称携带ACK标志的TCP报文段为确认报文段
SYN标志:表示请求建立一个连接,我们称携带SYN标志的TCP报文段为同步报文段
FIN标志:表示通知对方本段要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段
RST标志:表示通知对方需要重新建立连接。我们称鞋带RST标志的TCP报文段为复位报文段。
URG标志:表示紧急指针是否有效。
PSH标志:表示接收端应用程序应立即将TCP报文缓冲区中的数据读走,为接受后序数据腾出空间。
16位滑动窗口的大小:是TCP控制流量的一个手段。
16位校验和:由发送端填充,接收端对TCP报文使用CRC算法监测TCP报文是否在传送过程中损坏。
16位紧急指针:是一个正的偏移量,他和序列号字段的值相加表示最后一个紧急数据的下一个字节号。
TCP字节流服务的原理
浅谈TCP协议_第2张图片
如图所示,发送端连续执行多次写操作之后,TCP模块会将他们先存放在TCP发送缓冲区,当TCP模块真正发送数据的时候,发送缓冲区中的这些等待数据将会被分成一条或者多条TCP报文发送。
当接收端收到一个或者多个TCP报文以后,TCP模块化会按照序号将他们依次存放入TCP接受缓冲区,并通知应用程序读取数据。这时候用户应用程序可以一次性将缓冲区中的数据读完,也可以分多次读取。取决于应用程序缓冲区的大小,因此应用程序读操作的次数与接收TCP报文的次数没有关系。
TCP连接的建立
浅谈TCP协议_第3张图片
建立TCP连接的前三个报文段我们称之为三次握手,后四个报文段我们称之为四次挥手。
一般而言,TCP连接的建立由客户端发起,并通过三次握手连接而成。
而TCP连接的关闭却相对于复杂,可能是客户端先断开,又有可能是服务器端先断开,又有可能是服务器程序被中断而强制关闭连接,还有可能是同时关闭。
TCP连接的代码实现如下:
代码实现

你可能感兴趣的:(Linux网络)