title: Linux 网络
tags: 新建,模板,小书匠
grammar_cjkRuby: true
Copyright (C) @2018 Widic
Filename:
File-function:
Cre_ID: @ Widic 2018-1-23
Mod_ID:
3. 计算机网络
1. TCP/IP网络协议基础
ping查看IP
查看MTU 为了提供足够快的响应时间,以太网和 IEEE802.3 对数据帧长度都有限制,其最大值分别为 1500 字节和 1492 字节,链路层的这个特性称作 MTU ,即 最大传输单元 。用命令 netstat -in 可以查看网络接口的 MTU:
IP 网际协议IP 协议位于网络层,它是 TCP/IP 协议族中最为核心的协议,所有的 TCP、UDP、ICMP 及 IGMP 数据都以 IP 数据报格式传输。IP 协议提供的是 不可靠 、 无连接 的数据报传送服务。
-
不可靠(unreliable):IP 协议不能保证数据报能成功地到达目的地,它仅提供传输服务。当发生某种错误时,IP 协议会丢弃该数据报。传输的可靠性全由上层协议来提供。
-
无连接(connectionless):IP 协议对每个数据报的处理是相互独立的。这也说明, IP 数据报可以不按发送顺序接收。如果发送方向接收方发送了两个连续的数据报(先是 A,然后是 B),每个数据报可以选择不同的路线,因此 B 可能在 A 到达之前先到达。
IP地址分类
A 类地址 -
A 类地址网络号范围:1.0.0.0---127.0.0.0
-
A 类 IP 地址范围:1.0.0.0---127.255.255.255
-
A 类 IP 的私有地址范围:10.0.0.0---10.255.255.255 (所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)
-
127.X.X.X 是保留地址,用做循环测试用的
-
因为主机号有 24 位,所以一个 A 类网络号可以容纳 2^24-2=16777214 个主机号
B 类地址
-
B 类地址网络号范围:128.0.0.0---191.255.0.0
-
B 类 IP 地址范围:128.0.0.0---191.255.255.255
-
B 类 IP 的私有地址范围:172.16.0.0---172.31.255.255
-
169.254.X.X 是保留地址;191.255.255.255 是广播地址
-
因为主机号有 16 位,所以一个 B 类网络号可以容纳 2^16-2=65534 个主机号
C 类地址
-
C 类地址网络号范围:192.0.0.0---223.255.255.0
-
C 类 IP 地址范围:192.0.0.0---223.255.255.255
-
C 类 IP 的私有地址范围:192.168.0.0---192.168.255.255
-
因为主机号有 8 位,所以一个 C 类网络号可以容纳 2^8-2=254 个主机号
路由表查询route -n
IP 层在内存中有一个路由表(输入命令 route -n 可以查看路由表),当收到一份数据报并进行发送时,都要对该表进行搜索:
1、搜索路由表,如果能找到和目的 IP 地址完全一致的主机,则将 IP 数据报发向该主机;
2、搜索路由表,如果匹配主机失败,则匹配同子网的路由器(这需要子网掩码的协助)。如果找到路由器,则将 IP 该数据报发向该路由器;
3、搜索路由表,如果匹配同子网路由器失败,则匹配同网络号路由器,如果找到路由器,则将该 IP 数据报发向该路由器;
4、如果以上都失败了,就搜索默认路由,如果默认路由存在,则发报;
6、如果都失败了,就丢掉这个包;
7、接收到数据报的路由器再按照它自己的路由表继续转发,直到数据报被转发到目的主机;
8、如果在转发过程中,IP 数据报的 TTL(生命周期)已经被减为 0,则该 IP 数据报就被抛弃。
NAT 技术
实现了宽带共享,而且有助于缓解 IP 地址空间枯竭的问题。
arp
arp -a 查看 ARP 缓存表(表项记录 20 分钟超时),这里还有其它 ARP 命令可以对缓存表做查看、修改:
ICMP(Internet Control Message Protocol)控制报文协议
通信过程中的发生各种问题时,ICMP 将问题反馈,通过这些信息,管理者可以对所发生的问题作出诊断,然后采取适当的措施去解决它。
ICMP 报文由 8 位错误类型、8 位条件代码和 16 位校验和组成,被封装在一个 IP 数据报中:
ping 程序是对两台主机之间连通性进行测试的基本工具,它只是利用 ICMP 回显请求和回显应答报文,而不用经过传输层(TCP/UDP)。ping 程序通过在 ICMP 报文数据中存放发送请求的时间值来计算往返时间,当应答返回时,用当前时间减去存放在 ICMP 报文中的时间值,即是往返时间。
ping 程序使用方法为 ping IP 地址 ,ping 命令还可以加上参数,实现更多的功能:
-n 只输出数值。
-q 不显示任何传送封包的信息,只显示最后的结果。
-r 忽略普通的 Routing Table,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。
-R 记录路由过程。
-v 详细显示指令的执行过程。
-c 数目:在发送指定数目的包后停止。
-i 秒数:设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
-t 存活数值:设置存活数值 TTL 的大小。
traceroute 程序是用来侦测主机到目的主机之间所经路由情况的重要工具。刚才 ping 程序中讲过,带 -R 参数的 ping 命令也可以记录路由过程,但是,因为 IP 数据报头的长度限制(最多能保存 9 个 IP 地址),ping 不能完全的记录下所经过的路由器,traceroute 正好就填补了这个缺憾。
traceroute 工作原理:
它发送一份 TTL 为 1 的 IP 数据报给目的主机,经过第一个路由器时,TTL 值被减为 0,则第一个路由器丢弃该数据报,并返回一份超时 ICMP 报文,于此得到了路径中第一个路由器的地址;
然后再发送一份 TTL 值为 2 的数据报,便可得到第二个路由器的地址;
-以此类推,一直到到达目的主机为止,这样便记录下了路径上所有的路由 IP。
IGMP(Internet Group Management Protocol)组管理协议
IGMP 是用于管理多播组成员的一种协议,它的作用在于,让其他所有需要知道自己处于哪个多播组的主机和路由器知道自己的状态。只要某一个多播组还有一台主机,多播路由器就会把数据传输出去,这样,接受方就会通过网卡过滤功能来得到自己想要的数据。
为了知道多播组的信息,多播路由器需要定时的发送 IGMP 查询,各个多播组里面的主机要根据查询来回复自己的状态。路由器来决定有几个多播组,自己要对某一个多播组发送什么样的数据
UDP传输层:UDP 协议
UDP(User Datagram Protocol)用户数据报协议,它只在 IP 数据报服务之上增加了很少一点功能,它的主要特点有:
(1).UDP 是无连接的,发送数据之前不需要建立连接(而 TCP 需要),减少了开销和时延。
(2).UDP尽最大努力交付,不保证交付可靠性。
(3).UDP 是面向报文的,对于从网络层交付下来的 IP 数据报,只做很简单的封装(8 字节 UDP 报头),首部开销小。
(4).UDP 没有拥塞控制,出现网络拥塞时发送方也不会降低发送速率。这种特性对某些实时应用是很重要的,比如 IP 电话,视频会议等,它们允许拥塞时丢失一些数据,因为如果不抛弃这些数据,极可能造成时延的累积。
(5).UDP 支持一对一、一对多、多对一和多对多的交互通信。
UDP 报文
UDP 数据报可分为两部分:UDP 报头和数据部分。其中数据部分是应用层交付下来的数据。UDP 报头总共 8 字节,而这 8 字节又分为 4 个字段:
(1)源端口 2 字节 在对方需要回信时可用,不需要时可以全 0;
(2)目的端口 2 字节 必须,也是最重要的字段;
(3)长度 2 字节 长度值包括报头和数据部分;
(4)校验和 2 字节 用于检验 UDP 数据报在传输过程中是否有出错,有错就丢弃。
tcpdump 抓取 UDP 报文
传输层:TCP 协议
一、概述
TCP 和 UDP 处在同一层——运输层,但是它们有很多的不同。TCP 是 TCP/IP 系列协议中最复杂的部分,它具有以下特点:
(1) TCP 提供 可靠的 数据传输服务,TCP 是 面向连接的 。应用程序在使用 TCP 通信之前,先要建立连接,这是一个类似“打电话”的过程,通信结束后还要“挂电话”。
(2) TCP 连接是 点对点 的,一条 TCP 连接只能连接两个端点。
(3) TCP 提供可靠传输,无差错、不丢失、不重复、按顺序。
(4) TCP 提供 全双工 通信,允许通信双方任何时候都能发送数据,因为 TCP 连接的两端都设有发送缓存和接收缓存。
(5) TCP 面向 字节流 。TCP 并不知道所传输的数据的含义,仅把数据看作一连串的字节序列,它也不保证接收方收到的数据块和发送方发出的数据块具有大小对应关系。
TCP 可靠性
TCP 可靠传输的实现
(1) TCP 报文段的长度可变,根据收发双方的缓存状态、网络状态而调整。
(2) 当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。
(3) 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。这就是稍后介绍的超时重传。
(4) TCP 将保持它首部和数据的检验和。如果通过检验和发现报文段有差错,这个报文段将被丢弃,等待超时重传。
(5) TCP 将数据按字节排序,报文段中有序号,以确保顺序的正确性。
(6) TCP 还能提供流量控制。TCP 连接的每一方都有收发缓存。TCP 的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
可见超时重发机制是 TCP 可靠性的关键,只要没有得到确认报文段,就重新发送数据报,直到收到对方的确认为止。
tcpdump 抓取 TCP 报文段
DNS
host 命令
在 linux 系统中,可以用 host 命令 进行 DNS 查询,查看一个指定域名的 IP,比如要查询 mirrors.aliyuncs.com 的 IP 地址:
有“FQ”爱好的同学应该知道 hosts 文件,其实 hosts 文件可以看作是一个小型的 DNS 服务器。
使用命令打开 hosts 文件:
sudo gedit /etc/hosts
查看文件内容,可以发现里面全是类似下图中的 IP 和域名对应记录:
在实际上网过程中,域名解析的的优先顺序是:先在 DNS 缓存查询,若没有找到记录,再查询 hosts 文件,若还是没找到记录,再向 DNS 服务器发出 DNS 查询报文。
Telnet 简介
Telnet 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式,它基于 TCP 协议,使用端口 23。
终端使用者在本地电脑上使用 telnet 程序,用它连接到服务器,终端使用者可以在 telnet 程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。
2.2 Telnet 工作过程
使用 Telnet 协议进行远程登录时必须满足以下条件:
在本地计算机上必须装有包含 Telnet 协议的客户程序;
必须知道远程主机的 IP 地址或域名;
必须知道登录标识与口令。
Telnet 远程登录服务分为以下4个过程:
1)本地与远程主机建立连接。该过程实际上是建立一个 TCP 连接,用户必须知道远程主机的 IP 地址或域名;
2)将本地终端上输入的用户名和口令及以后输入的任何命令或字符以 NVT ( Net Virtual Terminal ) 格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个 IP 数据包;
3)将远程主机输出的 NVT 格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果;
4)最后,本地终端对远程主机进行撤消连接。该过程是撤销一个 TCP 连接。
2.3 Telnet 连接远程主机
telnet 使用语法:telnet IP 端口(可选)
由于实验楼环境限制,无法进行 telnet 实验。
telnet 192.168.1.1
Trying 192.168.1.1...
Connected to 192.168.1.1 (192.168.1.1).
Escape character is '^]'.
localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2017) (1)
login: shiyanlou
Password:
Login incorrect
2.4 Telnet 测试主机端口
telnet 可以测试目标机器的TCP端口是否开放。
例如 telnet IP地址 3389 是用来测试目标机器的 3389 端口是否开放,如果连接失败 ,可能是以下原因:
防火墙屏蔽
目标机器没有启用相关远程桌面服务( windows )
修改了默认占用 3389 端口。
下图示例使用 telnet 127.0.0.1 端口 测试本地环境端口开放性:
此处输入图片的描述
说明本地环境 3389 端口未开放 ,22 端口开放。
下图示例使用 netstat -pantu 验证以上结果( LISTEN 说明为开放状态):
6 网络是怎么连接的
A 互联网的特征
- 互联网的一大特征:包都是以相同的方式传输的。
- 互联网中除了以太网线连接之外,还会使用比较古老的电话技术和最新的光通信技术。
- 浏览器不光只有web服务这一个功能,它也可以用来在FTP服务器上下载和上传文件,同时也具备了电子邮件客户端的功能。
- 浏览器是一个具有多种客户端功能的综合性客户端软件。
- web 80 mail 25
- URI 统一资源标识符 URL:解析确定服务器和文件名,再生成HTTP请求消息。
- IP地址的主机号:全零:表示整个子网,全1:表示子网上所有设备发送包,即广播。
- DNS 包含在操作系统的socket库中。
- socket库是由于调用网络功能的程序组件集合。
- DNS服务器会从域名与IP地址对应用表中产找自己的记录并返回IP地址。
- 通信中控制信息的分类(1)头部中记录的信息(2)套接字记录的信息
- Ethnet MTU 网络包的最大长度1500byte;MSS除去头部之后,一个网络包所容纳的数据最大长度。
- 集线器:【以太网规则】按照以太网传输包的设备,集线器在子网中将网络包传输到下一个路由
- 路由器:【IP规则】路由器根据目的地址判断下一个路由器的位置。
- 除以太网,无限局域网,ADSL,FTTH他们都可以替代以太网的角色,
- IP协议用来传输网络包。
- 集线器半双工,交换机的全双工/半双工;
- 路由器判断下一个转发目标方法如下:(1)如果路由表的网关内容为IP地址,则该地址就是下一个转发目标;(2)如果路由表的网关内容为空,则IP头部中的接收方的IP就是下一个要转发的转发目标。路由器将包的信息委托给计算机来工作。
C 接入网 网络运营商
- 除以太网,无线局域网,ADSL,FTTH他们都可以替代以太网的角色帮助IP协议来传输网络包。
- 协议栈是根据套接字中记录的控制信息来工作的;
- 浏览器,邮件等一般应用程序收发数据时用TCP;
- DNS查询等收发较短的控制数据用UDP;
- 协议栈在设计上允许任何一方先发起断开过程;
- 私有地址:
10.0.0.0 ~ 10.255.255.255
11.10.0.0.0 ~ 10.255.255.255
12.10.0.0.0 ~ 10.255.255.255
1. 以太网
1.1 以太网:
具备三个性质:(1)将包发送到MAC头部,的结构放的MAC地址代表目的地。(2)用发送方的MAC识别发送方(3)IP协议来传送网络包。
1.2 网络的结构
1.3 IP网络包的传输方式
1. TCP/IP
1.1 TCP/IP软件分层结构
++解析器++:通过DNS查询IP地址的操作称为域名解析,负责执行解析这一操作就叫解析器了。
1.2 套接字
1.3 协议栈
1.4 IP模块的功能
** IP模块负责添加两个头部**
- MAC头部:以太网用的头部,包含MAC地址;
- IP头部:IP用的头部,包含IP地址;
** IP头部格式 **
1.5 MAC
** MAC ** 头部
1.6 网卡
D 集线器 交换机 路由器
- 集线器:半双工(以太网机制)按照以太网传输的设备集线器在子网中将网络包传输到下一个路由;
- 路由器:全双工/半双工(IP规则)路由器根据目的地址判断下以路由器的位置。
路由器
- 如果路由表的网关的内容为IP地址,则该地址就是下一个转发目标。
- 如果路由表的网关的内容为空,则IP头部只能给的接收方IP就是下一个要转发的转发目标。
- 路由器将包的传输工作委托给交换机来工作。
F 与网络相关的命令
- netstat 命令显示套接字的内容: -ano
G 网络功能和数据库功能:
虽并不是操作系统本身不可欠缺的功能,但因为它和操作系统很接近,所以称为中间件而不是应用,意思是处于操作系统和应用的中间件,操作系统和中间件一起称为系统软件;
H 网络安全
- 防火墙可分为包过滤,应用层网关、电路层网关等几种方式。
I 客户端 服务器
客户端服务器异同
- 硬件和操作系统不同
- 网卡协议栈Socket库等功能和客户端并无二致;
- TCP/IP 一样
- 服务器可以同时和多台客户端计算机进行通信。
- 服务器和客户端在程序结构不同;
(6) 网络
1. 基本概念基础知识
- 互联网的一大特征:包都是以相同的方式传输的。
- 互联网中除了以太网线连接之外,还会使用比较古老的电话技术和最新的光通信技术。
- 浏览器不光只有web服务这一个功能,它也可以用来在FTP服务器上下载和上传文件,同时也具备了电子邮件客户端的功能。
- 浏览器是一个具有多种客户端功能的综合性客户端软件。
- web 80 mail 25
- URI 统一资源标识符 URL:解析确定服务器和文件名,再生成HTTP请求消息。
- IP地址的主机号:全零:表示整个子网,全1:表示子网上所有设备发送包,即广播。
- DNS 包含在操作系统的socket库中。
- socket库是由于调用网络功能的程序组件集合。
- DNS服务器会从域名与IP地址对应用表中产找自己的记录并返回IP地址。
2. OSI 七层模型及每层的功能
1、国际标准化组织ISO在1979年建立了一个分委员会来专门研究一种用于开放系统的体系结构,提出了开放系统互连OSI模型,这是一个定义连接异种计算机的标准主体结构。
2、OSI简介:OSI采用了分层的结构化技术,共分七层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
3、OSI参考模型的特性:是一种异构系统互连的分层结构;提供了控制互连系统交互规则的标准骨架;定义一种抽象结构,而并非具体实现的描述;不同系统中相同层的实体为同等层实体;同等层实体之间通信由该层的协议管理;相信层间的接口定义了原语操作和低层向上层提供的服务;所提供的公共服务是面向连接的或无连接的数据服务;直接的数据传送仅在最低层实现;每层完成所定义的功能,修改本层的功能并不影响其他层。
4、物理层:提供为建立、维护和拆除物理链路所需要的机械的、电气的、功能的和规程的特性;有关的物理链路上传输非结构的位流以及故障检测指示。
5、数据链路层:在网络层实体间提供数据发送和接收的功能和过程;提供数据链路的流控。
6、网络层:控制分组传送系统的操作、路由选择、拥护控制、网络互连等功能,它的作用是将具体的物理传送对高层透明。
7、传输层:提供建立、维护和拆除传送连接的功能;选择网络层提供最合适的服务;在系统之间提供可靠的透明的数据传送,提供端到端的错误恢复和流量控制。
8、会话层:提供两进程之间建立、维护和结束会话连接的功能;提供交互会话的管理功能,如三种数据流方向的控制,即一路交互、两路交替和两路同时会话模式 。
9、表示层:代表应用进程协商数据表示;完成数据转换、格式化和文本压缩。
10、应用层:提供OSI用户服务,例如事务处理程序、文件传送协议和网络管理等。
3 TCP/IP
1. TCP/IP 模型
TCP/IP参考模型是首先由ARPANET所使用的网络体系结构。这个体系结构在它的两个主要协议出现以后被称为TCP/IP参考模型(TCP/IP Reference Model)。这一网络协议共分为四层:网络访问层、互联网层、传输层和应用层
-
网络接口层
-
网络层
负责相邻计算机之间的通信。其功能包括三方面。
(1)处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
(2)处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
(3)处理路径、流控、拥塞等问题。
网络层包括:IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)
控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。
IP是网络层的核心,通过路由选择将下一条IP封装后交给接口层。IP数据报是无连接服务。
ICMP是网络层的补充,可以回送报文。用来检测网络是否通畅。
Ping命令就是发送ICMP的echo包,通过回送的echo relay进行网络测试。 -
传输层
提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。 -
应用层
向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。
应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、NFS、HTTP。
FTP(File Transfer Protocol)是文件传输协议,一般上传下载用FTP服务,数据端口是20H,控制端口是21H。
Telnet服务是用户远程登录服务,使用23H端口,使用明码传送,保密性差、简单方便。
DNS(Domain Name Service)是域名解析服务,提供域名到IP地址之间的转换,使用端口53。
SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,用来控制信件的发送、中转,使用端口25。
NFS(Network File System)是网络文件系统,用于网络中不同主机间的文件共享。
HTTP(Hypertext Transfer Protocol)是超文本传输协议,用于实现互联网中的WWW服务,使用端口80。 -
总结
6. 主要特点
(1)TCP/IP协议不依赖于任何特定的计算机硬件或操作系统,提供开放的协议标准,即使不考虑Internet,TCP/IP协议也获得了广泛的支持。所以TCP/IP协议成为一种联合各种硬件和软件的实用系统。
(2)TCP/IP协议并不依赖于特定的网络传输硬件,所以TCP/IP协议能够集成各种各样的网络。用户能够使用以太网(Ethernet)、令牌环网(Token Ring Network)、拨号线路(Dial-up line)、X.25网以及所有的网络传输硬件。
(3)统一的网络地址分配方案,使得整个TCP/IP设备在网中都具有惟一的地址
(4)标准化的高层协议,可以提供多种可靠的用户服务。
2 TCP
- TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
- TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
- 如果IP数据包中有已经封好的TCP数据包,那么IP将把它们向‘上’传送到TCP层。TCP将包排序并进行错误检查,同时实现虚电路间的连接。TCP数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
- TCP将它的信息送到更高层的应用程序,例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层,TCP层便将它们向下传送到IP层,设备驱动程序和物理介质,最后到接收方。
- 面向连接的服务(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它们使用了TCP。DNS在某些情况下使用TCP(发送和接收域名数据库),但使用UDP传送有关单个主机的信息。
- 控制标志
- URG:紧急(The urgent pointer) 标志有效。紧急标志置位,
- ACK:确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
- PSH:该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
- RST:复位标志复位标志有效。用于复位相应的TCP连接。
- SYN:同步标志同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
- FIN:结束标志带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。服务端处于监听状态,客户端用于建立连接请求的数据包(IP packet)按照TCP/IP协议堆栈组合成为TCP处理的分段(segment)。
- TCP的可靠性
TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能。保证保证数据能从一端传到另一端。
3. TCP三次握手
- 三次握手(three times handshake;three-way handshake)所谓的“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。
为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。 - 三次握手:
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
4 TCP 关闭TCP连接:改进的三次握手四步
对于一个已经建立的连接,TCP使用改进的三次握手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下:
第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。
第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。
5 UDP
- UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
- UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
- UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询---应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网络时间协议)和DNS(DNS也使用TCP)。
- 欺骗UDP包比欺骗TCP包更容易,因为UDP没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与UDP相关的服务面临着更大的危险。
6 ICMP
ICMP与IP位于同一层,它被用来传送IP的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。
ping 使用的ICMP协议;
7 TCP和UDP的区别
- TCP是传输控制协议,提供的是面向连接,可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间机那里一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
- UDP使用户数据报协议,是一个简单的面向数报的传输写,UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不保证它们能到达目的地;由于UDP在传输数据报前不用再客户与服务器之间建立一个连接,且没有超时重发机制,故而传输速度很快。
8 如何编写socket套接字
- 服务器端
- 调用ServerSocket(int port)创建一个服务器端套接字,并绑定到指定端口上;
- 调用accept();监听连接请求,则接受连接,返回通信套接字;
- 调用socket类的getOutStream()和getInputStream获取输出流和输入流,开始网络数据的发送和接收。;
- 关闭通信套接字socket.close();
- 客户端
- 调用Socket()创建一个流套接字,并连接到服务器;
- 调用socket类的getOutputStream和getInputStream获取输出流和输入流。
- 关闭通信套接字;
9 ping 原理;
ping.exe的原理是,向指定的IP地址发送一定长度的数据包,按照约定,若指定IP地址存在的话,会返回同样大小的数据包,当然,若在特定的时间内没有返回,就是“超时”,就认为指定的IP地址不存在。由于ping使用的是ICMP协议,有些防火墙软件会屏蔽ICMP协议,所以有时候ping的结果只能作为参考,ping不通不一定说明对方IP不存在;
11 防火墙的优缺点
- 优点:它能增强机构内存网络的安全性,用于加强网络间的访问控制,防止外部用户非法使用内部网的资源,保护内部网络设备的不被破坏,防止内部网络的敏感数据被窃取。防火墙系统决定了那些内部服务可以被外界访问;外界的哪些人可以访问内部的哪些服务,以及哪些外部服务可以被内部人员访问。
- 缺点:对于发生在内网的攻击无能为力;对于部分攻击,可以绕过防火墙,防火墙发现不了;防火墙的策略是静态的,不能实施动态防御;
12 网络编程
- 分层的思想也是设计大型软件的一种重要思想,有些操作系统就是基于分层的思想设计和实现的。
- TCP/IP 协议已经成为事实上的国际标准和工业标准;
- 网络模型:
- 网络接口层:网络接口层TCP/IP模型的最下一层,它包括多种逻辑链路控制和媒体访问协议;
- Internet层(网络层):网络层负责在发送端和接收端之间建立一条虚拟路径。这一层的主要协议是IP协议;
- 传输层:传输层通过位于该层的TCP协议或UDP协议在两台主机间传输数据。其中TCP协议提供可靠面向连接的服务,它保证数据能完整地按顺序地传送到目标计算机。
- 应用层:应用层面向用户提供一系列访问网络的协议,如FTP,SMTP,HTTP;
- 协议就像是人类的语言,人来进行交流需要一种双方都能够理解的语言,同样,两台计算机要进行通信也需要一种双方都能够理解的语言,这就是协议。
- 127.0.0.1是一个特殊的地址,它指代本机;
- 路由器TTL默认64,最大255;
13 套接字,linux下的网络编程指的就是套接字编程
1.创建套接字 int socket( int domain, int type, int protocol)
- AF_UNIX :创建只有本机内进行通信的套接字
- AF_INET:使用IPV4 TCP/IP 协议;
- AF_INET6: 使用IPV6 TCP/IP 协议;
- SOCK_STREAM 创建TCP流套接字;
- SOCK_DGRAM创建UDP套接字;
- SOCK_RAW:创建原始套接字
2. 建立连接 int connect (int sockfd, construct sockaddr * ,socklen_t addrlen );
3. 绑定套接字: int bind(int sockfd,struct sockaddr ,socklen addrlen);
4. 在套接字上监听:int listen(int s, int backlog)
5. 接受连接
6. TCP套接字的数据传输
- 1. 发送数据 send
- 2. 接收数据 recv
7. UDP套接字的数据传输
- sendto 发送数据
- recvfrom 接收数据
8. 关闭套接字 int close(int fd);
9. 关闭套接字 int shutdown(int fd);SHUT_RD SHUT_WR SHUT_RDWR
10. 在TCP/IP 协议规定了在网络上必须此案用网络字节顺序(也就是大端模式。)
11. 面向连接的socket模型:
14 HTTP 协议
15 SSL
4 面试题
1. OSI模型分几层,每层的功能及包含的协议?
层 | 功能 | 各层设备 | 协议 |
---|---|---|---|
物理层 | 通过媒介传输比特,确定机械及电气规范(比特Bit) | 各种传输媒体(光线、网线),各类DTE和DCE之间通讯的物理设备(如:计算机、HUB),各类插槽、插座。 | RJ45、CLOCK、IEEE802.3 |
数据链路层 | 将比特组装成帧和点到点的传递(帧Frame) | 分为两个子层:逻辑链路控制层(LLC)和媒体访问控制层(MAC)。网卡(有争议)、网桥和二层交换机 | PPP、FR、HDLC、VLAN、MAC |
网络层 | 负责数据包从源到宿的传递和网际互连(包PackeT) | 路由器、网关和三层交换机 | IP、IPX、OSPF、RIP、IGRP、ICMP、ARP、RARP |
传输层 | 提供端到端的可靠报文传递和错误恢复(段Segment) | 四层交换机 | TCP、UDP、SPX |
会话层 | 建立、管理和终止会话(会话协议数据单元SPDU) | 五层交换机 | NFS、SQL、NETBIOS、RPC |
表示层 | 对数据进行翻译、加密和压缩(表示协议数据单元PPDU) | 六层交换机 | JPEG、MPEG、ASII |
应用层 | 允许访问OSI环境的手段(应用协议数据单元APDU) | 计算机、负载均衡和七层交换机 | Telnet、HTTP、FTP、WWW、NFS、SMTP |
2. TCP/IP模型分层,每层功能及包含的协议?
层 | 功能 | 各层协议 | 备注 |
---|---|---|---|
网络接口层 | 负责实际数据的传输 | HDLC(高级链路控制协议)、PPP(点对点协议)、SLIP(串行线路接口协议) | |
网络互联层 | 负责网络间的寻址数据传输 | IP(网际协议)、ICMP(网际控制消息协议)、ARP(地址解析协议)、RARP(反向地址解析协议) | |
传输层 | 负责提供可靠的传输服务 | TCP(控制传输协议)、UDP(用户数据报协议) | |
应用层 | 负责实现一切与应用程序相关的功能 | FTP(文件传输协议)、HTTP(超文本传输协议)、DNS(域名服务器协议)、SMTP(简单邮件传输协议)、NFS(网络文件系统协议) |
3. TCP的面向连接可靠性及三次握手协议和四次挥手协议?
- 可靠性:TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能。保证保证数据能从一端传到另一端。
- 三次握手:
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。 - 四次挥手
对于一个已经建立的连接,TCP使用改进的三次握手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下:
第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。
第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。
第三步,主机B的应用程序告诉TCP:我要彻底的关闭连接,TCP向主机A送一个FIN报文段。
第四步,主机A收到这个FIN报文段后,向主机B发送一个ACK表示连接彻底释放。
==End of File==