TCP协议中URG、PSH及三次握手与四次挥手

来源:互联网 发布:逆袭网络剧百度云网盘 编辑:程序博客网 时间:2024/06/11 11:36

TCP协议:

TCP提供了一种面向连接的、可靠的字节流服务。面向连接比较好理解,就是连接双方在通信前需要预先建立一条连接,这犹如实际生活中的打电话。助于可靠性,TCP协议中涉及了诸多规则来保障通信链路的可靠性,总结起来,主要有以下几点:
      (1)应用数据分割成TCP认为最适合发送的数据块。这部分是通过“MSS”(最大数据包长度)选项来控制的,通常这种机制也被称为一种协商机制,MSS规定了TCP传往另一端的最大数据块的长度。值得注意的是,MSS只能出现在SYN报文段中,若一方不接收来自另一方的MSS值,则MSS就定为536字节。一般来讲,在不出现分段的情况下,MSS值还是越大越好,这样可以提高网络的利用率。
      (2)重传机制。设置定时器,等待确认包。
      (3)对首部和数据进行校验。
      (4)TCP对收到的数据进行排序,然后交给应用层。
      (5)TCP的接收端丢弃重复的数据。
      (6)TCP还提供流量控制。(通过每一端声明的窗口大小来提供的)

1、URG:(紧急位)


URG=1,该tcp报文为紧急报文;其中的紧急数据需要直接交付给接收端的进程,而不进入缓存。
紧急数据的长度=紧急指针;

紧急数据的起始点=序号;
紧急数据的终止点=序号+紧急指针
(综上,紧急指针就是记录紧急数据的字节数,紧急指针永远为正数)

1)在紧急数据后面的数据为普通数据,需要按序缓存
2)窗口为0也可以发送紧急数据
3)紧急数据都处理完成后,tcp就告诉进程恢复到正常操作


2、PSH:(推送位)

PSH=1,该报文希望,到达对端时,接收端不将该数据进行队列处理
将这个报文及缓存区之间缓存尚未交付的数据一并交付给进程。

1)PSH的数据=本报文数据+缓存区数据
2)PSH的方向--->单方向(接收PSH报文的一端



区别:
URG交付给进程的数据:只有紧急数据(URG是不要经过缓冲区的,千万记住

PSH交付给进程的数据:缓冲区排好序的数据及当前报文中的数据

TCP(TransmissionControlProtocol)传输控制协议

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机)ACK(acknowledgement确认)PSH(push传送)FIN(finish结束)RST(reset重置)URG(urgent紧急)Sequencenumber(顺序号码)Acknowledgenumber(确认号码)


详解TCP/IP协议的连接建立与释放

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。


由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。


1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

以下是我自己在网上找的一些关于三次握手四次挥手的状态变迁图:

1.


2.

                                                               

3.


4.




8 0
原创粉丝点击