TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、ICMP等许多协议。
TCP:应用程序之间通信
IP:计算机之间的通信
UDP:应用程序之间的简单通信
ICMP:ping
ARP:将ip地址转换成mac地址
共定义了四层,和 OSI参考模型的分层有对应关系。
是一种面向连接的、可靠的、基于字节流的传输层通信协议。
1.工作在传输层
2.面向连接协议
3.全双工协议
4.半关闭
5.错误检查
6.将数据打包成段,排序
7.确认机制
8.数据恢复,重传
9.流量控制,滑动窗口
源端口、目标端口:源计算机上的应用程序的端口号,占16位(bit)
序列号:表示本报文段所发送数据的第一个字节的编号。
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号:传输是否有问题?
数据偏移/首部长度:表示TCP报文段的首部长度,共4位,最大支持60字节。
控制位:
URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
SYN:在建立连接时使用,用来同步序号。
FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
窗口大小:TCP流量控制,表示目前还有多少空间
校验和:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置
可选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
过程:PC1想和PC2建立连接,PC1会发送syn=1(同步位),序号为随机数X的报文给PC2,PC2收到PC1的报文会回复一个syn+ack报文给PC1,该报文序号为随机生成的y,确定号为x+1(ack=x+1),syn(同步位)=1,ack(确认位)=1.PC1收到PC2同意建立连接的报文,会回复一个ACK报文,该报文序号为x+1,确认号为y+1 ack(确认位)=1,这样PC1和PC2就建立连接了。
第一次握手:客户端将标志位SYN设置为1,随机产生一个Seq=x,向服务端发送请求连接。此时客户端处于同步已发送状态(SYN-SEND),等待服务端响应。
第二次握手:服务端收到请求之后,由标志位SYN知道客户端请求建立连接。服务端将标志位SYN和ACK都置为1,随机产生一个Seq=y,Ack=x+1,再发送数据包给客户端以确认连接请求,此时服务端处于同步已接收状态(SYN-RCVD)。
第三次握手:客户端收到请求之后,检查ACK是否为1,Ack是否为x+1,如果是则将标志位ACK置为1,Ack=y+1,并将该数据包发送给服务器,服务器检查ACK是否为1,并且Ack是否为y+1,如果正确则建立连接成功。客户端和服务端进入连接已建立状态(ESTABLISHED),可以进行数据传输。
由于TCP连接是全双工的。因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,(客户端)发送一个FIN来终止这一方向的连接,(服务端)收到一个FIN只是意味着(客户端)这一方向上没有数据流动了,即(客户端)不会再收到数据,但是在这个TCP连接上(服务端)仍然能够发送数据,直到(服务端)这一方向也发送了FIN。
首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
第一次挥手:客户端发送一个FIN/ACK报文,用来关闭客户端到服务端的数据传送,客户端进入终止等待1(FIN_WAIT_1)状态。
第二次挥手:服务端收到FIN后,发送一个ACK报文给客户端,确认序号Ack为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入关闭等待(CLOSE_WAIT)状态。
第三次挥手:服务端发送一个FIN+ACK报文,用来关闭服务端到客户端的数据传送,服务端进入最后确认(LAST_ACK)状态。
第四次挥手:客户端收到FIN后,客户端进入时间等待(TIME_WAIT)状态,接着发送一个ACK给服务端,确认序号为收到序号+1,服务端进入关闭(CLOSED)状态,完成四次挥手。
UDP协议是无连接、不保证可靠性的传输层协议。发送端不关心发送的数据是否到达目标主机、数据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障。传输数据速度更快,效率更高。
工作在传输层、提供不可靠的网络访问、非面向连接协议、有限的错误检查、传输性能高、无数据恢复特性。