计算机网络基础

计算机网络

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

    网络究竟是什么?两台计算机直接是如何进行通信的?

早期:联机


以太网:局域网与交换机

广播

        主机之间的"one to all"的通讯模式,网络对其中每一台主机发出的信号都进行无条件的复制并转发,所有主机都可以收到该信息(不管你需要与否),由于其不用路径选择,网络成本很低廉。有线电视就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,以防止广播数据影响大面积的主机。

ip地址与ip协议

  • 规定网络地址的协议叫做ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示
  • 范围:0.0.0.0 ~ 255.255.255.255
  • 一个ip地址通常写成四段十进制数:如 172.16.10.1

mac地址

    Ethernet规定接入Internet的设备都必须具备网卡,发送端和接收端的地址就是指网卡的地址,即mac地址。

    每块网卡出厂时都被烧制上全球唯一的mac地址,长度为48位的2进制,通常用12位16进制表示(前六位为厂商编号,后六位为流水线号)

arp协议  —— 查询ip地址和mac地址之间的对应关系

    arp(Address Resolution Protocol),即地址解析协议,是根据ip地址获取mac地址的一个TCP/IP协议。

    主机发送信息时将包含目标IP地址的ARP请求广播到网络上所有的主机,并接受使用目标ip的主机的返回消息,以此确定目标的mac地址。 收到返回消息后将该ip地址与mac地址的对应关系存入本机ARP缓存中保留一定时间,下次请求时直接查询ARP缓存已节约资源。

    ARP协议是建立在网络中各个主机相互信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机的ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或者到达错误的主机,这就是传说中的ARP欺骗。

    ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。 

广域网与路由器

路由器

       路由器(Router),是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,为信号的传输指定最佳路径。路由器是互联网络的枢纽,"交通警察"。目前路由器已经广泛应用于各行各业,各种不同档次的产品已成为实现各种骨干网内部连接、骨干网间互联和骨干网与互联网互联互通业务的主力军。路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。

        路由器(Router)又称网关设备(Gateway)是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。

局域网

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

子网掩码

        所谓”子网掩码”,就是表示子网络特征的一个参数。它在形式上等同于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),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。 

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

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确认。这种建立连接的方法可以防止产生错误的连接。

        TCP三次握手的过程如下:

  •         客户端发送SYN(seq=x)报文给服务器端,进入SYN_SEND状态;
  •         服务端收到SYN报文,回应一个SYN(seq=y) ACK(ack=x+1)报文,进入SYN_RECV状态;
  •         客户端收到服务端的SYN报文,客户端进入ESTABLISHED状态;然后回应一个ACK(ACK=y+1)报文,服务器端进入ESTABLISHED状态;

        至此,三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

        那么为什么断开连接需要四次挥手呢?

        首先,建立连接时其实也是分为四步,只不过第二步和第三步可以合并为一个报文一起发送;但TCP是双全工的,也就是双发均可以收、发数据包,当主动断开端发送要发送的最后一个数据包时,会加上FIN标识,次数连接的对端也就是被动断开端回复一个ACK以确认:对面的可以断开了,但此时被动断开端的数据可能还未发送完毕,此时仍可以进行半全工通讯,通常情况下第二步和第三步不合并,所以需要四次挥手。

        建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由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与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
        (3) 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。

无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。

UDP协议

        当应用程序希望通过UDP与一个应用程序通信时,传输数据之前源端和终端不建立连接。当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

TCP和UDP的对比

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

        TCP是面向连接的,有比较高的可靠性, 一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。

        而UDP是面向无连接的,使用这个协议的常见服务有DNS、SNMP、QQ等。

互联网协议与osi模型

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


每层常见的物理设备:


每层常见的协议:


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010525694/article/details/80346492
个人分类: python
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭