TCP(传输控制协议)
是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。
TCP报文格式
URG (紧急位): 为1表示高优先级数据包,紧急指针字段有效。
ACK (确认位): 为1表示确认号字段有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段。确认传输是否有问题
PSH (急切位): 为1表示是带有PUSH标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中
RST (重置位): 为1表示出现严重差错。可能需要重新创建TCP连接。还可以用于拒绝非法的报文段和拒绝连接请求。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
SYN (同步位): 在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
FIN (断开位): 表示通知对方本端要关闭连接了,标记数据是否发送完毕。为1表示发送方没有数据要传输了,要求释放连接。带FIN标志的TCP报文段称为结束报文段
窗口(WIN): 表示从确认号开始,本报文的发送方可以接收的字节数,即接收窗口大小。用于流量控制。需要ACK确认后才能再继续传送后面数据
校验和(Checksum): 对整个的TCP报文段,包括TCP头部和TCP数据,以16位字进行计算所得。这是一个强制性的字段。提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置
紧急指针: 本报文段中的紧急数据的最后一个字节的序号。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
互联的三次握手
当pc1想和pc2建立起连接 将 连接信息写入报文
第一步 :pc1会发送一个 建立连接的请求报文 : 这个报文中 有
-
报文的序号(seq=x)
-
同步位(请求建立连接关系: SYN=1 ACK=0 控制位:当前两台机器处于什么状态? 建立连接 处于连接 断开连接 )
第二步: 当pc2 收到消息以后 是不是要回复一个报文
-
报文的序号 (seq=y)
-
ack确认号( 我希望你下一次发送 x+1 序号的报文给你 )
-
控制位 SYN=1 ACK=1 请求建立连接 pc2 同意建立连接
第三步:收到 pc2 同意建立连接的报文后
-
会发送一个x+1报文
-
会告诉对方 我希望你下次 发送y+1的序号报文给我
-
最后 将ACK=1 封装进去
有限状态机(扩展)
1. CLOSED 没有任何连接状态
2. LISTEN 侦听状态,等待来自远方TCP端口的连接请求 (服务开启 http(进程) 80端口在帮进程 看着 有没有人找 http )
3. SYN-SENT 在发送连接请求后,等待对方确认
4. SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
5. ESTABLISHED 代表传输连接建立,双方进入数据传送状态
6. FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
7. FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
8. TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
9. CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
10. LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
11. CLOSING 双方同时尝试关闭传输连接,等待对方确认
UDP (用户数据报协议)
是一个无连接、不保证可靠性的传输层协议,位于OSI模型的传输层。该协议由David P. Reed在1980年设计且在RFC 768中被规范。