TCP三次挥手、数据传输、四次握手与UDP

一、传输控制层

首先是遵循http协议才能连接

什么是TCP?

1、面向连接的---》双方经过了三次握手开辟了资源才叫链接

2、可靠的传输

什么是链接?--->三次握手

传输控制层客户端api发出的第一个包 syn,

百度那边收到了,就会给回一个确认的包(syn+ack(确认))

api 会再次发一个syn 这就是三次握手

为什么是三次握手?

1、客户端给服务端发送一个包syn,

2、服务端给客户端回一个包syn+ack(这表示客户端的输入输出是通的)

3、客户端收到后还需要再给服务端发送一个ack包 让服务段知道他的通信(输入输出也是同的),这种确认机制,就是面向连接的、可靠的传输

三次握手之后,就可以数据发送了(我发你接,你回我收)

中间是数据交互往来,比如客户端访问百度页面

1、客户端给服务端发送请求数据

2、服务端给客户端回响应数据

防止丢包 乱序等问题,

tcp为每一个链接建立了一个发送缓冲区

发送数据时,从发送缓冲区取出一部分数据组成发送报文,而tcp协议会有序列号和长度 

也就是 报文=序列号+长度+数据内容

回复确认ack = 序列号+长度 = 下一包的起始序列号

这种一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以一次发送连续的夺宝数据,接收端只需要回复一次ACK就可以了

这样发送端可以把待发送的数据分割成一系列的碎片发送到对端

对端根据序列号和长度在接收后重构出来完整的数据

假设丢失了某些包,在接收端可以要求发送端重传,比如丢失了100-199这100个字节,接收端向发送端发送ACK=100的报文发送端收到后重传这一包数据,接收端进行补齐,以上过程不区分客户端和服务端,对于两端来说均采用这个机制

数据发送完毕后,还有四次挥手

为什么要四次挥手?

涉及到了socket,套接字,唯一表示 ip+port(ip客户端,port 端口号(进程):ip+port(服务客户端,port 端口号(进程)),而操作系统可以分配的端口号是65535个

面试题:客户端A:80 与 一个服务端的进程(百度)B80,最多可以建立65535个链接!

客户端A:80 与一个服务端的进程QQ C80 同样最多是可以连理65535个链接,这是套接字,4个因素的呢

这就是说双方要同时释放资源,而不是单方面释放资源

1、客户端想要结束就会给服务端发一个fin包(我要准备和你分手了),自己进入终止等待1状态

2、服务端会给客户端回一个ack包(服务端表示我知道了)表示进入关闭等待状态(客户端进入终止等待2状态),服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据后

3、当服务端数据传完了后,服务端回给客户端再次传输一个包fin,服务端进入最后确认状态

4、客户端收到服务端发送的结束包后,会再次给服务端发送一个ack包,进入超时等待状态,经过超时时间后关闭链接,而服务端收到ack包后立即关闭链接

为什么客户端要有超时等待时间:这是为了保证对方收到ACK包,如果客户端发送完最后一包ACK包就释放了链接,一旦ACK包再网络中丢失,服务端将一直停留在最后确认状态,如果客户端发送最后一包ACK包后等待一段时间,这时服务端因为没有收到ACK包会重发FIN包,客户端会响应这个FIN包,重发ACK包并刷新超时时间,这个机制和三次握手一样,是为了保证在不可靠的网络链路中进行可靠的链接断开确认 

至此双方资源都释放掉了

即:三次握手->四次数据往来->四次挥手

传输控制层是控制这个包。

二、网络层是告诉这个包怎么走

IP:一个ip地址由网络号+主机号组成的

UDP 协议:是基于非连接的,发送数据就是简单的吧数据包封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,这种简单的处理方式,导致他的性能损耗非常少,对于cpu内存资源占用少,带式丢包UDP不能保证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值