TCP/IP协议及三次握手四次挥手(上)

首先我们需要意识到的一点:TCP/IP 协议是众多协议的集合,根据 TCP/IP 的分层不同,对应的协议族也不同。TCP/IP协议在一定程度上参考了OSI的体系结构,并将其简化为了四个层次。

1、应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。

2、运输层:作为TCP/IP协议的第二层,运输层在整个TCP/IP协议中起到了中流砥柱的作用。且在运输层中,TCP和UDP也同样起到了中流砥柱的作用。

3、网络层:网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能。

4、网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层兼并了物理层和数据链路层,所以网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。

之后,我们再来看三次握手,四次挥手,首先我们需要知道TCP报文的格式,这里我放一张图片共大家理解。

 在建立和关闭连接的过程中,我们一般提到的有序号(seq),确认序号(ack),

以及分别由一个二进制位构成的(ACK,SYN,FIN)。

三次握手:

 刚开始客户端处于closed状态,服务端处于listen状态。

1.首先客户端先向服务器端发送一个TCP报文

将SYN位置1,表示建立连接,并发送生成的唯一的seq=x,此时客户端处于SYN_Send状态。

2.服务器端收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段报文

服务端向客户端发送一个确认消息包,SYN置1,ACK置1表示确认建立连接,seq=y,ack=x+1(由1步骤中seq序列号+1),此时服务端处于SYN_RCVD状态。

此时,客户端知道自己的发送和接受功能正常,服务端只知道自己的接收功能正常,还需要确认自己的发送功能是否正常,于是便有了第三次握手

3.客户端接收到来自服务器确认收到数据的TCP报文后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段,并返回一段TCP报文

ACK置1,seq=x+1,ack=y+1(ack = 发起方的seq + 1),客户端处于established状态。

4.服务端收到ack报文后,处于established状态,至此连接建立。

三次握手作用:

1.确保双方的接受能力、发送能力是否正常。

2.指定自己的初始化序列号,为后面的可靠性传输做准备。

注意点:

1.seq是动态生成的,为了防止能够猜出后续的确认号。

2.当服务器第一次收到客户端的SYN置1的报文后,处于SYN_RCVD状态,服务器会把此种状态下的请求连接放在一个队列里,称为半连接队列。当三次握手完成,建立起的就是全连接队列,如果队列满了,可能会出现丢包现象。

3.服务器发送完syn-ack确认包后,如果没有收到客户端的确认包,服务端会进行首次重传,等待一段时间后仍未收到,会进行二次重传,直至重传次数超过系统规定的重传次数,此时会将该连接信息从半连接队列中删除,一般每次重传的等待时间是指数增长,如:1s,2s,4s...。

4.第一次握手不能携带数据,如果有人恶意在请求报文中放大量数据,会使得服务器消耗大量时间、内存空间进行接受。第三次握手时,对客户端来说,已经知道服务端的接受、发送能力正常,所以就可以携带数据了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

overdosed_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值