计算机网络

计算机网络的发展及基础网络概念

问题:网络究竟是什么?计算机之间是如何通讯的?缓存

早期 : 联机

 以太网 : 局域网与交换机

广播

  主机之间“一对全部”的通信模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,全部主机均可以接收到全部信息(无论你是否须要),因为其不用路径选择,因此其网络成本能够很低廉。有线电视网就是典型的广播型网络,咱们的电视机其实是接受到全部频道的信号,但只将一个频道的信号还原成画面。在数据网络中也容许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。服务器

ip地址与ip协议

  • 规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,普遍采用的v4版本即ipv4,它规定网络地址由32位2进制表示
  • 范围0.0.0.0-255.255.255.255
  • 一个ip地址一般写成四段十进制数,例:172.16.10.1
a类网   10.0.0.0~10.255.255.255

b类网   172.16.0.0~172.31.255.255

c类网   192.168.0.0~192.168.255.255
ip保留地址

 

mac地址

  head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具有网卡,发送端和接收端的地址即是指网卡的地址,即mac地址。网络

  mac地址:每块网卡出厂时都被烧制上一个世界惟一的mac地址,长度为48位2进制,一般由12位16进制数表示(前六位是厂商编号,后六位是流水线号)tcp

arp协议 ——查询IP地址和MAC地址的对应关系

  地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
  主机发送信息时将包含目标IP地址的ARP请求广播到网络上的全部主机,并接收返回消息,以此肯定目标的物理地址。
  收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留必定时间,下次请求时直接查询ARP缓存以节约资源。
  地址解析协议是创建在网络中各个主机互相信任的基础上的,网络上的主机能够自主发送ARP应答消息,其余主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就能够向某一主机发送伪ARP应答报文,使其发送的信息没法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。 

广域网与路由器

路由器

  路由器(Router),是链接因特网中各局域网、广域网的设备,它会根据信道的状况自动选择和设定路由,以最佳路径,按先后顺序发送信号。 路由器是互联网络的枢纽,"交通警察"。目前路由器已经普遍应用于各行各业,各类不一样档次的产品已成为实现各类骨干网内部链接、骨干网间互联和骨干网与互联网互联互通业务的主力军。路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程当中需使用不一样的控制信息,因此说二者实现各自功能的方式是不一样的。
  路由器(Router)又称网关设备(Gateway)是用于链接多个逻辑上分开的网络,所谓逻辑网络是表明一个单独的网络或者一个子网。当数据从一个子网传输到另外一个子网时,可经过路由器的路由功能来完成。所以,路由器具备判断网络地址和选择IP路径的功能,它能在多网络互联环境中,创建灵活的链接,可用彻底不一样的数据分组和介质访问方法链接各类子网,路由器只接受源站或其余路由器的信息,属网络层的一种互联设备。  

局域网

  局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。通常是方圆几公里之内。局域网能够实现文件管理、应用软件共享、打印机共享、工做组内的日程安排、电子邮件和传真通讯服务等功能。局域网是封闭型的,能够由办公室内的两台计算机组成,也能够由一个公司内的上千台计算机组成。  ide

子网掩码 

  所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分所有为1,主机部分所有为0。好比,IP地址172.16.10.1,若是已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。函数

  知道”子网掩码”,咱们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,不然为0),而后比较结果是否相同,若是是的话,就代表它们在同一个子网络中,不然就不是。 post

好比,已知IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?二者与子网掩码分别进行AND运算,

172.16.10.1:10101100.00010000.00001010.000000001
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0

 

172.16.10.2:10101100.00010000.00001010.00000010
255255.255.255.0:11111111.11111111.11111111.00000000
AND运算得网络地址结果:10101100.00010000.00001010.000000001->172.16.10.0
结果都是172.16.10.0,所以它们在同一个子网络。
例如

总结一下,IP协议的做用主要有两个,一个是为每一台计算机分配IP地址,另外一个是肯定哪些地址在同一个子网络。spa

tcp协议和udp协议

用于应用程序之间的通讯。若是说ip地址和mac地址帮咱们肯定惟一的一台机器,那么咱们怎么找到一台机器上的一个软件呢?计算机网络

端口

  咱们知道,一台拥有IP地址的主机能够提供许多服务,好比Web服务、FTP服务、SMTP服务等,这些服务彻底能够经过1个IP地址来实现。那么,主机是怎样区分不一样的网络服务呢?显然不能只靠IP地址,由于IP 地址与网络服务的关系是一对多的关系。其实是经过“IP地址+端口号”来区分不一样的服务的。代理

TCP协议

  当应用程序但愿经过 TCP 与另外一个应用程序通讯时,它会发送一个通讯请求。这个请求必须被送到一个确切的地址。在双方“握手”以后,TCP 将在两个应用程序之间创建一个全双工 (full-duplex) 的通讯。

  这个全双工的通讯将占用两个计算机之间的通讯线路,直到它被一方或双方关闭为止。

 

TCP是因特网中的传输层协议,使用三次握手协议创建链接。当主动方发出SYN链接请求后,等待对方回答SYN+ACK[1],并最终对对方的 SYN 执行 ACK 确认。这种创建链接的方法能够防止产生错误的链接。[1] 
TCP三次握手的过程以下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地创建链接,能够开始传输数据了。
tcp的三次握手

  

创建一个链接须要三次握手,而终止一个链接要通过四次握手,这是由TCP的半关闭(half-close)形成的。
(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP因而发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也做为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其余数据以后,由于,FIN的接收意味着接收端应用进程在相应链接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这致使它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。[1] 
既然每一个方向都须要一个FIN和一个ACK,所以一般须要4个分节。
注意:
(1) “一般”是指,某些状况下,步骤1的FIN随数据一块儿发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。[2] 
(2) 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
(3) 当一个Unix进程不管自愿地(调用exit或从main函数返回)仍是非自愿地(收到一个终止本进程的信号)终止时,全部打开的描述符都被关闭,这也致使仍然打开的任何TCP链接上也发出一个FIN。
不管是客户仍是服务器,任何一端均可以执行主动关闭。一般状况是,客户执行主动关闭,可是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。[2] 
tcp的四次挥手

 

UDP协议

  当应用程序但愿经过UDP与一个应用程序通讯时,传输数据以前源端和终端不创建链接。

  当它想传送时就简单地去抓取来自应用程序的数据,并尽量快地把它扔到网络上。

tcp和udp的对比

TCP---传输控制协议,提供的是面向链接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间创建一个TCP链接,以后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另外一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,可是并不能保证它们能到达目的地。因为UDP在传输数据报前不用在客户和服务器之间创建一个链接,且没有超时重发等机制,故而传输速度很快

如今Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,他们对应着Internet上一些常见的服务。这些常见的服务能够分为使用TCP端口(面向链接)和使用UDP端口(面向无链接)两种。 
说到TCP和UDP,首先要明白“链接”和“无链接”的含义,他们的关系能够用一个形象地比喻来讲明,就是打电话和写信。两我的若是要通话,首先要创建链接——即打电话时的拨号,等待响应后——即接听电话后,才能相互传递信息,最后还要断开链接——即挂电话。写信就比较简单了,填写好收信人的地址后将信投入邮筒,收信人就能够收到了。从这个分析能够看出,创建链接能够在须要痛心地双方创建一个传递信息的通道,在发送方发送请求链接信息接收方响应后,因为是在接受方响应后才开始传递信息,并且是在一个通道中传送,所以接受方能比较完整地收到发送方发出的信息,即信息传递的可靠性比较高。但也正由于须要创建链接,使资源开销加大(在创建链接前必须等待接受方响应,传输信息过程当中必须确认信息是否传到及断开链接时发出相应的信号等),独占一个通道,在断开链接钱不能创建另外一个链接,即两人在通话过程当中第三方不能打入电话。而无链接是一开始就发送信息(严格说来,这是没有开始、结束的),只是一次性的传递,是先不须要接受方的响应,于是在必定程度上也没法保证信息传递的可靠性了,就像写信同样,咱们只是将信寄出去,却不能保证收信人必定能够收到。 
TCP是面向链接的,有比较高的可靠性, 一些要求比较高的服务通常使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。
而UDP是面向无链接的,使用这个协议的常见服务有DNS、SNMP、QQ等。对于QQ必须另外说明一下,QQ2003之前是只使用UDP协议的,其服务器使用8000端口,侦听是否有信息传来,客户端使用4000端口,向外发送信息(这也就不难理解在通常的显IP的QQ版本中显示好友的IP地址信息中端口常为4000或其后续端口的缘由了),即QQ程序既接受服务又提供服务,在之后的QQ版本中也支持使用TCP协议了。
更多

 

互联网协议与osi模型

互联网协议按照功能不一样分为osi七层或tcp/ip五层或tcp/ip四层

每层运行常见物理设备

 

每层运行常见的协议