准备春招,复习笔记1 TCP

TCP是什么?

“传输控制协议(TCP)是一种网络通信协议,旨在通过Internet发送数据包。TCP是OSI层中的传输层协议,用于通过传输和确保通过支持网络和Internet传递消息来在远程计算机之间创建连接。”

这是别人大神说的。我觉得他这句话有几个关键词--网络通信协议   远程计算机之间创建连接 传输层协议

网络通信协议是啥?

网络通信协议是指

“网络通信协议是一种网络通用语言,为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,是一种网络通用语言。”

通俗来讲,就是同来连接不同操作系统和硬件的一种语言

远程计算机之间创建连接

TCP怎么建立连接?

TCP一般涉及到3次握手

准备春招,复习笔记1 TCP_第1张图片

稍微画个图方便自己理解

描述TCP3次握手

首先客户端会向服务器发送TCP请求,客户端会发送带有标志位SYN=1,seq=x的数据包给服务器,然后状态处于SYN-SENT,等待服务器确认。服务器收到请求后,通过SYN=1得知客户端请求建立连接,会发送随机生成seq=y,并且生成ack=x+1,ACK=1打包成数据包返回给客户端,这时服务器处于SYN-RCVD状态,客户端收到服务器返回的数据,判断ack是否等于x+1,ACK是否为1,如果都正确,客户端会把ACK置为1,ack置为y+1,发送数据包给服务器,服务器检验ACK为1和ack是否为y+1,如果都正确,则两者连接建立。他们状态都为ESTABLISHED,他们这个时候可以传送数据。

刚开始理解的时候我也很晕,什么SYN,seq,ack,ACK等等

SYN是用来干嘛的?我觉得SYN就是为了让服务器知道这个数据包是用来请求建立连接的,让服务器区别是别的请求还是建立连接请求的一个标志位。

seq是一个随机生成的顺序码。客户端发送请求后,接受服务器收到后返回的数据包,对其ack做检验,是否为之前发送请求随机生成seq+1,确保接受回来的数据包是回应上一个发出建立连接的请求。那为啥要随机呢?主要是为了防止黑客伪造序列号进行攻击。

小写的ack就是刚刚提到了为了校验是否为上一个的请求的回应。

大写的ACK是一个标志位,为了告诉别人上一个收到的请求正确,如果收到的数据包有误,或错序,就会申请重发。NCK是否定的意思,ACK就是肯定的意思。

TCP为啥需要3次,两次不是更好吗?

3次握手时为了防止客户端向服务器发送建立连接请求的时候,因网络原因该请求丢失或者延迟,这时候客户端长时间没收到信息,就会触发重传机制,重新再发。然后后面客户端和服务器正常连接后断开。这个时候刚刚因网络原因的请求去到服务器。如果只有2次的话,服务器收到会进入ESTABLISHED状态,而客户端早就已经关闭了,所以服务器的资源会被白白浪费,而如果是3次握手的话,服务器要收到客户端再次确认请求才会处于ESTABLISHED状态。

 

 

你可能感兴趣的:(前端小知识,TCP)