TCP的三次握手

本文深入解析TCP/IP协议,阐述IP协议的无连接特性及其如何降低网络需求,详细讲解TCP协议的面向连接、可靠性及字节流传输原理。通过实例说明序列号、确认号在数据传输中的作用,以及三次握手建立连接的必要性和隐患。

ip协议是无连接的通信协议,他不会占用两个正在通信的计算机通信线路,这样ip就降低了对网络线路的需求,每条线都可以满足计算机不同的通信需要,通过lp其他消息或者数据,会被分割成较小的独立的包,并通过internet在网络之间传送,ip负责将包路由到目的地,但是ip协议没有确认数据包是否按顺序发送,或者包是否被破坏,所以ip数据包不可靠,需要由他的上层协议作出控制

传输控制协议tcp(Transmission Control Protocol)简介:

  • 面向连接,可靠的,基于字节流的传输层通信协议
  • 数据传输时,应用层向tcp发送数据流,tcp将数据流分割成报文段,并发送给目标节点的tcp层,数据包的大小受计算机的链路层的最大传输单元及mpu的限制,最后tcp将结果包传给ip层,由他来通过网络将包传给目标tcp层
  • tcp为保证不丢失包,就给每一个包一个序号,即sequenceNumber,同时序号也保证了包的按序处理,然后接收端对已成功接受到的包,返回一个响应的确认即ack确认,如果未收到确认则重发
  • tcp使用校验和来检验数据在传输过程中是否有误

source Port 和destination port是属于传输层支持范畴的          

ip层的IP地址可以唯一标识主机,tcp协议 端口号可以可以唯一标示主机中的一个进程,我们就可以通过IP地址+协议+端口号组合的唯一标示,去标识网络中的一个进程,在某些场合也将这种唯一标示成为套接字(socket)

acknowledge Number是希望收到的下一个报文的第一个字节的序号。比如B接受到了A发送过来的报文,其序列号字段是301,而数据长度是200字节,这表明 B接受到了A发送的到序号500的数据 ,因此B希望收到A的下一个字节的序号是501,于是B发送给A的确认报文段时,会把ACK确认号置为501。

当应用程序想通过tcp与另外一个程序通信时,这个请求必须被送到一个确切的地址,在双方握手之后,tcp将在两个应用之间全双工的通信,这个将占用两个计算机之间的线路,直到被谋一方或者双方关闭位为止。全双工是指:双方都可以相互发送信息

                                                                                                                                                                                                                                                       

为什么需三次握手才能将连接建立起来?

主要是为了初始化SequenceNumber的初始值

首次握手的隐患

问题起因分析:     

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

基于模拟退火的计算器 在线运行 访问run.bcjh.xyz。 先展示下效果 https://pan.quark.cn/s/cc95c98c3760 参见此仓库。 使用方法(本地安装包) 前往Releases · hjenryin/BCJH-Metropolis下载最新 ,解压后输入游戏内校验码即可使用。 配置厨具 已在2.0.0弃用。 直接使用白菜菊花代码,保留高级厨具,新手池厨具可变。 更改迭代次数 如有需要,可以更改 中39行的数字来设置迭代次数。 本地编译 如果在windows平台,需要使用MSBuild编译,并将 改为ANSI编码。 如有条件,强烈建议这种本地运行(运行可加速、可多次重复)。 在 下运行 ,是游戏中的白菜菊花校验码。 编译、运行: - 在根目录新建 文件夹并 至build - - 使用 (linux) 或 (windows) 运行。 最后在命令行就可以得到输出结果了! (注意顺序)(得到厨师-技法,表示对应新手池厨具) 注:linux下不支持多任务选择 云端编译已在2.0.0弃用。 局限性 已知的问题: - 无法得到最优解! 只能得到一个比较好的解,有助于开阔思路。 - 无法选择菜品数量(默认拉满)。 可能有一定门槛。 (这可能有助于防止这类辅助工具的滥用导致分数膨胀? )(你问我为什么不用其他语言写? python一个晚上就写好了,结果因为有涉及json读写很多类型没法推断,jit用不了,算这个太慢了,所以就用c++写了) 工作原理 采用两层模拟退火来最大化总能量。 第一层为三个厨师,其能量用第二层模拟退火来估计。 也就是说,这套方法理论上也能算厨神(只要能够在非常快的时间内,算出一个厨神面板的得分),但是加上厨神的食材限制工作量有点大……以后再说吧。 (...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值