网络原理-TCP_IP(2)

简介: 网络原理-TCP_IP(2)

TCP协议

TCP全称为"传输控制协议(Transmission Control Protocol)".协议如其名,要对数据的传输进行一个详细的控制.

TCP协议段格式

源/目的端口号:表示数据从哪个进程来,到哪个进程去.

32位序号/32位确认序号:后面详细讲.

4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个四字节);这个字段是一个16比特的字段,取值范围为0-15(即最大长度为60字节).TCP头部最小长度为20字节.

保留(6位):设定报头时,提前准备的保留位(虽不用,但先占位置),后面再使用,就可以避免tcp扩展引起的不兼容问题.

6位标志位(TCP的核心部分,后面也会讲到) :

URG:紧急指针是否有效;

ACK:确认号是否有效;

PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走;

RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段;

SYN:请求建立连接;我们把携带SYN标识的称为同步报文段;

FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段;

16位窗口大小:后面再说

16位校验和:类似于UDP校验和,但是把报头和数据载荷放在一起计算校验和.

16位紧急指针:标识哪部分数据是紧急数据.

选项:TCP报头中的前20个字节是固定长度的.后面包含"选项这部分"(可有可无,有一个也可有多个)

确认应答

注意:这个是确保可靠性的最核心的机制了.

TCP将每个字节的数据都进行了编号,即为序列号(防止出现先发后至的问题).

每一个ACK都带有确认序列号,意思是告诉发送者,我们已经收到了哪些数据;下一次从哪里开始发.

应答报文的确认序号是按照发送过去的最后一个字节的序号+1设定.

超时重传

是确认应答的补充.

整个网络中,可能存在某个路由器/交换机.某个时刻突然负载量很高,短时间可能有大量的数据要经过这个设备转发.要知道,一台设备的处理量是有限的,很可能瞬间的高负载超出了设备量的极限,此时多出来的部分就无了(丢包了).

主机A在发送数据给B时,可能因为网络拥堵等原因,数据无法到达主机B;

如果主机A在一个特定的时间间隔内没有收到B的确认应答,就会进行重发;

这种情况是接收方本来就未收到数据,此时重传理所应当,没有任何问题.

但是,主机A未收到B发来的确认应答,也可能是ACK丢失了.

因此主机B会收到很多重复数据.那么TCP协议需要能够识别出哪些包是重复的包,并且把重复的包丢弃掉,这里就引入了缓冲区的概念.

TCPsocket在内核中存在接收缓冲区(一块内存空间).发送方的数据,是要先放在缓冲区中的.然后应用程序调用read/scanner.next才能读到的数据,这里的读操作是读接收缓冲区.

当数据到达缓冲区的时候,接收方会首先判定一下看当前缓冲区中是否有这个数据了(或者这个数据曾经在缓冲区里面存在过).就直接把新来的数据丢弃了,就能确保程序调用read/scanner.next()的时候 不会出现重复数据了.

接收方是如何判定这个数据是否是"重复数据".核心的判断依据就是根据数据的序号.

1.数据还在缓冲区中,没有被read走.此时,就拿着新收到数据的序号,和缓冲区中的所有数据序号对比一下,看看有没有一样的,有一样的就是重复了,就可以把新收到的数据丢弃.

2.数据在缓冲区中,已经被应用给read走了,此时新来的数据序号无法得到.注意:应用程序在读取数据的时候,是按照序号的先后顺序连续读取的.一定是先读小的序号,后读大的序号的数据的.(可以想象为带有优先级的阻塞序列).

此时socket api就可以记录上一次读到最后一个字节的序号是多少.比如上一次读到的序号是3000,新收到的数据序号为1001,1001一定之前读过,可以将其判断为"重复的包"直接丢掉.

这样就可以利用序列号很容易做到去重的效果,

那么,超时的时间如何确定?

最理想的状态下,找到一个最小的时间,保证"确认应答一定能在这个时间内返回".

但是这个时间的长短,随着网络环境的不同,是有差异的.

如果超时的时间设置太长,会影响整体重传的效率.

如果超时的时间设置的太短,有可能会发送重复的包.

TCP为了保证无论在任何环境下都能较高性能的通信,因此会动态计算这个最大的超时时间,

1.Linux中(BSD Unix和Windows也是如此),超时以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍.

2.如果重发一次之后,仍然得不到应答,等待2 * 500ms进行重传.

3.如果仍然得不到应答,等待4*500ms进行重传,以此类推,以指数形式递增.

4.累计达到一定重传次数,TCP认为网络或者对端主机出现异常,强制关闭连接.

 

相关文章
|
22天前
|
网络协议 安全 5G
网络与通信原理
【10月更文挑战第14天】网络与通信原理涉及众多方面的知识,从信号处理到网络协议,从有线通信到无线通信,从差错控制到通信安全等。深入理解这些原理对于设计、构建和维护各种通信系统至关重要。随着技术的不断发展,网络与通信原理也在不断演进和完善,为我们的生活和工作带来了更多的便利和创新。
60 3
|
2月前
|
并行计算 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基本概念、技术原理及其潜在应用。通过对量子纠缠、量子叠加和量子隐形传态等核心概念的解释,文章展示了量子互联网如何利用量子力学特性来实现超高速、超高安全性的通信。此外,还讨论了量子互联网在金融、医疗、国防等领域的应用前景,以及当前面临的技术挑战和未来的发展方向。
71 2
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的奥秘:探索神经网络的核心原理
本文将深入浅出地介绍深度学习的基本概念,包括神经网络的结构、工作原理以及训练过程。我们将从最初的感知机模型出发,逐步深入到现代复杂的深度网络架构,并探讨如何通过反向传播算法优化网络权重。文章旨在为初学者提供一个清晰的深度学习入门指南,同时为有经验的研究者回顾和巩固基础知识。
72 11
|
4天前
|
运维 物联网 网络虚拟化
网络功能虚拟化(NFV):定义、原理及应用前景
网络功能虚拟化(NFV):定义、原理及应用前景
12 3
|
15天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
26天前
|
机器学习/深度学习 人工智能 监控
深入理解深度学习中的卷积神经网络(CNN):从原理到实践
【10月更文挑战第14天】深入理解深度学习中的卷积神经网络(CNN):从原理到实践
76 1
|
28天前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
1月前
|
存储 安全 算法
网络安全与信息安全:构建数字世界的防线在数字化浪潮席卷全球的今天,网络安全与信息安全已成为维系现代社会正常运转的关键支柱。本文旨在深入探讨网络安全漏洞的成因与影响,剖析加密技术的原理与应用,并强调提升公众安全意识的重要性。通过这些综合性的知识分享,我们期望为读者提供一个全面而深刻的网络安全视角,助力个人与企业在数字时代中稳健前行。
本文聚焦网络安全与信息安全领域,详细阐述了网络安全漏洞的潜在威胁、加密技术的强大防护作用以及安全意识培养的紧迫性。通过对真实案例的分析,文章揭示了网络攻击的多样性和复杂性,强调了构建全方位、多层次防御体系的必要性。同时,结合当前技术发展趋势,展望了未来网络安全领域的新挑战与新机遇,呼吁社会各界共同努力,共筑数字世界的安全防线。
|
1月前
|
存储 安全 自动驾驶
探索未来网络:量子互联网的原理与应用
【10月更文挑战第2天】 本文旨在探讨量子互联网的基本原理、技术实现及其在通讯领域的革命性应用前景。量子互联网利用量子力学原理,如量子叠加和量子纠缠,来传输信息,有望大幅提升通信的安全性和速度。通过详细阐述量子密钥分发(QKD)、量子纠缠交换和量子中继等关键技术,本文揭示了量子互联网对未来信息社会的潜在影响。
|
15天前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9-2):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!

热门文章

最新文章