一.Tcp的作用
1.提供面向连接,可靠的字节流服务。
a.面向连接是说,交换数据前要建立连接。
b.可靠是通过把数据分割成数据块,以及超时重发的机制。
c.字节流是指程序之间的数据传输是通过字节构成的字节流。
二.Tcp报文首部详解
首先来看看Tcp包首部,其中主要有端口号,数据包序号,确认序号,标记位等。
1.端口号:有源端口号和目的端口号,用于寻找发送端和接收端的应用进程,加上IP首部的源端IP及终端IP,唯一的确认一个TCP连接。
2.32为序号:标识发送的数据包的字节流。
3.32确认序号:上次成功接收的数据包的序号+1,只有ACK为1时有效。
4.标记位:URG,是指该数据比较重要,加急传送,不用排队。
ACK,确认号,为0时表面没有数据包返回。
SYN,同步号,为1时表面建立连接,比如SYN=1,ACK=0则是一个明显的建立连接的数据包(SYN攻击,伪造发送方,不断发送连接数据包,搞垮服务器)。
PSH,接收时加急传输。
RST,说明TCP出现严重的问题,要重新发送。
FIN,数据通信结束,释放连接。
三.三次握手与四次挥手
1.三次握手
a.第一次握手,客服端本来打开CLOSED状态,发送一个SYN=1,seq=x(随意的一个值),ACK=0的数据包发送连接请求,客户端进入SYN_SEND状态(A发送请求)。
b.服务端处于LISTEND状态,接收到请求后,发送一个SYN=1,ACK=1,seq=y(随意),ack=x+1,的数据包,说明自己已经收到你的请求,之后进入SYN_RECD状态(确认B收到了)。
c.客户端收到确认数据包后,再发送一个ACK=1,seq=x+1,ack=y+1的数据包,表面你的确认数据包我已经收到,我已经做好准备了,我们可以开始连接了,然后客户端进入ESTAB_LISTEND状态,准备进行数据传输(确认A也准备好了)。
d.服务端收到这个请求后也知道客户端准备好了,所以也进入ESTAB_LISTEND状态,准备进行数据传输。
2.四次挥手
1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态,Server到Client还可以发。
2.第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
3.第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
4.第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,四次挥手。
四.TCP和UDP的区别与使用
1.TCP的优缺点
优点:可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
缺点:TCP的缺点: 慢,效率低,占用系统资源高,易被攻击。
2.UDP的优缺点
优点: 快,比TCP稍安全。
缺点:不可靠,容易丢包。
3.应用场景
TCP:比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
UDP:QQ语音 QQ视频 TFTP 。
原文地址:https://www.cnblogs.com/JimmyFanHome/p/9910340.html