服务器编程入门(1)TCP/IP协议族

本文详细介绍了TCP/IP协议族的层次结构,重点阐述了数据链路层的ARP协议和应用层的DNS协议的工作原理,包括封装与分用的过程、ARP请求与应答报文的解析、DNS服务的分布式映射机制等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题聚焦:
简单地梳理一下TCP/IP各层的功能和常用协议
详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理

1 TCP/IP协议族体系结构

数据链路层:
     职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网、令牌环等)上的传输。
     常用协议:ARP协议(地址解析协议),RARP协议(逆地址解析协议)——实现了IP地址和机器物理地址之间的相互转换。
     寻址:使用物理地址(MAC地址)寻址一台机器。因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务。
网络层:
     职责:数据包的选路和转发。选路:确定两台主机之间的通信路径,对上层协议隐藏了网络拓扑的细节。
     协议:IP协议(因特网协议)——根据数据包的目的IP地址来决定如何投递它,使用逐跳的方式确定通信路径。
               ICMP协议(因特网控制报文协议)——IP协议的补充,用于检测网络连接。报文格式如下:
               
               报文类型:差错报文,用于回应网络错误(如目标不可到达和重定向);查询报文,查询网络信息(如ping程序使用CIMP报文查看目标是否可到达)
               校验:循环冗余校验码
               注意:ICMP并非严格意义上的网络层协议,因为它使用处于同一层的IP协议提供服务,而一般来说应该是上层协议使用下层协议提供的服务。
传输层:
     职责:为两台主机上的一个应用程序提供端到端的通信,只关心通信的起始端和目的端,为应用程序封装了一条端到端的逻辑通信链路,它负责数据的收发,链路的超时重连等。
     协议:
  •     TCP协议(传输控制协议):为应用层提供可靠的,面向链接和基于流的服务。使用超时重传,数据确认方式确保可靠的连接。没有边界限制。
  •     UDP协议(用户数据报协议):不可靠,无连接和基于数据报的服务。数据报有一个长度作为读写的最小单位。
  •     SCTP协议(流控制传输协议):相对较新的传输层协议,为了在因特网上传输电话信号而设计的。
应用层:
     职责:处理应用程序的逻辑。下面三层负责处理网络通信细节,在内核空间中实现,稳定又高效。应用层则在用户空间实现,因为它负责处理众多逻辑。
     协议:telnet协议(远程登陆协议),OSPF(开放最短路径优先协议),DNS(域名服务协议)
    

2 封装
目的:让上层协议可以使用下层协议提供的服务
实现:应用程序数据在发送到物理网络上之前,将沿着协议栈从上往下一次传递,每层协议都将在上层数据的基础上加上子集的头部信息,以实现该层的功能。这个过程就叫做封装。如下图所示:
        

TCP报文由TCP头部信息和TCP内核缓冲区数据构成。当要向TCP连接写入发送数据时,内核中的TCP模块首先把这些数据复制到与该连接对应的TCP内核发送缓冲区中,然后TCP模块调用IP模块提供的服务,传递的参数包括TCP头部信息和TCP发送缓冲区中的数据,TCP报文段。
需要注意的一点是,TCP是发送数据后,依然在缓冲区中保存有副本,但是UDP发送完之后,直接丢弃缓冲区中的数据。
经过数据链路层封装的数据称为帧,不同的传输媒介有不同的类型的帧。帧的最大传输单元MTU,即指最多能携带多少上层协议数据,通常以太网的MTU是1500字节。帧才是最终在物理网络上传送的字节序列。


3 分用
分用:当帧达到目的主机时,将沿着协议栈自底向上依次传递,各层协议依次处理帧中本层负责的头部数据,以获取所需的信息,并最终将处理后的帧交给目标应用程序。这个过程成为分用。

类型:如果类型字段的值为0x800,则帧的数据部分为IP数据包;如果类型字段的值为0x806,则帧的数据部分为ARP请求或应答报文。
ICMP,TCP,UDP使用IP协议,IP数据包头部使用16位的协议字段区分它们
TCP报文段和UDP数据包则通过其头部的16位端口号字段来区分上层应用程序
在顶层目标服务来看,封装和分用似乎并没有发生过。


4 测试网络
测试环境设定:



5 ARP协议工作原理
工作内容:实现任意网络层地址到任意物理地址的转换
工作原理:主机向子集所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的其他机器都会收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。
报文详解:长度分布:221126464
        
        28字节:ARP请求/应答报文的长度;
        28+18字节:一个携带ARP请求/应带报文的以太网帧长度为46字节
        46+18字节:有的实现要求以太网帧数据部分长度至少为46(所以这里的46和上面的48+18=46没什么关系),在这种情况下,一个携带ARP请求/应答报文的以太网帧长度为64字节。

查看和修改命令:
        
        第一项描述另一台测试机器Kongming20
        第二项描述的是路由器
        删除和添加ARP缓存项命令为:
        
 数据包范例分析:
    下面的两个包是用tcpdump抓取的远程登陆一个机器过程中,在tcp连接简历之前,查询MAC地址的两个ARP数据包(形式上是以太网帧)。
    
第一个数据包:
  • 源物理地址:00:16:d3:5c:b9:e3
  • 目的物理地址:ff::ff::ff::ff::ff::ff,以太网广播地址,用以表示整个LAN,该LAN上的所有机器都会收到并处理这样的帧
  • 类型字段:0x806,表示分用的目标是ARP模块
  • 以太网帧:42字节,实际是46字节,tcpdump未统计以太网帧尾部的4字节CRC字段,其中数据部分长度28字节
  • Request:表示这是一个ARP请求
  • 查询:who-has 192.168.1.109 tell 192.168.1.108 表示查询ip地址为192.168.1.109的机器的物理地址
第二个数据包的内容类似,只是ARP类型不同,改为了应答(Reply)

图解通信过程:

注意:ARP请求和应答应该是从以太网驱动程序发出的,而并非直接从ARP模块发出,所以用虚线表示;路由器也将接收到以太网帧1,因为该帧是一个广播帧。


6 DNS工作原理
工作内容:一套分布式的域名服务系统,处理域名和IP地址的映射
报文详解:
         
         16位标识字段:标记一对DNS查询和应答,以此查区分一个DNS应答i哪个DNS查询的回应。
         16位标志:用于协商具体的通信方式和反馈通信状态
         接下来的4个字段:对查询而言,一般查询问题个数为1,其他三个为0;应答报文应答资源记录数至少为1,授权资源记录数和额外资源记录数可为0或非0
         查询问题格式:(具体不再细说,很容易查到各个字段的含义)
        
         应答,授权和额外信息格式(都使用资源记录格式):
        
Linux下访问DNS服务
    要访问DNS服务,必须先知道DNS服务器的IP地址,存放地址:/etc/resolv.conf,内容如下:
    



7 socket和TCP/IP协议族的关系
数据链路层、网络层、传输层协议是在内核中实现的,因此操作系统需要实现一组系统调用,使得应用程序能够访问这些协议提供的服务。socket就是实现这组系统调用的API。
socket有两个功能:
  • 将应用程序从用户缓冲区中复制到TCP/UDP内核发送缓冲区,以交付内核来发送数据。如,从内核TCP/UDP接收缓冲区中复制数据到用户缓冲区,以读取数据;
  • 应用程序可以通过它们来修改内核中各层协议的某些头部信息或其他数据结构,从而精细地控制底层通信的行为。

参考资料:《Linux高性能服务器编程》


<think>嗯,用户想了解Excel中的VLOOKUP函数的用法和参数含义。首先,我需要回忆一下VLOOKUP的基本结构。VLOOKUP是垂直查找函数,用于在表格的首列查找指定的值,然后返回该行中指定列的数据。它的四个参数分别是查找值、表格范围、列索引号和匹配模式。 接下来,我得确认每个参数的具体作用。第一个参数是lookup_value,也就是用户要查找的值,比如产品ID或者姓名。第二个参数是table_array,即查找的范围,这里要注意的是,查找值必须位于这个范围的第一列,否则函数无法正确工作。第三个参数是col_index_num,也就是用户想要返回的数据在表格范围中的第几列,这个列数是从表格范围的第一列开始算起的,不是整个工作表的列。第四个参数是range_lookup,决定是精确匹配还是近似匹配,通常用FALSE或0来指定精确匹配,避免错误。 然后,用户可能需要一个具体的例子来理解如何使用。比如,假设有一个产品价格表,用户想根据产品ID查找对应的价格。这时候,VLOOKUP就可以在ID列查找,然后返回价格列的数据。同时,要提醒用户注意表格范围最好使用绝对引用,比如$A$2:$C$100,这样在拖动公式时范围不会变化。 可能遇到的问题也需要考虑。比如,如果查找值不在表格的第一列,或者列索引号超过了表格的列数,函数会返回错误。此外,数据格式不一致也可能导致问题,比如查找值是数字,而表格中是文本格式的数字,这时候需要统一格式。还有,当出现#N/A错误时,可能是查找值不存在,或者匹配模式设置不正确,需要检查参数是否正确。 用户可能还会问到如何避免常见的错误,比如部分数据匹配出错的情况。这时候需要检查是否有多余的空格,或者数据格式不一致,或者表格范围没有锁定导致拖动时偏移。此外,XLOOKUP作为VLOOKUP的升级版,可能在某些情况下更方便,比如可以向左查找或者返回多列数据,这也是可以提及的内容。 最后,整理步骤,从基础语法到参数说明,再到具体案例,逐步引导用户理解如何使用VLOOKUP函数。同时,提供常见错误和解决方法,帮助用户在实际应用中避免问题。如果有必要,还可以比较VLOOKUP和其他查找函数的区别,比如HLOOKUP或XLOOKUP,但根据用户的问题,主要集中在VLOOKUP本身即可。</think>### Excel VLOOKUP函数详解 #### 一、基础语法与参数说明 VLOOKUP函数的语法为: $$=VLOOKUP(lookup\_value, table\_array, col\_index\_num, [range\_lookup])$$ 包含4个参数: 1. **lookup_value**(必填):要查找的值(如单元格引用或具体值) 2. **table_array**(必填):包含数据的表格范围(必须包含查找列和返回列) 3. **col_index_num**(必填):返回值所在列的序号(从table_array第一列开始计数) 4. **range_lookup**(可选):匹配类型 - `TRUE`/`1`:近似匹配(默认值,需数据升序排列) - `FALSE`/`0`:精确匹配(常用选项) [^1][^2] #### 二、使用步骤演示(工资表查询案例) 假设需要根据员工编号查询工资: 1. 建立查询单元格(如`B12`) 2. 输入公式: ```excel =VLOOKUP(A12, $A$2:$D$100, 4, 0) ``` - `A12`:待查询的员工编号 - `$A$2:$D$100`:锁定数据区域(绝对引用) - `4`:返回第4列(工资列) - `0`:精确匹配 [^2][^3] #### 三、常见错误与解决方法 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | #N/A | 查找值不存在 | 检查数据源或改用`IFERROR`容错 | | #REF! | 列序号超出范围 | 确认col_index_num ≤ 表格列数 | | 部分匹配失败 | 数据格式不一致 | 统一数值/文本格式 | | 结果错位 | 表格未锁定 | 使用`$`符号固定区域引用 | [^3][^4] #### 四、进阶技巧 1. **多条件查询**: 使用辅助列合并多个条件字段 ```excel =VLOOKUP(A2&B2, $D$2:$F$100, 3, 0) ``` 2. **通配符匹配**: `"*"`匹配任意字符,`"?"`匹配单个字符 ```excel =VLOOKUP("张*", $A$2:$C$100, 3, 0) ``` 3. **跨表查询**: 引用其他工作表数据 ```excel =VLOOKUP(A2, Sheet2!$A$2:$D$100, 4, 0) ``` [^1][^4]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值