三次握手和四次挥手

Host To Host:为应用提供应用之间通信的能力
连接:网络行为状态的记录
会话:会话是应用层的行为
全双工:任何时刻数据都可以双向传输,客户端和服务端可以平等的发送信息。
可靠性:数据保证无损传输

TCP是连接导向的,握手是建立连接,挥手是断开连接。
如果一个Host主动向另一个Host发起连接,称为SYN,请求同步
如果一个Host主动断开请求,称为FIN,请求完成。
如果一个Host 给另一个Host发送数据,称为PSH,数据推送。
三次握手:

要保证连接和可靠性约束,TCP协议要保证每一条发出的数据给返回,返回数据叫作ACK

在这里插入图片描述

1.客户端向服务端发送SYN,请求同步  //第一次握手
2.服务端准备好进行连接 
3.服务端向客户端返回一个ACK 
4.服务端向客户端发送SYN,请求同步 //第二次握手 3.4.同时发生,合并成一条SYN-ACK响应,传递给客户端
5.客户端准备就绪
6.客户端向服务端发送一个ACK//第三次握手

四次挥手
在这里插入图片描述

1.客户端要求断开连接,发送一个FIN
2.服务端收到请求,返回一个ACK
3.服务端经过一个等待,确定可以关闭连接,发送一条FIN给客户端
4.客户端收到FIN,处理完自己的事情后,再给服务端发送ACK

Question:一台内存8G左右的服务器,可以同时维护多少个连接?

TCP的拆包和粘包
一次传输数据太大,出错的概率越大;网络中存在着并行路径,拆分数据包就能更好利用并行的路径。

在传输层不能封包太大

拆包:降低整体任务出错的概率,减小底层网络的压力,TCP协议会将数据拆分成不超过缓冲区大小的一个个部分,每部分就叫TCP段
粘包:为了防止数据量过小,导致大量传输,将多个数据合并成一个TCP段发送

Seq和ACK是保证可靠传输的两个关键,tcp利用发送字节数、接受字节数的唯一性来确定封包之间的顺序关系

可靠性和控制流速都需要滑动窗口

在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,确认号是期望收到对方下一个报文段的第一个数据字节的序号。
TCP协议是如何恢复数据顺序的,TCP拆包和粘包的作用是什么?
MSS
UDP有接受缓冲区,没有发送缓冲区。因为发送方不关心对方是否接受到,接受方可以接受多个UDP数据接受多个,但不能保证接受的顺序。
UDP的socket既能读也能写,全双工。
UDP协议的首部

扩展:如何用UDP协议实现可靠传输?
TCP的设计原则:网络数据传输,是在保证安全的前提下,尽可能提高传输效率。安全越高,效率越低。

ACK:确认号是否有效
SYN:请求建立连接
FIN: 本端要关闭了了
(PSH类似于快递不是从卖家发到买家,而是通过仓库)
TCP安全机制
1.确认应答机制:

2.超时重传机制:数据在传输过程中,一来一回都有可能丢包。网络堵塞或者主机没有收到另一方的确认应答(发送的数据丢包或应答的数据丢包),就会进行重发。
主机B收到很多重复数据,TCP协议需要识别出哪些包是重复的包,并且把重复的包丢掉。

超时时间如何确定:
tcp为了保证在任何环境下都有较高性能的通信,会动态计算最大超时时间:一个系统初始化时确定的底数时长(如linux是500ms),每次重发,在底数的基础上*2的指数次方,累积到一定的重传次数,tcp强制关闭连接。
3.连接管理机制
连接:发送端和接受端都有本端到对方的连接状态,有方向的。

第三步中,为什么客户端没有直接设置为closed关闭连接?

第四步中的ACK可能丢包,要等待超时重传时间(2MSL),才会进入
二三步为什么没有合并数据包

系统对TCP协议实现时,接受FIN,自动返回ACK,不用执行程序代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值