TCP/IP协议
- IP 用于网络寻址
- TCP 协议 绑定端口号 应用间通信
在OSI 7层模型bai中的TCP协议工作在传输层(第4层);在TCP/IP协议栈中,其工作在传输dao层(第3层)
三次握手过程
- client端发发起连接请求, 设置报文头标志位SYN=1,并发送一个数据包seq,seq值为一个随机数值J ,发送之后client状态变成SYN_SEND(等待server端确认收到请求及数据)
- server端收到来自client端的连接请求后设置标志位ACK=1,并发送一个数据包给client端,数据包包括ack=接受到的seq值+1J+1),设置seq值为随机数K,服务端进入SYN_REVD状态(收到连接请求)
- client 收到server端发送的报文,状态变成 ESTABLISHED,发送报文给server 端,设置标志位ACK=1,发送数据包ack = K+1,server端收到报文 ,验证ack数据正确性,可以开始传输数据了, 状态变成 ESTABLISHED
个人理解:
- 关于协议,无非是两个端建立一套共同的规则
- 第一次握手,客户端通知服务端,“我要发请求了”,带一个数据包过去,服务端可以利用这个数据包确认自己收到数据了
- 第二次握手,服务端通知客户端,“我收到你的请求了”,将客户端带过来的参数(seq)+1返回给他,并额外生成一个随机参数(ack)给客户端
客户端可以根据这个seq+1的值确认服务端接收到的数据没错,ack参数肯定是为了后续自己验证 自己给客户端发送的数据正确性(完整性) - 第三层握手,客户端收到服务端应答后验证数据正确性 ,然后给服务端发送确认 “我给你发的数据(J)是对的 ,这是你给我发的数据(K)你看对不对“,服务端收到后验证K+1,“对对对,可以开始数据传输了”,服务端开始允许接受数据了
相关概念
- ACK、SYN 为TCP报文头标志位
- seq、ack 为发送的数据包
TCP 报文6个标志位:
- URG:紧急标志。紧急标志为"1"表明该位有效。
- ACK:确认标志。表明确认编号栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
- PSH:推标志。该标志置位时,接收端不将该数据进行队列处理,而是尽可能快地将数据转由应用处理。在处理Telnet或rlogin等交互模式的连接时,该标志总是置位的。
- RST:复位标志。用于复位相应的TCP连接。
- SYN:同步标志。表明同步序列编号栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
- FIN:结束标志。
关于四次挥手
以为服务端要给客户端发送数据 服务端接受到关闭连接请求后,会发送一次请求给客户端“好的我知道了,等我传完数据就关”,待数据传完,服务端发送关闭请求给客户端,服务端关闭