TCP(Transmission Control Protocol)网络传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,数据传输前建立连接的工作要经过三次握手,数据传输后断开连接的工作要经过四次挥手。
工作过程
–TCP标志位:
- TCP共有6个标志位,分别是:
- SYN(synchronous),建立连接。
- ACK(acknowledgement),确认。
- PSH(push),传输。
- FIN(finish),结束。
- RST(reset),重置。
- URG(urgent),紧急。
三次握手建立连接阐述:
- 第一次握手:客户端要和服务端进行通信,首先要告知服务端一声,遂发出一个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。
- 第二次握手:当服务端接收到客户端的连接请求,此时要给客户端一个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。
- 第三次握手:当客户端收到了服务端的确认连接信息后,要礼貌的告知一下服务端,“好的,咱们开始联通吧(ACK)”。
四次挥手断开连接阐述:
- 第一次挥手:双方交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时自身形成等待结束连接的状态。
- 第二次挥手:服务端知道客户端已经没话说了,服务端此时还有两句心里话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。
- 第三次挥手:此时客户端洗耳恭听继续处于等待结束的状态,服务器端也说完了,自身此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。
- 第四次挥手:客户端收知道服务端也说完了,也要告诉服务端一声(ACK),因为连接和断开要双方都按下关闭操作才能断开,客户端同时又为自己定义一个定时器,因为不知道刚才说的这句话能不能准确到达服务端(网络不稳定或者其他因素引起的网络原因),默认时间定为两个通信的最大时间之和,超出这个时间就默认服务器端已经接收到了自己的确认信息,此时客户端就关闭自身连接,服务器端一旦接收到客户端发来的确定通知就立刻关闭服务器端的连接。
知识延伸: 为什么建立连接需要三次握手,
原因:为了应对网络中存在的延迟的重复数组的问题
假设client发起连接的连接请求报文段在网络中没有丢失,而是在某个网络节点长时间滞留了,导致延迟到达server。本来这是一个已经失效的连接报文,但是server接收到这个连接报文之后,误认为client发起了新的连接,于是向client发送确认报文段。此时因为没有了连接的3次握手,client不会对server的确认报文作出回应,也不会向server发送数据,server就以为连接已经建立,一直在空等client的数据,这样server的这一部分网络资源就被浪费了。
为什么断开连接需要四次握手?
因为TCP连接是全双工的网络协议,允许同时通信的双方同时进行数据的收发,同样也允许收发两个方向的连接被独立关闭,以避免client数据发送完毕,向server发送FIN关闭连接,而server还有发送到client的数据没有发送完毕的情况。所以关闭TCP连接需要进行四次握手,每次关闭一个方向上的连接需要FIN和ACK两次握手。
遇到的问题:
通过跳板机redis-cli -h 127.0.0.1 -p 6666 连接redis 时 执行了keys E* 结果里面因为里面数据过多,server一直在给client发送查询到的数据, 通过关闭client端,即可关闭这次请求,进而关闭server端的这次查询. 具体过程: redis-cli 是基于tcp协议与server端以socket方式建立连接, 如果client端关闭了那么server端就是在尝试将数据包发送到一个未联通的socket端口上,就会让底层抛出一个SIGPIPE信号。这个信号的缺省处理方法是退出进程, 也就是server端的本次查询服务终止. redis-cli和server是基于tcp/ip协议的也就是面向连接的通信,在其中连接中断后,相应的进程也就中断了.
关于tcp/ip和socket的关系:计算机通信通过tcp/ip找到某一台服务器,然后通过socket接口(端口)找到这台服务器上的某一个具体服务.所有采用ip+port(socket接口)形式建立的连接都是基于tcp/ip协议以socket方式建立的连接.
随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,TCP/IP协议作为网络通信的标准协议就解决了这个通信难题。TCP/IP协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在TCP/IP协议中引入了一种称之为Socket(套接字)应用程序接口。有了这样一种接口技术,一台计算机就可以通过软件的方式与任何一台具有Socket接口的计算机进行通信。端口在计算机编程上也就是Socket接口。
黑客入侵主机的过程.
服务器端口数最大可以有65535个,但是实际上常用的端口才几十个,未定义的端口相当多。黑客将木马程序植入 邮件,U盘等,插入某台设备时木马程序就感染了本设备,木马程序能在计算机启动之前自动加载到内存,强行控制计算机打开那个特殊的端口,俗称后门(BackDoor)使这台计算机变成一台开放性极高(用户拥有极高权限)的FTP服务器,然后从后门就可以达到侵入的目的。
socket几种连接方式简介及端口介绍: https://blog.csdn.net/H1250161943/article/details/52590521 讲得很形象