小记忆之传输控制协议TCP握手

in 网站建设
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
TCP主要特点:

1)TCP是面向连接的的运输层协议。换句话说就是应用程序在使用TCP协议之前,必须先建立TCP连接。在传送完数据后,必须释放已经建立的连接。

2)每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的。

3)TCP提供可靠交付服务(无差错,不丢失,不重复,且按序到达)

4)TCP提供全双工通信(简单说就是通信双方都可向对方发送数据和接收数据)

5)面向字节流。TCP中的‘流’(stream)是指流入到进程或从进程流出的字节序列

TCP的连接:

TCP连接端点叫套接字(socket),RFC 793定义:端口号拼接到ip地址即构成了套接字

socket = (ip:port)


TCP三次握手

19.png

最初两端的TCP进程都属于CLOSED状态。注意:A主动打开连接 B被动打开连接。

  B的TCP服务器进程先创建传输控制块TCB,准备接收客户进程的连接请求。然后服务进程就处于LISTEN(收听)状态,等待客户的连接请求。如有,立即做出响应。

  A的TCP客户端进程也是首先创建传输控制模块TCB,然后向B发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始的序号 seq=x。TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但是需要消耗一个序号。这时TCP客户进程进入SYN-SENT(同步以发送)状态。

  B收到请求报文段后,如同意建立连接,则向A发送端确认。在确认报文段中应把SYN位和ACK位都置为1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。要注意,这个报文段也不能携带数据,但同样需要消耗掉一个符号。这时服务器进程进入SYN-RCVD(同步收到)状态。

  TCP客户进程收到B确认后,还要向B给出确认。确认报文段的ACK=1,确认号ack=y+1,而自己的序号seq=x+1.TCP标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号,在这种情况下,下一个数据报文段的序号仍是seq=x+1.这时TCP连接已经建立,A进入ESTABLISHED(已建立连接)状态。

  当B收到A的确认后,也进入ESTABLISHED(已建立连接)状态

以上就是三次握手的过程

序号seq: 占4个字节,序号范围是[0,2**32-1],共2**32个序号。序号增加到2**32-1后,下一个序号又回到0。TCP是面向字节流的。在一个TCP连接中传送的字节流中的没一个字节都按顺序编号。例如,一段报文的序号字段值是301,而携带的数据共有100字节。这就表明:本报文的数据段的第一个字节的序号是301,最后一个字节序号是400

确认号 ack: 占4个字节,是期望收到对方下一个报文段的第一个数据字节的序号。简单来说。 若确认号 = N,则表明到序号N-1为止的所有数据都已正确收到。

确认ACK : 仅当ACK=1时,确认号字段(ack)才有效。当ACK=0,时确认号(ack)无效,TCP规定,在连接建立后所有传送的报文段都必须把ACK置1

同步 SYN:在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应报文段中使SYN=1和ACK=1,因此SYN=1,表明这是一个连接请求报文或连接接受报文。

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看