首页 > 其他分享 >TCP/IP 协议

TCP/IP 协议

时间:2023-10-08 17:56:48浏览次数:37  
标签:协议 UDP 字节 IP SYN TCP 服务端 客户端

目录


TCP工作在网络OSI七层模型中的第四层--传输层,IP在第三层--网络层。
应用层法下来,每一层都会添加头部信息进行封装,然后在发送到接收端。

TCP 协议格式

  • TCP 段
TCP首部 用户数据

TCP段大小也是有限制的,最大为1460字节

  • 以太网帧
以太网首部 IP首部 TCP首部 用户数据
22字节 最小20字节 最小20字节 最多1460字节

最终由网卡发送出去的数据包叫以太网帧,以太网帧的大小固定是1522字节,而IP首部和TCP首部的大小是不固定的,但最少会各占20字节,所以TCP段搭载的数据大小最多为1460字节。

TCP 三次握手

三次握手目的不是为了打通网络连接,而是在正式使用之前检测网络是否通畅。
TCP在三次握手时,会确认发送数据包的单位,也就是发送的最大消息长度(MSS:Maximum Segment Size),TCP在进行大力量数据传送时,就是以MSS的大小将数据进行分割发送。

  • 第一次握手
    首先客户端发起连接请求,向服务器发送TCP段,段中包含目标端口和本机端口,设置SYN标志位为1,序号为 x,也就是初始序号 ISN,如果是第一个连接,很有可能就是 0。当然,此时服务器对应的端口要处于监听状态。此时,客户端进入 SYNC_SENT 状态,等待服务器的确认。

  • 第二次握手
    服务端收到客户端发来的 SYN 段,对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1),这就是确认序号。同时,服务端还要发送 SYN 请求信息,将SYN位置为1,Sequence Number为 y(服务端的TCP段序号)。服务器端将上述所有信息放到一个TCP段(即SYN+ACK段)中,一并发送给客户端,此时服务器进入SYN_RECV状态。

  • 第三次握手
    客户端接收到服务端发来的 SYN+ACK 段后,发送一个 ACK 给服务端,将 Acknowledgment Number 设置为 y+1。此时客户端进入 ESTABLISHED(已连接)状态,服务端接收到此 TCP段,也将进入 ESTABLISHED 状态,也就标志着三次握手结束,连接成功建立。

三次握手完成之后,连接就建立了,之后就可以开始传输数据了。

TCP 四次挥手

当客户端和服务端双方发送数据完成之后,一般由客户端主动发起断开连接请求,当然,也有少数情况是服务器主动发起。

  • 第一次挥手
    客户端设置序号(Sequence Number)和确认序号(Acknowledgment Number),发送一个 FIN 段给服务器。这时,客户端进入 FIN_WAIT_1状态,意味着客户端没有数据要发送了。

  • 第二次挥手
    服务端收到 FIN 报文段,向客户端发送一个 ACK 段,客户端进入 FIN_WAIT_2 状态。表示服务端已同意连接关闭请求。

  • 第三次挥手
    服务端向客户端发送 FIN 段,请求关闭连接,同时服务端进入 LAST_ACK 状态。

  • 第四次挥手
    客户端收到服务端发来的 FIN 段,向服务端发送 ACK 段,之后客户端进入TIME_WAIT状态。服务端收到客户端的ACK 段以后,就关闭连接。

上面就是由客户端主动发起关闭连接的过程。

TCP 与 UDP 对比

  1. TCP是面向连接的,UDP是无连接的
  2. TCP是可靠的,UDP是不可靠的
  3. TCP是面向字节流的,UDP是面向数据包文的
  4. TCP只支持点对点通信,UDP支持一对一,一对多,多对多
  5. TCP报文首部20个字节,UDP首部8个字节
  6. TCP有拥塞控制机制,UDP没有
  7. TCP协议下双方都有发送、接收缓冲区,UDP没有实际意义上的发送缓冲区,但有接收缓冲区

要求输出内容可靠,不丢包,则选择使用TCP传输
对于某些数据量大、实时性要求较高的情况,选择UDP传输

标签:协议,UDP,字节,IP,SYN,TCP,服务端,客户端
From: https://www.cnblogs.com/mydodo/p/17749768.html

相关文章

  • 密码协议学习笔记(8.16):几种特殊的秘密分享体系
    已知两个秘密的碎片,计算秘密的乘积的碎片:已知两个秘密$\alpha_0,\beta_0$分别实现了门限值为$t$的分享记$$f_{\alpha}(x)=\alpha_0+\alpha_1x+\cdots+\alpha_{t-1}x^{t-1}$$$$f_{\beta}(x)=\beta_0+\beta_1x+\cdots+\beta_{t-1}x^{t-1}$$秘密碎片为$$A_1=f_{\alpha}(1),A_2=......
  • 重磅:FPGA实现MIPI DSI4线720P
    1.液晶屏概述 显示屏LCDMIPIDSI4lane,支持分辨率720*1280,60HZ彩色显示。用于对接国产GOWIN的NR-9C的开发板和LATTICE的CROSSLINK开发板,显示MIPIDSI功能。      MIPIDSI是4-LANE,MIPI速率在480MHZ。支持LP模式初始化和HS模式显示数据发送。        ......
  • LY1366 [ 20231005 NOIP 模拟赛 T0 ] 加固
    题意设\(T\)是由\(26\)小写英文字母排列得到的字符串。\(T'\)由\(T\)复制若干次得到。给定字符串\(S\)为\(T'\)的子序列,求\(T'\)的最小复制次数。保证出现的不同字母不超过\(20\)种\(1\le|S|\le10^5\)Sol一个巧妙的转化,考虑将\(T\)串作为字典序,那么当......
  • The 2nd Universal Cup. Stage 4: Taipei - I(状压DP)
    目录I.IntervalAdditionI.IntervalAddition题意给定一个长度为n$(1\len\le23)$的数组a。你可以进行一种操作:选择区间\([l,r]\)并给这个区间所有的数都加上一个任意的数。问你使得整个数组均为0所需的最小操作次数?思路考虑差分数组无论怎么对于区间\([l,r......
  • LY1374 [ 20231008 NOIP 模拟赛 T2 ] 机房惨案
    题意给定一棵树,每次操作将一个点染成黑色。求询问的点到所有黑点的路径编号最小值。**数据保证第一次为染色操作**Sol注意到保证第一次为染色。考虑钦定根节点为染色的点。那么对于所有染色操作,暴力记录染色的点到根节点的路径上所有点的贡献。每个点只会贡献一次,这部分......
  • 密码协议学习笔记(8.15):知识证据详解
    在开始前,先回顾以下的知识点:离散对数问题(DiscretelogarithmProblem,DLP)难解性猜想:给定以大素数$p$为阶的循环群$G$,$g,h\inG$是两个生成元(在素数阶群上等价于非恒等元),求解$t$,使得$h^t=g$在计算上是不可行的.Diffie-Hellman的计算难解性(ComputationalDiffie-Hellm......
  • 【Unity】 ScriptableObject ——生成多个ScriptableObject作为子对象,可以点击展开并
     官方是这么介绍ScriptabelObject的: “ScriptableObject是一个可独立于类实例来保存大量数据的数据容器。ScriptableObject的一个主要用例是通过避免重复值来减少项目的内存使用量。如果项目有一个预制件在附加的MonoBehaviour脚本中存储不变的数据,这将非常有用。每次实......
  • 路飞项目需求、pip永久换源、虚拟环境
    路飞项目需求#线上销售课程的 -商城-知识付费类#需求 -首页功能 -轮播图接口 -推荐课程接口(没写)-用户功能 -用户名密码登录-手机号验证码登录-发送手机验证码-验证手机号是否注册过-注册接口-课程列表功能 -课程列......
  • bip.docker
    #systemctlstopdockerbip放前面可生效。{"bip":"192.168.168.1/24"}{  "runtimes":{    "nvidia":{      "path":"nvidia-container-runtime",      "runtimeArgs":[]  ......
  • 解决Windows下pip安装bertopic报错:Failed building wheel for hdbscan
    在安装bertopic的过程中,遇到了Failedbuildingwheelforhdbscan,我先去网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#hdbscan下载了hdbscan‑0.8.28‑cp310‑cp310‑win_amd64.whl,并且用pip进行了本地安装,依然报错。然后仔细阅读报错信息,发现是build报错,我在Linux系统下并......