Linux网络编程——网络基础
- 1. 网络结构模式
- 1.1 C/S 结构
- 1.2 B/S 结构
 
- 2. MAC 地址
- 3. IP地址
- 3.1 简介
- 3.2 IP 地址编址方式
 
- 4. 端口
- 4.1 简介
- 4.2 端口类型
 
- 5. 网络模型
- 5.1 OSI 七层参考模型
- 5.2 TCP/IP 四层模型
 
- 6. 协议
- 6.1 简介
- 6.2 常见协议
- 6.3 UDP 协议
- 6.4 TCP 协议
- 6.5 IP 协议
- 6.6 以太网帧协议
- 6.7 ARP 协议
- 6.8 封装
- 6.9 分用 / 解封装
 
- 7. 网络通信的过程
 
1. 网络结构模式
1.1 C/S 结构
(1)简介
     客户机 - 服务器 ,即 Client - Server(C/S)结构。C/S 结构通常采取 两层结构。服务器负责数据的管理,客户机负责完成与用户的交互任务。客户机是因特网上访问别人信息的机器,服务器则是提供信息供人访问的计算机。
客户机 通过 局域网 与 服务器 相连,接受 用户 的请求,并通过网络向服务器提出请求,对数据库进行操作。服务器接受客户机的请求,将数据提交给客户机,客户机 将数据进行计算 并将结果呈现给 用户 。服务器还要提供完善安全保护及对数据完整性的处理等操作,并允许多个客户机同时访问服务器,这就对服务器的硬件处理数据能力提出了很高的要求。
在C/S结构中,应用程序分为两部分:服务器部分 和 客户机部分。服务器部分是多个用户共享的信息与功能,执行后台服务,如控制共享数据库的操作等;客户机部分为用户所专有,负责执行前台功能,在出错提示、在线帮助等方面都有强大的功能,并且可以在子程序间自由切换。
(2)优点
- 能充分发挥客户端 PC 的处理能力,很多工作可以在 客户端处理 后再提交给服务器,所以 C/S 结构客户端响应速度快;
- 操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求;
- C/S 结构的管理信息系统具有较强的事务处理能力,能实现复杂的业务流程;
- 安全性较高,C/S 一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强,一般 高度机密 的信息系统 采用 C/S 结构适宜。
(3)缺点
- 客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高;
- 对客户端的操作系统一般也会有限制,不能够跨平台。
1.2 B/S 结构
(1)简介
     B/S 结构(Browser/Server,浏览器/服务器模式),是 WEB 兴起后的一种 网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式 统一了客户端,将系统 功能实现的核心 部分集中到 服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如 Firefox 或 Internet Explorer,服务器安装 SQL Server、Oracle、MySQL 等数据库。浏览器通过 Web Server 同 数据库 进行 数据交互。
(2)优点
     B/S 架构最大的优点是总体 拥有成本低、维护方便、 分布性强、开发简单,可以不用安装任何专门的软件就能实现在任何地方进行操作,客户端零维护,系统的扩展非常容易,只要有一台能上网的电脑就能使用。
(3)缺点
- 通信开销大、系统和数据的安全性较难保障;
- 个性特点明显降低,无法实现具有个性化的功能要求;
- 协议一般是固定的:http/https(无法传输大数量的数据)
- 客户端服务器端的交互是 请求-响应模式,通常动态刷新页面,响应速度明显降低。
2. MAC 地址
网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,又称为网络适配器 或 网络接口卡NIC。其拥有 MAC 地址,属于 OSI 模型的 第 2 层,它使得用户可以通过 电缆 或 无线 相互连接。每一个网卡都有一个被称为 MAC 地址 的独一无二的 48 位串行号。网卡的主要功能:
- 数据的封装与解封装、
- 链路管理、
- 数据编码与译码。
  
    MAC 地址(Media Access Control Address),直译为 媒体存取控制位址,也称为 局域网地址、以太网地址、物理地址 或 硬件地址,它是一个用来确认网络设备位置的位址,由网络设备制造商生产时烧录在网卡中。在 OSI 模型中,第三层网络层负责 IP 地址,第二层数据链路层则负责 MAC 位址 。MAC 地址 用于在网络中唯一标识一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的 MAC 地址。
MAC 地址的长度为 48 位(6个字节),通常表示为
12个 16 进制数,如:00-16-EA-AE-3C-40就是一个 MAC 地址,其中 前 3 个字节,16 进制数00-16-EA代表 网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而 后 3 个字节,16进制数AE-3C-40代表 该制造商 所制造的某个 网络产品(如网卡)的系列号。只要不更改自己的 MAC 地址,MAC 地址在世界是唯一的。形象地说,MAC 地址就如同身份证上的身份证号码,具有 唯一性。
3. IP地址
3.1 简介
    IP 协议是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守 IP 协议就可以 与因特网互连互通。各个厂家生产的网络系统和设备,如以太网、分组交换网等,它们 相互之间不能互通,不能互通的主要原因是因为它们所传送数据的基本单元(技术上称之为 “帧” )的格式不同。IP 协议实际上是一套由软件程序组成的协议软件,它把各种不同“帧” 统一转换成 “ IP 数据报 ”格式,这种转换是因特网的一个最重要的特点,使所有各种计算机都能在因特网上实现互通,即具有“开放性”的特点。正是因为有了 IP 协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此,IP 协议 也可以叫做“ 因特网协议 ”。
    IP 地址(Internet Protocol Address)是指 互联网协议地址,又译为 网际协议地址。IP 地址是 IP协议 提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个 逻辑地址,以此来屏蔽物理地址的差异。
    IP 地址是一个 32 位 的二进制数,通常被分割为 4 个“ 8 位二进制数”(也就是 4 个字节)。IP 地址通常用“ 点分十进制 ”表示成(a.b.c.d)的形式,其中,a,b,c,d 都是 0~255 之间的 十进制整数 。
- 例:点分十进IP地址(100.4.5.6),实际上是 32 位二进制数(01100100.00000100.00000101.00000110)。
3.2 IP 地址编址方式
    最初设计互联网络时,为了便于寻址以及层次化构造网络,每个 IP 地址包括两个标识码(ID),即 网络ID 和 主机 ID。同一个物理网络上的所有主机都使用同一个 网络 ID,网络上的一个主机(包括网络上工作站,服务器 和 路由器等)有一个 主机 ID 与其对应。Internet 委员会定义了 5 种 IP 地址类型以适合不
 同容量的网络,即 A 类~ E 类。其中 A、B、C 3类(如下表格)由 InternetNIC 在全球范围内统一分配,D、E 类为特殊地址。
 
 (1)A类IP地址
     一个 A 类 IP 地址是指, 在 IP 地址的四段号码中,第一段号码 为 网络号码,剩下的三段号码为 本地计算机的号码。如果用二进制表示 IP 地址的话,A 类 IP 地址 就由 1 字节的网络地址 和 3 字节主机地址 组成,网络地址的 最高位 必须是 “0”。A 类 IP 地址中网络的标识长度为 8 位,主机标识的长度为 24 位,A类网络地址数量较少,有 126 个网络,每个网络可以容纳主机数达 1600 多万台。
- A 类 IP 地址 地址范围 1.0.0.1-126.255.255.254(二进制表示为:00000001 00000000 00000000 00000001-01111110 11111111 11111111 11111110)。最后一个(*.255.255.255)是广播地址。
- A 类 IP 地址 的 子网掩码 为 255.0.0.0,每个网络支持的最大主机数为: 256 3 − 2 = 16777214 台 {256}^3 - 2 = 16777214 台 2563−2=16777214台
(2)B类IP地址
     一个 B 类 IP 地址 是指,在 IP 地址的四段号码中,前两段号码 为 网络号码。如果用二进制表示 IP 地址的话,B 类 IP 地址就由 2 字节的网络地址 和 2 字节主机地址 组成,网络地址的 最高位 必须是“ 10 ”。B 类 IP地址 中网络的标识长度为 16 位,主机标识的长度为 16 位,B 类网络地址 适用于中等规模的网络,有 16384个网络,每个网络所能容纳的计算机数为 6 万多台。
- B 类 IP 地址 地址范围 128.0.0.1-191.255.255.254(二进制表示为:10000000 00000000 00000000 00000001-10111111 11111111 11111111 11111110)。 最后一个(*.*.255.255)是广播地址。
- B 类 IP 地址 的子网掩码为 255.255.0.0,每个网络 支持的 最大主机数 为: 256 2 − 2 = 65534 台 {256}^2 - 2 = 65534 台 2562−2=65534台
(3)C类IP地址
     一个 C 类 IP 地址是指,在 IP 地址的四段号码中,前三段号码 为 网络号码,剩下的一段号码为 本地计算机的号码。如果用二进制表示 IP 地址的话,C 类 IP 地址就由 3 字节的网络地址 和 1 字节主机地址 组成,网络地址的 最高位 必须是“110”。C 类 IP 地址 中 网络的标识长度为 24 位,主机标识的长度为 8 位,C 类网络地址数量较多,有 209 万余个网络。适用于小规模的局域网络,每个网络最多只能包含254 台计算机。
- C 类 IP 地址 范围 192.0.0.1-223.255.255.254(二进制表示为:11000000 00000000 00000000 00000001-11011111 11111111 11111111 11111110)。
- C类IP地址的子网掩码为 255.255.255.0,每个网络 支持的 最大主机数 为: 256 − 2 = 254 台 256 - 2 = 254 台 256−2=254台
(4)D类IP地址
     D 类 IP 地址 在历史上被叫做 多播地址(multicast address),即 组播地址。在 以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的 最高位 必须是 “1110”,范围从224.0.0.0 - 239.255.255.255。
(5)特殊的网址
     每一个字节都为 0 的地址( “0.0.0.0” )对应于 当前主机;
     IP 地址中的每一个字节都为 1 的 IP 地址( “255.255.255.255” )是 当前子网 的广播地址;
     IP 地址中凡是以 “11110” 开头的 E 类 IP 地址 都 保留 用于将来和实验使用。
     IP地址中不能以十进制 “127” 作为开头,该类地址中数字 127.0.0.1 到 127.255.255.255 用于回路测试,如:127.0.0.1 可以代表 本机IP地址。
子网掩码
- 子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个 IP 地址 的 哪些位 标识的是 主机所在的子网,以及 哪些位 标识的是主机的 位掩码。子网掩码不能单独存在,它必须结合 IP 地址一起使用。子网掩码只有一个作用,就是将某个 IP 地址 划分成 网络地址 和 主机地址 两部分。
- 子网掩码是一个 32 位地址,用于屏蔽 IP 地址的一部分以区别 网络标识 和 主机标识 ,并说明该 IP地址是在局域网上,还是在 广域网 上。
    子网掩码是在 IPv4 地址资源紧缺的背景下为了解决 lP 地址分配而产生的 虚拟 lP 技术,通过子网掩码 将 A、B、C 三类地址划分为若干子网,从而显著提高了 IP 地址的分配效率,有效解决了 IP 地址资源紧张的局面。另一方面,在企业内网中为了更好地管理网络,网管人员也利用子网掩码的作用,人为地将一个较大的企业内部网络划分为更多个小规模的子网,再利用 三层交换机 的 路由功能实现子网互联,从而有效解决了网络广播风暴和网络病毒等诸多网络管理方面的问题。
    在大多数的网络教科书中,一般都将子网掩码的作用描述为通过逻辑运算,将 IP 地址划分为网络标识(Net.ID) 和主机标识(Host.ID),只有网络标识相同的两台主机在无路由的情况下才能相互通信。
    根据 RFC950 定义,子网掩码 是一个 32 位的 2 进制数, 其对应 网络地址 的所有位都置为 1,对应于 主机地址 的所有位置都为 0。子网掩码 告知 路由器,地址的哪一部分是网络地址,哪一部分是主机地址,使路由器正确判断任意 IP 地址是否是本网段的,从而正确地进行路由。网络上,数据从一个地方传到另外一个地方,是依靠 IP 寻址。从逻辑上来讲,是两步的。
- 第一步,从 IP 中找到所属的网络,好比是去找这个人是哪个小区的;
- 第二步,再从 IP 中找到主机在这个网络中的位置,好比是在小区里面找到这个人。
子网掩码的设定必须遵循一定的规则。与二进制 IP 地址相同,子网掩码由
1和0组成,且1和0分别连续。子网掩码的长度也是32位,左边是网络位,用二进制数字 “1” 表示,1的数目等于网络位的长度;右边是主机位,用二进制数字 “0” 表示,0的数目等于主机位的长度。这样做的目的是为了让掩码与 IP 地址做 按位与运算 时用0遮住原主机数,而不改变原网络段数字,而且很容易通过0的位数确定子网的主机数(2 的主机位数次方 - 2,因为主机号全为1时表示该网络广播地址,全为0时表示该网络的网络号,这是两个特殊地址)。通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。
4. 端口
4.1 简介
    “端口” 是英文 port 的意译,可以认为是 设备 与 外界通讯 交流的出口。端口可分为 虚拟端口 和 物理端口:
- 虚拟端口 指 计算机内部 或 交换机路由器内 的端口,不可见,是特指 TCP/IP协议中的端口,是 逻辑意义 上的端口。例如计算机中的 80端口、21端口、23端口等。(也可以理解为:内存缓冲区)
- 物理端口 又称为 接口,是 可见端口,计算机背板的 RJ45 网口,交换机、路由器、集线器 等 RJ45端口。电话使用RJ11插口也属于 物理端口 的范畴。
如果把 IP 地址 比作一间房子,端口 就是出入这间房子的 门。真正的房子只有几个门,但是一个 IP 地址的端口可以有
65536(即: 2 16 2^{16} 216)个之多!端口是通过 端口号 来标记的,端口号只有整数,范围是从0到65535( 2 16 − 1 2^{16} - 1 216−1)。
4.2 端口类型
(1)周知端口(Well Known Ports)
     周知端口是众所周知的端口号,也叫知名端口、公认端口 或者 常用端口,范围从 0 到 1023,它们紧密绑定于一些特定的服务。
- 例如 80端口分配给WWW服务,21端口分配给FTP服务,23端口分配给Telnet服务等等。
- 我们在 IE 的地址栏里输入一个网址的时候是不必指定端口号的,因为在默认情况下 WWW服务的端口是 “80”。
网络服务 是可以使用其他端口号的,如果不是默认的端口号则应该在地址栏上指定端口号,方法是在地址后面加上冒号“
:”(半角),再加上 端口号。比如使用 “8080” 作为WWW服务的端口,则需要在地址栏里输入“网址:8080”。但是有些系统协议使用固定的端口号,它是不能被改变的,比如139端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变。
(2)注册端口(Registered Ports)
     端口号从 1024 到 49151,它们松散地绑定于一些服务,分配给 用户进程 或 应用程序,这些进程主要是用户选择安装的一些应用程序,而不是已经分配好了公认端口的常用程序。这些端口在没有被服务器资源占用的时候,可以用用户端 动态选用为源端口。
(3)动态端口 / 私有端口(Dynamic Ports / Private Ports)
     动态端口 的范围是从 49152 到 65535。之所以称为 动态端口,是因为它 一般不固定分配某种服务,而是动态分配。
5. 网络模型
5.1 OSI 七层参考模型
七层模型,亦称 OSI(
Open System Interconnection)参考模型,即 开放式系统互联。参考模型是 国际标准化组织(ISO)制定的一个用于 计算机 或 通信系统间互联 的 标准体系,一般称为 OSI 参考模型 或 七层模型。它是一个七层的、抽象的模型体,不仅包括一系列抽象的术语或概念,也包括具体的协议。

记忆:物数网传会表应。
- 应用层:网络服务 与 最终用户 的 一个接口 。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
- 表示层:数据的表示、安全、压缩。主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等))。
- 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间 发起会话 或者 接受会话请求。
- 传输层:定义了一些传输数据的 协议 和 端口号( WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如 QQ 聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行 分段 和 传输,到达目的地址后再进行 重组。常常把这一层数据叫做段。
- 网络层:进行 逻辑地址寻址,在位于不同地理位置的网络中的两个主机系统之间 提供连接 和 路径选择。Internet 的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
- 数据链路层:建立逻辑连接、进行 硬件地址寻址、差错校验 等功能。定义了如何让 格式化数据 以 帧为单位进行传输,以及如何让控制对物理介质的访问。网卡将比特组合成字节进而组合成帧,用MAC地址访问介质。
- 物理层:主要定义 物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为 电流强弱 来进行传输,到达目的地后再转化为1、0,也就是我们常说的 数模转换 与 模数转换)。这一层的数据叫做比特。
5.2 TCP/IP 四层模型
简介
     现在 Internet(因特网)使用的主流协议族是 TCP/IP 协议族,它是一个分层、多协议的通信体系。 TCP/IP协议族 是一个 四层协议系统,自底而上 分别是 数据链路层、 网络层、 传输层 和 应用层。每一层完成不同的功能,且通过若干协议来实现,上层协议 使用 下层协议提供的服务。

     TCP/IP 协议 在一定程度上参考了 OSI 的体系结构。OSI 模型共有七层,从下到上分别是 物理层、数据链路层、网络层、传输层、会话层、表示层 和 应用层。但是这显然是有些复杂的,所以在 TCP/IP 协议中,它们被简化为了四个层次。
 (1)应用层、表示层、会话层 三个层次提供的服务相差不是很大,所以在 TCP/IP 协议中,它们被合并为 应用层 一个层次。
 (2)由于 传输层 和 网络层 在网络协议中的地位十分重要,所以在 TCP/IP 协议中它们被作为独立的两个层次。
 (3)因为 数据链路层 和 物理层 的内容相差不多,所以在 TCP/IP 协议中它们被归并在 网络接口层 / 数据链路层 一个层次里。只有四层体系结构的 TCP/IP 协议,与有七层体系结构的 OSI 相比要简单了不少,也正是这样,TCP/IP 协议在实际的应用中效率更高,成本更低。

- 应用层:应用层是 TCP/IP 协议的第一层,是直接为应用进程提供服务的。
 (1)对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输 应用使用了SMTP协议、万维网 应用使用了HTTP协议、远程登录服务 应用使用了有TELNET协议。
 (2)应用层还能 加密、解密、格式化数据。
 (3)应用层可以 建立 或 解除 与 其他节点的联系,这样可以充分节省网络资源。
- 传输层:作为 TCP/IP 协议的第二层,运输层在整个 TCP/IP 协议中起到了中流砥柱的作用。且在运输层中, TCP和UDP也同样起到了 中流砥柱 的作用。
- 网络层:网络层在 TCP/IP 协议中的位于第三层。在 TCP/IP 协议中网络层可以进行 网络连接的建立 和 终止 以及 IP地址的寻找 等功能。
- 网络接口层:在 TCP/IP 协议中,网络接口层位于第四层。由于网络接口层兼并了 物理层 和 数据链路层 所以,网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
6. 协议
6.1 简介
    协议,网络协议 的简称,网络协议是通信计算机双方必须 共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。
    为了使数据在网络上从源到达目的,网络通信的参与方必须 遵循相同的规则,这套规则称为 协议(protocol),它最终体现为在网络上传输的 数据包的格式。协议往往分成几个层次进行定义,分层定义是为了使某一层协议的改变不影响其他层次的协议。
6.2 常见协议
    应用层 常见的协议有:FTP协议(File Transfer Protocol 文件传输协议)、HTTP 协议(Hyper Text Transfer Protocol 超文本传输协议)、NFS(Network File System 网络文件系统)。
    传输层 常见协议有:TCP协议(Transmission Control Protocol 传输控制协议)、UDP协议(User Datagram Protocol 用户数据报协议)。
    网络层 常见协议有:IP 协议(Internet Protocol 因特网互联协议)、ICMP 协议(Internet Control Message Protocol 因特网控制报文协议)、IGMP 协议(Internet Group Management Protocol 因特网组管理议)。
    网络接口层 常见协议有:ARP 协议(Address Resolution Protocol 地址解析协议)(ip -> mac)、RARP协议(Reverse Address Resolution Protocol 反向地址解析协议)(mac -> ip)。
6.3 UDP 协议

- 源端口号:发送方端口号
- 目的端口号:接收方端口号
- 长度:UDP用户数据报的长度,最小值是8字节(仅有首部)
- 校验和:检测 UDP用户数据报 在传输中是否有错,有错就丢弃
6.4 TCP 协议

- 源端口号:发送方端口号
- 目的端口号:接收方端口号
- 序列号:本报文段的数据 的 第一个字节的序号
- 确认序号:期望收到 对方下一个报文段 的 第一个数据字节的序号
- 首部长度(数据偏移):TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,即首部长
 度。单位:32位,即以4 字节为 计算单位
- 保留:占 6 位,保留为今后使用,目前应置为0
- 紧急 URG :此位置 1,表明紧急指针字段有效,它告诉系统此报文段中 有紧急数据,应 尽快传送
- 确认 ACK:仅当 ACK=1时 确认号字段才有效,TCP 规定,在连接建立后所有传达的报文段都 必须把ACK置1
- 推送 PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后 立即 就能够 收到 对方的响应。在这种情况下,TCP就可以使用 推送(push)操作,这时,发送方TCP 把PSH置1,并立即创建一个报文段发送出去,接收方收到PSH = 1的报文段,就尽快地(即“推送” 向前)交付给接收应用进程,而不再等到整个缓存都填满后再向上交付
- 复位 RST:用于 复位相应的 TCP 连接
- 同步 SYN:仅在 三次握手 建立 TCP 连接时 有效。当 SYN = 1而ACK = 0时,表明这是一个连接请求报文段,对方若同意建立连接,则应在相应的报文段中使用SYN = 1和ACK = 1。因此,SYN置1就表示这是一个连接请求 或 连接接受报文
- 终止 FIN:用来释放一个连接。当 FIN = 1时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接
- 窗口:指发送本报文段的一方的 接收窗口 (而 不是 自己的 发送窗口)
- 校验和:校验和字段检验的范围包括 首部 和 数据 两部分,在 计算校验和时需要加上 12 字节的 伪头部
- 紧急指针:仅在 URG = 1时才有意义,它指出本报文段中的 紧急数据的字节数(紧急数据结束后就是普通数据),即指出了紧急数据的末尾在报文中的位置,注意:即使窗口为零时也可发送紧急数据
- 选项:长度可变,最长可达 40 字节,当没有使用选项时,TCP首部长度是20 字节
6.5 IP 协议

- 版本:IP 协议的版本。通信双方使用过的 IP 协议的版本必须一致,目前最广泛使用的 IP 协议版本号为 4(即IPv4)
- 首部长度:单位是 32 位(4 字节)
- 服务类型:一般不适用,取值为 0
- 总长度:指 首部 加上 数据 的总长度,单位为 字节
- 标识(identification):IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段
- 标志(flag):目前只有两位有意义。- 标志字段中的 最低位 记为 MF。MF = 1即表示后面 “ 还有分片 ” 的数据报。MF = 0表示这已是若干数据报片中的最后一个。
- 标志字段 中间的一位 记为 DF,意思是“不能分片 ”,只有当DF = 0时 才允许分片
 
- 标志字段中的 最低位 记为 
- 片偏移:指出较长的分组在分片后,某片在源分组中的相对位置,也就是说,相对于用户数据段的起点,该片从何处开始。片偏移以 8 字节为 偏移单位。
- 生存时间:TTL,(大部分为 64 / 128) 表明是数据报在网络中的寿命,即为“ 跳数限制 ”,由发出数据报的源点设置这个字段。路由器 在 转发数据 之前就把TTL值减一,当TTL值减为零时,就 丢弃这个数据报。
- 协议:指出此数据报携带的数据时使用何种协议,以便使 目的主机 的 IP 层知道应将数据部分 上交给哪个处理过程,常用的 ICMP(1),IGMP(2),TCP(6),UDP(17),IPv6(41)
- 首部校验和: 只校验 数据报的 首部,不包括数据部分。
- 源地址:发送方 IP 地址
- 目的地址:接收方 IP 地址
6.6 以太网帧协议

- 类型:使 目的主机 的 数据链路层 知道应将数据部分 上交给哪个处理。0x800表示IP、0x806表示ARP、0x835表示RARP
6.7 ARP 协议
- ARP协议:通过 IP 地址查找 MAC 地址;
- RARP协议:通过 MAC 地址查找 IP 地址;

- 硬件类型:1表示MAC 地址
- 协议类型:0x800表示IP 地址
- 硬件地址长度:6字节
- 协议地址长度:4字节(ip)
- 操作:1表示ARP 请求,2表示ARP 应答,3表示RARP 请求,4表示RARP 应答

例如:在win 的 cmd 输入: arp -a

6.8 封装
上层协议 是 如何使用 下层协议提供的服务的呢?
- 其实这是通过封装(encapsulation)实现的。应用程序数据在发送到物理网络上之前,将沿着 协议栈 从上往下 依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时还包括尾部信息),以实现该层的功能,这个过程就称为封装。
  
6.9 分用 / 解封装
    当 帧 到达目的主机时,将沿着 协议栈 自底向上 依次传递。各层协议依次处理 帧中 本层负责 的 头部数据,以获取所需的信息,并最终将处理后的 帧 交给 目标应用程序。这个过程称为 分用(demultiplexing)。分用是依靠头部信息中的类型字段实现的。

 
7. 网络通信的过程
    举例:QQ 聊天,发送:nihao

注:仅供学习参考,如有不足,欢迎指正!