首页 > 其他分享 >TCP 基本认识

TCP 基本认识

时间:2022-12-04 16:01:06浏览次数:40  
标签:基本 UDP 认识 IP 报文 端口 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 ?

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

  • 面向连接:一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;

  • 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;

  • 字节流:用户消息通过 TCP 协议传输时,消息可能会被操作系统「分组」成多个的 TCP 报文,如果接收方的程序如果不知道「消息的边界」,是无法读出一个有效的用户消息的。并且 TCP 报文是「有序的」,当「前一个」TCP 报文没有收到的时候,即使它先收到了后面的 TCP 报文,那么也不能扔给应用层去处理,同时对「重复」的 TCP 报文会自动丢弃。

四、什么是 TCP 连接?

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

 

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

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

五、如何唯一确定一个 TCP 连接呢?

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

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

 

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

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

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

服务端通常固定在某个本地端口上监听,等待客户端的连接请求。

因此,客户端 IP 和 端口是可变的,其理论值计算公式如下:

 

对 IPv4,客户端的 IP 数最多为 2 的 32 次方,客户端的端口数最多为 2 的 16 次方,也就是服务端单机最大 TCP 连接数,约为 2 的 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。

六、UDP 和 TCP 有什么区别呢?分别的应用场景是?

UDP 不提供复杂的控制机制,利用 IP 提供面向「无连接」的通信服务。

UDP 协议真的非常简,头部只有 8 个字节( 64 位),UDP 的头部格式如下:

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

(一)TCP 和 UDP 区别:

 

标签:基本,UDP,认识,IP,报文,端口,TCP,连接
From: https://www.cnblogs.com/imreW/p/16950020.html

相关文章

  • 四种常见触发器(RS触发器、JK触发器、D触发器、T触发器)的基本逻辑及其状态
    0 前言有记忆功能的逻辑单元的重要性:保存数字电路的运算结果;在由时钟控制的电路中,在两个时钟脉冲间隔,保持电路状态不变。“触发器”可以存储信息:①有0,1可以保持稳定......
  • 在 Linux 命令行中使用 tcpdump 命令分析网络数据
    在Linux命令行中使用tcpdump命令分析网络数据该文章作者是刘光录,TIAP收录于合集#Linux143个tcpdump 是分析网络和排查网络问题的一个很好用的工具,它通过抓取数据包,显......
  • 1.mysql的基本操作、配置
    登录mysql-h主机名-P端口号-u用户名-p密码mysql-hlocalhost-P3306-uroot-pQa123456   退出登录exit或quit  查询所有的库mysql>showdat......
  • TCP协议中的粘包问题及解决方案
    在TCP协议通信中,如果多条消息的发送间隔较短,会合在一起发送,导致消息发送端发送消息太快,接收端来不及接收消息时,就会产生粘包现象粘包问题示例:server.pytcp_server=soc......
  • HTTP 基本概念
    一、HTTP是什么?HTTP是超文本传输协议,也就是HyperText Transfer Protocol。(一)能否详细解释「超文本传输协议」?HTTP的名字「超文本协议传输」,它可以拆成三个部分:超......
  • Docker的基本操作
     1.1.镜像名称首先来看下镜像的名称组成:镜名称一般分两部分组成:[repository]:[tag]。在没有指定tag时,默认是latest,代表最新版本的镜像 这里的mysql就是repo......
  • Linux笔记03: Linux常用命令_3.1命令的基本格式
    3.1命令的基本格式 3.1.1命令提示符[root@localhost~]#这就是Linux系统的命令提示符。各部分含义如下:●[]:这是提示符的分隔符号,没有特殊含义。●ro......
  • Java 8大基本类型
    8大基本类型基本类型(primitivetype)1、整数类型byte占1个字节范围:-128~127 Java内定义bytenum1=10;short占2个字节范围:-32768~32767 Java内定义sh......
  • 基本的Dos命令
    基本的Dos命令打开cmd的方式开始-系统-命令提示符Win键+R-输入cmdshift+右键选中任意文件夹-在此处打开Powershell窗口资源管理器的地址栏前加上“cmd......
  • Linux常见基本维护查看命令(1)
    1、如何看当前Linux系统有几颗物理CPU和每颗CPU的核数?[kiosk@rhce8-exam43~]$cat/proc/cpuinfo|grep-c'physicalid'4[kiosk@rhce8-exam43~]$cat/proc/cpuinfo|gr......