计网夯实基础——IP、ICMP协议篇

IP数据报:

IP是TCP/IP协议族中最核心的协议,所有的TCP、UDP、ICMP、IGMP数据都以IP数据报的格式传输。IP仅提供尽力而为的传输服务,如果发生某种错误,IP会丢失该数据,然后发送ICMP消息给信源端。另外,IP数据报可以不按发送顺序接受。

IP数据报的格式如下:

20字节和紧接其后的选项部分是IP数据报的首部,前20个字节是固定的,选项可有可无。首部的每一行是一个32位字的单位,最高位在左边,为0bit,最低位在右边,为31bit。

首部长度是指首部占32bit字的数目,因为4位的最大值为15,因此首部最长为60字节,也即是说选项部分的最大值为40字节,不够4的倍数,要用0填充,使数据部分的起始地址为4的倍数。

  3个标志位主要用来标识分片的IP数据报,片位移为分片的数据报的首个字节偏离整个原始数据报的位置。

IP路由选择:

主机通过路由器和目的主机连接。主机通过IP数据报连接目的主机时,按照如下步骤搜索(同一网络中的搜索要经过ARP协议将目的主机的IP地址解析为MAC地址):

<
### Oracle 中 `DATEDIFF` 函数的使用 需要注意的是,在 Oracle 数据库中并没有内置名为 `DATEDIFF` 的函数[^3]。然而,可以通过其他方式来实现类似的日期差值计算功能。 #### 使用 `SYSDATE` 和算术运算符 在 Oracle 中可以直接通过简单的减法操作来获取两个日期之间的差异: ```sql SELECT (END_DATE - START_DATE) AS DAY_DIFFERENCE FROM DUAL; ``` 这段代码会返回两个日期之间相差的天数[^1]。 如果需要更精确的时间单位(如小时、分钟),则可以利用 `NUMTODSINTERVAL` 或者 `EXTRACT` 结合 `TIMESTAMP` 类型来进行处理: ```sql -- 计算时间戳间的总秒数并转换成日 SELECT EXTRACT(DAY FROM diff) + EXTRACT(HOUR FROM diff)/24 + EXTRACT(MINUTE FROM diff)/(24*60) + EXTRACT(SECOND FROM diff)/(24*60*60) as day_difference FROM ( SELECT NUMTODSINTERVAL(END_TIMESTAMP - START_TIMESTAMP, 'DAY') AS diff FROM your_table_name ); ``` 对于跨不同级别的间隔(比如年份或月份),推荐使用自定义逻辑或者第三方包中的过程/函数来完成特定需求下的日期比较。 为了模拟 MySQL 的 `DATEDIFF()` 行为——即只考虑整天而不关心具体时刻部分——可以在上述基础上进一步调整查询语句以确保结果符合预期。 #### 自定义 PL/SQL 函数模仿 `DATEDIFF` 当频繁需要用到此功能时,创建一个用户定义函数可能是更好的选择: ```plsql CREATE OR REPLACE FUNCTION get_date_diff( p_end_date IN DATE, p_start_date IN DATE ) RETURN NUMBER IS BEGIN RETURN TRUNC(p_end_date) - TRUNC(p_start_date); -- 只取整天天数之差 END; / ``` 这样就可以像调用常规 SQL 函数一样方便地使用这个新建立的方法了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值