TCP (Transport Control Protocol)传输控制协议:
1、TCP数据包的分组格式:
A,源端口:标识源端应用进程。
B, 目的端口:标识目的端应用进程。
C, 序号:在SYN标志未置位时,该字段指示了用户数据区中第一个字节的序号;在SYN标志置位时,该字段指示的是初始发送的序列号。
D,确认号:用来确认本端TCP实体已经接收到的数据,其值表示期待对端发送的下一个字节的序号,实际上告诉对方,在这个序号减1以前的字节已正确接收。
E, 数据偏移:表示以32位字为单位的TCP分组头的总长度,用于确定用户数据区的起始位置。
F, URG:紧急指针字段有效。
G,ACK:确认好有效。
H,PSH:Push操作。TCP分组长度不定,为提高传输速率,往往要收集到足够的数据后才发送。这种方式不适合实时性要求很高的应用,因此,TCP提供“Push”操作,以强迫传输当前的数据,不必等待缓冲区满才传输。
I, RST:连接复位,重新连接。
J, SYN:同步序号,该比特置位表示连接建立分组。
K,FIN:字符串发送完毕,没有其它数据需要发送,该比特置位表示连接确认分组。
L, 窗口:单位是字节,指明该分组的发送端愿意接收的从确认字段中的值开始的字节数量。
M, 校验和:对TCP分组的头部和数据进行校验。
N,紧急指针:指出窗口中紧急数据的位置(从分组序号开始的正向位移,指向紧急数据的最后一个字节),这些紧急数据应优先于其它的数据进行传输。
O,任选项:用于处理一些特殊情况。目前被正式使用的选项字段可用于定义通信过程中的最大分组长度,只能在连接建立时使用。
P, 填充:用于保证任选项为32bit的整数倍。
2、TCP三次握手、四次断开的机制:
三次握手:
第一次握手:客户端发送一个SYN(包含有同步序列号的标志位的数据段和通信请求)给服务器,然后等待服务器的回发确认信息
第二次握手:服务器发送一个SYN-ACK给客户端,确认已经收到客户端发来的信息
第三次握手:客户端接收到服务器发来的确认信息后,再回馈一个ACK给服务器,此时就可与服务器建立可靠的连接
ACK:TCP数据包首部中的确认标志,对已接收到的TCP报文进行确认。
SYN:SYN是TCP/IP建立连接时使用的握手信号。
四次断开:
因为TCP/IP的连接是全双工的,所以每个方向都要单独进行关闭。
每当TCP单方向上的数据传输过后,都会再送一个FIN过去,告诉对方我这方向上的数据将要关闭了,请你做好准备哦。当对方接到FIN后就会通知应用层TCP连接已经终止了这一方向上的数据的传输。发送FIN通常是应用层进行关闭的结果。
第一次:客户端向服务器发送数据后,将FIN置1,告诉它我将要关闭这一方向上的数据连接。
第二次:服务器接受到FIN后,关闭该方向上的数据的连接。将ACK置1,告诉客户端我已经接收到你的信息并以处理。
第三次:向客户端申请反方向上的数据连接的断开。将FIN置1。
第四次:客户端接到服务器发来的申请,将ACK置1,双方同时关闭连接。
UDP(User Datagram Protocol)用户数据报协议:
UDP首部字段由4个部分组成,其中两个是可选的。各16bit的来源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和数据部分一起做校验和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。
3、与TCP包的不同之处:
无需三次握手四次断开,传输速度相对于TCP极快,不确定性,甚至可以不需要应答,没有TCP数据包的安全性,有丢包现象。
UDP数据包格式
UDP数据报格式有首部和数据两个部分。首部很简单,共8字节。包括:
◆
源端口(Source Port):2字节,源端口号。
◆
目的端口(Destination Port ):2字节,目的端口号。
◆
长度(Length):2字节,UDP用户数据报的总长度,以字节为单位。
◆
检验和(Checksum):2字节,用于校验UDP数据报的数字段和包含UDP数据报首部的“伪首部”。其校验方法同IP分组首部中的首部校验和。
伪首部,又称为
伪包头(Pseudo Header):
是指在TCP的分段或UDP的数据报格式中,在数据报首部前面增加源IP地址、目的IP地址、IP分组的协议字段、TCP或UDP数据报的总长度等共12字节,所构成的扩展首部结构。此
伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。