3.简易版TCP,UDP

 

 TCP和UDP的区别在于一个基于连接一个基于非链接

 

 

 

 三次握手

 

为什么要三次握手而不是两次握手

数据包syn1因为某些网络原因滞留在中间,客户端因没有收到回应,因此会重发syn包也是就syn2

 

这次的包正常发送,并且服务端回复了SYN+ACK包之后建立起了连接

 

 

 而后第一包阻塞的网络连接突然恢复,SYN1又传递到了服务端,此时服务端认为是客户端发起的新连接

 

 

 

从而在两次握手之后进入了等待数据的状态,服务端任务是两个连接而客户端认为是一个连接

如果在三次握手的情况下,服务端借不到最后的ack包不会认为是连接状态,自然不会认为连接成功

 

对于下图的理解、

1.经过三次握手之后,客户端和服务端都进入了数据传输状态,一包数据可能被拆成多包数据发送,如何解决丢包问题和乱序问题?

2.TCP协议为每一个连接建立了一个发送缓冲区,第一个字节的序列号为0,往后累加1

3. 发送数据的时候,在发送缓冲区取一部分数据组成发送报文,在其TCP协议头中附带序列号和长度

4. 接受端在接收到数据后需要回复确认报文ACK=序列号+长度=下一包数据起始序列号

5.发送端可以一次性发送多包数据,接收端只需要回复一次ACK就可以了

6.发送端可以把待发送的数据分割成一些列碎片,发送到对段,对段根据序列号和长度,在接收后重构出来完整的数据,假设其中丢失了某些数据包,

接收端可以要求发送端重传,比如丢失了100-199,接收端向发送端发送ACK=100的报文,发送端收到之后重传这一包数据,接收端进行补齐

7.以上的过程不区分客户端和服务端,TCP连接是全双工的,对于两端来说均采用上述的机制

 

 

 四次挥手

 

 为什么客户端需要等待超时时间

是为了保证对方收到了ACK包,假如客户端发送了ACK包后立马关闭,一旦ACK包在网络中丢失服务端将一直停留在最后确认状态

如果服务端没有收到ack包会重发fin包客户端则会重发ack包并且重新刷新超时时间

UDP协议

TCP适合传输文件,发送邮件,浏览网页等

UDP只会把数据包封装一下直接从网卡上发出去就行了,数据包之间并没有状态上的联系适用于域名查询,语音通话,视频直播,隧道网络

 

posted @ 2021-07-12 21:17  一拳超人的逆袭  阅读(46)  评论(0编辑  收藏  举报