(学习笔记)TCP基础知识

 什么是TCP?

TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。

  • 面向连接:一定是[一对一]才能连接,不能像UDP协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;
  • 可靠的:无论网络链路中出现了怎样的链路变化,TCP都可以保证一个报文一定能够到达接收端
  • 字节流:用户消息通过TCP协议传输时,消息可能会被操作系统[分组]成多个TCP报文,如果接收端不知道消息的边界,是无法读出一个有效的用户消息的。并且TCP报文是[有序的],当前一个TCP报文没有收到的时候,即使它先收到了后面的TCP报文,那么也不能扔给应用层去处理,同时对[重复]的TCP报文会自动丢弃。

TCP头格式

序列号:在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,每发送一次数据,就累加一次该数据字节数的大小。用来解决网络包乱序的问题

确认应答号:指下一次期望收到的数据的序列号,发送端收到这个确认应答后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题

控制位

  • ACK:该位为1时,确认应答的字段变为有效,TCP规定除了最初建立连接时的SYN包之外该位必须设置为1.
  • RST:该位为1时,表示TCP连接中出现异常必须强制断开连接。
  • SYN:该位为1时,表示希望建立连接,并在其序列号的字段进行序列号初始值的设定
  • FIN:该位为1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以互相交换FIN位为1的TCP段。

为什么需要TCP,TCP工作在哪一层?

IP层是[不可靠]的,它不保证网络包的交付、不保证网络包的按序交付、也不保证网络包中的数据的完整性。

如果需要保障网络数据包的可靠性,那么就需要由上层(传输层)的TCP协议来负责。

因为TCP是一个工作在传输层可靠数据传输的服务,它能确保接收的网络包时无损坏、无间隔、非冗余和按序的。


TCP连接

1. 什么是TCP连接?

简单来说就是,用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括Socket、序列号和窗口大小称为连接。

 所以,建立一个TCP连接时需要客户端与服务端达成上述三个信息的共识。

  • Socket:由ip地址和端口号组成
  • 序列号:用来解决乱序问题
  • 窗口大小:用来做流量控制

2. 如何确定一个TCP连接?

TCP四元组可以唯一地确定一个连接,四元组包括:

源地址目标地址的字段(32位)是在IP头部中,作用是通过IP协议发送报文给对方主机。

源端口目标端口的字段(16位)是在TCP头部中,作用是告诉TCP协议应该把报文发送给哪个进程

有一个IP的服务端监听了一个端口,它的TCP最大连接数是多少?

理论计算公式:最大TCP连接数 = 客户端IP数 X 客户端的端口数

对于IPV4,客户端IP数量最多为2的32次方,客户端的端口数量最多为2的16次方,也就是服务端单机最大TCP连接数约为2的48次方(目标地址与目标端口共48位)

当然,服务器最大并发TCP连接远不能达到理论上限,会受以下因素影响:

  •  文件描述符限制:每一个TCP连接都是一个文件,如果文件描述符被占满了,就会发生Too many open files.linux可对打开的文件描述符的数量分别做了三个方面的限制:
    • 系统级:当前系统可打开的最大数量,通过cat /proc/sys/fs/file-max查看;
    • 用户级:指定用户可打开的最大数量,通过cat /etc/security/limits.conf查看;
    • 进程级:单个进程可打开的最大数量,通过cat /proc/sys/fs/nr_open查看;
  • 内存限制,每个TCP连接都要占用一定内存,操作系统的内存是有限的,如果内存资源被占满后,会发生OOM。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/27113.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Appium python 框架

目录 前言 流程 结构 具体说说 run.py 思路 其他模块 前言 Appium是一个开源的移动应用自动化测试框架,它允许开发人员使用多种编程语言(包括Python)来编写自动化测试脚本。Appium框架提供了一套API和工具,可以与移动设备进…

flutter 自适应宽高气泡框,聊天气泡框

先看效果 前言:::: 网上好多气泡框,都让写固定宽高,无法自适应文本内容。 还有的就是通过算child 然后动态计算气泡框宽高,脱裤子💨,放到listview 刷新数据还会丢ui&am…

xss跨站脚本攻击总结

XSS(跨站脚本攻击) 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets )CSS的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当…

mybatis-plus 支持不同数据源sql切换

mybatis-plus 支持不同数据源sql切换 本篇内容主要讲解的是mybatis-plus 支持不同数据源sql切换 直接上代码 1、结构代码 2、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactI…

用html+javascript打造公文一键排版系统6:三级标题排版

正文中的标题分为四级&#xff0c;文中结构层次序数依次可以用“一、”“&#xff08;一&#xff09;”“1.”“&#xff08;1&#xff09;”标注&#xff1b;一般第一层用黑体字、第二层用楷体字加粗、第三层和第四层用仿宋体字标注。 对于以阿拉伯数字开头、后接英文点号.及…

2019年 iMac 21.5寸升级内存条和硬盘

硬件更换 CPU&#xff1a;i5-8500&#xff0c;最高可换到i7&#xff0c;算了&#xff0c;挤牙膏厂&#xff0c;性能提升不如换内存和SSD&#xff0c;i9散热不太好&#xff08;主要是穷&#xff09;显卡&#xff1a;焊在里面换不了&#xff08;外置显卡&#xff0c;主要是穷&am…

Prometheus实现钉钉报警

1、Prometheus实现钉钉报警 1.1 Prometheus环境 # my global config global:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute…

opencv -10 基础运算之 图像加权和(图像融合图像修复视频合成)

什么是图像加权和&#xff1f; 所谓图像加权和&#xff0c;就是在计算两幅图像的像素值之和时&#xff0c;将每幅图像的权重考虑进来&#xff0c;可以用公式表示为&#xff1a; dst saturate(src1 &#x1d6fc; src2 &#x1d6fd; &#x1d6fe;)式中&#xff0c;satu…

Elasticsearch:语义搜索、知识图和向量数据库概述

结合对你自己的私有数据执行语义搜索的概述 什么是语义搜索&#xff1f; 语义搜索是一种使用自然语言处理算法来理解单词和短语的含义和上下文以提供更准确的搜索结果的搜索技术。 这种方法基于这样的想法&#xff1a;搜索引擎不仅应该匹配查询中的关键字&#xff0c;还应该尝…

C# Sdcb.Paddle2Onnx Paddle模型通过C#转换为ONNX模型

https://github.com/sdcb/PaddleSharp/blob/feature/2.5/docs/paddle2onnx.md 效果 项目 代码 using Sdcb.Paddle2Onnx; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing…

代码随想录算法训练营day6 | 242. 有效的字母异位词,349. 两个数组的交集,202. 快乐数,1. 两数之和

目录 242. 有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和 242. 有效的字母异位词 242. 有效的字母异位词 难度&#xff1a;easy 类型&#xff1a;哈希表 思路&#xff1a; 代码&#xff1a; class Solution {public boolean isAnagram(String s, St…

STM32(HAL库)驱动GY30光照传感器通过串口进行打印

目录 1、简介 2、CubeMX初始化配置 2.1 基础配置 2.1.1 SYS配置 2.1.2 RCC配置 2.2 软件IIC引脚配置 2.3 串口外设配置 2.4 项目生成 3、KEIL端程序整合 3.1 串口重映射 3.2 GY30驱动添加 3.3 主函数代 3.4 效果展示 1、简介 本文通过STM32F103C8T6单片机通过HAL库方…