TCP的三次握手和四次挥手的过程

TCP与UDP

在网络层可以实现两个主机之间的通信,TCP和UDP都是应用在网络层的传输控制协议。不同的是TCP是面向连接的而UDP在传输数据时不需要事先建立连接;UDP在收到报文后不需要给出任何确认信息;UDP在交付过程中尽最大努力交付,不保证报文能够可靠到达,由于采用了这种不可靠的交付方式,使得它在传输过程中省去了很多开销,因此它的传输速度比较快。UDP经常应用在一些对网络通信质量要求不高,但是网络通讯速度较快的场景,比如QQ语音、直播等。对应的应用层协议主要有DNS、TFTP、DHCP、SNMP、NFS等。

TCP提供面向连接的服务,在传输数据时首先要建立连接,数据传送完毕后要释放连接。TCP属于可靠的传输,在传输过程中增加了很多的开销。TCP主要应用在对网络通讯质量有较高要求,整个数据要准确无误的传送给对方的应用,比如文件传输、发送和接收文件、远程登录等。对应的应用层协议主要有SMTP、HTTP、TELENT、FTP等。

TCP概述

TCP把连接作为基本对象,每一条连接都有两个断点,成为套接字(socket),它定义为端口号拼接到IP地址,如IP地址为192.168.1.1,端口号为80,那么得到的套接字为192.168.1.1:80。

TCP连接的建立(三次握手)

TCP的六种标志位:SYN(建立连接)、ACK(确认)、PSH(push传送)、FIN(finish结束)、RST(rest重置)、URG(urgent紧急)、Sequence number(顺序号码)、Acknowledge number(确认号码)

在TCP/IP协议中,TCP提供可靠的连接服务,采用三次握手来建立一个连接,最开始的时候客户端和服务端都处于CLOSED状态。

第一次握手:客户端向服务器端发送连接请求报文,第一次握手后服务器(S端)可以确认自己收报文和客户端(C端)发报文都正常,客户端(C端)什么都不能确认。

第二次握手:服务器端收到请求后,同意建立连接,向客户端发送报文,确认报文已收到,第二次握手后客户端可以确认自己收发报文和服务器端的收发报文都正常,此时连接已经建立。

第三次握手:客户端收到服务器端的确认报文后再次向服务器端发送报文,确认自己已经收到确认报文,这时服务器端确认双方连接已经建立,可以正常通信。

TCP连接的释放(四次挥手)

 

数据传输完毕后,双方可以释放连接。最开始的时候,客户端和服务器端都处于ESTABLISHED状态,然后客户端主动关闭,服务器端被动关闭。

第一次挥手:浏览器向服务器发送释放连接报文;

第二次挥手:服务器收到释放报文后,发送确认报文,然后将服务器上未发送完的数据发送完;

第三次挥手:服务器数据传送完毕后向浏览器发送释放连接请求;

第四次挥手:浏览器收到报文后发出确认,然后等待一段时间后释放TCP连接。

为什么建立连接需要三次握手而关闭需要四次呢?

建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。

而在断开连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,在发送FIN报文给对方表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值