目录[-]
几近所有的计算机程序,都会牵涉到网络通讯。因此,了解计算机基础网络知识,对每个程序员来讲都是异常重要的。
本文在介绍1些基础网络知识的同时,给出了1些高质量的系列文章链接,以方便大家随时参考学习。相信通过本文的学习,你能对计算机网络有全面的认识!
在浏览本文之前,建议浏览以下两遍文章,以便对”计算机网络是如何工作”的有个大概的了解。
互联网协议入门(1)
互联网协议入门(2)
接下来,我们介绍1些基础网络知识。
1上来就是OSI7层参考模型,是否是有点晕?如果是,那先浏览文章开头推荐的那两篇文章吧!
第7层 利用层(Application Layer)
利用层能与利用程序界面沟通,以到达展现给用户的目的。 在此常见的协议有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
第6层 表示层(Presentation Layer)
表示层能为不同的客户端提供数据和信息的语法转换内码,使系统能解读成正确的数据。同时,也能提供紧缩解压、加密解密。
第5层 会话层(Session Layer)
会话层用于为通讯双方制定通讯方式,并创建、注销会话(双方通讯)。
第4层 传输层(Transport Layer)
传输层用于控制数据流量,并且进行调试及毛病处理,以确保通讯顺利。而发送真个传输层会为分组加上序号,方便接收端把分组重组为有用的数据或文件。
第3层 网络层(Network Layer)
网络层的作用是决定如何将发送方的数据传到接收方。该层通过斟酌网络堵塞程度、服务质量、发送优先权、每次路由的耗费来决定节点X到节点Y的最好路径。我们熟知的路由器就工作在这1层,通过不断的接收与传送数据使得网络变得相互联通。
第2层 数据链路层(Data link Layer)
首先数据链路层的功能在于管理第1层的比特数据,并且将正确的数据发送到没有传输毛病的线路中。创建还有辨认数据开始和退出的位置同时予以标记。 另外,就是处理由数据受损、丢失乃至重复传输毛病的问题,使后续的层级不会遭到影响,所以它运行数据的调试、重传或修正,还有决定装备什么时候进行传输。 设 备有:Bridge桥接器switch交换器
第1层 物理层(Physical Layer)
物理层定义了所有电子及物理装备的规范。其中特别定义了装备与物理媒介之间的关系,这包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配 器(在SAN中使用的主机适配器)和其他的装备的设计定义。由于物理层传送的是原始的比特数据流,即设计的目的是为了保证当发送时的信号为2进制“1” 时,对方接收到的也是2进制“1”而不是2进制“0”。因此就需要定义哪一个装备有几个针脚,其中哪一个针脚发送的多少电压代表2进制“1”或2进制“0”, 还有例如1个bit需要延续几微秒,传输信号是不是在双向上同时进行,最初的连接如何创建和终究如何终止等问题。
为了更好理解物理层与数据链路层之间的区分,可以把物理层认为是主要的,是与某个单1装备与传输媒介之间的交互有关,而数据链路层则更多地关注使用 同1个通讯媒介的多个装备(例如,最少两个装备)之间的互动。物理层的作用是告知某个装备如何传送信号至1个通讯媒介,和另外1个装备如何接收这个信号 (大多数情况下它其实不会告知装备如何与通讯媒介相连接)。有些过时的物理层标准如RS⑵32倒是的确使用物理线缆来控制通讯媒介的接入。
物理层的主要功能和提供的服务以下:
在装备与传输媒介之间创建及终止连接。
参与通讯进程使得资源可以在同享的多用户中有效分配。例如,冲突解决机制和流量控制。
对信号进行调制或转换使得用户装备中的数字信号定义能与信道上实际传送的数字信号相匹配。这些信号可以经过物理线缆(例如铜缆和光缆)或是无线信道传送。
相比于OSI的7层模型,更经常使用的是TCP/IP的5层模型。TCP/IP的5层模型是将ISO的7层模型的利用层、表示层、会话层合并为利用层,得到以下图所示的5层模型:
3次握手:
第1次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第2次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送1个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第3次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送终了,客户端和服务器进入ESTABLISHED状态,完成3次握手。
握手进程中传送的包里不包括数据,3次握手终了后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接1旦建立,在通讯双方中的任何1方主动关闭连接之前,TCP 连接都将被1直保持下去。
与建立连接的“3次握手”类似,断开1个TCP连接则需要“4次握手”。
第1次挥手:主动关闭方发送1个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告知被动关闭方:我已不 会再给你发数据了(固然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方仍然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第2次挥手:被动关闭方收到FIN包后,发送1个ACK给对方,确认序号为收到序号+1(与SYN相同,1个FIN占用1个序号)。
第3次挥手:被动关闭方发送1个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告知主动关闭方,我的数据也发送完了,不会再给你发数据了。
第4次挥手:主动关闭方收到FIN后,发送1个ACK给被动关闭方,确认序号为收到序号+1,至此,完成4次挥手。
TCP/IP协议是计算机网络中的1个协议族,也是网络编程中的重头戏!理解TCP/IP状态转化图,对理解TCP/IP协议的工作进程异常重要。
以下图所示,描写了1个状态机到另外一个状态机的转变,已触发这类状态转变的条件。
状态图详细说明以下:
1.CLOSED:起始点,在超时或连接关闭时候进入此状态。
2.LISTEN:svr端在等待连接过来时候的状态,svr端为此要调用socket,bind,listen函数,就可以进入此状态。此称为利用程序被动打开(等待客户端来连接)。
3.SYN_SENT:客户端发起连接,发送SYN给服务器端。如果服务器端不能连接,则直接进入CLOSED状态。
4.SYN_RCVD:跟3对应,服务器端接受客户真个SYN要求,服务器端由LISTEN状态进入SYN_RCVD状态。同时服务器端要回应1个ACK,同时发送1个SYN给客户端;另外1种情况,客户端在发起SYN的同时接收到服务器端得SYN要求,客户端就会由SYN_SENT到SYN_RCVD状态。
5.ESTABLISHED:服务器端和客户端在完成3次握手进入状态,说明已可以开始传输数据了。
以上是建立连接时服务器端和客户端产生的状态转移说明。相对来讲比较简单明了,如果你对3次握手比较熟习,建立连接时的状态转移还是很容易理解。
下面,我们来看看连接关闭时候的状态转移说明,关闭需要进行4次双方的交互,还包括要处理1些善后工作(TIME_WAIT状态),注意,这里主动关闭的1方或被动关闭的1方不是指特指服务器端或客户端,是相对谁先发起关闭要求来讲的:
6.FIN_WAIT_1:主动关闭的1方,由状态5进入此状态。具体的动作是发送FIN给对方。
7.FIN_WAIT_2:主动关闭的1方,接收到对方的FIN -ACK,进入此状态。由此不能再接收对方的数据。但是能够向对方发送数据。
8.CLOSE_WAIT:接收到FIN以后,被动关闭的1方进入此状态。具体动作是接收到FIN,同时发送ACK。
9.LAST_ACK:被动关闭的1方,发起关闭要求,由状态8进入此状态。具体动作是发送FIN给对方,同时在接收到ACK时进入CLOSED状态。
10.CLOSING:两边同时发起关闭要求时,会由FIN_WAIT_1进入此状态。具体动作是接收到FIN要求,同时响应1个ACK。
11.TIME_WAIT:最纠结的状态来了。从状态图上可以看出,有3个状态可以转化成它,我们逐一来分析:
a.由FIN_WAIT_2进入此状态:在双方不同时发起FIN的情况下,主动关闭的1方在完成本身发起的关闭要求后,接收到被动关闭1方的FIN落后入的状态。
b.由CLOSING状态进入:双方同时发起关闭,都做了发起FIN的要求,同时接收到了FIN并做了ACK的情况下,由CLOSING状态进入。
c.由FIN_WAIT_1状态进入:同时接遭到FIN(对方发起),ACK(本身发起的FIN回应),与b的区分在于本身发起的FIN回应的ACK先于对方的FIN要求到达,而b是FIN先到达。这类情况几率最小。
关闭的4次连接最难理解的状态是TIME_WAIT,存在TIME_WAIT的2个理由:
1.可靠地实现TCP全双工连接的终止。
2.允许老的重复分节在网络中消逝。
MAC地址(Media Access Control Address),媒体访问控制地址,或称为物理地址,是用来定义网络装备的位置的。在OSI模型中,第3层网络层负责IP地址,第2层数据链结层则负责MAC地址。1个主机会有1个IP地址,而每一个网络位置会有1个专属于它的MAC地址。
地址解析协议(Address Resolution Protocol),其基本功能为通过目标装备的IP地址,查询目标装备的MAC地址,以保证通讯的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替换。
在每台安装有TCP/IP协议的电脑或路由器里都有1个ARP缓存表,表里的IP地址与MAC地址是1对应的,以下表所示。
主机名称 | IP地址 | MAC地址 |
A | 192.168.38.10 | 00-AA-00⑹2-D2-02 |
B | 192.168.38.11 | 00-BB-00⑹2-C2-02 |
C | 192.168.38.12 | 00-CC-00⑹2-C2-02 |
D | 192.168.38.13 | 00-DD-00⑹2-C2-02 |
E | 192.168.38.14 | 00-EE-00⑹2-C2-02 |
… | … | … |
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻觅 是不是有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00⑹2-C2-02),直接把目标MAC地址写入帧里面发送就能够了;如 果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送1个广播(ARP request),目标MAC地址是 “FF.FF.FF.FF.FF.FF”,这表示向同1网段内的所有主机发出这样的询 问:“192.168.38.11的MAC地址是甚么?”网络上其 他主机其实不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地 址是(00-BB-00⑹2-C2-02)”。 这样,主机A就知道了主机B的MAC地址,它就能够向主机B发送信息了。同时它还更新了自己的ARP缓 存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就能够了。ARP缓存表采取了老化机制,在1段时间内如果表中的某1行没有使用,就会被删除, 这样可以大大减少ARP缓存表的长度,加快查询速度。
1)交换机
在计算机网络系统中,交换机是针对同享工作模式的弱点而推出的。交换机具有1条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背 部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对比表以肯定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪一个端口上,通过内部 交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表 中。
交换机工作于OSI参考模型的第2层,即数据链路层。交换机内部的CPU会在每一个端口成功连接时,通过ARP协议学习它的MAC地址,保存成1张 ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不 能划分网络层广播,即广播域。
交换机被广泛利用于2层网络交换,俗称“2层交换机”。
交换机的种类有:2层交换机、3层交换机、4层交换机、7层交换机分别工作在OSI7层模型中的第2层、第3层、第4层盒第7层,并因此而得名。
2)路由器
路由器(Router)是1种计算机网络装备,提供了路由与转送两种重要机制,可以决定数据包历来源端到目的端所经过 的路由路径(host到host之间的传输路径),这个进程称为路由;将路由器输入真个数据包移送至适当的路由器输出端(在路由器内部进行),这称为转 送。路由工作在OSI模型的第3层――即网络层,例如网际协议。
路由器的1个作用是连通不同的网络,另外一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第3层的产品,交换器是OSI第2层的产品(这里特指2层交换机)。
3)网关
网关(Gateway),网关顾名思义就是连接两个网络的装备,区分于路由器(由于历史的缘由,许多有关TCP/IP 的文献曾把网络层使用的路由器(Router)称为网关,在今天很多局域网采取都是路由来接入网络,因此现在通常指的网关就是路由器的IP),常常在家 庭中或小型企业网络中使用,用于连接局域网和Internet。 网关也常常指把1种协议转成另外一种协议的装备,比如语音网关。
在传统TCP/IP术语中,网络装备只分成两种,1种为网关(gateway),另外一种为主机(host)。网关能在网络间转递数据包,但主机不能 转送数据包。在主机(又称终端系统,end system)中,数据包需经过TCP/IP4层协议处理,但是在网关(又称中介系 统,intermediate system)只需要到达网际层(Internet layer),决定路径以后就能够转送。在当时,网关 (gateway)与路由器(router)还没有区分。
在现代网络术语中,网关(gateway)与路由器(router)的定义不同。网关(gateway)能在不同协议间移动数据,而路由器(router)是在不同网络间移动数据,相当于传统所说的IP网关(IP gateway)。
网关是连接两个网络的装备,对语音网关来讲,他可以连接PSTN网络和以太网,这就相当于VOIP,把不同电话中的摹拟信号通过网关而转换成数字信号,而且加入协议再去传输。在到了接收真个时候再通过网关还原成摹拟的电话信号,最后才能在电话机上听到。
对以太网中的网关只能转发3层以上数据包,这1点和路由是1样的。而不同的是网关中并没有路由表,他只能依照预先设定的不同网段来进行转发。网关最重要的1点就是端口映照,子网内用户在外网看来只是外网的IP地址对应着不同的端口,这样看来就会保护子网内的用户。
路由表(routing table)或称路由择域信息库(、 Routing Information Base),是1个存储在路由器或联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。
路由表使用了和利用地图投递包裹相似的思想。只要网络上的1个节点需要发送数据给网络上的另外一个节点,它就必须要知道把数据发送到哪。装备不可能直接连接到目的节点,它需要找到另外一个方式去发送数据包。在局域网中,节点也不知道如何发送IP包到网关。将数据包发到正确的地址是1个复杂的任务,网关需要记录发送数据包的路径信息。路由表就存储着这样的路径信息,就如地图1样,是1个记录路径信息,并为需要这些信息的节点提供服务的数据库。
以下图所示为1张路由表:
路由表参数说明:
Destination:目的网段
mask:子网掩码
interface:到达该目的地的本路由器的出口ip
gateway:下1跳路由器入口的ip,路由器通过interface和gateway定义1调到下1个路由器的链路,通常情况下,interface和gateway是同1网段的
metric:跳数,该条路由记录的质量,1般情况下,如果有多条到达相同目的地的路由记录,路由器会采取metric值小的那条路由
最大传输单元(Maximum Transmission Unit,MTU)是指1种通讯协议的某1层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通讯接口有关(网络接口卡、串口等)。
因特网协议允许IP分片,这样就能够将数据包分成足够小的片断以通过那些最大传输单元小于该数据包原始大小的链路了。这1分片进程产生在网络层 (OSI 模型的第3层),第4层为传输层,传输层是 OSI 模型中最重要的1层,这里是根据窗口控制传输,而非MTU。传输协议同时进行流量控制或是 基于接收方可接收数据的快慢程度规定适当的发送速率。除此以外,传输层依照网络能处理的最大尺寸将较长的数据包进行强迫分割。例如,以太网没法接收大于 1500字节的数据包。发送方节点的传输层将数据分割成较小的数据片,同时对每数据片安排1序列号,以便数据到达接收方节点的传输层时,能以正确的顺序 重组,该进程即被称为排序。它使用的是将分组发送到链路上的网络接口的最大传输单元的值。
以太网MTU值为1500字节 。
路由信息协议(Routing Information Protocol,RIP)是1种使用最广泛的内部网关协议(IGP)。(IGP)是在内部网络上使用的路由协议(在少数情形下,也能够用于连接到因特网的网络),它可以通过不断的交换信息让路由器动态的适应网络连接的变化,这些信息包括每一个路由器可以到达哪些网络,这些网络有多远等, RIP 属于网络层。
开放式最短路径优先(Open Shortest Path First,OSPF)是对链路状态路由协议的1种实现,是大中型网络上使用最为广泛的IGP(Interior Gateway Protocol)协议,运作于自治系统内部。著名的迪克斯加算法被用来计算最短路径树。它使用“代价(Cost)”作为路由度量。链路状态数据库(LSDB)用来保存当前网络拓扑结构,它在同1区域中的所有路由器上是相同的。
BGP (边界网关协议,Border Gateway Protocol )是自治系统之间的路由选择协议,
下一篇 80后在上海的8年总结