一、网络概述

  1、什么是网络

    网络就是通过有线或无线技术将各种硬件设备连接起来进行数据传输的一种方式。

  2、网络的分类

    根据距离范围可以将网络划分为局域网和广域网。

      局域网:传输距离较近,传输速率快。

      广域网:传输距离较远,比如城市与城市之间,传输速率慢。

  3、OSI七层协议

    网络连接是一个复杂的过程,为了方便网络连接的理解以及各种功能的实现,将各种功能通过分层的方式来使它们不会相互干扰,这个分层的机制就是OSI七层模型。

    下面来看一下每一层负责的任务:

      (1) 物理层:物理层用于定义所使用的传输设备的电压与信号,同时负责将数据帧转成比特流,并发送/接收比特信号。

      (2)数据链路层:此层又分为两个子层介质访问控制(MAC)和逻辑链接控制(LLC)。MAC用于控制网络介质,LLC则负责数据包的处理。在这层中将数据封装成帧格式,相关协议:PPP。

      (3)网络层:负责数据包传输路径的选择。此层将数据封装成包,相关协议:IP。

      (4)传输层:负责建立在传输设备间建立连接,同时包括数据包的格式定义、数据包发送、传输过程侦测,重传等,确保数据包可以正确的被发送。此层将数据封装为段,相关协议:TCP、UDP。

      (5)会话层:用于确定网络服务建立的连接。

      (6)表示层:用于将数据的格式标准化,另外也负责数据的加密。

      (7)应用层:负责将数据发送给应用程序。相关协议:HTTP、FTP、SMTP等。

    数据的传输过程其实就是按照这七个层次在发送端从应用层开始逐层封装后经传输介质(网线、无线信号等)发送出去,再由接收端从物理层开始逐层解封装的过层。

    由于OSI七层协议太过于严谨,使得程序不容易编写,所以并没有得到很好的发展。而目前被广泛使用的是TCP/IP。

  4、TCP/IP

    TCP/IP是从OSI七层协议简化而得来的,其简单的结构使用程序的编写更加容易,这也成为TCP/IP流行于世的原因。

    下面来看一下TCP/IP与OSI七层协议的对应关系:      



OSI七层协议TCP/IP

应用层

表示层

会话层

应用层
传输层

传输层

网络层网络层

数据链路层

物理层

网络接口层

二、以太网

  目前局域网中最常使用的就是以太网,那么到底什么是以太网呢?

  1、CSMA/CD

   CSMA/CD(Carrier Sense Multiple Access with Collision Detection)带冲突检测的载波侦听多路访问是一种数据传输的工作方式,其工作原理为:检测线路是否空闲,空闲时马上发送数据包,并且边发送边侦听,一旦发现有冲突就立即停止发送。

   只要是符合CSMA/CD机制的网络就称为以太网。

   其最典型的应用就是使用集线器Hub连接组成的网络,现在已经很难找个hub了,原因就因为其工作时只能有一个设备发送数据而其它的设备需要排除等待,效率低下,现在流行使用二层交换机来替代hub。

   集线器和二层交换机都是工作在数据链路层的设备,而二层交换机的优势在于hub是一种共享的设备,所有接口共享同一个带宽,而交换机的每个接口都具有独立的带宽。

  2、全双工和半双工

   假设目前带宽为10M,使用半双工的设备每次传输总带宽只能为10M,全双工的设备可以达到20M,因为每次发送和接收的可以同时进行,共享设备不可能达到全双工。

  3、MAC封装格式

   数据链路层的工作是基于MAC地址工作的,CSMA/CD发送出去的帧就是MAC。     

前导码

8Bytes

目的地址

6Bytes

源地址

2Bytes

长度指示

2Bytes

LLC数据

46-1500Bytes

帧校验序列

4Bytes

   目的地址与源地址就是通信两端的网卡地址,每个网卡地址都是全球唯一的,其取值范围为00:00:00:00:00:00到FF:FF:FF:FF:FF:FF,这6bytes当中,前3bytes为厂商的代码,后3bytes为厂商自行定义的编码。

  4、MTU

   以太网中数据帧内的数据容量最大可达1500bytes,这就是MTU最大传输单元。

  5、交换机

   从上面的介绍中我们了解到CSMA/CD机制是利用冲突检测来决定是否发送数据的,一旦有数据正在传输其它设备就只能排队等待,一个集线器无论有多少的端口每次也只能建立一条传输信道,那么我们说这个集线器就是一个冲突域。

   交换机的每个端口都是独立的带宽,所有端口上的设备可以同时进行数据传输,那么每个端口就是一个冲突域。

   交换机内部维护了一张表,表中记录了交换机端口与连接的主机MAC的对应关系,由此可以根据数据帧快速定位到目的主机;交换机每隔一段时间会向端口上的主机进行确认,如果没有回复就从表中删除这条记录。

   交换机这张表的最开始是空的,只有要进行学习后才能在表中填入对应条目。当有主机发起连接请求后,交换机会向所有端口广播这个连接请求,找到正确的目的主机后交换机就会将端口与MAC的对应关系写入表中。由此我们说交换机是就形成了一个广播域。

三、IP数据包的封装

  下面是IP数据包的包头:

1.jpg

  上图中每行所占用的位置必须是32bits。

  内容详解:

    Version(版本):声明这个IP数据包的版本,一般为IPv4;

    IHL(IP包头长度):说明这个IP数据包的包头长度,以4字节为一个单位;

    Service Type(服务类型):服务类型分为以下几种,

      PPP:表示IP数据包的优先级,很少使用;

      D:若为0表示一般延迟,若为1表示为低延迟;

      T:若为0表示一般传输量,若为1表示高传输量;

      R:若为0表示为一般可靠度,若为1表示高可靠度。

    Package Length(总长度):IP包的总长度,包括报头和数据部分;

    Identification(识别码):上面介绍过帧的默认最大传输单元为1500bytes,而IP包最大可以到65536bytes,那么要想将IP包封装到数据帧中就必须将其分割成更小的IP包,那个这个识别码就是用于识别这此小的IP分段是否来自同一个IP包。

    Flags(特殊标志):标志有以下几种:

      D:若为0表示可以分段,若为1表示不可分段;

      M:若为0表示此IP为最后分段,若为1表示非最后分段。

    Frag. Offse(分段偏移):表示目前这个IP分段在原始的IP包中所处的位置,相当于这个IP分段的序号。通过包的总长度、识别码、特殊标志、分段偏移就可以将小的IP分段在接收端组合成完整的IP数据包。

    Time to live(TTL,生存时间):范围0-255。当数据包通过一个路由器时就会减1,当TTL为0时数据包被丢弃。

    Protocol(协议代码):记录来自传输层和网络层本身的协议信息。常见代码如下:

      1:ICMP

      4:IP

      6:TCP

      17:UDP

    Header Checksum(报头校验码):用于检查IP报头是否存在错误。

    Source Address(源IP地址):发送端的IP地址。

   Destination Address(目标IP地址):接收端的IP地址。

    Options(其它参数):包括安全处理机制、路由记录、时间戳等。

    Padding(补齐项目):IP每个数据必须为32bits,如果Options不足32bits时,由Padding主动补齐。

四、路由

  在上面的介绍中了解到交换机是通过MAC地址和广播的方式来查找主机的,如果目标主机不在同一个IP网络内,交换机就无查找到目标主机了,这时就需要用到路由设备来将数据包传送到不同的网络中。

  最早的路由设备是网桥,现在已经看不到了,其工作原理就是在不同的端口上连接两个不同的网络,再通信路由指向使两个网络中的主机可以相互通信。

  现在最常使用的是路由器,工作原理与网桥相同,只不过网桥只有两个接口,而路由器有很多接口,可以连接更多的网络。

  路由器的每个接口都是一个广播域。

五、TCP

  1、TCP报头

2.jpg

  内容详解:

    源端口:端口是用来标记应用程序的,源端口是连接发起端使用的端口,通常为随机端口。

    目的端口:常用的应用都会规定有固定的端口号,如http使用80端口,ssh使用22端口。

    顺序号:当IP包过太时,需要对包进行分段。顺序号就是记录每个数据包的顺序,以方便接收端将包重新组合。

    确认号:当接收端收到数据包后会向发送端发送确认号,告诉发送端数据包被正确传递。

    TCP头长:用于调整整个TCP数据包的大小,说明整个数据包字段的起始位置。

   控制标志码:

      URG:为1代码为紧急数据包,接收端应紧急处理。

      ACK:为1代表这人数据包为响应数据包。

      PSH:为1代表要求对方立即传送缓冲区的其他对应数据包,而无须等待缓冲区满了才送。

      RST:为1代表连接会被马上结束,强制结束连接。

      SYN:为1代表发送端希望双方建立同步连接,表示主动连接对方。

      FIN:为1代表传送结束。

    窗口大小:用于控制数据包流量,表示缓冲区是否还可以接收数据,为0表示无法接收数据。

    校验和:发送端首先会计算一个检验码,接收端收到数据包后会再次计算这个值,如果两个值相符合就接受数据包,否则就认为此数据包已损坏。

    紧急指针:URG为1时才有作用,告知紧急数据所在的位置。

    可选项:表示接收端可以接收的最大数据段容量。

  2、三次握手

    TCP的连接需要经过三次的发送和确认才能建立,这个过程被称为三次握手。

blob.png

    A:数据包发起。

    发起端随机使用一个大于1024的端口发起请求,在TCP报头中标记SYN为1。

    B:数据包接收并确认。

    接收端收到数据包后,回自复一个带有SYN=1,ACK=1的数据包,告诉发送方已接收到数据包,并等发起端的回复。

    C:回复确认数据包。

    发起端收到确认数据包后再次发送一个确认数据包(ACK=1),告诉接收端可以建立连接。

    D:建立连接。

    接收端收到ACK=1的确认数据包后,就可以建立起连接了。

  3、四次挥手

   当TCP连接断开时需要4个步骤,这个断开过程被称为四次挥手。

blob.png

    四次挥手过程很简单:

    1、发起方发送一个FIN请求,要求断开连接。

    2、接收方发收到数据包后如果还没有准备好,可能还有数据没有传输完成,这时回复一个ACK给对方说自己还没准备好,请等待我的回复。

    3、接收方准备好后也会向发起方发送一个FIN请求,说明可以断开连接。

    4、发起方再次回复ACK,接收方收到ACK后则知道可以断开连接了;在等一段时间后没有收到接收方的回复后,发起方也就断开了连接,此时连接则正常关闭。

 

六、UDP数据包

  UDP即用户数据报协议,是不可靠的连接方式。其没有复杂的连接确认机制,所有报头内容较少。

3.jpg


七、应用层

  应用层的作用是标记资源,网络通信的实际上是进程与进程之间的通信,而向进程进行注册通信的不是端口号,而是套接字(socket)。

  socket:即IP:Port。如:192.168.0.1:80