TCP协议
TCP协议的报文格式(也是封装在IP数据报里的)
TCP首部介绍:
TCP字段 | 功能 |
---|---|
源端口号 | 表示发送端端口号,字段长度16位 |
目标端口号 | 表示接收端端口号,字段长度16位 |
序号 | 序列号是指发送数据的位置。每发送一次数据,就累加一次该数据字节数的大小。字段长度32位 |
确认号 | 是指期望下一次应该收到的数据的序列号。发送端接收到这个确认应答号以后就可以认为在这个序号以前的数据都已经被正常接收了。字长32位 |
首部长度 | 指出TCP报文首部含选项时的长度,没有选项时为5,字长4位 |
保留 | 该字段主要为以后扩展使用。一般设置为0. |
URG | 为1时,表示包中有需要紧急处理的数据。 |
ACK | 为为1时,确认应答的字段变为有效。TCP规定除了在最初建立连接时候的SYN包之外该位必须设置为1 |
PSH | 该位为1时,表示需要将收到的数据立刻上传给上层应用协议。PSH为0时,则不需要立即传,而是先进行缓存。 |
RST | 该位为1时,表示TCP连接出现异常,必须强制断开连接。 |
SYN | 用于建立连接。SYN为1时表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。 |
FIN | 该位为1时,表示今后都不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP段。(每个主机又对对方的FIN包进行确认应答以后就可以断开连接了。不过主机收到FIN设置为1的TCP段以后不必马上回复一个FIN包,而是可以等到缓冲区中的所有数据都因已成功发送而被自动删除之后再发。) |
窗口 | 用来让对方设置发送窗口的依据(告诉对方自己能接受多少数据),2字节 |
检验和 | 检验和字段检验的范围包括首部和数据这两个部分。在计算检验和是,要在TCP报文段的前面加上12字节的伪首部 |
紧急指针 | 指出在本报文段紧急数据共多少个字节(紧急数据放在本报文段数据最前面) |
TCP三次握手
- 第一次
第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize
Sequence Numbers)。 - 第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。 - 第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
UDP用户数据包协议
- UDP采用非连接的方式提供网络应用层的事务处理,UDP不提供可靠性,也就是说,UDP协议不提供端到端的确认和重传功能,它不保证数据包一定能送达目的地,因此称为不可靠协议。
- UDP协议是封装在IP数据包里中
UDP报文格式
UDP的校验和有一个特殊之处:
- UDP在计算校验和时,包含一个12字节的伪报头。
- 伪报头包含IP报头的源IP和目的IP,目的是让UDP检测数据确定到达正确的目的端。
- 伪报头不参与传输的。
DNS
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。DNS是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系统。DNS协议将域名转换为IP地址(也可以将IP地址转换为相应的域名地址),DNS使用UDP端口53。DNS 定义了两种报文 ,一种为查询报文;另一种是对查询报文的响应,称为响应报文。