最近从朋友同行了解到,目前面试都会问各种相关的知识,从集合到数据机构, 从tcp到UDP,从native到js, 从优化到架构,从安全到Linux ,没有面试官问不到的,只有你想不到的,如果你还没有准备 今天就先复习下网络相关的,文章主要知识点:网络模型,四次握手,IP报文, 网络硬件介绍等。
互联技术
虽然作为程序员来讲不必过多的去了解网络互联的相关技术,但是目前互联网已经转向了物联网时代,从刚开始的软件+网络,成为今天的硬件+软件+网络的模式(即物联网) 智能家居, 人工智能的实现模式也是典型的物联网产物。因此有网络基础对成为一个高级软件架构师有着无比轻重的作用,因此接下来几篇文章我会给大家复习下网络相关的知识,目前主流的互联技术包括小规模的主机互联(局域网)和大规模的主机互联(广域网)。主机互联一般基于的通信模式有一对一通信(双方)和多对多通信(多方)由以下两种通信方式。
双方通信
–双方信息打包后放到通信线路上发送,就能到达对方。 –在通信线路上只有两方,所收到的信息必然是对方发过来给我的。
多方通信
只将信息打包后就放到通信线路上去发送,那么就无法知道到是从哪儿发来的然后到底底是发给谁的信息。 因此,我们需要给每一个通信终端都编一个号,也就是IP地址(IP地址)。 虽然程序员和硬件扯不上太大的关系,但是我们还是要知道早期的局域网是同过双绞线和同轴电缆当作通信介质,但是由于介质的损耗和带宽问题,目前已采用光纤通信, 采用光速,不仅提高了传输速率,而且减少了损耗。以下两种介质的对比。
网络基础
在大致了解网络通信前,我们必须了解几个概念,IP地址,MAC地址,路由表,TCP/UDP协议,和网络层次模型
1
OSI七层模型
计算机网络通信制定的一个7层框架,协议的七层框架,称为:“OSI/RM"。OSI模型分为七层,依次从底层到上层为,物理层,数据链路层,传输层,会话层,表示层,应用层。每个层此又为上层提供服务,说
2
TCP四层模型
TCP/IP通讯协议采用了4层的层级结构,分别为:
其具体功能前我用现实中的硬件设备来对比一下.
3
Mac地址
Mac地址即设备物理地址,他类似人类的身份证,每个人出生就开始编制了号码,其互联网设备出厂也会标志唯一的mac地址,物理地址由IEEE统一指定和分配,比如联想和惠普就有不同的区段范围的mac地址,其原理和规则是: MAC统一编址,MAC地址长6个字节(48位),全球唯一。前24为OUI,由IEEE分配给各网络厂家。后24位为EUI,由厂家自行分配。
4
路由表
又称全局路由表,存储在路由器的内存中,用于指示路由器发送IP数据包转发至正确目的地的信息表。列如,生活中我们去乘火车,我们只关心目的城市,从上车之前我们并不知道其最近路线,二路由器就里面就保存着我们下一站的信息,火车没到一个站,都要经过铁路公司的统一安排开始进入对应的股道,而路由器就是铁路中的小枢纽站一样。
5
TCP/IP
上面提到Tcp /IP是一种互联网通信协议,它包括四层模型,各自进行自己的职责。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言: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传送有关单个主机的信息。
常见Tcp的端口号
常见Tcp的端口号:
ICMP与IP位于同一层,它被用来传送IP的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的‘Redirect’信息通知主机通向其他系统的更准确的路径,而‘Unreachable’信息则指出路径有问题。另外,如果路径不可用了,ICMP可以使TCP连接‘体面地’终止。PING是最常用的基于ICMP的服务。
两个系统间的多重Telnet连接是如何相互确认并协调一致呢?TCP或UDP连接唯一地使用每个信息中的如下四项进行确认:
源IP地址 发送包的IP地址。 目的IP地址 接收包的IP地址。 源端口 源系统上的连接的端口。 目的端口 目的系统上的连接的端口。
端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口,例如,SMTP使用25、Xwindows使用6000。Tomcat的端口:8080,这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯,列如我们去建立聊天通讯的指定的自定义端口(8090)。
数据帧:帧头+IP数据包+帧尾 (帧头包括源和目标主机MAC初步地址及类型,帧尾是校验字) IP数据包:IP头部+TCP数据信息(IP头包括源和目标主机IP地址、类型、生存期等) TCP数据信息:TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校验字等) 常见的以太帧结构
在因特网上连接的所有计算机,从大型机到微型计算机都是以独立的身份出现,我们称它为主机。为了实现各主机间的通信,每台主机都必须有一个唯一的网络地址。就好像每一个住宅都有唯一的门牌一样,才不至于在传输资料时出现混乱。 Internet的网络地址是指连入Internet网络的计算机的地址编号。所以,在Internet网络中,网络地址唯一地标识一台计算机。我们都已经知道,Internet是由几千万台计算机互相连接而成的。而我们要确认网络上的每一台计算机,靠的就是能唯一标识该计算机的网络地址,这个地址就叫做IP(Internet Protocol的简写)地址,即用Internet协议语言表示的地址。 在Internet里,IP地址是一个32位的二进制地址,为了便于记忆,将它们分为4组,每组8位,由小数点分开,用四个字节来表示,而且,用点分开的每个字节的数值范围是0~255,如202.116.0.1,这种书写方法叫做点数表示法。 IP包的头文件结构:
对有着开发经验的程序员来说,概念或许你并不知道,但是你知道socket建立时我需要指定目标地址,和主机端口号。而这些是怎么IP协议发送过去的呢,首先发送方进行封包,路由器进行不断转发,最后找到目标主机进行拆包,然后读取信息。
网络建立连接有个三次握手协议,通俗讲,小时候你出去玩了,你很饿,你就喊妈妈,问妈妈饭最好了吗,你妈妈说好了,你说可以过去吃饭吗,妈妈说可以了,这样你才能回家吃饭。计算机通信也是这样。
如下图,A向B请求,B收到后应答给A,然后A收到B的应答信息后再继续应答B, B收到后双方建立连接。 注意:后面我们程序的非对称加密协议和网网络连接一样类似,后面我会讲到。
当我的连接建立时我通常开始主机A的封包和主机B的解包,当然解包是封包的逆过程,通常称为完整的一次连接。
这里我们还需要知道两个概念DNS和ARP
本文大概了解下TCP/IP的架构分布和传输协议,以及网络通讯的术语和各自功能,包括几种连接方式,其建立成功连接需要的必要数据结构,曾经记得有次面试遇到了有关网络的面试题,有可能面试官懂点网络基础,想来虐虐我,最后没想到我从头讲到尾,但遗憾的是我还是未被录取。之前几篇介绍了一些应用层安全策略,在后续的几篇文章中,我陆续大致会给大家介绍下网络分布拓扑结构,和网络安全知识和数据加解密的有关知识,但只限于作为Android程序员来掌握的知识水平 有兴趣的可以关注。
推荐
技术 - 资讯 - 感悟
END