什么是网络
网络是网络终端设备通过网络传输介质用网络传输设备连接起来进行资源共享的平台;共享的资源主要是指软件、硬件、数据和通信信道
OSI七层参考模型
应用层(Application Layer)
提供为应用软件而设计的接口,以设置与另一应用软件之间的通信,通过人机交互来实现各种各样的服务
常见的应用层服务
例如:HTTP、HTTPS、FTP、Telnet、SSH、SMTP、POP3等。
表示层(Presentation Layer)
把数据转换为能与接收者的系统格式兼容并适合传输的格式,主要进行编码、解码、加密、解密
会话层(Session Layer)
负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接。主要任务是发现、建立、维持 、终止会话
传输层:(Transport Layer)
该层的协议为应用进程提供端到端的通信服务。它提供面向连接的数据流支持、可靠性、流量控制、多路复用等服务;把传输表头(TH)加至资料以形成分组。传输表头包含了所使用的协议等发送信息。
1、通过端口号来区分不同的服务
端口号的种类:静态端口号、动态端口号
端口号的范围:0-65535
静态端口号:1-1023
动态端口号:1024-65535
0端口号:保留端口号——网络编程中使用——代表所有端口号
一个端口号对应一个服务,呈暂时捆绑关系
- 标准既定的端口号:这种方法也叫静态方法。它是指每个应用程序都有其指定的端口号。但并不是说可以随意使用任何一个端口号。例如 HTTP、FTP、TELNET 等广为使用的应用协议中所使用的端口号就是固定的。这些端口号被称为知名端口号,分布在 0~1023 之间;除知名端口号之外,还有一些端口号被正式注册,它们分布在 1024~49151 之间,不过这些端口号可用于任何通信用途。
- 时序分配法:服务器有必要确定监听端口号,但是接受服务的客户端没必要确定端口号。在这种方法下,客户端应用程序完全可以不用自己设置端口号,而全权交给操作系统进行分配。动态分配的端口号范围在 49152~65535 之间。
协议号——标识上层协议,协议号是存在于IP数据报首部的20字节的固定部分,占有8bit,该字段是指出此数据报所携带的数据使用了何种协议,以便目的主机的IP层知道将数据部分上交给哪个处理过程。也就是协议字段告诉IP层应当如何交付数据。
端口号与协议
- 端口号由其使用的传输层协议决定。因此,不同的传输层协议可以使用相同的端口号。
- 此外,那些知名端口号与传输层协议并无关系。只要端口一致都将分配同一种应用程序进行处理。
传输层常用的两个协议:TCP和UDP
TCP -- 传输控制协议,面向连接的可靠传输、基于字节流的传输层通信协议
TCP可靠的原因是因为存在特定的机制:确认 重传(主要作用) 排序 流控(辅助作用)
TCP报头
常用基于TCP协议的服务的协议及其端口号
FTP | 文件传输协议 数据端口(数据传送端口) TCP 20;控制端口 (传输控制信号)TCP21 |
Telnet | 远程登陆TCP 23明文传输 |
SSH | 安全外壳协议 TCP 22密文传输 |
HTTP | 超文本传输协议 TCP 80 8080 |
HTTPS | 安全的超文本传输协议 TCP 443 |
SMTP | 简单邮件传输协议 TCP 25 |
POP3 | 邮局协议 TCP 110 |
VNC | 虚拟网络计算 远程共享桌面技术 TCP 5900 |
UDP 用户数据报文协议 非面向连接的不可靠传输协议
UDP的报头
常见的基于UDP协议的服务机器端口号
TFTP | 简单文件传输协议 UDP 69 |
DNS | 域名解析系统 TCP/UDP 53 |
确保TCP面向连接的方式:三次握手 四次挥手
三次握手的过程及图解
- 第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
- 第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
- 第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
问题:为什么是三次握手?两次不可以吗?
一句话,主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。
如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。
四次挥手过程及图解
- 四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
- 由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
中断连接端可以是客户端,也可以是服务器端。
- 第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
- 第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
- 第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
- 第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。
TCP的工作模式:全双工
常见的工作模式:全双工、半双工、单工
全双工:客户端在给服务端发送信息的同时,服务端也可以给客户端发送信息
半双工:客户端在给服务端发送信息的同时,服务端不可以给客户端发送信息;但是双方都可以互相发送信息
单工:客户端只能给服务端发,或服务端只能给客户端发
传输层还可以数据分段
MSS 最大段长度 1480B
MTU 最大传输单元 1500B
网络层
根据IP地址进行逻辑寻址,实现点到点之间的通信
IP的报头
IP协议
IP 大致分为三大作用模块,它们是 IP 寻址、路由(最终节点为止的转发)以及 IP 分包与组包。
1. IP 地址
1.1 IP 地址概述
- 在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识。在数据链路中的 MAC 地址正是用来标识同一个链路中不同计算机的一种识别码。
- 作为网络层的 IP ,也有这种地址信息,一般叫做 IP 地址。IP 地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在 TCP/IP 通信中所有主机或路由器必须设定自己的 IP 地址。
- 不论一台主机与哪种数据链路连接,其 IP 地址的形式都保持不变。
- IP 地址(IPv4 地址)由32位正整数来表示。IP 地址在计算机内部以二进制方式被处理。然而,由于我们并不习惯于采用二进制方式,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数。如下:
1.2 IP 地址由网络和主机两部分标识组成
- 如下图,网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具有了唯一性。
1.3 IP 地址的分类
- IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。
- A 类 IP 地址是首位以 “0” 开头的地址。从第 1 位到第 8 位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。
- B 类 IP 地址是前两位 “10” 的地址。从第 1 位到第 16 位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。
- C 类 IP 地址是前三位为 “110” 的地址。从第 1 位到第 24 位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。
- D 类 IP 地址是前四位为 “1110” 的地址。从第 1 位到第 32 位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D 类地址没有主机标识,常用于多播。
- 在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为 0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或 IP 地址不可以获知的情况下才使用。而全部为 1 的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只能有 254( 28 - 2 = 254)个主机地址的原因。
1.4 广播地址
- 广播地址用于在同一个链路中相互连接的主机之间发送数据包。将 IP 地址中的主机地址部分全部设置为 1,就成了广播地址。
- 广播分为本地广播和直接广播两种。在本网络内的广播叫做本地广播;在不同网络之间的广播叫做直接广播。
1.5 IP 多播
- 多播用于将包发送给特定组内的所有主机。由于其直接使用 IP 地址,因此也不存在可靠传输。
- 相比于广播,多播既可以穿透路由器,又可以实现只给那些必要的组发送数据包。请看下图:
- 多播使用 D 类地址。因此,如果从首位开始到第 4 位是 “1110”,就可以认为是多播地址。而剩下的 28 位可以成为多播的组编号。
- 此外, 对于多播,所有的主机(路由器以外的主机和终端主机)必须属于 224.0.0.1 的组,所有的路由器必须属于 224.0.0.2 的组。
1.6 子网掩码
- 现在一个 IP 地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际上就是将原来 A 类、B 类、C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。
- 子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为 “1”,对应 IP 地址主机标识的部分则全部为 “0”。由此,一个 IP 地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是 IP 地址的首位开始连续的 “1”。
- 对于子网掩码,目前有两种表示方式。
- 第一种是,将 IP 地址与子网掩码的地址分别用两行来表示。以 172.20.100.52 的前 26 位是网络地址的情况为例,如下:
- 第二种表示方式是,在每个 IP 地址后面追加网络地址的位数用 “/ ” 隔开,如下:
数据链路层
数据链路层提供节点到结点的数据传输——两个直接连接的节点之间的链接。它检测并可能纠正物理层中可能发生的错误。它定义了在两个物理连接的设备之间建立和终止连接的协议。它还定义了它们之间的流量控制协议。
IEEE 802将数据链路层分为两个子层:
- 媒体访问控制(MAC) 层——负责控制网络中的设备如何获得对媒体的访问权限以及传输数据的权限,为上层服务提供FCS校验
- 逻辑链路控制(LLC)层——负责识别和封装网络层协议,控制错误检查和帧同步,根据MAC进行物理寻址
数据链路层常用的协议
SLIP协议是指串行线路网际协议(Serial Line Internet Protocol),是最早的、也是仅有的两个串行IP协议之一,属于异型IP协议。
SLIP协议实现了在串行通信线路上运行TCP/IP协议及其应用服务的功能,为千家万户上网提供了拨号IP模式,并且为行业用户通过串行媒介传输IP datagram提供了专线IP模式。
串行线路互联网络协议SLIP(Serial Line Internet Protocol)是在串行通信线路上支持TCP/IP协议的一种点对点(Point-to-Point)式的链路层通信协议,不但能够发送和接收IP datagram,还提供了TCP/IP的各种网络应用服务(如rlogin、telnet、ftp、rtp等)。个人用户可利用SLIP协议拨号上网,行业用户则可通过租用SLIP专线远程传输业务数据。