TCP的三次握手和四次挥手

TCP三次握手

相关词

TCP(Transmission Control Protocol)传输控制协议,提供可靠的面向连接的服务,采用三次握手建立连接。

SYN:同步序列号,用来发起一个连接。SYN=1的报文不能携带数据,但是消耗掉一个序号。

ACK:确认标识,当ACK=1时确认字段才有效。

seq:序列号,即数据包本身的序列号,为连接以后传输数据使用;

ack:对收到数据包的确认,值是等待接受的数据包的序列号(即期望对方继续发送的那个数据包的序列号)。’

TCP三次握手过程

在这里插入图片描述

  • 第一次:客户端C向服务端S发送连接请求报文,该报文首部中的SYN=1,ACK=0,随机选取一个序列号seq=i作为初始序列号。此时,客户端进入SYN_SEND同步已发送状态。

  • 第二次:服务端收到客户端的连接请求报文,如果同意建立连接,则发送确认报文。确认报文首部中SYN=1、ACK=1、ack=i+1、seq=j(服务端的初始序列号)。此时,服务器进入SYN_RCVD同步收到状态。

注:为什么ack=i+1?

答:服务器对客户端的数据进行确认,因为已经收到序列号为i的数据包,准备接受序列号为i+1的数据包,所以确认号ack=i+1。

  • 第三次:客户端收到服务端的确认报文之后,会向服务器发送确认报文,告诉服务器收到了它的确认报文并准备建立连接。确认报文首部中SYN=0、ACK=1、ack=j+1、seq=i+1。服务端收到客户端确认报文,此时,服务端进入ESTABLISHED已建立连接状态。

注:为什么seq=i+1?

答:ACK报文段可以携带数据,因此如果不携带数据,不消耗序列号,则下一个报文的序列号仍然是seq=i+1;如果携带数据,则序列号为在i+1的基础上增加携带数据的大小。此处默认第三次握手客户端不发送携带数据的报文段。

1.TCP三次握手理论背景

(a)TCP提供可靠的面向连接的服务,TCP是全双工的,即任意一端可以发送数据,也可以接受数据,需要有一个发送序列号和接受序列号。

(b)TCP三次握手的目的是同步连接双方的序列号和确认号,并交换TCP窗口大小信息,确认双方有收发数据的能力。

2.为什么不是两次握手或四次握手?

1.两次握手,客户端收到服务端的应答后进入ESTABLISHED(已建立连接状态),而服务端在收到客户端的连接请求之后就进入了ESTABLISHED状态。如果出现网络拥塞,客户端发送的连接请求报文A过了很久没有到达服务端,会超时重发请求报文B,服务端正确接受并确认应答,连接建立并开始通信传输数据,等通信结束之后释放连接。此时,如果之前失效的连接请求A到达服务端,由于两次握手就能成功建立连接,服务端收到请求A之后进入ESTABLISHED已建立连接状态,等待发送数据或者主动发送数据,此时,客户端已经进入CLISED断开连接状态,服务器会一直等下去,浪费服务器连接资源。

2.由于三次握手已经能确保建立可靠的连接,所以不需要四次或更多的握手

3.第三次握手中,如果客户端的ACK未送达服务器,会怎样?

Server端:
由于Server没有收到ACK确认,因此会重发之前的SYN+ACK(默认重发五次,之后自动关闭连接进入CLOSED状态),Client收到后会重新传ACK给Server。


Client端,两种情况:
在Server进行超时重发的过程中,如果Client向服务器发送数据,数据头部的ACK是为1的,所以服务器收到数据之后会读取 ACKnumber,进入 establish 状态

在Server进入CLOSED状态之后,如果Client向服务器发送数据,服务器会以RST包应答

TCP四次挥手过程

在这里插入图片描述

  • 第一次挥手:Client将FIN置为1,发送一个序列号seq给Server;进入FIN_WAIT_1状态;
  • 第二次挥手:Server收到FIN之后,发送一个ACK=1,acknowledge number=收到的序列号+1;进入CLOSE_WAIT状态。此时客户端已经没有要发送的数据了,但仍可以接受服务器发来的数据。
  • 第三次挥手:Server将FIN置1,发送一个序列号给Client;进入LAST_ACK状态;
  • 第四次挥手:Client收到服务器的FIN后,进入TIME_WAIT状态;接着将ACK置1,发送一个acknowledge number=序列号+1给服务器;服务器收到后,确认acknowledge
    number后,变为CLOSED状态,不再向客户端发送数据。客户端等待2*MSL(报文段最长寿命)时间后,也进入CLOSED状态。完成四次挥手。
1.为什么不能把服务器发送的ACK和FIN合并起来,变成三次挥手(CLOSE_WAIT状态意义是什么)?

因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复ACK,表示接收到了断开连接的请求。等到数据发完之后再发FIN,断开服务器到客户端的数据传送。

2.如果第二次挥手时服务器的ACK没有送达客户端,会怎样?

客户端没有收到ACK确认,会重新发送FIN请求。

TCP拥塞控制的四个算法

1.慢启动

2.拥塞避免

3.快重传

4.快恢复

TCP和UDP的区别

1.TCP是面向连接的,UDP是无连接的;

什么叫无连接?
UDP发送数据之前不需要建立连接

2.TCP是可靠的,UDP不可靠;

什么叫不可靠?
UDP接收方收到报文后,不需要给出任何确认

3.TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多;

4.TCP是面向字节流的,UDP是面向报文的;

什么意思?
面向字节流是指发送数据时以字节为单位,一个数据包可以拆分成若干组进行发送,而UDP一个报文只能一次发完。

5.TCP有拥塞控制机制,UDP没有。网络出现的拥塞不会使源主机的发送速率降低,这对某些实时应用是很重要的,比如媒体通信,游戏;

6.TCP首部开销(20字节)比UDP首部开销(8字节)要大

7.UDP 的主机不需要维持复杂的连接状态表

什么时候选择TCP,什么时候选UDP?

对某些实时性要求比较高的情况,选择UDP,比如游戏,媒体通信,实时视频流(直播),即使出现传输错误也可以容忍;

其它大部分情况下,HTTP都是用TCP,因为要求传输的内容可靠,不出现丢失

TCP如何保证传输的可靠性

1.数据包校验
2.对失序数据包重新排序(TCP报文具有序列号)
3.丢弃重复数据
4.应答机制:接收方收到数据之后,会发送一个确认(通常延迟几分之一秒);
5.超时重发:发送方发出数据之后,启动一个定时器,超时未收到接收方的确认,则重新发送这个数据;
6.流量控制:确保接收端能够接收发送方的数据而不会缓冲区溢出

从输入网址到获得页面的过程 (越详细越好)?

在这里插入图片描述
1.浏览器查询 DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;
2.浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;
3.TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;
4.服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
5.浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;
6.浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值