TCP/IP详解笔记(2)——IP:网际协议

1.简介

IP协议是TCP/IP协议族中最核心的协议。所有TCP、UDP、ICMP和IGMP都以IP数据报格式传输。

IP协议有如下两个特点

  • 不可靠: 不保证数据报能成功到达,可靠要求只能用由上层提供(例如TCP)。
  • 无连接: 简单来说,就是一次发送一个,每个数据报相互独立,因此不保证顺序。

2. IP首部

IP首部一般为20字节,这里贴出来并只讲核心字段。

在这里插入图片描述

  • 4位版本号: 目前是4,因此IP也称作IPv4,当然目前已经在普及IPv6的使用,IPv4会逐渐被IPv6取代。
  • 首部长度: 指首部占32bit字的数目,一般的IP数据报的这个值就是5,由上图所示。
  • 总长度字段: 指整个IP数据报的长度,该字段为16bit,因此IP数据报最长可达65535字节。这个字段很重要,因为某些链路需要填充数据达到最小长度,因此需要知道总长度来判断内容。
  • TTL(time-to-live): 生存时间字段设置了数据报可以经过的最多路由器数。初始值由源主机设置(一般为32或64),每当经过一个路由器就减1,当减到0时,数据报丢弃并发送ICMP通知源主机。

3. IP路由选择

如果源主机可以直接找到目的主机,则直接发送,否则源主机将数据报发送至默认路由器上。

IP层在内存会有一个路由表,发送数据报时会搜索该表,如果

  • 目的主机是自身: 根据协议字段送至指定模块处理,
  • 否则: 如果自身有路由器功能则继续转发,否则丢弃。

路由表会有如下信息(注:网络地址可理解成一堆划分出来的子网共用一个对外的公共地址,具体指IP地址和子网掩码运算的公共地址,后面会讲。

  • 目的IP地址: 可以是一个完整的主机地址,也可以是网络地址。
  • 下一跳路由器的IP地址,或有直连的网络地址
  • 标志:
    第一个标志指明目的IP是网络地址还是主机地址
    第二个标志指明下一站是路由器还是一个直连的接口
  • 为数据报传输指定一个网络接口

简单来说IP层传输并不知道整条线路是怎样的,它只是不断转发而已,直到某个路由器找到了目的地址。

4. 子网寻址

IP地址由网络号和主机号组成,网络号决定了地址类型,主机号决定具体地址,而子网编址要求主机号再分成子网号和主机号

子网的出现原因是A类地址和B类地址分配太多空间。
以B类为例,可以按照下图划分子网。
在这里插入图片描述
这样划分可以缩小路由表规模,其他主机如果想要发送数据到某一个具体到主机号的子网,它依然要指定具体的IP,但是路线上的路由器只需要存储到子网号的地址即可,这就意味着一个子网号代表了它划分的一堆子网去接入Internet。

5. 子网掩码

上面的寻址有一个问题,就是我只知道目的IP,而不知道它划分的子网具体到几位,这时候就需要子网掩码进行计算。

子网掩码一般是32bit的值,为1的bit留给网络号和子网号,为0的bit留给主机号。
在这里插入图片描述
求子网号的运算方式是:子网掩码和目的IP按位与

以第一种子网掩码为例,假如我有一个主机地址是140.252.1.1,则显然按位与的结果就是140.252.1.0,这个就是计算出来的子网号。

这里看出来子网掩码有一个特点,因为网络号和子网号都在最前,所以子网掩码一定是前n位为1,剩余后32-n位为0,所以我们的IP地址可以写成140.252.1.1/24,意味着前24位为1,简洁易懂。

6. ifconfig&netstat

这两个命令应该都不陌生,ifconfig可以查看本机的IP和网络接口的一些信息,netstat常用来查看端口占用以及其他网络信息。

ifconfig

这里给出书里的一个ifconfig -a的例子
在这里插入图片描述
这里可以看到不同接口的IP地址,选项(broadcast为广播地址),目前大多数的局域网都是以太网,所以我们使用命令会看到eth0以太接口(现在服务器基本都支持ipv4和ipv6,所以我们除了inet还会看到inet6),和一个lo的环回接口。

netstat

我们常用的查看端口命令netstat -anp

  • -a: 显示所有连线中的socket
  • -n: 直接使用IP地址,而不通过域名服务器
  • -p: 显示正在使用Socket的程序识别码和程序名称

还有其他很多参数可以看到网络使用情况,上节链路层也有用到这个命令查看接口的MTU。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP/IP详解·卷2:实现》完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15000行实际操作的C代码,采用举例教学的方法帮助你掌握TCP/IP实现。《TCP/IP详解·卷2:实现》不仅明了插口API和协议的关系以及主机实现与路由器实现的差别。还介绍了4.4BSD-Lite版的新的特点。《TCP/IP详解·卷2:实现》适用于希望理解TCP/IP协议如何实现的人,包括编写网络应用程序的程序员以及利用TCP/IP维护计算机网络的系统管理员。 目录 · · · · · · 第一章 概述 1.1 引言 1.2 源代码表示 1.3 历史 1.4 应用编程接口 1.5 程序示例 1.6 系统调用和库函数 1.7 描述符 1.8 网络实现概述 1.9 mbuf与输出处理 1.10 输入处理 1.11 网络实现概述 1.12 中断级别与并发 1.13 源代码组织 1.14 测试网络 1.15 小结 第二章 mduf:存储器缓存 2.1 引言 2.2 代码介绍 2.3 mduf的定义 2.4 mduf结构 2.5 简单的mduf宏和函数 2.6 m_devget和m_pullup函数 2.7 mduf宏和函数的小结 2.8 Net/3联网数据结构小结 2.9 m_copy和簇引用记数 2.10 其他选择 2.11 小结 第三章 接口层 3.1 引言 3.2 代码介绍 3.3 ifnet结构 3.4 ifaddr结构 3.5 sockaddr结构 3.6 ifnet与ifaddr的专用化 3.7 网络初始化概述 3.8 以太网初始化 3.9 SLIP初始化 3.10 环回初始化 3.11 if_attach函数 3.12 ifinit函数 3.13 小结 第四章 接口:以太网 4.1 引言 4.2 代码介绍 4.3 以太网接口 4.4 ioctl系统调用 4.5 小结 第五章 接口:SLIP和环回 5.1 引言 5.2 代码介绍 5.3 SLIP接口 5.4 环回接口 5.5 小结 第六章 IP编址 6.1 引言 6.2 代码介绍 6.3 接口和地址小结 6.4 sockaddr_in结构 6.5 in_ifaddr结构 6.6 地址指派 6.7 接口ioctl处理 6.8 internet实用函数 6.9 ifnet实用函数 6.10 小结 第七章 域和协议 7.1 引言 7.2 代码介绍 7.3 domain结构 7.4 protosw结构 7.5 IP的domain和protosw结构 7.6 pffindproto和pffindtype函数 7.7 pfctlinput函数 7.8 IP初始化 7.9 sysctl系统调用 7.10 小结 第八章 IP网际协议 8.1 引言 8.2 代码介绍 8.3 IP分组 8.4 输入处理:ipintr函数 8.5 转发:ip_forward函数 8.6 输出处理:ip_output函数 8.7 Internet检验和:in_cksum函数 8.8 setsockopt和getsockopt系统调用 8.9 ip_sysctl函数 8.10 小结 第九章 IP选项处理 9.1 引言 9.2 代码介绍 9.3 选项格式 9.4 ip_dooptions函数 9.5 记录路由选项 9.6 源站和记录路由选项 9.7 时间戳选项 9.8 ip_insertoptions函数 9.9 ip_pcbopts函数 9.10 一些限制 9.11 小结 第十章 IP的分片与重装 10.1 引言 10.2 代码介绍 10.3 分片 10.4 ip_optcopy函数 10.5 重装 10.6 ip_optcopy函数 10.7 ip_slowtimo函数 10.8 小结 第十一章 ICMP:Internet控制报文协议 第十二章 IP多播 第十三章 IGMP:Internet组管理协议 第十四章 IP多播选路 第十五章 插口层 第十六章 插口I/O 第十七章 插口选项 第十八章 Radix树路由表 第十九章 选路请求和选路消息 第二十章 选路接口 第二十一章 ARP:地址解析协议 第二十二章 协议控制块 第二十三章 UDP:用户数据报协议 第二十四章 TCP:传输控制协议 第二十五章 TCP的定时器 第二十六章 TCP输出 第二十七章 TCP的函数 第二十八章 TCP的输入 第二十九章 TCP的输入(续) 第三十章 TCP的用户需求 第三十一章 BPF:BSD分组过滤程序 第三十二章 原始IP 结束语 附录A 部分习题的解答 附录B 源代码的获取 附录C RFC 1122的有关内容 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值