计算机网络知识点合集——TCP连接与释放

本文作者林箖霖,转载请注明出处~

一、运输层概述

(1)运输层的主要功能应用进程之间提供端到端的逻辑通信 运输层需要对收到的报文进行差错检测;运输层使用两种协议TCP和UDP。
(2)TCP是面向连接的,提供可靠服务;UDP是面向无连接的,提供不可靠服务
(3)运输层使用端口号来标记应用进程,16bit来表示。
(4)服务器端口:熟知端口:0~1023,登记端口:1024~49151;
(5)客户端口(短暂端口号):49152~65535。

1.1 TCP的特点

  • 面向连接,面向字节流(对上层交付的数据以字节流传输)
  • 提供可靠交付
  • 点对点的连接提供可靠的全双工通信
  • 首部有20字节,并且还有40字节的扩展首部,拓展首部可以放时间戳、选择确认SACK、窗口扩大,MSS
  • 拥有拥塞控制与流量控制

1.2 UDP的特点

  • 面向无连接,面向报文(对上层交付的数据直接添加UDP首部就向下交付)
  • 提供尽最大努力交付的服务
  • 支持一对一,一对多,多对一和多对多的交互通信
  • 首部只有8个字节(首部开销小)
    • UDP首部字段:源端口,目的端口,长度和检验和。源端口和目的端口分别完成分用和复用的功能。使用校验和的时候需要添加12个字节的伪首部参与计算过程。

二、 TCP的三次握手过程?

三次握手建立连接

  1. 一开始,客户端和服务器都处于close状态。先是服务器主动监听某个端口,处于listen状态
  2. 当要建立连接的时候,客户端会给服务器发送SYN=1, Seq_num=client_isn的报文(Seq_num是随机选取的一个序号),并且客户端进入SYN-Sent状态
  3. 服务器接收到这个报文后,如果同意建立连接,那么服务器会给客户端回复一个SYN=1,ACK=1, Seq_num=server_isn, ack=client_isn+1的报文,并且服务器进入SYN_RCVD状态,并等待客户端的ACK报文,才可以建立连接。
  4. 客户端收到这个报文之后,便回复一个ACK=1, Seq_num=client_isn+1, ack=server_isn+1的报文,发送完这个报文后,客户端就进入连接状态。服务器收到客户端的ACK报文后,便进入连接状态。

2.1 为什么要三次握手?

进行三次握手的原因主要是阻止重复历史连接的初始化。如果没有进行三次握手,而是进行两次握手,那么当服务端收到来自客户端的请求连接SYN报文后,便会马上进入连接状态,那么假设这个报文是网络中的一个迟到的连接报文,此时的客户端并不想建立,那么服务端的资源就会被白白浪费。(如果是三次握手的话,客户端收到服务器端的SYN+ACK报文后,会查看确认号如果是一个对过期连接的回复SYN+ACK,那么客户端发送一个RST报文中止这个连接。通过这个处理方法,也可以知道三次握手的原因还有一个是为了同步序列号。)

三、 TCP的四次握手释放连接过程

四次握手释放连接

  1. 一开始客户端和服务端都处于连接状态,此时客户端想要断开连接,那么他就会给服务器发送一个FIN=1, Seq_num=client_isn的报文,并且客户端进入FIN_WAIT1状态
  2. 服务器收到客户端的FIN报文之后,便知道客户端想要终止连接,他就会先给客户端回复一个ACK=1,Seq_num=server_isn, ack=client_isn+1的报文,并且服务端进入CLOSE_WAIT状态。此报文只是对客户端发送的FIN报文的一个确认,因为此时可能服务器器还有数据没有发送完毕。 客户端接收到服务器的ACK报文后,客户端会进入FIN_WAIT2状态,等待服务器的FIN报文。
  3. 等到服务端的数据发送完了之后,才会向客户端发送FIN=1, ACK=1, Seq_num=server_isn2, ack=client_isn+1的报文,并且服务器进入LAST_ACK状态,等待客户端的最后的ACK报文。
  4. 客户端收到服务端的ACK+FIN报文之后,给服务器发送最后一个ACK=1, seq_num=client_isn+1, ack=server_isn_w+1的报文,并且客户端进入TIME_WAIT状态等待2MSL时间后,如果没重新接收到服务器的FIN=1, ACK=1的报文,则客户端进入断开连接状态

TIME_WAIT状态是一个2MSL的时间,也就是两倍的最大报文传输时间

  1. 服务器接收到客户端发的最后一个ACK报文,服务器才能正常进入断开连接状态

3.1 为什么是四次握手释放连接?

因为释放连接的过程,可能服务端还有数据要发送,不能马上断开连接,所以FIN和ACK不能同时发送给客户端,需要分两次发送。

3.2 2MSL的作用?

第一个是为了让服务端能够正常断开连接。因为服务端要收到客户端的最后一个ACK才可以断开连接。那么万一客户端的最后一个ACK在网络中丢失了,那么服务端在计时器的时间之内没有收到客户端的最后一个ACK时,会给客户端重新发送FIN+ACK的报文,此时在2MSL的时间内,客户端接收到服务端的重发FIN+ACK报文后,就知道最后的ACK报文丢失了,便重新给服务端发送ACK报文,此时的服务端收到最后一个ACK报文后,便可以正常断开连接。
第二个是为了阻止网络中的“已失效的连接请求报文”出现在本连接中,因为经过2MSL时间后,所有本连接时间内产生的所有报文都从网络中消失。

四、 如果客户机在连接过程中出现故障了怎么办?

TCP有一个“保活计时器”,当服务端没有收到客户端的数据时,会启动“保活计时器”,当计时器时间结束后(一般为2小时),就会给客户端发送一个探测报文,以后每隔75秒发送一次,若一连发送10个探测报文段仍没收到客户端的回应,那么就认为客户端出了故障,接着就关闭这个连接

五、 其他关闭连接的方法

当接收到RST=1的报文,那证明连接中出现了严重错误,需要释放连接,再重新建立连接。RST还可以用来拒绝一个非法报文或者打开一个连接

六、 关于seq_num

在双方通信中,若该报文没有携带数据,则不消耗序号但是SYN,ACK,FIN报文即使没有携带数据,也要消耗一个序号

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在员工管理系统中,TCP服务器与客户端连接需要掌握以下知识点: 1. TCP协议:TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层协议,它提供了可靠的数据传输服务和流量控制、拥塞控制等机制,适用于需要可靠数据传输的应用场景。 2. Socket编程:Socket编程是基于TCP/IP协议的网络编程,它提供了一套标准的接口,使得应用程序可以通过网络进行数据传输和通信。在Socket编程中,客户端和服务器端分别创建Socket并进行连接,实现数据交换和通信。 3. 网络编程模型:网络编程模型指的是不同的网络编程架构,如基于阻塞I/O和非阻塞I/O的网络编程模型。在实现TCP服务器与客户端连接时,需要根据实际情况选择合适的网络编程模型,如使用多线程模型或异步I/O模型等。 4. 并发编程:在实现TCP服务器与客户端连接时,需要考虑并发编程问题,如如何处理多个客户端的连接请求、如何保证并发访问的线程安全等问题。 5. 网络安全:在实现TCP服务器与客户端连接时,需要考虑网络安全问题,如如何防止恶意攻击、如何保护数据的安全性等问题。 综上所述,实现TCP服务器与客户端连接需要掌握多个方面的知识点,其中TCP协议、Socket编程和网络编程模型是基础知识,而并发编程和网络安全则是实现过程中需要特别注意的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值