计算机网络—TCP与UDP
计算机网络—TCP与UDP
TCP UDP六大区别
1.从连接方面:tcp面向连接(call之前建立连接),udp无连接;
2.可靠方面:tcp可靠交付(无差错、不丢失不重复、按序到达),udp尽最大努力交付,不保证可靠;
3.面向什么:tcp面向字节流,udp面向报文;
4.连接方式:tcp点对点,udp支持一对一、一对多、多对一、多对多;
5.开销:tcp开销20个字节,udp开销8个字节;
6.信道:tcp全双工,udp不可靠信道;
TCP连接-三次握手
1.A->B:发送请求报文段:SYN=1,ACK=0,***seq=x;
2.B->A:同意请求:SYN=1,ACK=1,***seq=y,确认号发出期待收到的***ack=x+1;
3.A->B:收到确认:SYN=0,ACK=1,seq=x+1,ack=y+1;
最后,B收到A的确认报文,建立连接,双方可以双向通信了。
为什么要三次握手呢?两次不行吗?
答案:为了防止失效的连接请求到达服务器,让服务器错误的打开,占用服务器资源
举个例子:A发送了一个请求连接给B,没有丢失和滞留,延误到连接释放的时候到达B,B以为A的请求又来了,就向A发送同意请求的报文,同意连接。如果不是三次握手,连接就建立了!由于A并没有建立,就不会理踩B的确认,B一直以为A建立了连接,在等A的数据,B的资源就浪费了…
三次握手:B收不到A的确认,就知道A没有建立连接了。
TCP释放-四次挥手
1.A->B:客户端申请连接关闭报文段:FIN=1,seq=u
2.B->A:同意释放,确认报文段:ACK=1,***seq=v,确认号发出期待收到的***ack=u+1;
…此时A不可以传送数据到B,B仍然可以传送数据到A,A也会接收。
3.B>A:服务器端申请连接关闭报文段:FIN=1,ACK=1,seq=w,ack=u+1;
4.A->B:确认报文段,等待2MSL后释放:ACK=1,***seq=u+1,ack=w+1;
为什么要等待2个报文最大生存时间?
两个原因:
1⃣️ 确保最后一个确认报文段能到达B,若B未收到还会发送请求释放报文,再启动2MSL计时器;
2⃣️ 为了让本连接中的所有报文段从网络中消失,防止在下一连接中出现就报文。
TCP拥塞控制
待补充