首页 > 其他分享 >2 用电信号传输TCP/IP数据

2 用电信号传输TCP/IP数据

时间:2024-05-14 09:11:16浏览次数:27  
标签:IP 网络 电信号 TCP 头部 接字 以太网

目录


1 创建套接字

浏览器、邮件等一般应用程序收发数据时用 TCP;
DNS 查询等收发较短的控制数据时用 UDP

网络包:网络中的数据会被切分成几十字节到几千字节的小块,每一个小数据块被称为一个包

IP 中还包括 ICMPA 协议和 ARPB 协议。

  • ICMP 用于告知网络包传送过程中产生的错误以及各种控制消息
  • ARP 用于根据 IP 地址查询相应的以太网 MAC 地址

IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收的操作

在协议栈内部有一块用于存放控制信息的内存空间,这里记录了用于控制通信操作的控制信息,例如通信对象的 IP 地址、端口号、通信操作的进行状态等。本来套接字就只是一个概念而已,并不存在实体,如果一定要赋予它一个实体,我们可以说这些控制信息就是套接字的实体,或者说存放控制信息的内存空间就是套接字的实体

协议栈是根据套接字中记录的控制信息来工作的

创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态


2 连接服务器

以太网头部又称“MAC 头部”

通信操作中使用的控制信息分为两类。

  1. 头部中记录的信息
  2. 套接字(协议栈中的内存空间)中记录的信息

连接操作的第一步是在 TCP 模块处创建表示连接控制信息的头部。
通过 TCP 头部中的发送方和接收方端口号可以找到要连接的套接字


3 收发数据

MTU:一个网络包的最大长度,以太网中一般为 1500 字节。
MSS:除去头部之后,一个网络包所能容纳的 TCP 数据的最大长度

MTU:Maximum Transmission Unit,最大传输单元

MSS:Maximum Segment Size,最大分段大小。 TCP 和 IP 的头部加起来一般是 40 字节,因此 MTU 减去这个长度就是 MSS。例如,在以太网中,MTU 为 1500,因此 MSS 就 是 1460。TCP/IP 可以使用一些可选参数
(protocol option),如加密等,这时头部的长度会增加,那么 MSS 就会随着头部长度增加而相应缩短

img1

img2

应用程序的数据一般都比较大,因此 TCP 会按照网络包的大小对数据进行拆分

IP 模块会在网络包前面添加 IP 头部和以太网的 MAC 头部后发送网络包

img3

我们在前面讲连接操作的时候说过 SYN 为 1 表示进行连接,这是因为将SYN 设为 1 并告知初始序号这一操作仅在连接过程中出现,因此发送SYN 为 1 的网络包就表示发起连接的意思。实际上,SYN 是 Synchronize(同步)的缩写,意思是通过告知初始序号使通信双方保持步调一致,以便完成后续的数据收发检查,这才是 SYN 原本的含义

img4

序号和 ACK 号的交互

网卡、集线器、路由器都没有错误补偿机制,一旦检测到错误就直接丢弃相应的包。应用程序也是一样,因为采用 TCP 传输,即便发生一些错误对方最终也能够收到正确的数据,所以应用程序只管自顾自地发送这些数据就好了

不过,如果发生网络中断、服务器宕机等问题,那么无论 TCP 怎样重传都不管用。这种情况下,无论如何尝试都是徒劳,因此 TCP 会在尝试几次重传无效之后强制结束通信,并向应用程序报错

通过“序号”和“ACK 号”可以确认接收方是否收到了网络包

所谓滑动窗口,就是在发送一个包之后,不等待 ACK 号返回,而是直接发送后续的一系列包。这样一来,等待 ACK 号的这段时间就被有效利用起来了

img5

img6

滑动窗口与接收缓冲区


标签:IP,网络,电信号,TCP,头部,接字,以太网
From: https://www.cnblogs.com/yubo-guan/p/18190511

相关文章

  • skipped: maximum number of running instances reached (1)
    Python的 apscheduler今天出现skipped:maximumnumberofrunninginstancesreached(1)问题产生的原因:设置了大量的任务,而APScheduler无法同时处理所有任务解决方法:调整APScheduler使用的线程池大小来增加并发处理任务的能力fromapscheduler.schedulers......
  • [题解] Flipping Game
    题目描述有n盏灯,每个灯有开和关两种状态。每按一次灯会变成相反的状态。给定灯初始的开关状态和结束的开关状态,若操作k轮,每轮要按m个不同的灯,问有多少种方法使灯由初始状态变到结束状态。题解需注意每轮要按不同的灯,若无这个条件,暴力计算组合数即可。要操作多轮,且每轮按灯的......
  • 随笔-网络-Linux多网卡同网段解决方法(配置IP路由)
    系统配置:多网口情况下,假设各个网口ip在同一网段;此时,由于默认路由规则,从不同网口的ip访问,服务器依旧会返回默认网口的mac地址,配置方式如下:sysctl-wnet.ipv4.ip_forward=1#开启ip转发规则net.ipv4.conf.X.rp_filter=0#X填alldefault各个网卡路由设置:假设默认网卡......
  • TCP TIME_WAIT状态优化
    一般来讲,在高并发的场景中,出现TIME_WAIT连接是正常现象,一旦四次握手连接关闭之后,这些连接也就随之被系统回收了 但是在实际高并发场景中,很有可能会出现这样的极端情况——大量的TIME_WAIT连接 TIME_WAIT状态连接过多的危害 TIME_WAIT状态下,TCP连接占用的本地端口将一直......
  • vue2使用elementUI组件el-tooltip指定元素进行提示信息(图标显示信息)
     <el-table-columnprop="operation"label="操作"borderwidth="200px"><templateslot-scope="scope"><divclass="operation-icons"><!......
  • NOIP真题题解
    2001T4Car的旅行路线ybtluogu建图+最短路1.建图时细节较多已知三点求第四点的坐标勾股定理判断斜边2.最短路时多起点多终点2013D1T3货车运输ybtluogu最大生成树+倍增LCA答案的边一定在最大生成树上将原图建出最大生成树在树上使用倍增LCA提取路径2014D2T2寻......
  • 调试-网络-如何查看tcp socket recv buffer size
    客户端与服务器建立tcp连接后,在服务器上执行ss-imdst目标IP地址来检查skmemrb值:tcpESTAB00192.168.99.124:ssh192.168.99.......
  • OSS_PIPE:Rust编写的大规模文件迁移工具| 京东云技术团队
    文盘rust好久没有更新了。这段时间笔者用rust写了个小东西,跟各位分享一下背景随着业务的发展,文件数量和文件大小会急剧增加,文件迁移的数量和难度不断攀升。oss_pipe是rust编写的文件迁移工具,旨在支撑大规模的文件迁移场景。编写oss_pipe的初衷•同类产品面临的问题•rust......
  • openGauss 开启RemoveIPC引起的core问题
    开启RemoveIPC引起的core问题问题现象操作系统配置中RemoveIPC参数设置为yes,数据库运行过程中出现宕机,并显示如下日志消息。FATAL:semctl(1463124609,3,SETVAL,0)failed:Invalidargument原因分析当RemoveIPC参数设置为yes时,操作系统会在对应用户退出时删除IPC资源(共......
  • Zipline-3-0-中文文档-一-
    Zipline3.0中文文档(一)原文:zipline.ml4trading.io回测您的交易策略原文:zipline.ml4trading.io/index.htmlZipline是一个用于回测的Pythonic事件驱动系统,由众包投资基金Quantopian开发和使用,作为回测和实时交易引擎。自2020年底关闭以来,托管这些文档的域名已过期。......