计算机网络心得-TCP基本认识

本文参考:

小林coding网站

基础知识

TCP头格式

在这里插入图片描述


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

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

控制位:

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

为什么需要 TCP 协议?

在这里插入图片描述


主要原因是IP层是「不可靠」的,不保证网络包的交付、不保证网络包的按序交付、不保证网络包数据中的完整性。

TCP就承担了「可靠传输」的任务,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的

什么是TCP协议?

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

  1. 面向连接:一对一的连接。
  2. 可靠的:通过复杂的控制机制,它能确保接收端接收的网络包是无损坏、无间隔、非冗余和按序的。
  3. 字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,接收端需要知道「消息的边界」,从而可以组合读取出一个有效的信息。

TCP连接

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

  • 源地址
  • 源端口号
  • 目的地址
  • 目的端口号

源地址和目的地址的字段(32位)是在IP头部中,作用是通过 IP 协议发送报文给指定主机。
源端口和目的端口的字段(16位)是在 TCP 头部中,作用是通过TCP 协议把报文发给指定进程。

问题:当一个服务器监听了一个端口,他的TCP连接最大是多少?

服务器有固定的IP地址和固定的端口号,在IPv4中,理论上客户端的IP地址可以达到232
个,端口数量达到216个,因此最大 TCP 连接数可以有248 种可能性。然而这还需要考虑服务端的并发性能限制:

  • 文件描述符的限制,Linux在系统级、用户级、进程级上都限制了可打开文件的最大数量。
  • 内存限制,每个TCP连接都会占用一定内存,而操作系统的内存是有限的。

UDP和TCP的区别

UDP头部只有8个字节(64位)

在这里插入图片描述


目标和源端口:主要是告诉 UDP 协议应该把报文发给哪个进程。
包长度:该字段保存了 UDP 首部的长度跟数据的长度之和
校验和:校验和是为了提供可靠的 UDP 首部和数据而设计,防止收到在网络传输中受损的 UDP包。

TCP和UDP的区别:

  1. 连接
    TCP 是面向连接的传输层协议,传输数据前先要建立连接。
    UDP 是不需要连接,即刻传输数据。

  2. 服务对象
    TCP 是一对一的两点服务,即一条连接只有两个端点。
    UDP 支持一对一、一对多、多对多的交互通信。

  3. 可靠性
    TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
    UDP 是尽最大努力交付,不保证可靠交付数据。

  4. 拥塞控制、流量控制
    TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
    UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

  5. 首部开销
    TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
    UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

  6. 传输方式
    TCP 是流式传输,没有边界,但保证顺序和可靠。
    UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

  7. 分片不同*
    TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
    UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

其中第7点还有一定疑问,需要继续阅读小林计网的基础篇加深理解。

为什么 UDP 头部没有「首部长度」字段,而 TCP 头部有「首部长度」字段呢?

TCP头部有可变长的「选项」字段,而UDP首部长度固定为8字节。

为什么 UDP 头部有「包长度」字段,而 TCP 头部则没有「包长度」字段呢?

TCP负载数据的计算公式为:IP总长度- IP首部长度- TCP首部长度,UDP照理来说也可以这么算,但是估计是为了让首部长度是4字节的整数倍,就把这个字段加上了。

TCP和UDP应用场景

TCP面向连接,并且能保证数据的可靠传输,常用于:

  • FTP文件传输
  • HTTP/HTTPS

UDP不面向连接,并且简单高效,常用于:

  • 包总量较少的通信,如 DNS 、SNMP 等;
  • 视频、音频等多媒体通信;
  • 广播通信;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340