关于计算机网络:计算机网络的拥塞控制
计算机网络的TCP协定是平安、面向连贯的协定,其中保障其安全性就有拥塞管制的性能,明天温习下计算机网络的拥塞管制。拥塞管制分为四个阶段:慢启动、防止拥塞、拥塞产生、快重传。拥塞管制是基于超时重试的根底上,当发送方监测到接受方ack确认包超时,则认为产生拥塞。慢启动:开始传送数据时小批量缓缓发送。防止拥塞:通过慢启动,缓缓增大数据传输量,实现防止数据过大导致拥塞。拥塞产生:呈现超时状况。快重传:期待重试工夫缩小一半。
计算机网络的TCP协定是平安、面向连贯的协定,其中保障其安全性就有拥塞管制的性能,明天温习下计算机网络的拥塞管制。拥塞管制分为四个阶段:慢启动、防止拥塞、拥塞产生、快重传。拥塞管制是基于超时重试的根底上,当发送方监测到接受方ack确认包超时,则认为产生拥塞。慢启动:开始传送数据时小批量缓缓发送。防止拥塞:通过慢启动,缓缓增大数据传输量,实现防止数据过大导致拥塞。拥塞产生:呈现超时状况。快重传:期待重试工夫缩小一半。
互联网的两个根本特点:连通性和共享ISP(internet service provider)ixp(internet exchange point)互联网替换点RFC文档?(requests for comment)所有的互联网规范都是RFC的模式在互联网上公布的。互联网的组成: 边缘局部c/s形式(客户-服务器形式)对等形式(p2p形式):进行平等的,对等连贯通信外围局部路由器电路替换:建设连贯->通话->开释连贯 分组替换:存储转发技术报文交换 广域网、城域网、局域网、集体区域网接入网是从某用户端零碎到互联完中的第一个路由器之间的一种网络。计算机网络的性能指标:速率、带宽、吞吐量、时延、时延带宽积、往返工夫rtt、利用率总时延=发送+传输+解决+排队时延带宽积=流传时延*带宽 网络协议的三要素:语法+语义+同步 网络的体系结构:计算机网络的各层协定的汇合TCP/IP是四层体系结构:网络接口层、网际层、传输层、应用层tcp(transmission control protocol)传输控制协议udp(user datagram protocol)用户数据报协定协定栈的原因:几个档次画在一起很想一个栈构造协定是程度的;服务是垂直的;tcp/ip协定族呈沙漏型;everything over ip 调制?解调?信噪比:信号的平均功率/噪声的平均功率码分复用?每个用户能够在同样的工夫应用同样的频带通信
13.TCPTCP与UDP的区别他们都有特点,依据特点利用场景 tcpudp面向连贯,端到端,一对一反对一对多面向字节流的面向报文的传输牢靠,流量管制,超时重传尽大致力传输,不牢靠头部长,没有可选长度也要20个字节头部开销少只有8个字节为什么要有tcp? 基于ip层的传输报文,不牢靠,tcp牢靠 tcp实现了哪些性能? 牢靠传输,流量管制,拥塞防止,超时重传 三次握手的细节,为什么没有两次,或者4次 三次能够防止历史性连贯,同步双发的序列号,保障点对点有序通信,三次握手可能保障单方都确认对方已收到之前发给对方的包 三次能够搞定,没必要搞四次 三次握手单方的状态 客户端服务端syn_sendsyn_recestablisedestablised为什么是四次挥手,四次挥手的细节 为了保障客户端向服务端发送敞开连贯申请时,服务端还在向客户端传输的数据还能被客户端正确收到,在第二次挥手时,ack和fin报文离开发送,ack的确收到fin报文,fin报文示意申请敞开与客户端的连贯 客户端服务端fin_wait_1close_waitfin_wait_2last_acktime_wait(2msl)closeclose 为什么是两个MSL,为什么要time_wait? 如果没有timewait,客户端间接敞开,存在在路由的服务端向客户端传输数据无奈正确交付,timewait能够实现单方的同步敞开,保障数据传输和承受的牢靠。 须要 TIME-WAIT 状态,次要是两个起因: 避免历史连贯中的数据,被前面雷同四元组的连贯谬误的接管;保障「被动敞开连贯」的一方,能被正确的敞开;对于分片的问题 mtu(最大传输单元) mss(最小数据包) 【见之前画的图】 time_wait次要呈现在被动敞开连贯的一方 在放弃长连贯时,有一方忽然断开连接了,因为tcp有保活机制,长时间没用信息交互时,回发送数据探测报文,如果收回的报文长时 间没有响应,就认为对方挂了,被动敞开连贯。 一个服务器的某个端口可能反对的最大tcp连贯数量次要取决于客户端的客户端的(ip数*端口号) 如何解决time_wait过多的问题 关上 net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_timestamps 选项;net.ipv4.tcp_max_tw_buckets程序中应用 SO_LINGER ,利用强制应用 RST 敞开。 如果服务端要防止过多的 TIME_WAIT 状态的连贯,就永远不要被动断开连接,让客户端去断开,由散布在各处的客户端去接受 TIME_WAIT。 对于服务端半连贯和全连贯的问题? 服务器半连贯的状态是,收到了客户端的连贯申请了但还没有让客户端确认本人曾经承受 全连贯的状态是三次握手曾经实现之后
7. HTTP 常见字段有哪些?客户端Host: www.A.comConnection: keep-aliveAccept: /<br/>Accept-Encoding: gzip, deflate服务端Content-Length: 1000Content-Type: text/html; charset=utf-8Content-Encoding: gzip8. HTTP 缓存技术有哪些?防止反复申请,服务器压力过大 第一次申请的页面缓存在本地,第二次申请雷同的页面时,依据标识和服务器协商,服务器依据标识判断客户端是否能够应用本地缓存 强制缓存:不须要和服务器交互,依据工夫来判断,须要服务器第一次返回的页面设置过期工夫 协商缓存:要和服务器交互,两种形式 申请数据携带第一次返回页面工夫,服务器依据工夫比照以后页面最近更改工夫,返回客户端是否应用缓存申请数据携带第一次返回页面标识符,服务器依据标识符是否存在判断页面有无更改,若无返回数据更新标识符 9. HTTP1.1的优缺点?性能?长处毛病性能简略无状态双刃剑(Cookie)长连贯灵便和易于扩大明文传输双刃剑管道网络传输<br/>HTTP/1.1 管道解决了申请的队头阻塞,然而没有解决响应的队头阻塞。利用宽泛和跨平台不平安队头阻塞10.HTTP2.0有什么优化? 头部压缩 二进制格局 数据流 多路复用:同一条连贯上并发传输多个 Stream 服务器推送 缺点是还是有对头阻塞的问题:在tcpc层下面呈现 11.HTTP3.0有什么优化? HTTP/2 队头阻塞的问题是因为 TCP,所以 HTTP/3 把 HTTP 上层的 TCP 协定改成了 UDP! 他是基于 UDP 的 QUIC 协定 QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协定。 长处: 因为基于udp,没有对头梗塞不是通过四元组进行socket连贯,不须要三次握手+四次握手,通过双发的id标识信息,连贯更快从wifi到蜂窝网,迁徙更快12. HTTPS? SSL/TLS 协定根本流程: 客户端向服务器索要并验证服务器的公钥。单方协商生产「会话秘钥」。单方采纳「会话秘钥」进行加密通信。客户端服务端ClientHello<br/>SeverHello客户端回应服务器的最初回应
前言对于计算机网络方面的内容,我比拟苦恼,该如何组织内容,将这部分内容如何和本人对网络编程的认知联合起来,还有就是介绍程序,引论之后是依照大学教材的程序,还是跳过物理层(这一层离程序员的确有点远,所以这部分内容不思考介绍),数据链路层、网络层,应用层,还是自顶向下,应用层、传输层、网络层、数据链路层。这其实也是在取舍,因为我大学上这门课的时候,教材的程序是自下往顶, 而后我听了大略几个星期之后,齐全抉择放弃,因为听不懂,我感觉这些货色摸不到,我失去的只是一些形象的概念,落不了地,也可能跟过后没有做过网络开发的工作相干,在毕业之后实习,写了一点网络编程的代码,才缓缓了解起大学教材的概念,所以这也是这个系列会交叉一点网络编程框架介绍的起因。明天在应用层、网络层、传输层,这三层斟酌了颇长时间,最终还是决定先写TCP相干的内容。 咱们回顾一下在《计算机网络引论》外面的内容, 看似简略而又日常的网络通信,其实是一个简单的问题,为了升高问题的复杂度,计算机网络的先驱们,采取了分层的策略来解决通信过程中所遇到的问题,国际化规范组织于1977年成立了专门的组织来钻研该问题,该组织提出的分层计划是将网络分为七层 , 因为该模型比拟理想化,最终没被市场所采纳,最终风行的是TCP/IP协定的四层规范,在学习计算机网络原理的时候往往采取折中的计划,将网络分为五层。 五层协定的体系结构只是为介绍网络原理,理论利用还是TCP/IP协定的四层体系结构。咱们自顶向上再来大抵的介绍一下各层的职能划分,加深记忆。 物理层: 规定电气个性,多大的电压代表“1”或“0”等数据链路层: 两台计算机之间的数据传输总是在一段一点的链路上传送的,这就须要专门的链路层的协定。在两个相邻结点之间传送数据时,数据链路层 将网络层交下来的数据包组装成帧,每一帧包含数据和必要的管制信息(如同步信息、地址信息、差错控制等)。 这样说可能有点形象,咱们来讲一个小故事来领会一下: 杨贵妃喜爱吃香蕉,皇帝为了让爱妃吃的开心,皇帝命令大臣日夜兼程将香蕉从海南运输到长安。 那么香蕉从海南到长安总共须要几步: 第一步: 首先须要用船将香蕉运出岛,运到广东的码头。 第二步: 从广东运向长安,这个时候还没有飞机,所以两头会坐船,骑马,换乘交通工具。 第三步: 香蕉达到目的地。 如果将士兵比喻成IP包,则马、船只就是数据链路层,这也就是IP包每一跳须要更换数据链路层,就如同士兵须要一直变换交通工具一样天然,局势所迫。 那为什么士兵会抉择将香蕉运到广东,从广东再运到长安,而不是运到非洲再运到长安呢,因为你广东离长安更近啊。 那为什么士兵不间接奔向长安? 而是先到广东码头,因为码头是必经之地,码头是通向目的地长安的一块跳板,只管不是最终目的地,但士兵(IP包)却须要通过它。 如果有飞机呢,士兵是不是能够直飞长安呢,在这里飞机同样是数据链路层,因为它的目标是服务士兵(IP) 包,而士兵最终的目的地:长安。 网络层:在《计算机网络引论》中,咱们讲到IP层还有一个相似于理论住址的性能,便于动静路由,mac地址像是身份证,而IP层的IP则像是理论住址一样。 但其实这个必须还是有不失当的中央,这事实上把一部分传输层的性能也划入了网络层,mac地址更像是房间的地址,房子一旦建成,经度纬度不会再发生变化了。快递达到理论寓居房间之后,外面有好多人,那怎么确定这个快递是谁的呢,这就是传输层的工作之一。 传输层有了IP、MAC地址,还是无奈确定这个数据包要给哪个过程,运输层提出了端口的概念,通过IP+端口即可确定这个数据包能够给谁,相似于快递到房间之后,会叫名字,因为名字不是惟一的,快递员还会复核一下手机号。但快递的货色失落了怎么办,让卖家再发一次喽,尽管在运输过程中都是在尽最大致力交付,然而在运输过程中还是可能产生丢数据包的景象,个别的买家会让卖家再重发,这样的买家和卖家是TCP协定, 但有的买卖双方是丢了也不给你重发,也就是UDP协定。应用层有了快马加鞭运输系统,皇帝小孩儿个别是不怎么放心运输问题的,有的时候皇帝会发旨意,有的时候会发赏赐,这也就是利用过程之间的交互。TCP 概述连贯治理TCP是TCP/IP体系中非常复杂的一个协定,TCP是面向连贯的运输层协定,这就是说应用程序在应用TCP协定之前,必须先建设TCP连贯,在数据开释完之后,必须开释曾经建设的TCP连贯。其实在学到这个TCP连贯的时候,我对这个连贯多多少少是感觉了解不透的,我将其了解为通信之前确认通信单方的状态,打电话的时候有个拨号的过程,然而对面挂断电话的话,这个打电话界面也就退出了,这个我是了解的,然而这个连贯我就了解不到实体上,哪个是电话,拨号过程在哪里?再有,我如何去应用TCP协定,TCP协定是蛮简单的一个协定,我要编写通信软件不会还要我本人去实现一把这个协定吧。 当然不会让程序员用高级语言再实现一把TCP协定,这是一个宏大而又简单的工程,TCP/IIP协定曾经驻留在操作系统中,因为TCP/IP协定被设计成能运行在多种操作系统的环境中,因而TCP/IP协定规范没有规定应用程序与TCP/IP协定如何接口(调用)的细节,而是容许零碎设计者可能抉择无关API的具体实现细节。 目前来说只有几种可供应用程序应用的TCP/IP的利用程序接口,最驰名的就是美国加利福利亚大学伯克利分校为Berkeley UNIX操作系统定义的API,被称为套接字接口(socket interface)。微软在其操作系统中采纳了套接字 API,然而有一点不同,咱们称之为Windows Socket。AT&T的Unix System V版本定义的接口,简写为TLI(Transport Layer port) 因为有不同的实现,所以在不同的操作系统上行为可能会有点差别,也就是在TCP/IP协定上做独自的定制,但最终都实现了TCP/IP协定,次要的行为不会有差别。操作系统对外部裸露运输层和应用层通信的接口,个别咱们称之为Socket API。个别高级语言都留有调用操作系统Socket API的实现。咱们用Java来演示一下调用操作系统提供的运输层TCP协定: public class SocketClient{ public static void main(String[] args) throws Exception { // 这行代码会尝试和我本地端口为12345建设连贯 // 如果始终追着看会发现,最终调的是一个native办法 // 最终还是调的操作系统的办法 // 由操作系统返回是否可能建设连贯、连贯状态 Socket socket = new Socket("127.0.0.1",12345); }}这就相似于打电话了,通信之前,确认信道的品质。少数与TCP相干的文章都会从三次握手和四次握手登程,这里我试图先大抵描绘出TCP的主体,再别离去介绍TCP的各个局部。连贯治理也是TCP协定中的一个重要局部。 ...
试想一个问题,咱们人类能够有多少种辨认本人的形式?能够通过身份证来辨认,能够通过社保卡号来辨认,也能够通过驾驶证来辨认,只管有多种辨认形式,但在特定的环境下,某种识别方法会比其余办法更为适宜。因特网上的主机和人类一样,能够应用多种形式进行标识。互联网上主机的一种标识办法是应用它的主机名,比方 www.baidu.com、www.google.com 等。这是咱们人类习惯的记忆形式,因特网中的主机却不会这么记忆,它们喜爱定长的、有层次结构的 IP 地址。 那么路由器如何把 IP 地址解析为咱们相熟的网址呢?这时候就须要 DNS 呈现了。 <div align = "center">图 7-1</div> DNS 的全称是 Domain Name Systems,它是一个由分层的DNS 服务器(DNS server)实现的分布式数据库;它还是一个使得主机可能查问分布式数据库的应用层协定。DNS 协定运行在 UDP 协定上,应用 53 端口。 DNS 根本概述与 HTTP、FTP 和 SMTP 一样,DNS 协定也是一种应用层的协定,DNS 应用客户-服务器模式运行在通信的端系统之间,在通信的端系统之间通过 UDP 运输层协定来传送 DNS 报文。 DNS 通常不是一门独立的协定,它通常为其余应用层协定所应用,这些协定包含 HTTP、SMTP 和 FTP,将用户提供的主机名解析为 IP 地址。 上面依据一个示例来形容一下 DNS 解析过程: 你在浏览器键入 www.someschool.edu/index.html 时会产生什么?为了使用户主机可能将一个 HTTP 申请报文发送到 Web 服务器 www.someschool.edu ,会经验如下操作: 同一台用户主机上运行着 DNS 利用的客户端。浏览器从上述 URL 中抽取出主机名 www.someschool.edu ,将这台主机名传给 DNS 利用的客户端。DNS 客户端向 DNS 服务器发送一个蕴含主机名的申请,申请 DNS 服务器解析这个主机名的 IP 地址。DNS 客户端最终会收到一份答复报文,其中蕴含该指标主机的 IP 地址。一旦浏览器收到指标主机的 IP 地址后,它就可能向位于该 IP 地址 80 端口的 HTTP 服务器过程发动一个 TCP 连贯。除了提供 IP 地址到主机名的转换,DNS 还提供了上面几种重要的服务: ...
1. 计算机网络概述 - Überblick über Computernetzwerke 1.1. 计算机网络在信息时代的作用 - Rolle der Computernetze im Informationszeitalter计算机网络已由一种通信基础设施倒退成为一种重要的信息服务基础设施计算机网络曾经像水,电,煤气这些基础设施一样,成为咱们生存中不可或缺的一部分1.1.1. 德国互联网倒退情况网址:https://www.mcschindler.com/d... https://de.statista.com/stati... Anzahl der Internetnutzer in Deutschland in den Jahren 1997 bis 2021 (in Millionen) 1. 网络应用详情 1.2. 因特网概述 - 历史 - Internet Überblick1.2.1. 网络,互连网和因特网 - Netzwerke, internet und Internet1. 网络(Network)由若干结点(Node)和连贯这些结点的链路(Link)组成。2. 互连网(互联网)多个网络通过路由器互连起来,造成覆盖范围更大的互连网(互联网)。互联网又称为“网络的网络”。因特网 (Internet) 是世界上最大的互连网络(用户数以亿计,互连的网络数以百万计)。3. internet 与 lnternet 的区别internet (互联网):是一个通用名词,它泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协议能够是任意的。Internet (因特网) 则是一个专用名词,它指以后寰球最大的、凋谢的、由泛滥网络相互连接而成的特定计算机网络(因特网),它采纳TCP/IP协定族作为通信的规定,其前身是美国的 ARPANET。 1.2.2. 因特网倒退的三个阶段 - Die drei Phasen der Internet-Entwicklung ...
网络层的次要工作是为分组替换网上的不同主机提供通信,替换的形式是分组替换,替换时的门路抉择成为路由, 网络层往下是提供物理传输介质的数据链路层,往上则是传输管制的传输层。网络层则是他们两者的两头过渡层。当传输层管制着一次传输工作的开始,网络层就开始为其发送工作抉择适合的发送门路。他将数据链路层提供的传输路径整合成为一个整体,像一张大网一样盖在地球上,网络上有数的分组数据包通过适合的线路跑向目的地。因而,网络层必须具备以下性能: 分组与分组替换:把从传输层接管到的数据报文封装成分组(Packet,也称为“包”)再向下传送到数据链路层。路由:通过路由抉择算法为分组通过通信子网抉择最适当的门路。 网络连接复用:为分组在通信子网中节点之间的传输创立逻辑链路,在一条数据链路上复用多条网络连接(多采取时分复用技术)。过错检测与复原:个别用分组中的头部校验和进行过错校验,应用确认和重传机制来进行过错复原。 流量管制:通过流量整形技术来实现流量管制,以避免通信量过大造成通信子网的性能降落。 拥塞管制:当网络的数据流量超过额外容量时,将会引发网络拥塞,以致网络的吞吐能力急剧下降。因而须要采纳适当的控制措施来进行疏导。 网络互连:把一个网络与另一个网络相互连接起来,在用户之间实现跨网络的通信。 网络层常见的协定有四个:ARP协定,IP协定,ICMP协定,IGMP协定。让咱们先从最闻名的IP协定开始学习起吧 IP协定
计算机网络概述 计算机网络的分类依照网络的作用范畴:广域网(WAN)、城域网(MAN)、局域网(LAN);依照网络使用者:专用网络、专用网络。计算机网络的层次结构 TCP/IP四层模型与OSI体系结构比照: 层次结构设计的根本准则各层之间是互相独立的;每一层须要有足够的灵活性;各层之间齐全解耦。 计算机网络的性能指标速率:bps=bit/s 时延:发送时延、流传时延、排队时延、解决时延 往返工夫RTT:数据报文在端到端通信中的来回一次的工夫。 物理层物理层的作用:连贯不同的物理设施,传输比特流。该层为下层协定提供了一个传输数据的牢靠的物理媒体。简略的说,物理层确保原始的数据可在各种物理媒体上传输。 物理层设施:中继器【Repeater,也叫放大器】:同一局域网的再生信号;两端口的网段必须同一协定;5-4-3规程:10BASE-5以太网中,最多串联4个中继器,5段中只能有3个连贯主机;集线器:同一局域网的再生、放大信号(多端口的中继器);半双工,不能隔离抵触域也不能隔离播送域。信道的基本概念:信道是往一个方向传输信息的媒体,一条通信电路蕴含一个发送信道和一个承受信道。 单工通信信道:只能一个方向通信,没有反方向反馈的信道;半双工通信信道:单方都能够发送和承受信息,但不能同时发送也不能同时接管;全双工通信信道:单方都能够同时发送和接管。数据链路层数据链路层概述数据链路层在物理层提供的服务的根底上向网络层提供服务,其最根本的服务是将源自网络层来的数据牢靠地传输到相邻节点的指标机网络层。数据链路层在不牢靠的物理介质上提供牢靠的传输。 该层的作用包含:物理地址寻址、数据的成帧、流量管制、数据的检错、重发等。无关数据链路层的重要知识点:数据链路层为网络层提供牢靠的数据传输;根本数据单位为帧;次要的协定:以太网协定;两个重要设施名称:网桥和交换机。封装成帧:“帧”是数据链路层数据的根本单位: 通明传输:“通明”是指即便控制字符在帧数据中,然而要当做不存在去解决。即在控制字符前加上转义字符ESC。 数据链路层的过错监测过错检测:奇偶校验码、循环冗余校验码CRC奇偶校验码–局限性:当出错两位时,检测不到谬误。循环冗余检验码:依据传输或保留的数据而产生固定位数校验码。最大传输单元MTU最大传输单元MTU(Maximum Transmission Unit),数据链路层的数据帧不是无限大的,数据帧长度受MTU限度. 门路MTU:由链路中MTU的最小值决定。 以太网协定详解MAC地址:每一个设施都领有惟一的MAC地址,共48位,应用十六进制示意。以太网协定:是一种应用宽泛的局域网技术,是一种利用于数据链路层的协定,应用以太网能够实现相邻设施的数据帧传输: 局域网分类Ethernet以太网IEEE802.3:以太网第一个宽泛部署的高速局域网以太网数据速率快以太网硬件价格便宜,网络造价成本低以太网帧构造类型:标识下层协定(2字节)目标地址和源地址:MAC地址(每个6字节)数据:封装的下层协定的分组(46~1500字节)CRC:循环冗余码(4字节)以太网最短帧:以太网帧最短64字节;以太网帧除了数据局部18字节;数据最短46字节;MAC地址(物理地址、局域网地址)MAC地址长度为6字节,48位;MAC地址具备唯一性,每个网络适配器对应一个MAC地址;通常采纳十六进制表示法,每个字节示意一个十六进制数,用 - 或 : 连接起来;MAC播送地址:FF-FF-FF-FF-FF-FF。网络层网络层的目标是实现两个端系统之间的数据通明传送,具体性能包含寻址和路由抉择、连贯的建设、放弃和终止等。数据交换技术是报文交换(基本上被分组所代替):采纳贮存转发形式,数据交换单位是报文。 网络层中波及泛滥的协定,其中包含最重要的协定,也是TCP/IP的外围协定——IP协定。IP协定非常简单,仅仅提供不牢靠、无连贯的传送服务。IP协定的次要性能有:无连贯数据报传输、数据报路由抉择和差错控制。 与IP协定配套应用实现其性能的还有地址解析协定ARP、逆地址解析协定RARP、因特网报文协定ICMP、因特网组治理协定IGMP。具体的协定咱们会在接下来的局部进行总结,无关网络层的重点为: 1、网络层负责对子网间的数据包进行路由抉择。此外,网络层还能够实现拥塞管制、网际互连等性能;2、根本数据单位为IP数据报;3、蕴含的次要协定:IP协定(Internet Protocol,因特网互联协定);ICMP协定(Internet Control Message Protocol,因特网管制报文协定);ARP协定(Address Resolution Protocol,地址解析协定);RARP协定(Reverse Address Resolution Protocol,逆地址解析协定)。4、重要的设施:路由器。 路由器相干协定 IP协定详解IP网际协议是 Internet 网络层最外围的协定。虚构互联网络的产生:理论的计算机网络盘根错节;物理设施通过应用IP协定,屏蔽了物理网络之间的差别;当网络中主机应用IP协定连贯时,无需关注网络细节,于是造成了虚构网络。 IP协定使得简单的理论网络变为一个虚构互联的网络;并且解决了在虚构网络中数据报传输门路的问题。 其中,版本指IP协定的版本,占4位,如IPv4和IPv6;首部位长度示意IP首部长度,占4位,最大数值位15;总长度示意IP数据报总长度,占16位,最大数值位65535;TTL示意IP数据报文在网络中的寿命,占8位;协定表明IP数据所携带的具体数据是什么协定的,如TCP、UDP。 IP协定的转发流程 IP地址的子网划分 A类(8网络号+24主机号)、B类(16网络号+16主机号)、C类(24网络号+8主机号)能够用于标识网络中的主机或路由器,D类地址作为组播送地址,E类是地址保留。 网络地址转换NAT技术用于多个主机通过一个私有IP拜访拜访互联网的公有网络中,减缓了IP地址的耗费,然而减少了网络通信的复杂度。 NAT 工作原理:从内网进来的IP数据报,将其IP地址替换为NAT服务器领有的非法的公共IP地址,并将替换关系记录到NAT转换表中; 从公共互联网返回的IP数据报,根据其目标的IP地址检索NAT转换表,并利用检索到的外部公有IP地址替换目标IP地址,而后将IP数据报转发到外部网络。 ARP协定与RARP协定地址解析协定 ARP(Address Resolution Protocol):为网卡(网络适配器)的IP地址到对应的硬件地址提供动静映射。能够把网络层32位地址转化为数据链路层MAC48位地址。 ARP 是即插即用的,一个ARP表是主动建设的,不须要系统管理员来配置。 RARP(Reverse Address Resolution Protocol)协定指逆地址解析协定,能够把数据链路层MAC48位地址转化为网络层32位地址。 ICMP协定详解网际管制报文协定(Internet Control Message Protocol),能够报告错误信息或者异常情况,ICMP报文封装在IP数据报当中。 ...
导言要学习计算机网络,咱们首先要理解什么是计算机网络,计算机网络都做了哪些事件以及咱们能够用计算机网络来做些什么。 什么是计算机网络计算机网络,简称网络。Internet是世界上最大的计算机网络。对于计算机网络,一个比拟通用的定义是:利用通信线路将天文上扩散的、具备独立性能的计算机系统和通信设施按不同的模式连接起来,以功能完善的网络软件及协定实现资源共享和信息传递的零碎。简而言之,计算机网络的次要目标就是连贯各地的计算机,传输信息,实现空间上的逾越。 性能数据通信数据通信是按照肯定的通信协议,利用数据传输技术在两个终端之间传递数据信息的一种通信形式和通信业务。数据通信的重点在于数据。数据就是数值,也就是咱们通过观察、试验或计算得出的后果。数据有很多种,最简略的就是数字。数据也能够是文字、图像、声音等。其典型利用有:文件传输、电子信箱、话音信箱、可视图文、目录查词、智能用户电报及遥测遥控等。 资源共享计算机网络中能够共享的资源包含:硬件、软件、数据、通信信道。硬件资源的共享能够进步设施的利用率,防止设施的反复投资;软件资源和数据资源的共享能够充分利用已有的信息资源,缩小软件开发过程中的劳动,防止大型数据库的反复建设。典型的硬件共享是当初网上随处可见的云计算与云服务,典型的信息资源共享例如:代码托管网站GitHub 集中管理目前,曾经有了许多管理信息系统、办公自动化零碎等,通过这些零碎能够实现日常工作的集中管理,进步工作效率,减少经济效益。 分布式解决在计算机网络体系的帮忙下,将不同地点的,或具备不同性能的,或领有不同数据的多台计算机通过通信网络连接起来,在控制系统的对立管理控制下,协调地实现大规模信息 解决 工作的计算机系统。 负荷平衡负荷平衡是指工作被平均的调配给网络上的各台计算机系统。网络控制中心负责调配和检测,当某台计算机负荷过重时,零碎会主动转移负荷到较轻的计算机系统去解决。 三种数据交换技术可能实现数据传输的技术次要有三种计算机网络比拟常见的是分组替换,其余两种电路替换和报文交换理解即可。 分组替换也称为包交换,将要传输的数据按肯定长度分成很多组,为了精确的传送到对方,每个组都打上标识,在每个数据段的后面加上必要的管制信息作为数据段的首部,每个带有首部的数据段就形成了一个分组。首部指明了该分组发送的地址许多不同的数据分组在物理线路上以动静共享和复用形式进行传输,为了可能充分利用资源,当数据分组传送到交换机时,会暂存在交换机的存储器中,而后依据以后线路的忙闲水平,替换机会动态分配适合的物理线路,持续数据分组的传输,直到传送到目的地。达到目地之后的数据分组再重新组合起来,造成一条残缺的数据。 长处:可靠性高。分组替换中每个分组能够自由选择传输路径当网中产生故障时,分组仍能主动抉择一条避开故障地点的曲折路由传输,不会造成通信中断。可实现分组多路通信。因为每个分组都含有管制信息,所以,分组型终端只管和分组交换机只有一条用户线相连,但能够同时和多个用户终端进行通信。经济性好。在网内传输、替换的是一个个被规范化了的分组,这样可简化替换解决,不要求交换机具备很大的存储容量,升高了网内设各的费用。 计算机网络体系结构层次模型协定
这段时间遇到了一些网络下面的问题,然而自身我对计算机网络理解的不是很零碎,定位问题的时候也无从下手, 这次打算零碎的整顿一下本人对计算机网络的认知,之前看计算机网络相干的文章偏差于实践,什么属性之类的,看到了也似懂非懂的,也是我在写代码过程中遇到了问题,才对这些属性有一个大抵的了解,所以本系列的文章会联合网络编程来介绍,程序是计算机世界和人类世界沟通的桥梁,选取的语言是Java,如果主力编程语言是其余的,也能够看,大差不差。本系列的文章不会只介绍实践,还会辅以介绍网络编程、网络工具,尽量做到实践与实际相结合。网络相干的文章其实也写过一些了: 《从爬虫到万维网》《Socket简介和I/O多路复用》《NIO 学习笔记(一)初遇》《NIO 学习笔记(二)相识篇》《NIO学习笔记(三) 甚欢篇》《Netty学习笔记(一)初遇篇》这次会对立收拢这些文章到网络系列的文章中。如果在公众号还没发现这些文章,那就去思否、掘金找找。目前公众号、思否、掘金三个平台的文章还没有做到对立,会挑个工夫将三个平台的文章进行对立。 前言想起我大学的《计算机网络》这门课,第一堂课,老师让咱们ping网址,如同还拿了网线,然而还是感觉蛮乏味的,前面就开始按书上讲概念,也就实践,我听了又不是很了解,总是似懂非懂的,我很厌恶的这种感觉,索性前面就不听了,期末拿一个60分万岁。前面想学计算机网络的起因是因为面试网络也是高频面试题,为了彻底了解,所以才会有学计算机网络的打算。然而到往年有一些新的打算,我打算做一点网络编程相干的货色,打算做一个开源我的项目,再加上工作上的确遇到了网络相干的问题,所以这次打算重新学习一下计算网络,咱们对事物的认知,是一个逐渐清晰的过程,所以本系列的文章不会一开始每个点都讲的很细,会有一条主线贯通,而后须要用到某一点的时候,会将这一点形容的分明。 通信的实质-替换信息小的时候跟着家里人去浇地,对于小小的我来说,地还是很大的,有的时候水管摆的不对,叔叔会在地的那头,朝我喊,我叔叔会在地的那头,冲我喊。如果我没听清,我就会也冲着他喊:你说的啥。而后我叔叔就会再说一遍,个别再说一遍就行了,但有的时候地的确比拟大,他说的话我的确没听清的时候,他就会走到我背后说。那我要是听错了一部分呢,他说的某句话中有个字我没听到,个别他会看我的动作,做的不对就间接来找我了。 这事实上就暗含了通信过程中所面临的一个典型问题: 信息在传输的过程中失落了该怎么办?再传一遍如何确认信息正确收到了呢?确认咱们能够将这个过程引申到互联网上,现在的网络曾经成为了咱们生存的一部分,你给微信上给敌人发消息,你从来不会放心你敌人在有网的状况下会收不到这条音讯,即便你在北京,你的敌人在海南,音讯疾速精确的传递仍然是被视作天经地义的,即便两头通过了一个一个又一个的路由器、各种各样的光纤,这依然被视作天经地义的。但这种天经地义上面是各种各样的确认、转发,所谓冰山在海里挪动很肃穆,这是因为它只有八分之一漏出水面。 那让咱们来想想这条信息在传输过程中会经验些什么,对于不相熟网络的人来说,在电脑上发消息这条信息是不是间接就到光纤了呢,假设那个人在电脑上也开着微信,两台电脑都间接连着光纤,所以这个通信模型是上面这样: 然而认真想一想这个模型切实简略的过分,咱们将模型变的简单一丢丢,通信的单方命名为A、B。A和B家里各有三台电脑,另外两台他们家里人用,那么A的这条信息再去找B,面临一个问题B的电脑在哪里? 如果这个问题简单的话,咱们无妨将问题再简化一些,A和本人老婆发信息,这条信息该如何送达,咱们首先能够想到的问题依然是A发送的这条信息该如何找到老婆B的电脑,因为两个人在一个房间,这让事件看起来简略了许多,咱们为每台电脑注销一个地址即可,每台电脑在出厂的时候会有一个Mac(硬件地址,网卡地址)地址,但如何晓得呢,咱们能够从日常生活中找到一点灵感,咱们每个人都会有身份证,这个是固定的,相当于一个固定地址,又假如全国人民都不爱动,一出世就待在一个中央,这样依据身份证上的地址,快递员就能够轻松的找到你。 一出世就齐全待在一个中央的还是多数, 如果你进来打工,那么让快递员依照身份证上的地址去寻找你,这着实是有点难为快递员了,所以住址个别都是动静的,每换一个中央就会调配一个。而后快递员依据你填的地址,找到你的房间,而后给你送上门的时候,还会问一下是不是你。 在网络的世界也是这样,一样的动静,为了实现跨区域的通信,会为计算机动静的调配一个地址,咱们称之为IP地址,这个地址有别于Mac地址,所以你在北京的IP地址和在上海的IP地址可能就是不一样的。 所以A和B用微信通信的时候,会先向微信的服务器汇报一下本人的IP地址,在发送音讯的时候,依据接管方的惟一标识去找接管方的IP,那B的手机上有好多通信软件,该给哪个? 答案是端口,IP地址+端口,那可能有敌人会问了,我是租的房子,一个房间住了好多人,大家可能都用一个地址,我的身份证号,也是就是下面讲的MAC地址在什么时候用呢? 这个也就是ARP(Address Resolution Protocol)协定了, 此协定能够通过IP地址解析进去物理地址,这样晓得了你的住址,也就是IP地址,一个地址上面有好多主机,也不放心找错人。 事实上你在百度上搜寻也是一种通信,你发给百度关键词,百度返回给你搜寻后果,搜索引擎和微信属于不同的利用,利用之间也须要制订通信规定。下面的探讨其实简化了通信过程中的问题,通信是一个简单的问题,互相通信的两个计算机系统必须高度协调工作才行,咱们简略列举一下可能会遇到的问题: 发动通信的计算机必须查明对方计算机是否曾经开机。如果在通信过程中,通过某个路由器,信息还没传递进来,这台路由器就坏了,该当有牢靠的措施保障对方计算机可能正确接管到正确的文件。等等。为了设计这样简单的计算机网络,早在ARPNET(是美国高级钻研计划署(Advanced Research Project Agency)的简称,是世界上第一个经营的封包交换网络,也是寰球互联网的始祖)在设计的时候提出了分层的办法,“分层”可将宏大而简单的问题,转化为若干较小的部分问题,而这些较小的部分问题就比拟易于钻研和解决。 计算机网络体系结构简介咱们下面提到的光纤中如何组织信息在计算机网络中被划入到物理层,规定了一些电气个性,作用是负责传送0和1的电信号。单纯的0和1没有任何意义,必须规定解读形式: 多少个电信号算一组? 每个信号位有何意义。这也就是数据链路层的问题,除此之外数据链路层还负责局域网内的通信,MAC地址也被算在数据链路层。为了实现动静路由,也就是说计算机换一个中央,调配一个理论的住址,咱们引入了网络层来解决这个问题,网络层比拟为人所熟知的就是IP协定。为了明确这个信息是属于谁的,咱们引入了端口,IP地址加端口就能够定位是哪个过程,这也就是传输层的由来,过程在收到传输层的报文之后就能够来解析数据了,不同的利用指定了不同的规定,这也就是应用层。 这个五层是综合OSI/RM(Open System Interconnection Reference Model 开放系统互联根本参考模型模型(由国际标准化组织ISO来制订)和TCP/IP协定的分层模型而来,TCP/IP协定的分层是事实上的规范,标准化的组织制订的没风行起因在于简单、理想化且TCP/IP协定曾经领先占领市场了. 这里咱们简略的介绍一下各层的作用: 应用层应用层的工作是通过利用集成间的交互来实现特定网络应用。应用层协定定义的利用过程间通信和交互的规定。这一层比拟为人所熟知的协定是:HTTP、HTTPS、SMTP。运输层运输层的工作就是负责向两台主机中过程之间的通信提供通用的数据传输服务,应用层利用该服务传送应用层的报文。 所谓“通用的”是指并不针对某个特定网络应用,而是多个利用能够应用同一个运输层服务。因为一台计算机能够同时运行多个过程,因而运输层有复用和分用的性能。复用就是指多个应用层过程能够同时应用上面运输层的服务,分用和复用相同,是运输层把收到的信息别离交付给下面应用层的相应过程。 这一层比拟为人所熟知的协定为TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协定. 这一协定个别驻留在操作系统,支流的高级编程语言个别都有Socket相干的类,咱们通过这些类就能够间接调用操作系统应用TCP、UDP协定。 网络层网络层负责为不同局域网上的不同主机提供通行服务。这一层比拟为人所熟知的协定是IP协定。数据链路层粗略的说就是将网络层交下来的数据包组装成帧,每一帧蕴含数据和必要的管制信息。在接收数据的时,管制信息使接收端可能晓得一个帧从哪个比特开始和哪个完结。物理层粗略的说就是规定多大的电压代表“1” 或“0”。本系列的文章会将着重笔墨与应用层、运输层、网络层。本篇也是重学系列的第二个系列: 重学计算机网络。对立收拢本人对计算机网络的认知。 参考资料《计算机网络 (第7版) 》 谢希仁著。图解ARP协定(一) https://zhuanlan.zhihu.com/p/...为什么要应用IP地址和MAC地址两种地址? https://www.zhihu.com/questio...
大家好,我是老三,动工大吉,虎年第一篇,面渣逆袭系列持续! 这次给大家带来了计算机网络六十二问,三万字,七十图详解,大略是全网最全的网络面试题。 倡议大家<big>珍藏</big>了缓缓看,新的一年肯定可能跳槽加薪,虎年“豹”富! 根底1.说下计算机网络体系结构计算机网络体系结构,个别有三种:ISO 七层模型、TCP/IP 四层模型、五层构造。 简略说,OSI是一个实践上的网络通信模型,TCP/IP是实际上的网络通信模型,五层构造就是为了介绍网络原理而折中的网络通信模型。 ISO 七层模型ISO 七层模型是国际标准化组织(International Organization for Standardization)制订的一个用于计算机或通信零碎间互联的规范体系。 应用层:通过利用过程之间的交互来实现特定网络应用,应用层协定定义的是利用过程间通信和交互的规定,常见的协定有:HTTP FTP SMTP SNMP DNS.表示层:数据的示意、平安、压缩。确保一个零碎的应用层所发送的信息能够被另一个零碎的应用层读取。会话层:建设、治理、终止会话,是用户应用程序和网络之间的接口。运输层:提供源端与目标端之间提供牢靠的通明数据传输,传输层协定为不同主机上运行的过程提供逻辑通信。网络层:将网络地址翻译成对应的物理地址,实现不同网络之间的门路抉择, 协定有 ICMP IGMP IP 等.数据链路层:在物理层提供比特流服务的根底上,建设相邻结点之间的数据链路。物理层:建设、保护、断开物理连贯。TCP/IP 四层模型应用层:对应于 OSI 参考模型的(应用层、表示层、会话层)。传输层: 对应 OSI 的传输层,为应用层实体提供端到端的通信性能,保障了数据包的程序传送及数据的完整性。网际层:对应于 OSI 参考模型的网络层,次要解决主机到主机的通信问题。网络接口层:与 OSI 参考模型的数据链路层、物理层对应。五层体系结构应用层:对应于 OSI 参考模型的(应用层、表示层、会话层)。传输层:对应 OSI 参考模型的的传输层网络层:对应 OSI 参考模型的的网络层数据链路层:对应 OSI 参考模型的的数据链路层物理层:对应 OSI 参考模型的的物理层。2.说一下每一层对应的网络协议有哪些?一张表格总结常见网络协议: 3.那么数据在各层之间是怎么传输的呢?对于发送方而言,从下层到上层层层包装,对于接管方而言,从上层到下层,层层解开包装。 发送方的利用过程向接管方的利用过程传送数据AP先将数据交给本主机的应用层,应用层加上本层的管制信息H5就变成了下一层的数据单元传输层收到这个数据单元后,加上本层的管制信息H4,再交给网络层,成为网络层的数据单元到了数据链路层,管制信息被分成两局部,别离加到本层数据单元的首部(H2)和尾部(T2)最初的物理层,进行比特流的传输 这个过程相似写信,写一封信,每到一层,就加一个信封,写一些地址的信息。到了目的地之后,又一层层解封,传向下一个目的地。 网络综合4.从浏览器地址栏输出 url 到显示主页的过程?这道题,大略的过程比较简单,然而有很多点能够细挖:DNS解析、TCP三次握手、HTTP报文格式、TCP四次挥手等等。 DNS 解析:将域名解析成对应的 IP 地址。TCP连贯:与服务器通过三次握手,建设 TCP 连贯向服务器发送 HTTP 申请服务器解决申请,返回HTTp响应浏览器解析并渲染页面断开连接:TCP 四次挥手,连贯完结咱们以输出www.baidu.com 为例: 各个过程都应用了哪些协定? 5.说说 DNS 的解析过程?DNS,英文全称是 domain name system,域名解析零碎,它的作用也很明确,就是域名和 IP 互相映射。 ...
TCP连贯是什么?TCP全称为Transport Control Protocol,即传输控制协议。正如其名,它是计算机网络自顶向下第二层—运输层的一种协定,特点集中体现在“管制”二字。如何实现“管制”,而又“管制”什么,是TCP的所有精髓所在。在计算机世界中,通信的单方是各自独立的两个过程。通信之前,须要先为通信单方建设一条通信连贯,能够了解为一条专用信道,通信单方的通信内容将通过这条信道来回传送。然而呢,同一时刻,互联网中会有难以计数的过程在运行,而它们之间更是存在着难以计数的通信需要。所以,如何来辨认这些过程,以避免通信信道因被多方共享而导致信息传送失误,是一个关键问题。首先,过程运行在不同的计算机上,而互联网中的每台计算机都被调配了一个举世无双的IP地址,以IP地址辨别互联网中的每台计算机。其次,一台计算机上可能运行多个过程,尽管每个过程都有独立的过程ID,然而计算机应用另一种更简短的数字序列辨别每个过程的通信内容,即端口号。在通信过程中,依据TCP协定的规定,过程的通信内容将被冠以端口号作为标识。如此,当计算机接管到内部传回的音讯时,便可依据音讯头部的端口号确定此音讯该被转发至哪个过程的内存空间中。而接管方在返回音讯时,也可依据端口号指定音讯的接管方。如此,IP地址和端口号独特标识了在通信中的一个过程及其通信内容。因而,IP地址和端口号组成了TCP套接字的具体内容。值得一提的是,套接字是一个抽象概念,应用层报文通过套接字达到传输层。然而,须要留神的是,这条信道并不是具体存在的物理信道,而是从逻辑上沟通两个过程的形象事物,真正使得信息能够流通的是网线、各路网关、路由器和交换机等计算机网络中的核心部件。互联网中传输的音讯是数据,如声音、视频、图片、文本等,在计算机中被统称为数据,即以二进制模式在计算机网络世界中流通并被解决。数据有大小之分,计算机网络在传输过程中,思考到传输速率和网络带宽之间的限度,为不同类型的网络限定了最大可传输报文长度。通常,通信单方一次的通信音讯比该最大可传输报文长度要大得多,TCP协定将依据该最大可传输报文长度对音讯进行分包,并为每个音讯子包按序调配一个编号。后一个子包的编号为前一个子包编号加上前一个子包的长度,当接管方接管到音讯的各个子包后,能够依据序号将音讯复原。然而,同一时刻会有多个过程通信,如果每个通信中的音讯子包都以1开始调配编号,那么接管方将接管到很多编号雷同的子包,这时的接管方将无奈按照编号复原音讯。为了解决这个问题,在调配编号时,TCP协定随机选定一个数字为音讯的第一个子包编号,这样便能够防止由编号反复而导致的接管方无奈重组音讯的问题产生。而且,当接管方收到一个子包时,便给发送方返回一个信号示意本人接管到了发送方刚发送的音讯子包。绝对于方才接管到的子包编号,这个信号是接管方期待接管到的下一个子包的编号。TCP协定将这样的确认机制称为ACK。然而,有时候可能因为网络故障或其余起因,导致ACK包没能达到发送方。发送不便认为接管方可能没有接管到方才发送的音讯,便会从新传送一份截然不同的音讯给接管方。同时,TCP协定在每次发送音讯时,将启动一个定时器,防止发送方期待ACK的工夫过长而影响到通信效率。当定时器完结时,如果发送方还未收到ACK告诉,再执行重传。如果发送方每次都在等到ACK或定时器完结时才发动一次音讯传输,将会使得通信链路长时间处在闲暇状态,节约了通信资源。所以,为了充分利用通信资源,计算机网络通常采纳流水线式传送形式,即一次传送多个通信音讯,TCP协定也遵循这样的传输方式。接管方将接管到的音讯暂存在寄主计算机中为其调配的内存空间中,等待接受方一一查取解决,在解决之前音讯将占据内存。然而,内存空间当然有大小限度,如果接管方的处理速度比其接管音讯的速度慢,当内存空间无闲暇时,新到的音讯将因为无可用内存收放而被迫舍弃,导致本次通信生效。对于舍弃的音讯子包,发送方当然无奈接管到相干的ACK,因而,前期又须要重传。如此,便减轻了通信累赘。如果发送方能及时通晓接管方的内存空间已满而暂停发送音讯,期待接管方有可用内存时再向其发送音讯,便可防止大量的有效传输,同时也为其余通信工作提供了更宽松的网络带宽。因而,TCP协定制订了滑动窗口协定实现通信过程中的流量管制。具体地,接管方返给发送方的ACK中蕴含了接管方可用内存空间的容量批示,该容量批示被称为接管窗口。发送方依据接管方提供的接管窗口大小,依据子包的数据大小计算是否还能够为接管方发送一个子包,如果子包的数据大小小于接管方的接管窗口,则予以发送,否则不予发送。发送方如何得悉能够从新开始向接管方发送音讯呢?在期待一段时间后,发送方将减小子包大小,再将其发予接管方作为试探。如果接管方中有足够的可用内存空间,则会失常返回一个蕴含接管窗口大小的ACK,发送方将可能得悉接管方的接管能力。如果发送方没有收到对应的ACK,排除丢包状况,则意味着接管方尚无可用内存,发送方将持续期待一段时间后再试探。在网络中,因为充斥着大量的通信流量,导致经常出现梗塞的状况。产生梗塞时,在梗塞点将汇集多个要通过该点的音讯,这些音讯排队等待解决。有时候梗塞继续的工夫比拟长,一方面会导致接管方无奈及时收到发送方传递的音讯,另一方面发送方也无奈及时收到接管方返回的ACK音讯。TCP协定的应答办法被称为TCP协定的拥塞管制。综上所述,TCP的“管制”体现为:面向连贯、按序传输机制、确认重传机制、流量管制(滑动窗口协定)和拥塞管制等,而这些长处使得TCP成为牢靠传输协定。
MAC层的硬件地址在局域网中,硬件地址又称为物理地址或者MAC地址(因为这种地址用在MAC帧中) IEEE 802规范为局域网规定了一种48位(6字节)的寰球地址,固化在适配器的ROM中。 如果计算机中或者路由器有多个适配器,那么这样的主机或者路由器就有多个“地址”,更精确的说,这种48位“地址”该当是某个接口的标识符。 IEEE的注册治理构造RA是局域网寰球地址的法定管理机构,它负责调配地址字段6个字节中的前三个字节。世界上但凡要生产局域网适配器的厂家都必须向IEEE注册治理构造购买由这三个字节形成的号(地址块),这个号的正式名称为组织惟一标识符OUI,通常也叫公司标标识符。 以太网适配器还能够设置为一种非凡的工作形式,即混淆模式,工作在混淆模式的适配器只有“听到”有帧在以太网上就能够轻轻传输接管下来,而不论帧发送到哪里。 MAC帧格局罕用的以太网MAC帧格局有两种,一种是DIX Ethernet V2规范(以太网V2规范),另一种是IEEE的802.3规范。这里介绍应用最多的以太网V2的MAC帧格局(图3-22)。图中假设网络层应用的是IP协定。 以太网V2的MAC帧比较简单,由5个字段组成。前两个字段别离为6字节长的目标地址和源地址字段。第三个字段为2字节的类型字段,用来标识上一层(例如网络层)应用的是什么协定,以便把收到的MAC帧的数据上交给上一层的这个协定。例如,当协定字段为0x0800代表下层网络层应用的是IP数据报;若类型为0x8137示意的是下层是从Novell IPX发过来的。第四个字段是数据字段,其长度为46-1500字节之间(最小长度64字节减去首部和尾部以及类型的长度18)。第五个字段为4字节的帧测验序列FCS(应用CRC校验)。 MAC层怎么晓得从从接管到的以太网帧取出多少字节交付给上一次层呢?这时候咱们须要说一下曼彻斯特编码,曼彻斯特编码的重要一个特点是:在曼彻斯特编码的每一个码元的正中间肯定有一次电压转换(由高到低或者由低到高)。当发送方把一个以太网帧发送结束后,就不再发送其它码元了(既不发送0,也不发送1)。因而,发送方的网络适配器上的接口上的电压就不会发生变化了。这样,接管方就能够很容易找到以太网帧的完结地位。在这个地位上往前移4字节(FCS校验4字节),就能确定数据字段的完结地位。 当数据字段的长度小于46字节时候,MAC子层就会在数据字段退出一个整数字段进行填充,以保障以太网的帧不小于64字节。 从图3-22还能够看出,在传输媒体上理论传送的要比MAC帧还多8个字节,这是因为当一个站在刚开始接管MAC帧时,因为适配器的时钟尚未与达到的比特流达成同步,因而MAC帧的最后面的若干位就无奈接管,后果使得整个MAC帧成为无用的帧。为了接收端迅速的实现位同步,从MAC层向下物理层还要帧的后面插入8字节(由硬件生成),它由两个字段形成。第一个字段时7字节的前同步码(1和0交替码),它的作用是使接收端的适配器在接管MAC帧的时候可能迅速调整其时钟频率,使它和发送端的时钟同步,也就是实现位同步,第二个字段是*帧开始定界符,定义为10101011*,它的前6位作用和前同步码一样,最初两个间断的1就是通知接收端适配器:“MAC帧信息就要来了,请适配器留神接管”。 在以太网上传送数据时是以帧位单位传送的。以太网在传送帧时,各帧之间还必须有肯定的间隙。因而,接收端只有找到帧开始定界符,其前面的间断达到的比特流就属于同一个MAC帧。可见以太网不须要应用帧完结定界符。 扩大的以太网扩大的以太网在网络层看起来依然是一个网络 在物理层扩大以太网以太网上的主机之间的间隔不能太远,否则主机发送的信号通过铜线传输就会衰减到CSMA/CD协定无奈失常工作。 当初,扩大主机和集线器之间的间隔的一种方法就是应用光纤和一堆光纤调制解调器。如图3-23:所示: 光纤调制解调器的作用是进行电信号与光信号的转换。因为光纤带来的时延很小,并且带宽很宽,因而应用这种办法能够很容易的使主机从几千公里以外的集线器相连。 在数据链路层扩大以太网扩大以太网更罕用的办法是在数据链路层上进行。最后人们应用的是网桥,网桥对接管到的帧依据其目标MCA地址进行转发和过滤。 在1990年呈现了以太网交换机以太网交换机本质上就是一个多接口的网桥,以太网交换机的每个接口都间接与一台计算机或者另一台以太网交换机相连。并且个别都是工作在全双工方式,以太网交换机还具备并行性,即能同时联通多对接口,使多对主机能同时通信(而网桥只能一次剖析和转发一个帧),互相通信的主机都是独占传输媒体,无碰撞的传输数据。 以太网的接口还有存储器,能在输入端口忙碌时把到来的帧进行缓存。因而,如果以太网交换机上的两台主机,同时向另一台主机发送帧,那么当这台主机上的接口忙碌时,发送帧的这两台主机的接口会把收到的帧暂存一下,当前再发送进来。 以太网交换机是一种即插即用的设施,其外部的帧替换表(又称地址表)是通过自学习算法主动逐步建设起来的。以太网交换机因为应用了专门的替换构造芯片,用硬件转发,其转发速率往往比要应用软件转发快得多。 以太网交换机的自学习性能应用一个简略的例子阐明交换机是怎么进行学习的。假设在图3-25中以太网有4个接口,各连贯一台计算机,其MAC地址别离为A,B,C,D。一开始交换机外面的替换表使空的。(图3-25(a)) A向B发送一帧,从端口1进入到交换机,交换机在接管到帧后,先查找替换表,没有查到应从哪个接口转发这个帧(在MAC地址这列中,找不到目标地址为B的主机)。接着,交换机把这个帧的源地址A和接口2写入到替换表中,并向除接口1以外的所有接口播送这个帧。 C,D抛弃掉这个帧,因为目标地址不对,只有B收下这个帧,这也称之为过滤。 从新写入替换表的我的项目(A,1)能够看出,当前不论从哪一个接口收到帧,只有其目标地址是A,就该当把收到的帧从接口1转发进来。这样做的根据是:既然A收回的帧是从接口1进入到交换机的,那么从交换机的接口1转发进来的帧也该当能够达到A。通过一段时间后,替换表中的我的项目就齐全了。 有时候交换机上的接口更换主机,或者主机更换了网络适配器,这就须要更改替换表中的我的项目。为此,在替换表中每个我的项目都设有肯定的无效工夫,过期的我的项目就会被主动删除,用这样的办法保障替换表中的数据都合乎以后网络的理论状况。 以太网交换机的这种自学方法不须要人工进行配置,十分的不便。 但有时候为了减少网络的可靠性,在应用以太网交换机组件网络的时候,往往会减少一些冗余的链路。在这种状况下,自学习的过程就可能导致以太网帧在网络的某一个环路中无限度的兜圈子,白白耗费了网络资源,如图3-26: 为了解决兜圈子问题,IEEE的802.1D规范制订了一个生成树协定STP,其要点的协定是不扭转网络的理论拓扑,但在逻辑上切断某些链路。使得从一台主机到其余主机的门路是无环路的树状构造,从而防止播送风暴大量占用交换机的资源。 生成树STP协定原理:任意一交换机中如果达到根网桥有两条或者两条以上的链路,生成树协定都依据算法把其中一条切断,仅保留一条,从而保障任意两个交换机之间只有一条繁多的流动链路。因为这种生成的拓扑构造,很像是以根交换机为树干的树形构造,故为生成树协定。 总线以太网应用了CSMA/CD协定,以半双工进行通信,然而以太网交换机采纳的是全双工通信,并不是应用CSMA/CD协定,为什么还叫以太网?起因是它的帧构造未发生变化,依然采纳以太网的帧构造。 虚构局域网利用以太网交换机能够很不便的实现虚构局域网(VLAN),在IEEE802.1Q规范中,对虚构局域网是这样定义的:虚构局域网是由一些局域网网段形成的与物理地位无关的逻辑组,而这些网络具备某些独特的需要,每一个VLAN帧都有一个明确的标识符,指明发送这个帧的计算机属于哪一个VLAN。 本章重要的概念链路是从一个节点到相邻节点的一段物理层线路,数据链路是在链路的根底上减少了一些必要的硬件(如网络适配器)和软件(如协定的实现)。数据链路层应用的信道次要是点对点信道和播送信道两种。数据链路层传送的协定数据单元是帧。数据链路层的三个根本问题是:封装成帧,通明传输,过错检测。循环冗余测验CRC是一种检错办法,而帧检测序列FCS是增加在数据前面的冗余码。点对点协定PPP是数据链路层应用最多的一个协定,它的特点是:简略,只检测过错,而不是纠正错误,不应用序列号,也不进行流量管制。可同时反对多种网络协议。PPoE是为宽带上网的主机应用的链路层协定。局域网的长处是: 具备播送性能,从一个站点能够很不便的拜访全国。便于零碎的扩大和演变。进步了零碎的可靠性,可用性和生存性。计算机与外界局域网的通信要通过通信适配器(或网络适配器),它又称为网络接口卡或网卡。计算机的硬件地址就在适配器的ROM中。以太网采纳无连贯的工作形式,对发送的数据帧不进行编号,也不要求对方发回确认。目标站收到有过错帧就把它抛弃,其余什么也不做。以太网采纳的协定是具备冲突检测的载波监听多点接入 CSMA/CD。协定的要点是:发送前先监听,边发送边监听,一旦发现总线上呈现了碰撞,就立刻进行发送。而后依照退却算法期待一段随机工夫后再次发送。因而,每一个站在本人发送数据之后的一小段时间内,存在着遭逢碰撞的可能性。以太网上各站点都平等地争用以太网信道。传统的总线以太网基本上都是应用集线器的双绞线以太网。这种以太网在物理上是星形网,但在逻辑上则是总线形网。集线器工作在物理层,它的每个接口仅仅简略地转发比特,不进行碰撞检测。以太网的硬件地址,即MAC地址实际上就是适配器地址或适配器标识符,与主机所在的地点无关。源地址和目标地址都是48位长。以太网的适配器有过滤性能,它只承受单播帧,播送帧和多播帧。应用集线器在物理层上扩大以太网(扩大后的以太网依然是一个网络)。交换式集线器常称为以太网交换机或第二层交换机(工作在数据链路层)。它就是个多接口的网桥,而每个接口都间接与某台单主机或另一个集线器相连,且工作在全双工方式。以太网交换机能同时连通许多对的接口,使每一对互相通信的主机都能像独占通信媒体那样,无碰撞地传输数据。
集线器传统以太网最后应用的是同轴电缆,到起初的双绞线,这种以太网采纳星形拓扑,在星型的两头减少了一个叫做集线器的设施,每个站点须要两根双绞线,别离用于发送和接管,双绞线的两端别离应用的是RJ-45插头。然而每个站点到集线器的间隔不能超过100m。双绞线可能传送高速的数据次要措施就是把双绞线的绞合度做的十分准确。这样能够大大的缩小外界信号的烦扰。 集线器的一些特点如下: 应用集线器的以太网在逻辑上依然是一个总线网,各站共享逻辑上的总线,应用的还是CSMA/CD的协定(各站的适配器上执行的是CSMA/CD协定)。同一时刻至少只能容许一个站发送数据。一个集线器上有许多接口,每个接口通过RJ-45水晶头用两对双绞线与一台计算机上的适配器相连,因而,一个集线器很像一个多接口的转发器。集线器工作在物理层,它的每个接口仅仅是简略的转发比特01,并不进行碰撞检测。若两个接口同时有信号输出(产生了碰撞),那么所有的接口都将不会收到正确的帧。。 集线器采纳了专门的芯片,进行自适应串音回波对消,这样就可使转发进来的较强信号不至于对该接口收到的较弱的信号产生烦扰。每个比特在转发之前还要进行再生整形并从新定时。
应用播送信道的数据链路层播送信道能够进行一对多通信。局域网技术在计算机网络中占有十分重要的位置。 局域网的数据链路层局域网最次要的特点是:网络为一个单位所领有,且天文范畴和站点数目无限。局域网次要有如下一些次要长处: 具备博大性能,从一个站点能够很不便的拜访全网。局域网上的主机可共享连贯在局域网上的各种硬件资源和软件资源。便于零碎的扩大和逐步演变,各设施的地位能够灵便调整和扭转。进步了零碎的可靠性,可用性和生存性。局域网能够依照网络拓扑进行分类, 适配器的作用计算机与外界局域网的连贯是通过通信适配器进行的,网络接口卡又称网卡。适配器与局域网之间的通信是通过电缆或者双绞线以串行传输方式进行,适配器与计算机之间的通信是以并行形式进行通信,因而,适配器的一个重要性能就是进行数据串行传输和并行传输之间的转换,除此之外,适配器还要实现以太网的协定 适配器在承受和发送各种数据帧的时候,不应用计算机的CPU,这时计算机中的CPU能够解决其余工作。当适配器收到有过错的数据帧时,就把这个帧间接抛弃掉而并不告诉计算机。当适配器收到正确的帧的时候,它会应用中断来告诉计算机,并交付协定栈中的网络层,当计算机要发送IP数据报的时候,就由协定栈把IP数据包向下交给适配器(数据链路层),组装成帧后发送到局域网。如图3-15示意的是适配器的作用。咱们须要特地留神的是,计算机的硬件地址就在适配器中的ROM中,而计算机的软件地址IP地址则在计算机的存储器中。 CSMA/CD协定最早的以太网是许多计算机是连贯在一根总线上,总线的特点是:当一个计算机发送数据时,总线上的计算机都能检测到这个数据。这种就是播送通信形式。但咱们并不总是要在局域网中进行一对多的播送通信。为了在总线上实现一对一的通信,能够使每一台计算机的适配器领有与其余计算机都不同的地址。在发送数据帧时,在帧的首部写明接收站的地址:当数据帧中的目标地址与适配器的ROM中寄存的地址统一的时候,该适配器能力接管这个数据帧。适配器对不是发送给本人的数据帧就抛弃掉。这样,具备播送个性的总线上就实现了一对一的通信形式。 为了通信不便,以太网采取了一下两种措施: 采纳较为灵便的无连贯的工作形式,即不避先建设连贯就能够间接发送数据,适配器对发送的数据帧不进行编号,也不要求对方发回确认,这样做能够使的以太网工作十分的简略。而局域网的通信品质会十分的好。因通信品质而产生过错的概率是非常低的。因而,以太网提供的服务是尽最大致力的交付,即不牢靠交付。当目标站收到有过错的帧的时候(例如应用CRC循环校验查出有错),就把该帧抛弃掉。其余什么也不做。对有过错的帧是否重传交给下层解决。咱们晓得,总线上只有有一台计算机发送数据,总线的传输资源就会被占用。因而,在同一时间内只容许一台计算机发送数据,否则各个计算机之间就会相互烦扰。使得所发送的数据会被毁坏。因而,如何协调总线上各计算机的工作就是以太网要解决的一个重大问题。以太网采纳的是CSMA/CD(载波监听多点接入/碰撞检测)第二,以太网发送的数据都是曼彻斯特编码的信号(降落沿为1(前高后低),回升沿为0(前低后高)),毛病就是它所占用的频带宽度是基带宽度的两倍。 上面介绍CSMA/CD协定的要点 多点接入就是阐明这是总线型网络,许多计算机以多点接入的形式连贯在一根总线上。载波监听就是用电子技术检测总线上有没有其余计算机在发送数据。其实就是检测信道。不论在发送前,还是发送中,每个站点都必须不停的检测信道。在发送前检测信道是为了取得发送权,如果检测出曾经有计算机发送数据了,则本人就临时不能发送数据。必须要期待信道闲暇后能力发送数据,如果在发送数据过程中检测到信道产生了碰撞,则须要执行一系列的算法来解决。碰撞检测也就是边发送边监听,即适配器边发送数据边检测信道的信号电压变动状况。一边判断本人在发送数据的时候其余站是否也在发送数据,当总线上几个站在同时发送数据的时候,总线上的信号电压变动幅度将会增大(相互叠加)。当适配器检测到信号电压超过肯定的门限值时,就认为总线上至多有两个站点在同时发送数据,表明产生了碰撞(抵触)。这时,总线上传输的信号产生了重大的失真,无奈从中复原出无利的信息来。因而,任何一个正在发送数据的站,一旦发现总线上呈现了碰撞,其适配器就立刻进行发送,省得持续有效的发送。白白的节约网络资源。而后期待一段随机工夫再次发送。 既然每一个站在发送数据之前曾经检测到信道为闲暇,那么为什么还会呈现数据在总线上的碰撞呢?这是因为电磁波在总线上传输数据总是以无限的速率发送,电磁波在1KM的电缆上流传时延为5奥妙,设一端到另一端的工夫为$\tau$,发送数据的站心愿尽早晓得是否产生了碰撞。那么,A发送数据后,最长久要通过2$\tau$的工夫(一个来回),因为互联网上的任意两个站点之间的而流传时延是不一样的,因而局域网就必须依照最坏的状况设计,假如以后两个站点之间的间隔最大,则取该两端的流传时延为所有端到端的流传时延。 显然,应用CSMA/CD协定的时候,一个站点不可能同时进行发送和接收数据(但必须边发送边监听)因而应用CSMA/CD协定的以太网不可能进行全双工通信而只能进行半双工通信。上面是图3-7中一些重要时刻: 在t=0时候,A发送数据,B检测到信道闲暇。 在t=$\tau$-$\delta$时,这里($\tau$>$\delta$>0),A发送的数据还没有达到B,因为B检测到信道是闲暇的,因而B发送数据。 在通过工夫$\delta$/2的时候,即在t=$\tau$-$\delta$/2时候,A发送的数据和B发送的数据产生了碰撞。,然而A和B都不晓得产生了碰撞。 在t=$\tau$时,B检测到产生了碰撞,于是就进行发送数据。 在t=2$\tau$-$\delta$时,A也检测到了产生了碰撞。因而也进行持续发送数据。 A和B发送数据均失败,它们都要推延一段时间再从新发送。由此可见,每一个站在本人发送数据之后的一小段内,存在着遭逢碰撞的可能性,这一小段时间是不确定的。 在图3-17中能够看出,最先发送数据帧的A站,在发送数据帧后至少通过工夫2$\tau$就能够晓得所发送的数据帧是否蒙受到了碰撞,这就是$\delta$=0的状况下。因而以太网的端到端往返工夫2$\tau$称之为争用期,它是一个很重要的参数。争用期又称之碰撞窗口,这是因为一个站在发送完数据后,只有通过争用期的考验,即通过争用期这段时间还没检测到碰撞,能力必定这次发送不会产生碰撞。 以太网应用的是截断二进制指数退却算法来确定碰撞后重传工夫。这种算法让产生碰撞的站在进行产生数据后确定重传的工夫。不是期待信道空闲暇就立刻发送数据。而是推延/退却一个随机工夫,具体的退却算法如下: 协定规定了退却工夫为争用期2$\tau$,具体的争用期工夫为512微秒,为了不便,也能够间接应用比特作为争用期单位,争用期为512bit,即争用期为发送512比特所需的工夫。从离散的整数汇合[0,1,...,(2^k^-1)]中随机取出一个数,记为r。重传应退后的工夫为r倍的争用期。,下面的参数k能够依照上面的公式进行计算: k=Min(重传次数,10)可见,当重传次数不超过10时,参数k等于重传次数;但当重传次数超过10时,K就不会增大而始终等于10。 当重传播16次依然不能胜利,则抛弃该帧,并向下层报告。例如,在第一次重传时,k=1,随机数r就从{0,1}当选一个数,因而重传的站可抉择的重传推迟时间是0或者2$\tau$,在这两个工夫中随机抉择一个。 同样,若再次发生碰撞,则在第2次重传时,则重传为时k=2,随机数就从负数{0,1,2,3}中随机选一个数。因而重传推延的工夫是在0,2$\tau$,4$\tau$,6$\tau$这几个工夫中随即选一个。顺次类推。 适配器每次发送一个新的帧,就要执行一次CSMA/CD算法。适配器对过来产生过的碰撞记忆并无记忆性能。因而,当好几个适配器正在执行指数退却算时候,很可能有某一个适配器发送的新帧可能恰好的插入到信道中,失去了发送全,而曾经推延好几次发送的站,有可能很不巧,还要继续执行退却算法,持续期待。 当初思考另一种状况。某个站点发送了一个很短的帧,但在发送结束之前并没有检测出碰撞。假设这个帧在持续向前流传达到目标站和别的站发送的帧发送了碰撞,因为目标站将会收到有过错的帧,可是发送站并不知道这个帧产生了碰撞,因为不会重传这个帧,这种状况是咱们不心愿的。为了防止产生这种状况,以太网规定了一个最短帧长64字节,即512bit,如果要发送的数据十分的少,,那么必须退出一些填充字节,使得帧长度不小于64字节。 强化碰撞的概念:当发送数据的站点一旦发现产生了碰撞时,除了立刻进行发送数据外,还要持续发送发送32bit或者48bit的人为干扰信号,以便让所有用户都晓得当初曾经产生了碰撞。 依据以上探讨,总结一下CSMA/CD协定的要点: 转杯发送:适配器从网络层取得一个分组,加上以太网的首部和尾部组成以太网帧,放入到适配器的缓存中。但在发送前,必须先检测信道。检测信道:若检测到信道忙,则应不停的检测,始终期待信道转为闲暇。若检测到闲暇信道,并在96bit工夫内信道放弃闲暇(保障了帧间最小距离),就发送该帧。3.在发送过程中仍不停的检测信道,即网络适配器要边发送边监听,这里只有2种可能性: 发送胜利,在争用期内始终未检测到碰撞。这个帧必定可能发送胜利,发送结束后,什么也不做,而后回到(1)。发送失败:在争用期内检测到碰撞。这时立刻进行发送数据,并依照规定发送人为干扰信号,期待r倍512比特工夫后,返回步骤(2),持续检测信道。但若重传16次仍未胜利,则进行重传而向下级报错。以太网每发送完一个帧,肯定要把已发送的数据帧在临时保留下来,如果在争用期内检测出产生了碰撞,那么还要再推延一段时间把这个临时保留的帧重传一次。
点对点协定PPP在通信链路较差的年代,在数据链路层应用牢靠传输协定已经是一种好办法,比较简单的点对点PPP协定则是目前应用最宽泛的数据链路层协定。 PPP协定的特点互联网用户通过都要连贯到某个ISP能力接入到互联网。PPP协定就是用户计算机和ISP进行通信时所应用的数据链路层协定。如图(图3-9) ppp协定是IETF在1992年制订的,当初的PPP协定在1994年就曾经成为了互联网的正式规范[RFC 1661]。 PPP协定应该满足的需要IEFE认为,在设计PPP协定的时候就应该从以下方面思考: 简略数据链路层没有必要提供比IP协定更多的性能,因而,对数据链路层的帧,不须要纠错,不须要排序号,也不须要流量管制。封装成帧PPP协定必须规定非凡的字符作为帧定界符(即标记一个帧的开始字符和完结字符),以便接收端从收到的比特流中可能精确地找出帧的开始和完结地位。透明性PPP协定必须放弃数据传输的透明性,也就是说,如果数据当中呈现了与帧定界符一样的比特组合的时候,就要采取有效的措施来解决这个问题。多种网络协议PPP协定可能在同一条物理链路上同时反对多种网路层协定的运行,当点对点链路所连贯的是局域网或者路由器的时候,PPP协定必须同时反对在链路所连贯的局域网或者路由器上运行的各种网络协议。多种类型链路除了要反对多种网络层协定,还要反对在多种类型上的数据链路上运行。过错检测PPP协定必须可能对接收端接管到的数据帧进行帧检测,如果呈现谬误,立刻抛弃掉这个谬误的帧,如果接管到的谬误帧不抛弃,就会在网络上持续向前到网络层进行转发,这回白白抛弃掉很多的网络资源。检测连贯状态PPP协定必须要有一种可能自动检测链路是否在失常工作的机制。最大传输单元PPP协定必须对每一种类型的点对点链路设置最大传输单元MTU的规范默认值(1500字节),这样做是为了促成各种实现之间的可操作性。如果高层协定发送的分组超过了MTU值,PPP就会抛弃掉这样的帧,并返回过错,报告给下层,须要留神的是,MTU是数据链路层的帧能够载荷的数据局部的最大长度,而不是帧的总长度。网络层地址协商PPP协定必须提供一种使通信的两个网络层(例如:两个IP层)的实体可能通过协商晓得或者可能配置彼此的网络地址。协商的算法应该尽可能的简略,并且可能在所有的请款下该失去后果。这对拨号连贯的链路特地的重要,因为如果仅仅在链路层建设了连贯而不晓得对方的网络层地址,则不可能保障早网络层传输分组。数据压缩协商PPP协定必须可能提供一种办法协商应用数据压缩算法。然而PPP协定并不要求将数据压缩到标准化。在TCP/IP协定族中,牢靠传输由传输层的TCP协定管制,因而数据链里层的PPP协定不须要进行纠错,不须要设置序列号,也不须要进行流量管制。PPP协定不反对多点线路(即一个主站和链路上的多个从站i纪念性通信,它只反对点对点的链路通信。此外,PPP协定支反对全双工链路)。 PPP协定的组成PPP协定有以下三局部 一个将残缺的IP数据报封装到串行链路上。一个用来建设,配置和测试数据链路层的链路控制协议LCP(Link Control Protocol)。通信的单方能够协商一些选项。一套网络控制协议NCP,其中的每一个协定反对不同的网络层协定,如IP层,DECnet等。PPP协定的帧格局各字段的意义如图PPP帧的首部和尾部别离为四个字段和两个字段。 首部的第一个字段和尾部的第二个字段都是标记字段,规定为0x7E(01111110),标记着一个帧的开始或者完结,因而标记字段就是PPP帧的定界符。间断两帧之间只须要用一个标记字段,如果呈现间断两个标记字段,则示意是一个空的PPP帧,该当抛弃。2.首部当中的地址字段A规定为0xFF,管制字段C规定为0x03(00000011)。(这两个字段没有理论什么用处) PPP首部的第四个字段是2字节的协定字段 当协定字段为0x0021,代表的是IP数据报;当协定字段为0xC021,代表的是链路控制协议LCP数据;当协定字段为0x8021,代表的是网络层的控制数据;信息字段的长度是可变的,但不能超过1500字节。尾部的第一个字段(2字节)是应用CRC的帧测验序列FCS。字节填充当信息字段呈现了0x7E这样的比特流,就必须采取必要措施使得不会被接收端认为这是帧定界符号。 当PPP应用异步传输的时候(一一字符发送),把每一个0x7E字节转变为两个字节序列(0x7D和0x5E),若信息字段中呈现了0x7D或者0x5E这样的转义字符,则把0x7D转变为2字节序列(0x7D和0x5D);如果呈现了控制字符,例如0x03(在管制字符串示意传输完结),就变成2字节序列(0x7D,0x23)。因为在发送端进行了字节填充,因而在链路上传送的信息字节数就超过了原来的字节数。但接收端在收到字节后再进行与发送端字节填充相同的替换,就能够正确的复原出原来的信息。 0比特填充当PPP应用同步传输的时候(一连串的比特发送),PPP协定采纳的是0比特字节填充来实现通明传输。 具体做法是(如上图):在发送端,先扫描整个信息段(通常应用硬件扫描,也能够应用软件,不过比较慢),只有发现有5个间断的1,就立刻填入一个0,因而通过这种0比特填充后的数据,就能够保障再信息字段中不会呈现帧界定符号(01111110),接收端在接管到一个帧的时候,先找到一个标记字段F(7E)边界,接着再用硬件对其中的比特流进行扫描。每当发现间断的5个1的时候,就把这个间断的5个1前面的0删除掉,以还原成原来的信息比特流(如图3-11),这样就保障了通明传输:在传输的数据比特流过程中能够传送任意组合的比特流,而不会引起帧边界的错误判断。 PPP协定的工作状态方才咱们探讨了PPP帧的格局和PPP帧是怎么组成的。然而PPP链路到底一开始是怎么被初始化的呢?当用户拨号进入ISP后,就建设的一条从用户个人电脑到ISP的ISP连贯,这时,用户个人电脑向ISP发送一系列的链路控制协议LCP分组(封装成多个PPP帧),以便建设LCP连贯,这些分组及其响应抉择了将要应用的一些PPP参数。接着还要进行网络层配置,网络控制协议NCP给新接入的用户个人电脑调配了一个长期的IP地址,这样,用户个人电脑就能够成为了互联网上一个有IP地址的主机了。 当用户通信结束后,NCP就开释网络层连贯,发出原来调配进来的IP地址,接着LCP开释数据链路层的连贯,最初开释的是物理层的连贯。 上述过程可用图3-12的状态图形容: PPP链路的起始和终止状态永远是图中的链路静止状态,这时候用户电脑和ISP的路由器之间并不存在物理层的连贯。 当用户电脑通过调制解调器呼叫路由器的时候(屏幕上的连贯按钮),路由器就能检测到调制解调器收回的载波信号,在单方建设了物理层连贯之后,PPP就进入了链路建设状态,其目标是建设LCP连贯。 这时候LCP开始协商一些配置项,即发送LCP的配置申请帧,这是个PPP帧,其协定字段为LCP的协定代码(0xC021),而信息字段蕴含特定的配置申请。链路的另一端能够发送以下几种响应的一种: 配置确认帧:所有选项都承受。配置否定帧:所有配置都了解但不能承受。配置回绝帧:选项中有的无奈辨认或者不能承受,须要协商。 协商完结后就建设了LCP链路,接着就进入甄别状态,在这一状态,只容许传送LCP协定的分组,甄别协定的分组以及监控链路品质的分组,如果甄别失败,则转到链路终止状态,若甄别胜利,则进入网络层协定状态。 在网络层协定状态中,PPP链路的两端的网络控制协议NCP依据网络层的不同协定互相交换网络层网络层特定的网络管制分组。这个步骤很重要的,因为当初的路由器可能同时反对网络层协定。总之,PPP协定的两端的网络层能够运行不同的网络层协定,但依然能够应用同一个PPP协定进行通信。 当网络层配置结束后,链路就进入可进行通信的链路关上状态,链路的两个PPP端点能够彼此发送分组。两个PPP端点还能够发送回送申请LCP分组和回送答复LCP分组,以查看链路的状态。 数据传输完结后,能够由链路的一端发送终止申请LCP分组申请终止链路连贯,在收到对方发送过去的LCP分组后,转到链路终止状态,如果链路呈现故障,也会从链路关上状态转到链路终止状态,当调制解调器的载波进行后,则返回到链路静止状态。
数据链路层应用的信道次要有一下两种类型点对点信道这种信道应用一对一的点对点通信形式。 播送信道这种信道次要是用一对多的播送通信形式。 局域网尽管是个网咯,但咱们并不把局域网放到互联网上思考。在本章中咱们钻研的是在同一个局域网中,分组怎么从一个主机传送到另一台主机,但并不通过路由器转发,从整个互联网上来看,局域网中依然属于数据链路层的范畴。 本章最次要的知识点熟路链路层的点对点信道和播送信道的特点,以及这两种信道应用的协定PPP协定和CSMA/CD协定的特点数据链路层的三个根本问题:封装成帧,通明传输,过错检测。以太网MAC层的硬件地址适配器,转发器,集线器,网桥,以太网交换机的作用以及应用场合。咱们察看一下两台主机通过互联网进行通信时数据链路层所处的位置 图3-1(a)示意主机H1通过电话线上网,两头通过三个路由器(R1,R2,R3)连贯到近程主机H2,所通过的网络是多种的,如电话网,局域网,广域网等。当主机H1向主机H2发送数据时,从协定的档次上来看,数据流动如图3-2(b)所示,主机H1和主机H2都有残缺的五层协定栈,单路由器在转发分组时应用的协定栈只有上面三层。数据进入路由器后要先从物理层上到网络层,在转发表中找到下一跳地址后,再下到物理层转发进来。当咱们专一于钻研数据链路层的问题时,咱们能够这样钻研:H1的链路层->R1的链路层->R2的链路层->R3的链路层->H2的链路层。 应用点对点信道的数据链路层数据链路和帧链路指的是从一个结点到相邻结点的一段物理线路(有线或无线),而两头并没有任何其余的替换结点。在进行数据通信时,两台计算机之间的通信门路往往要通过很多段这样的链路。可见链路只是门路的一部分。 数据链路:当在一条线路上传输数据时,除了必须要有一条物理线路外,还必须要有一些必要的通信协议来控制数据的传输,若把实现这些协定的硬件和软件加到链路上,就形成了数据链路。当初最罕用的就是网络适配器(既有软件,也有硬件)来实现这些协定。个别的适配器都包含了数据链路层和物理层这两层的性能。 点对点信道的数据链路层的协定数据单元:帧: 数据链路层把网络层交下来的数据形成帧发送到链路上,以及把接管到的帧中的数据取出并上交给网络层。在网络层中,网络层协定数据单元就是IP数据报,也叫分组或者包。 数据链路层通信图 点对点信道的数据链路层在进行通信时的次要步骤如下: 结点A的数据链路层把网络层交下来的IP数据报文增加首部和尾部封装成帧。结点A把封装好的帧发送给结点B的数据链路层。若结点B的数据链路层接管到的帧无差错则从接管到的帧提取出IP数据报上交给下面的网络层;否则抛弃这个帧。三个根本问题:封装成帧,通明传输,过错检测封装成帧封装成帧是在一段数据的前后别离加上首部和尾部,这样就形成了一个帧。接收端在接管到物理层上交的比特流后,就能依据手部和尾部的标记,会从比特流中辨认到帧的开始和帧的完结。如图就是一个增加帧首和帧尾封装成帧 咱们晓得,分组替换的的一个重要概念就是:所有在互联网上传送的数据都是以IP数据报文为传送单位,网络层的IP数据报传送到数据链路层就成为了帧的数据局部。在帧的数据局部的前部和后部别离加上首部和尾部,就形成了一个残缺的帧。这样的帧就是数据链路层的数据传送单元。 一个帧的长度等于数据局部的长度+帧首+帧尾的长度,首部和尾部的重要作用就是帧定界(确定帧的界线)。 在发送帧的时候,是从帧的首部开始送的。各种数据链路层协定都要对帧首部和帧尾部的格局都有明确的规定。为了进步帧的传输效率,应该使帧的数据局部尽可能的大于帧的首部和尾部的长度。然而呢,每一种数据链路层协定都规定了所能传送的帧的数据局部长度下限-----最大传送单元MTU(Maximum Transfer Unit)。如图给出了MTU与帧的数据局部和帧的首部和尾部的关系。 帧首部应用SOH(start of head)十六进制编码01作为帧的开始控制字符,帧尾部应用EOT(end of transmission)十六进制编码04作为帧的完结控制字符。 通明传输因为帧的开始和完结标记会用专门的控制字符,因而,所传输的数据中的任何8比特组合肯定不容许应用作为帧定界的控制字符比特编码一样,否则会呈现帧定界谬误。 当传送的帧应用文本文件组成的时候(文本文件中的字符是从键盘上输出的),其数据局部显然不会呈现SOH和EOT这样的帧定界控制字符。不论在键盘上输出什么字符都能够放单帧上传输,因而这样的传输就是通明传输。 然而当数据局部并不是键盘上一般的ASCII码时候,而是例如像二进制代码或者图像,音乐等数据流时,状况就有可能变得不一样,如果数据中的某个字节的二进制比特刚好和帧定界符的控制字符SOH(01)或者EOT(04)重合,如图,数据链路层可能会谬误的找到帧界定符。数据链路层会谬误的找到帧定界符号,把局部帧接管下(误认为是个残缺的帧)这样的谬误传输状况显然并不是通明传输。 为了解决通明传输问题,就必须设法使数据中可能呈现的控制字符SOH,EOT在接收端不被解释为控制字符,具体的办法是:发送端的数据链路层如果在数据传输中呈现SOH或者EOT,就在后面插入一个转义字符ESC(十六进制编码为1B),而且在接收端删除这个转义字符,这样的办法称之为字节填充或者是字符填充。,如果转义字符也呈现在数据当中,那么解决办法依然是在转义字符的后面再加上一个转义字符,因而,当接收端间断的接管到两个转义字符的时候,就删除后面其中一个。如图为用字节串书法解决通明传输问题: 过错检测事实中的通信链路都是不现实的。也就是说,比特在传输的过程当中,可能1会变成0,0或者变成1,这就叫做比特过错,在一段时间内,传输谬误的比特总数占传输所有比特总数的比值,称之为误码率(BER),误码率与信噪比有着很大的关系,如果设法进步信噪比,就能够使误码率缩小。理论的通信链路并非是现实的,它不能使误码率升高到0,因而呢,在计算机网络传输数据的时候,必须采纳各种校验,目前在数据链路层宽泛的采纳了CRC循环冗余测验的检错技术。上面咱们通过一个简略的例子来阐明CRC循环冗余测验的原理: 在发送端,先把数据划分为组,假如每组k个比特。先假如待传送的数据M=101001(k=6),CRC运算就是在数据M的前面增加供过错检测应用的n为冗余码,而后形成一个帧发送进来,一共发送(k+n)位。在所要发送的数据前面减少n为的冗余码,尽管增大了数据传输的开销,然而却能够进行过错检测,当传输可能呈现过错时,付出这种代价往往是很值得的。这n位冗余码能够用以下办法得出:用二进制的模2运算(二进制加法不进位)进行2^n乘M运算,这相当于在M前面增加n个0,失去的(k+n)位的数除以收发单方当时约定的长度(n+1)位的除数p,得出商是Q余数是R(n位,比P少一位),例如:假设除数为P=1101,通过模2除法运算后的后果是:商Q为110101,余数R为001。这个余数R就能够当作循环冗余码拼接到数据M的前面发送进来,这种为了将检错而减少的冗余码成为帧测验序列FCS,因而加上FCS后发送的帧为101001001(即$x^{2}$M+FCS),共有(k+n)位。 顺便说一下,循环冗余码CRC是一种检错形式,而FCS是增加在数据前面的冗余码。 在接收端把接管到的数据以帧为单位进行CRC测验,把收到的每一个帧都除以雷同的除数P(模2运算)。如果在传输过程中没有过错,那么通过CRC测验后失去的余数R为0,在接收端对收到的每一帧通过CRC测验,会有以下两种状况 若得出余数为0,就断定这个帧没有呈现过错,就承受。若失去余数不为0,则判断这个帧有过错(然而并不知道哪里错了),抛弃在数据链路层,发送端帧检测序列FCS的生成和接收端的CRC测验都是硬件实现的,因而处理速度很快并不会影响数据的传输。 数据链路层不应用确认和重传机制,也就是不要求数据链路层向上册提供牢靠服务,如果在数据链路层传输数据呈现了谬误,那么交给下层去解决,数据链路层都是不牢靠的传输协定。
晚期的数字传输零碎存在的次要的毛病速率规范不对立:因为历史的起因,多路复用技术的速率体系有着互不兼容的规范。不是同步传输:早过来相当长的工夫里。为乐节约资金,各国的数字网次要采纳准同步形式。在转同步零碎中因为各个信号的时钟频率都存在差别,给时分复用和奋勇都带来了许多的麻烦。当数据的传输速率很高时,收发单方的时钟同步将成为很大的问题。 为了解决晚期数字传输零碎中的毛病,美国提出了新的数字传输规范,叫做同步光纤网。整个的同步网络的各级时钟都来自于一个十分准确的主时钟(铯原子钟)。 带宽接入技术如果一个用户须要接入互联网,必须要首先接入到某一个ISP,以便获取到网络上的IP地址。在互联网的倒退初期,用户就是利用电话线通过调制解调器连贯到ISP中。 从带宽的技术接入上来看,带宽技术接入次要分为有线接入和无线接入(前期再讲)。 有线接入技术ADSL技术(非对称用户数字线)应用数字技术对现有的模仿电话用户进行用户线革新。因为用户上网时次要是从互联网上下载各种文档或者资源,而向互联网发送的信息量个别都不大,因而ADSL的上行(ISP到用户)的带宽比ADSL的上行(用户到ISP)远远大于。因而称之为非对称。 ADSL的传输间隔取决于数据率与用户线的粗细。个别状况下,用户线越细,信号在传输中的衰减就越大。除此之外,信号衰减还与信噪比相干等因素。ADSL在两端各装置一个ADSL调制解调器(光猫)。 ADSL在用户线(铜线)的两端各装置一个ADSL调制解调器,这种调制解调器的实现计划有多种,我国目前采纳的计划是离散多音调DMT调制技术,DMT调制技术采纳频分复用的办法,把40kHz以上始终到1.1MHz的高端频谱划分为很多子信道,其中25个子信道用于上行信道,249个子信道用于上行信道,并应用不同的载波进行数字调制。 HFC网(光纤同轴混合网)在有线电视网的根底上开发的一种居民带宽接入技术,除了能够传送电视节目外,还能提供数据和其余带宽交互型业务。HFC次要特点如下: 为了进步传输的可靠性和电视信号的品质,HFC网把原有线电视网中的同轴电缆骨干局部改为光纤,光纤从头端连贯到光纤结点,在光纤结点光信号转化为电信号,而后通过同轴电缆传送到每个用户家庭。连贯到一个光纤节结点的典型用户数为500左右,不会超过2000。光纤结点与头端的间隔个别是25KM,而从光纤结点到用户间隔个别不超过2~3KM。 HFC网具备双向传输的性能,而且扩大了传输频带,目前我国的HFC网的频带划分如下:要使现有的模仿电视机可能承受数字信号,须要把一个叫做机顶盒的设施连贯在同轴电缆和用户的电视机之间,但为了使用户可能利用HFC网接入到互联网,以及在上行信道中传送交互数字电视所需的一些信息。咱们还须要减少一个为HFC网应用的调制解调器,它又称为电缆调制解调器。 FTTX技术因为互联网上呈现了大量的视频资源,为了可能更快的上网且失去更好的上网体验。然而为了更快的下载视频文件,以及更加晦涩的地观赏网上的各种高清电视节目,于是就呈现了光纤到户FTTH(Fiber to The Home)技术 ,所谓光纤到户,就是把光纤始终铺设到用户家庭,只有在光纤进入到家门后再把光信号转为电信号,这样做就能够让用户获取最高的上网速率。然而FTTX技术也有以下毛病: 目前的价格还不够便宜。个别的家庭用户也没有,也没必要这么高的速率要求。因而在这两点毛病上,就呈现了多种光纤带宽接入技术,称呼,FTTX技术,这里的x代表着不同的光纤接入地点。实际上FTTX就是光电转换的中央,H代表家庭(Home)C代表路边(Crub),Z代表小区(Zone),F代表楼层(Floor),O代表办公室(Office),D代表桌面(Desk)。就是这么的简略。
复用技术简略介绍 如图,在(a)图中,A1,B1,C1别离应用一个独自的信道和A2,B2,C2来进行通信,因而他们须要应用三个信道进行通信,然而呢,如果把它们在发送端上应用一个复用器,把这三个互相独立的信道“混合在一起”成为一个信道,这样呢,这三个就能够共享应用一个信道进行通信,在接收端应用一个分用器,把他们抽出来,分为把它们送到不同的接收端。这就是所谓的信道复用技术。信道复用能够别离频分复用和时分复用两大类。上面咱们就具体介绍这两种信道复用技术。 频分复用技术如图所示: 用户在分到肯定的频带后,在通信的从头至尾都占用着这个信道资源,可见呢,不同的用户在同样的工夫占用的是不同的信道资源。 在应用频分复用时,如果用户所占的带宽资源不变。则当用户的数量减少时,服用后的信道的总带宽会大大增加。 时分复用技术将工夫划分为一段段等长的时分复用帧,时分复用的用户在不同的工夫招用不同的信道资源。时分复用技术更利用于数字信号传输。 统计时分复用:是对时分复用的改良,它可能显著的进步信道的利用率。如图: 原理是将应用集中器连贯4个低速的用户,而后把他们的数据通过高速线路发送到另一台近程计算机。 波分复用技术其实就是光的频分复用。原理就是在一条光纤上搭载多条光波信号,这样就提出了光的波分复用这一名词。因为当初一天光纤上能搭载越来越多的光型号,因而就又呈现了密集波分复用这一名词。 如图,对于8路传输速率为2.5G/s的光载波,通过广的调制后,别离将波长变换到1550-1557nm,这8根波长通过光复用器,就会在一个光纤上传输。,在一个光纤上总的传输速率为8X2.5G/s=20G/s。然而光信号传输肯定间隔后会衰减,因而必须要对衰减的光信号进行放大能力持续传输。因而呢,这就引出了一个光放大器的货色,当初的光放大器叫做掺饵光纤放大器。这种放大器放大原理并不简单,只是在1550nm波长左近有35nm的频带范畴提供较平均的增益。 码分复用每一个用户在同样的工夫会用雷同的频带进行通信,因为各个用户应用通过非凡筛选的不同码型,因而各个用户之间并不会造成烦扰。 这种信号具备很强的抗干扰能力,其频谱李思思与白噪声,不易被发现。码分复用技术次要实用于挪动通信中,特地是无线局域网内。上面简述其工作原理: 在CDMA当中,每一个比特工夫再划分为m个短的距离,成为码片,通常m为64或者128,咱们当初设m=8。应用CDMA的每一站被指派一个惟一的m bit码片序列,一个站要发送比特1,则发送本人的m bitm码片序列,如果要发送比特0,则发送该码片的二进制反码。例如:指派给S站的8bit码片序列为00011011,当s发送比特1时,它就发送序列00011011,当s发送比特0时候,就发送11100100,为了不便,咱们依照常规将码片中的0写为"-1",将1写成+1,因而S的码片序列为(-1,-1,-1,+1,+1,-1,+1,+1)。现假如S站要发送信息的数据率为b bit/s,因为每一个bit要转化为m个比特的码片,因而S站理论要发送的数据率进步到mb bit/s,同时S站所占用的频带宽度也进步到原来数值的m倍,这种通信形式是扩频的一种,扩频通信通常有两大类,一类是间接序列扩频,如下面的例子,还有一种是跳频扩频。 CDMA零碎中一个重要的特点就是这种体制给每一站调配的码片序列不仅必须各不相同,并且还必须互相正交,在理论的零碎中应用的是伪随机码序列。 用数学公式能够很分明地示意码片序列的这种正交关系。令向量S示意站S的码片向量,再令T示意其余任何站的码片向量。两个不同站的码片序列正交,就是向量S和T的规格化内积 Ginner product都是0 例如,向量S为(-1-1-1+1+1-1+1+1),同时设向量T为(-1-1+1-1+1+1+1-1),这相当于T站的码片序列为00101110。将向量S和T的各重量值代入(2-3)式就可看出这两个码片序列是正交的。不仅如此,向量S和各站码片反码的向量的内积也是0。另外一点也很重要,即任何一个码片向量和该码片向量本人的规格化内积都是1: 而一个码片向量和该码片反码的向量的规格化内积值是-1。这从(2-4)式能够很分明地看出,因为求和的各项都变成了-1。 现假设有一个X站要接管S站发送的数据。X站就必须晓得S站所特有的码片序列Ⅹ站应用它失去的码片向量S与接管到的未知信号进行求内积的运算。X站接管到的信号是各个站发送的码片序列之和。依据下面的公式(2-3)和(2-4),再依据叠加原理(假设各种信号通过信道达到接收端是叠加的关系),那么求内积失去的后果是:所有其余站的信号都被过滤掉(其内积的相干项都是0),而只剩下S站发送的信号。当S站发送比特1时,在Ⅹ站计算内积的后果是+1,当S站发送比特0时,内积的后果是-1。 现假设有一个X站要接管S站发送的数据。X站就必须晓得S站所特有的码片序列。Ⅹ站应用它失去的码片向量S与接管到的未知信号进行求内积的运算。X站接管到的信号是各个站发送的码片序列之和。依据下面的公式(2-3)(2-4),再依据叠加原理(假设各种信号通过信道达到接收端是叠加的关系),那么求内积失去的后果是:所有其余站的信号都被过滤掉(其内积的相干项都是0),而只剩下S站发送的信号。当S站发送比特1时,在Ⅹ站计算内积的后果是+1,当S站发送比特0时,内积的后果是-1。 图2-18是CDMA的工作原理。设S站要发送的数据是110三个码元。再设CDMA将每一个码元扩大为8个码片,而S站抉择的码片序列(-1-1-1+1+1-1+1+1)。S站发送的扩频信号为Sx。咱们该当留神到,S站发送的扩频信号Sx中,只蕴含互为反码的两种码片序列。T站抉择的码片序列为(-1-1+1-1+1+1+1-1),T站也发送110三个码元,而T站的扩频信号为Tx。因所有的站都应用雷同的频率,因而一个站都可能收到所有的站发送的扩频信号。对于咱们的例子,所有的站收到的都是叠的信号Sx+Tx 当接收站打算收S站发送的信号时,就用S站的码片序列与收到的信号求规格化内积。这相当于别离计算S·S和S°·Tx。显然,S°S就是S站发送的数据比特,因为在计算规格化内积时,按(2-3)式相加的各项,或者都是+1,或者都是-1;而STx肯定是零,因为相加的8项中的+1和-1各占一半,因而总和肯定是零。
对于对 Socket 的意识,大抵分为上面几个主题,Socket 是什么,Socket 是如何创立的,Socket 是如何连贯并收发数据的,Socket 套接字的删除等。 Socket 是什么以及创立过程一个数据包经由应用程序产生,进入到协定栈中进行各种报文头的包装,而后操作系统调用网卡驱动程序指挥硬件,把数据发送到对端主机。整个过程的大体的图示如下。 咱们大家晓得,协定栈其实是位于操作系统中的一些协定的重叠,这些协定包含 TCP、UDP、ARP、ICMP、IP等。通常某个协定的设计都是为了解决某些问题,比方 TCP 的设计就负责安全可靠的传输数据,UDP 设计就是报文小,传输效率高,ARP 的设计是可能通过 IP 地址查问物理(Mac)地址,ICMP 的设计目标是返回谬误报文给主机,IP 设计的目标是为了实现大规模主机的互联互通。 应用程序比方浏览器、电子邮件、文件传输服务器等产生的数据,会通过传输层协定进行传输,而应用程序是不会和传输层间接建立联系的,而是有一个可能连贯应用层和传输层之间的套件,这个套件就是 Socket。 在下面这幅图中,应用程序蕴含 Socket 和解析器,解析器的作用就是向 DNS 服务器发动查问,查问指标 IP 地址。 应用程序的上面就是操作系统外部,操作系统外部包含协定栈,协定栈是一系列协定的重叠。操作系统上面就是网卡驱动程序,网卡驱动程序负责管制网卡硬件,驱动程序驱动网卡硬件实现收发工作。 在操作系统外部有一块用于寄存管制信息的存储空间,这块存储空间记录了用于管制通信的管制信息。其实这些管制信息就是 Socket 的实体,或者说寄存管制信息的内存空间就是套接字的实体。 这里大家有可能不太分明所以然,所以我用了一下 netstat 命令来给大伙看一下套接字是啥玩意。 咱们在 Windows 的命令提示符中输出 netstat -ano# netstat 用于显示套接字内容 , -ano 是可选选项# a 不仅显示正在通信的套接字,还显示包含尚未开始通信等状态的所有套接字# n 显示 IP 地址和端口号# o 显示套接字的程序 PID我的计算机会呈现上面后果。 图中的每一行都相当于一个套接字,每一列也被称为一个元组,所以一个套接字就是五元组(协定、本地地址、内部地址、状态、PID)。有的时候也被叫做四元组,四元组不包含协定。 比方图中的第一行,它的协定就是 TCP,本地地址和近程地址都是 0.0.0.0,这示意通信还没有开始,IP 地址临时还未确定,而本地端口已知是 135,然而近程端口还未知,此时的状态是 LISTENING,LISTENING 示意应用程序曾经关上,正在期待与近程主机建设连贯(对于各种状态之间的转换,大家能够浏览笔者的这篇文章 TCP ,丫的终于来了!!)最初一个元组是 PID,即过程标识符,PID 就像咱们的身份证号码,可能精确定位惟一的过程。 当初你可能对 Socket 有了一个根本的意识,当初喝口水,劳动一下,让咱们持续探索 Socket。 ...
计算机网络重点概述本篇文章次要是整顿面试常问的问题 七层协定7 application layer 6 presentation layer 5 session layer 4 transport layer 3 network layer 2 link layer 1 physical layer TCP三次握手1: client - 发送带有SYN标记的数据包 2: server - 发送带有SYN/ACK标记的数据包 3: client - 发送带有ACK标记的数据包 四次挥手1: client - 发送FIN敞开数据传输 2: server - 发回一个ACK,确认序号为收到的序号加1(一个FIN占用一个序号) 3: server - 敞开与client的连贯,发送一个 FIN给client 4: client - 发回 ACK 报文确认,并将确认序号设置为收到序号加 1 如何保障传输的可靠性checksum:TCP 将放弃它首部和数据的测验和。这是一个端到端的测验和,目标是检测数据在传输过程中的任何变动。如果收到段的测验和有过错,TCP 将抛弃这个报文段和不确认收到此报文段TCP 的接收端会抛弃反复的数据流量管制拥塞管制ARQ 协定超时重传TCP和UDP的区别TCP面向连贯,UDP无连贯TCP牢靠,UDP不牢靠TCP以字节流的形式传输,UDP则是数据报文段TCP传输慢,所需资源多,UDP传输快,所需资源少利用场景:TCP:文件传输,邮件传输等,UDP:域名转换,语音,视频首部字节:TCP:20-60,UDP:8状态码1XX Informational 接管的申请正在解决 2XX Success 申请解决胜利 3XX Redirection 需进行附加操作以实现申请 4XX Client Error 客户端谬误,服务器拒绝请求或是找不到资源 ...
申明:此文章仅是作者自学整顿的内容,并非原创,因思否无奈设置转载多篇文章只能抉择原创。参考文章见文章开端,文章援用模式不谨严,敬请见谅。1. TCP/IP 协定族首先,TCP 和 UDP 同属于 TCP/IP 协定族,这个协定族内还包含其余诸如 HTTP, SMTP, FTP, IP, ICMP, IPX 等等协定。 作者之前整顿的另一篇文章《计算机网络分层构造演绎》中有提到过 TCP/IP 四层构造参考模型。这个模型也能够视为上述协定的总称,协定分成了四层。其中传输层就蕴含了两个重要的协定,TCP 和 UDP。 2. TCP 和 UDP 的区别UDP全称 User Data Protocal (用户数据报协定),是一种无连贯的协定。有不提供数据包分组、组装和重排序的特点。所以,无奈得悉 UDP 发送的包是否残缺达到。 面向无连贯 不须要像 TCP 一样进行三次握手,指搬运数据,不对数据做任何解决。 可单播、多播、播送 能够一对一、多对一、多对多 面向报文 对应用层(这里指的是四层模型的应用层)下放的数据报文,只增加首部就交给 IP 层,不做其余解决 不牢靠 不须要建设连贯;不关怀接管方是否收到;不解决数据,想发什么就发什么;不备份;不做拥塞管制,不管制传输速率 头部开销小 只有 8 个字节(1 字节 8 位),比 TCP 头部至多 20+ 字节开销小很多,见下图 TCP全称 Transfer Control Protocal (传输控制协议),是面向连贯的、牢靠的、面向字节流的传输层通信协议。 依据 RFC 793 的『连贯』定义,用于保障传输牢靠和流量管制保护的状态信息,这些信息的组合,包含序列号、Socket、窗口大小,被称为连贯。因而,TCP 连贯即为满足上述定义的,包含用于确定起源和出处的Socket(IP 和 port)、确定排序的序列号和确定流量管制的窗口大小等状态信息组成的连贯。下图能看出,TCP 头部的确蕴含了这些信息。 ...
申明:此文章仅是作者自学整顿的内容,并非原创,因思否无奈设置转载多篇文章只能抉择原创。参考文章见文章开端,文章援用模式不谨严,敬请见谅。1. 几种分层构造参考模型通行的 5 层体系结构基于: 规定规范的 7 层 OSI 参考模型事实标准的 4 层 TCP/IP 参考模型 2. OSI 参考模型1~3 层:通信子网,用于数据传输通信(邮寄) 5~7 层:资源子网,用于数据处理(包装) 构造层数次要协定应用层7HTTP, SMTP, FTP表示层6 会话层5ADSP, ASP传输层4TCP, UDP网络层3IP, IPX, ARP, RARP数据链路层2SDLC, PPP物理层1RJ45、802.31. 应用层所有用户与网络的交互界面,所有能和用户交互产生网络流量的程序... 都属于应用层 2. 表示层示意层层解决两种通信零碎中替换信息的示意形式 比如说: 数据格式变换(编码格局之间的转换,使得不同主机之间即便在不同的编码格局上,也能音讯互通)数据加密解密(password 传输)数据压缩和复原(发送端压缩,承受端解压缩)表示层在TCP/IP中被纳入到应用层中 3. 会话层向表示层实体/用户过程提供建设连贯并在连贯上有序地传输数据 建设连贯(建设一个 session)建设同步(SYN)性能: 建设、治理、终止会话应用校验点可使在通信生效和复原之后,从校验点持续复原通信,无需从头开始。实用于传输大文件。4. 传输层负责主机中两个过程的通信,即端对端的通信。传输单位是报文段或用户数据报。(因为是端口号之间的通信,因而是端对端) 上面的几层(1 ~ 3),是计算机与计算机之间的通信,因而是点对点的通信。 性能: 牢靠传输与不牢靠传输。(即存不存在确认机制)差错控制。对产生的过错,如何管制。流量管制。传输速度匹配管制,接管方依据本人的处理速度,管制发送方速度。复用分用。复用,即多个过程同时应用上面传输层的服务(两个过程的音讯携带着端口号一起发送给传输层);分用,即运输层将接管到的信息散发到不同的过程。(可差留用,绝不认输) 5. 网络层次要工作:把分组从源端传送到目标端,为分组替换网上的不同主机提供通信服务。(数据过大时进行切割)(实现网际互联) 传输单位是数据包 性能: 路由抉择。通过路由抉择算法,抉择适合的路由器门路进行传输。流量管制。限度发送方速度。差错控制。比如说,奇偶校验码。拥塞管制。若所有节点都来不及承受分组了,而要抛弃大量分组,这时候就处于网络拥塞状态。6. 数据链路层把网络层传下来的数据包组装成帧。 传输单位是帧。 性能: 成帧。(定义帧的开始和完结)差错控制。帧错+位错。流量管制拜访(接入)管制。管制对信道的拜访。管制哪台主机能够占用信道。7. 物理层将比特流转换为电信号进行传输。 物理传输单位是比特。 通明传输:不论给什么比特流,都转发。 性能: 定义接口个性。(物理上,接口怎么接)定义传输模式,单工、半双工、双工定义传输速率比特同步比特编码3. 五层构造模型 4. TCP/IP 四层构造模型 5. 三种模型比照 参考文章计算机网络的七层构造、五层构造和四层构造计算机网络分层构造
一年一度的国庆 “摄影大赛” 拉开帷幕,川藏自驾、海岛度假、环球影城……朋友圈洋溢着一片欢跃的氛围。 这个国庆小长假,OpenInfra Days China 2021 的 100 余位志愿者、讲师和工作人员们还在为 10.15 大会的正式召开进行着最初的冲刺工作。 作为大会背地的力量,OpenInfra Days China 2021 由 OpenInfra 基金会中国社区经理李昊阳及社区成员组成的志愿者团队独特筹备,他们和走向台前的讲师一样,同样值得被记住和感激。 云探班 志愿者天团齐亮相明天小编带大家 “云探班”,一起意识下参加本届大会筹备的志愿者们 —— 本次会议的志愿者团队共有 18 人,均为 OpenInfra 社区成员,来自芯片厂商、开源软件提供商、开源云计算服务提供商、互联网企业等机构。他们别离是: 陈道清 华为高级工程师,EdgeGallery 社区经营经理丁建峰 英特尔研发经理耿航 中国电子技术标准化研究院,木兰开源社区经营负责人黄舒泉 九州云技术总监金运通 阿里云高级技术经营专家李铭轩 中国联通研究院高级工程师李文海 华为高级工程师林冠宇 易捷行云资深工程师刘斌 蚂蚁金服研发研发工程师亓开元 浪潮数据云计算研发部总经理史皓天 边缘计算社区负责人王昊 战火通信云计算研发核心系统部总监王旭 蚂蚁团体资深技术专家严兴华 红帽(中国)软件资深架构师于诗淼 战火集成市场经理赵志恒 Media Plus 总经理张百林 济南浪潮数据云计算架构师张洁 Media Plus 项目经理 如此奢华阵容的志愿者天团,将会为参会者带来怎么的卓越体验? 四大会议亮点,精彩内容不容错过亮点 1:时隔一年,大会重回线下!OpenInfra Days China 2021 又开始了新的一年征程。过来的一年 COVID-19 肆虐,但没有阻挡寰球的开源贡献者们单干和后退的脚步,咱们的社区开源我的项目以及成员搭档也发明出了很多响应当下云计算需要的新技术和新试验。往年的会议将以线上+线下的模式举办,时隔一年,大会从新回归线下。在现场,能够见到国内最沉闷的开源社区贡献者和行业首领。 DAY ONE (10.15)会议内容:Keynote 演讲 | OpenStack 专题研讨会 | 网络云专题研讨会 | 浪潮专题研讨会 | Social Lounge Lunch会议地点:北京 · 海航大厦万豪酒店 ...
本我的项目所需软件eNSP_Setup、VirtualBox-5.2.38-136252-Win、WinPcap_4_1_3、Wireshark-win64-3.2.2 1.1 设计工作组建小型校园网:学生宿舍50台计算机、办公楼30台计算机(办公楼又分为财务处、人事处,以及其余科室)、图书馆10台计算机、教学楼30台计算机、服务器2台(FTP、Web),学校通过一台路由器连贯到服务器和Internet。 1.2 需要剖析1.每个部门外部能够二层互通、部门间能够三层互通。 2.应用动态路由、RIP路由配置。 3.校园外部应用私网IP地址,所有用户均可通过校园网拜访Internet。 4.所有用户均可在内网实现资源共享,拜访Web/FTP服务器。 5.学生宿舍、图书馆、教学楼不能拜访人事处、财务处。 6.服务器采纳动态IP地址,其余用户采纳动静IP地址。 1.3 网络布局/设计1.3.1VLAN布局别离在学生宿舍、图书馆、教学楼下设置一台主机和一台Client为代表,以实现二层之间的互通。在办公楼下设置三个交换机,每个交换机下设置一台主机和一台Client为代表,以实现二层之间的互通。 应用一个聚合交换机进行配置,代表教学楼,以实现三层之间能够实现互通。同时满足要求学生宿舍、图书馆、教学楼不能拜访人事处、财务处。 1.3.2IP地址布局以下为IP地址布局 1.3.3性能部署布局校园网整体布局 学生宿舍由一个交换机、一台主机和一台Client形成,配置的 VLAN为VLAN10,能够拜访图书馆和教学楼 图书馆由一个交换机、一台主机和一台Client形成,配置的VLAN为VLAN50,能够拜访学生宿舍和教学楼 教学楼由一个交换机、一台主机和一台Client形成,配置的VLAN为VLAN60,能够拜访图书馆和学生宿舍 办公楼由一个聚合交换机代表,其余为三个一般交换机,别离代表财务处、人事处和其余科室,每个局部又别离有一台主机和一台Client代表。 能够实现财务处、人事处、其余科室三个局部互通,并且学生宿舍、图书馆、教学楼均不能拜访人事处、财务处。 Internet和Web/FTP服务器别离用一台主机和一台服务器来代表,能够实现校园外部应用私网IP地址,所有用户均可通过校园网拜访Internet以及所有用户均可在内网实现资源共享,拜访Web/FTP服务器两大性能。 1.4 具体配置1.4.1配置VLAN——在接入交换机上配置别离在LSW1-LSW6上配置VLAN,而后配置入口类型为access,将主机默认vlan设置成配置的vlan,并且将进口设置为trunk类型,设置进口的vlan为默认预设的vlan LSW1 vlan batch 10interface Ethernet 0/0/1port link-type accessport default vlan 10quitinterface Ethernet 0/0/2port link-type accessport default vlan 10quitinterface Ethernet 0/0/4port link-type trunkport trunk allow-pass vlan 10quitLSW2 vlan batch 20interface Ethernet 0/0/3port link-type accessport default vlan 20quitinterface Ethernet 0/0/4port link-type accessport default vlan 20quitinterface Ethernet 0/0/2port link-type trunkport trunk allow-pass vlan 20quitLSW3 ...
《计算机网络》(5th),作者是 Andrew S. Tanenbaum和David J. Wetherall,译者是严伟和潘爱民,2018年11月第17次印刷。 尽管本人是计算机科学与技术业余的,然而很遗憾,大学学的计算机网络常识差不多忘完了,或者说对于老师所传授的内容,本人所消化的其实只是很少一部分。既然忘了,那就持续看吧。而后就抉择了《计算机网络》这本书。抉择这本书的动机是:一、豆瓣评分很高,9分。二、无论抉择哪本书,最终还是要本人读。三、本人也不意识所谓的计算机网络大佬。既然没有大佬举荐,那么就依据豆瓣评分高的抉择一本吧,所以就抉择了这本书。 依照以往的常规,用一句话概括本书的读后感:《计算机网络》应该起名为“计算机网路导论”。 本书总共分为8章。第1章为概述,第2章至第7章自底向上介绍5个协定层:物理层、数据链路层、网络层、传输层、应用层,第8章介绍网络安全问题。整本书波及的概念十分多,更多的是偏差实践,不足实际内容,当然,这并不是在评估本书的好坏,只是对本书的书写形式进行形容。所以,我把其称作“计算机网络导论”,它适宜作为学习计算机网络的一个地图,咱们能够依据下面所列的门路去寻找咱们想要的常识。 以下是对抉择这本书的一些倡议: 1、这本书适宜疾速浏览。理解有哪些主题,后续遇到问题的时候再在这本书上寻找。 2、本书不适宜初学者(注:自己将读者分为三个档次:高级、中级、高级)。至多有肯定计算机网络根底后再抉择看本书。不然后果就是你晓得这本书在介绍一些常识,然而看完也不会留下多深的印象,除非你在理论中利用到这些常识。 3、这本书适宜和其它书一起看,即“比拟浏览”。 参考资料[1] 豆瓣, 计算机网络(第5版)
1. TCP 连贯的建设TCP 建设连贯的过程须要在客户端和服务端之间替换 3 个 TCP 报文段,故而也称为 “三次握手”。 假如 A 运行 TCP 客户端程序,B 运行 TCP 服务端程序,则三次握手过程如下所示: 服务端 B 执行的代码大抵如下: struct sockaddr addr;int listenSock, backlog, clientSock;// 设置各变量 ...listenSock = socket(AF_INET, SOCK_STREAM, 0);bind(listenSock, &addr, sizoef(addr));listen(listenSock, backlog);clientSock = accept(listenSock, NULL, NULL);客户端 A 执行的代码大抵如下: struct sockaddr serverAddr;int sock;// 设置各变量 ...sock = socket(AF_INET, SOCK_STREAM, 0);connect(sock, &serverAddr, sizeof(serverAddr));两者通过调用 socket() 来创立 TCP 套接字,此时两者处于 CLOSED 状态;服务端 B 先运行,在调用 listen() 之后,进入 LISTEN 状态,监听客户端连贯申请;A 调用 connect() 向 B 发动建设连贯的申请:A 向 B 发送一个 SYN 报文段,其中的同步位 SYN=1,同时抉择一个初始序号 seq=x;SYN 报文段不能携带数据,但要耗费一个序号,在发送完 SYN 报文段之后,进入 SYN_SENT 状态;B 收到 A 的连贯申请报文后进入 SYN_RCVD 状态,如果批准建设连贯,则调用 accept(),而后向 A 发送确认:确认报文段的 SYN=1、ACK=1,确认号为 ack=x+1,同时为本人抉择一个初始序号 seq=y,此报文段也不能携带数据,但要耗费一个序号;A 收到 B 的确认后,还要向 B 返回确认,而后进入 ESTABLISHED 状态:确认报文的 ACK=1,确认序号为 ack=y+1,而本人的序号为 seq=x+1,此报文段能够携带数据,如果不携带数据则不耗费序号(下一个报文段的序号仍为 seq=x+1);B 收到 A 的确认后也进入 ESTABLISHED 状态。为什么 A 最初还要发送一次确认? 次要是为了避免已生效的连贯申请报文段忽然又传送到了 B:如果 A 收回的第一个连贯申请报文段因为网络提早没有及时达到 B;此时 A 收回第二个连贯申请报文段,且胜利建设了连贯,数据传输结束后,开释了连贯;一段时间后,第一个连贯申请报文段终于达到了 B(B 认为是一个新的连贯申请),如果 B 不须要 A 的确认就建设了连贯,而 A 又不理睬 B 的确认,则 B 就白白浪费了资源。 ...
CDN全称叫做“Content Delivery Network”,中文叫内容散发网络。 实际上CDN这个概念是在1996年由美国麻省理工学院的一个钻研小组为改善互联网的服务质量而提出的。那么它到底是怎么改善互联网服务质量的呢? 原理剖析 咱们晓得,当咱们应用域名拜访某一个网站时,实际上就是将申请包(以Http申请为例)通过网络传输给某台服务器,比方拜访“www.baidu.com”时: 首先解析出该域名所对应的IP地址(DNS域名解析) 而后将Http申请包通过网络路由到IP地址所对应的服务器 咱们通常说“服务器的IP地址”,这其实不太精确,IP地址是和网卡绑定的,一个服务器能够有多个网卡,也就是可能有多个IP地址。 咱们先来看第一步:域名解析 域名解析 解析域名分为两种: 将一个域名解析为一个IP地址 将一个域名解析为另外一个域名 其实解析思路不难,咱们在域名服务商购买了一个域名之后,须要去映射一个IP地址,能够用Map来示意这个关系:{域名:IP}。 同时咱们也能够给某个域名取一个别名,比方“www.baidu.com”取一个别名“test.baidu.com”,这种关系也能够用Map来示意:{域名:别名}。这里的别名业余一点叫做CNAME,置信大家对这个词有点眼生,它就是这个意思。 而域名解析,实际上就是解析出指定域名所对应的IP地址,或者该域名的一个CNAME。 而域名解析是由DNS零碎来负责的,DNS服务承受内部申请,从申请里提取域名, 如果这个域名对应的是IP地址,则返回这个IP地址, 如果这个域名对应的是CNAME,则持续查找CNAME域名的IP地址,而后将该地址返回给申请发送者。 申请发送者拿到IP地址之后,实现真正的申请调用。 实际上DNS零碎是十分宏大的,这里不去多将,大家把它当作一个黑盒子,这个盒子的作用就是上文所形容的,这里用一个简略的图来示意一下。 没有CNAME的状况: 有CNAME的状况: 特地留神:在有CNAME的状况下,咱们能够发现,CNAME实际上在域名解析的过程中承当了中间人(或者说代理)的角色,这是CDN实现的要害。 CDN原理 首先CDN是为了改善互联网的服务质量的。艰深一点说其实就是进步访问速度。 假如百度网站当初只有一台服务器,当初有一个人在上海拜访百度,如果该服务器也在上海,那么通常来说拜访比拟快,如果该服务器在拉萨,那么相对而言拜访就比较慢了。那么这个问题的根本原因是网络传输是依赖于网线的,网线越长,那么工夫必定就越久。 那么怎么解决这个问题呢?其实思路很简略,百度在全国各地都部署截然不同的服务器就行了,业余一点叫冗余。 思路很简略,但实现还是比拟麻烦的,服务器上的资源分为两种:动态资源与动静资源。 动态资源:这种资源通常是很少变动的,比方图片,视频,css,javascript等等 动静资源:这种资源不同用户不同时刻拜访通常是不一样的,比方ftl,jsp等等。 那么如果百度要在全国各地都部署服务器,如果说每个服务器上都有雷同的动静资源,那么可能还须要配置相应的数据库,因为动静资源所记录的信息通常会存储在数据库中,那么这就波及到了数据同步等等问题,这会导致老本很高,这种做法业余一点其实就是集群,而目前来说集群架构最多是三地五核心,不是说全国多地集群不可能,次要是老本太高。 比拟低的形式呢,有,就是在每个服务器上只部署动态资源,动态资源通常不波及到数据库,所以老本也比拟低,而且也能进步用户的访问速度。 到这里,介绍了CDN想要达到的目标,那么怎么达到这个目标呢? 当初如果要比拟CDN零碎,咱们能够思考两点: CDN零碎中存储动态资源服务器的性能以及网速怎么样。 CDN零碎中全国甚至寰球范畴内服务器节点的数量以及部署状况。 第一点很好了解,第二点大家应该也能了解了,如果动态资源的服务器节点很多,可能让每个用户在拜访这些动态资源时都不必“跑很远的途程”能力获取到,那么天然这是CDN零碎的长处。 有公司看到了这种需要,所以当初其实有很多CDN供应商,比方阿里,腾讯等等都有本人的CDN服务。只有你本人的零碎接入了这些大厂所提供的CDN服务,你把本人的动态资源传给CDN服务,那么这些动态资源将主动的散布到全世界各地去。 好,那么当初的问题是,用户在拜访动态资源时也是通过域名来拜访的,域名会被解析成某一个IP地址,要害的问题就是,DNS零碎怎么在做域名解析时,解析进去一个离用户最近的一个IP地址呢。 一般的DNS零碎是做不到的,须要一个非凡的DNS服务器,这个非凡DNS须要晓得 用户以后所在位置 还须要晓得用户当初拜访的这个域名对应哪些IP地址,以及这个IP地址别离在哪? 对于第一个问题好解决,间接从用户申请里提取出用户的ip地址,比方这个ip地址被解析为北京电信、上海挪动等等。 第二个问题由谁来解决,咱们当初思考的是CDN,CDN提供商必定晓得他们公司在哪些地方部署了机器以及它们的IP地址,所以这个问题只能有CDN提供商来解决,CDN提供商会提供这个非凡的DNS服务器,咱们叫做 CDN专用DNS服务器。 这样的话,只有用户在应用某个域名拜访动态资源时,如果用户间接配置本人电脑的DNS地址为CDN专用DNS服务器。那么天然解决了问题,然而咱们须要思考的时,咱们不能要求世界上所有的用户都去批改本人电脑的DNS地址。所以这个时候就要利用DNS中的CNAME了。 用户应用某个域名来拜访动态资源时(这个域名在阿里CDN服务中叫做“减速域名”),比方这个域名为“image.baidu.com”,它对应一个CNAME,叫做“cdn.ali.com”,那么一般DNS服务器(区别CDN专用DNS服务器)在解析“image.baidu.com”时,会先解析成“cdn.ali.com”,一般DNS服务器发现该域名对应的也是一个DNS服务器,那么会将域名解析工作转交给该DNS服务器,该DNS服务器就是CDN专用DNS服务器。CDN专用DNS服务器对“cdn.ali.com”进行解析,而后根据服务器上记录的所有CDN服务器地址信息,选出一个离用户最近的一个CDN服务器地址,并返回给用户,用户即可拜访离本人最近的一台CDN服务器了。 补充: 在对域名解析时有多种类型的记录,最罕用的比方: A记录:一个域名对应一个IP地址 CNAME:一个域名对应另外一个域名 NS:将子域名指定其余DNS服务器解析
相熟我的小伙伴都晓得,我之前肝了本《HTTP 外围总结》的 PDF,这本 PDF 是取自我 HTTP 系列文章的汇总,然而我写的 HTTP 相干内容都是一年前了,我回头看了一下这本 PDF,尽管内容不少,然而很多内容短少系统性,看起来不爽,这个有悖于我的初心,所以我打算从新搞一搞 HTTP 协定,HTTP 协定对咱们程序员来说太重要了,不论你应用的是哪个语言,HTTP 都是你须要晓得的重点。 这不是一篇简略介绍 HTTP 基本概念的文章,如果你对 HTTP 基本概念不是很相熟,举荐你去读 cxuan 写的对于 HTTP 根底文章 - 看完这篇HTTP,跟面试官扯皮就没问题了 所以咱们假设在做的各位对 HTTP 有肯定的理解和意识。上面开始咱们这篇文章。 搭载 HTTP 的 TCP咱们大家都晓得,HTTP 这个应用层协定是以 TCP 为根底来传输数据的。当你想拜访一个资源(资源在网络中就是一个 URL)时,你须要先解析这个资源的 IP 地址和端口号,从而和这个 IP 和端口号所在的服务器建设 TCP 连贯,而后 HTTP 客户端发动服务申请(GET)报文,服务器对服务器的申请报文做出响应,等到不须要替换报文时,客户端会敞开连贯,上面我用图很好的阐明了这个过程。 下面这幅图很好的阐明了 HTTP 从建设连贯开始 -> 发动申请报文 -> 敞开连贯的全过程,然而下面这个过程还疏忽了一个很重要的点,那就是TCP 建设连贯的过程。 TCP 建设连贯须要通过三次握手,替换三个报文,我置信大家都对这个过程了然于胸了,如果你还不分明 TCP 建设连贯的过程,能够先浏览 cxuan 的这篇文章 TCP 连贯治理。 因为 HTTP 位于 TCP 的下层,所以 HTTP 的申请 -> 响应过程的时效性(性能)很大水平上取决于底层 TCP 的性能,只有在理解了 TCP 连贯的性能之后,才能够更好的了解 HTTP 连贯的性能,从而才可能实现高性能的 HTTP 应用程序。 ...
Hey guys ,这里是程序员cxuan,欢送你收看我最新一期文章。 相熟我的小伙伴应该都晓得,我之前曾经撸了六本 PDF,这六本 PDF 波及 Java 根底、Java 进阶、HTTP、计算机根底、操作系统和面试题总结。 这六本 PDF 曾经有十分多的小伙伴下载、浏览并提出勘误,甚至也有很多小伙伴曾经打印甚至彩印进去了。然而平心而论,这六本 PDF 并不能成为我茶余饭后的谈资,因为我总是不称心其中的文章构造和一些错别字,甚至还有一些中央让读者产生了误会,我在这里向大家致歉了。 我会在前面的工夫,一直迭代批改后面这些 PDF 的问题和谬误,争取把我晓得的所有的常识交给大家。 然而这一篇文章并不是一篇赔罪贴,而是我要发表一件事件,程序员cxuan 这个公众号从 2020 年 10 月 19 日起公布了第一篇计算机网络的相干内容,到当初曾经 8 个月的工夫了。 我一共连载了大概 16 篇计算机网络的文章,在连载过程中,很多小伙伴问到何时能力出 PDF 版本呢? <img src="https://tva1.sinaimg.cn/large/008i3skNly1gshg8181ogj30j00jotbo.jpg" alt="image-20210715105737699" style="zoom:50%;" /> 我始终在等,我想尽量减少勘误,我想尽量减少错别字,我想把更好的 PDF 给大家,让大家更容易零碎的承受《计算机网络》这门课程。 最重要的一点:大家不会再因为没有页码而懊恼了。 是的,这本 《计算机网络》PDF 是一本有页码的 PDF,是不是有点急不可待了呢? 你没看错,这本 PDF 一共有 226 页,我想应该能赶上一本出版书的页数了。 整本 PDF 分为 11 个章节 <img src="https://tva1.sinaimg.cn/large/008i3skNly1gshg8h1bdmj30rg0w4dox.jpg" alt="image-20210715105803260" style="zoom:50%;" /> 每一章节都会有一个脑图,带你窥探整个章节的内容。 我会从计算机网络的顶层向下窥探,逐渐探索各层的构造、层与层之间的分割,聊一下计算机网络中的重要协定,最初再通过一个 Web 申请历程来把计算机网络的整个知识结构串起来,带你筑基计算机根底。 这本 PDF 的问世,离不开一位十分优良小姐姐的助攻,她帮我把整本 PDF 都过了一遍,提出了很多对于构造体系和概念不明之类的修改意见,我十分尊敬她! 而且还十分谦虚。 ...
文章目录一、网络的由来?二、网络协议介绍三、五层模型解说3.1、物理层3.2 数据链路层3.2.1 Ethernet 以太网3.2.1.1 以太网协定3.2.1.2 数据帧传输3.2.1.3 mac地址3.2.1.4 单播3.2.1.5 播送3.2.1.6 组播3.2.1.7 总结3.2.2 MTU3.2.2.1 门路MTU3.2.2.2 门路MTU的发现办法3.2.2.3 TraceRoute3.3、网络层3.3.1 IP协定:3.3.2 子网掩码3.3.3 ip数据包3.3.3.1 IP数据包组成3.3.3.2 IP分片原理3.3.3.3 把握ip选路3.3.4 ARP协定3.3.4.1 arp报文格式3.3.4.2 arp 查问原理3.3.4.3 arp 缓存3.3.5 ICMP协定3.4、传输层3.4.1 udp协定3.4.2 tcp协定3.4.2.1 tcp报文3.4.2.2 tcp 连贯管制3.4.2.3 TCP流量管制机制(四个机制=4个算法)3.4.2.4 超时重传机制3.4.3 为什么UDP和TCP要有伪首部3.5、应用层3.5.1 DNS 协定3.5.2 FTP 协定3.5.3 http协定3.5.3 https 协定3.6、Socket三、网络通信实现3、1 每台主机实现网络通信的根本四因素3.2 获取这四因素分两种形式3.2.1 动态获取3.2.3 动静获取四、例举主机拜访网站的网络通信过程4.1整个过程根本分做上面几个局部4.2上面别离进行具体阐明4.2.1域名解析成IP地址4.2.2 与目标主机进行TCP连贯(三次握手)4.2.3 发送与收取数据4.2.4 与目标主机断开TCP连贯(四次挥手)4.2.5 总结一下 一、网络的由来?互联网的实质就是一系列的网络协议。 一台硬设有了操作系统,而后装上软件你就能够失常应用了,每个人都领有一台本人的机器,然而彼此孤立。 如何能让大家一起游玩,就有了初步的网络,其实两台计算机之间通信与两个人打电话之间通信的原理是一样的,普通话属于中国国内人与人之间通信的规范,那如果是两个国家的人交换呢?问题是,你不可能要求一个人/计算机把握全世界的语言/规范,于是有了世界对立的通信规范:英语 论断:英语成为世界上所有人通信的统一标准,如果把计算机看成散布于世界各地的人,那么连贯两台计算机之间的internet实际上就是一系列对立的规范,这些规范称之为互联网协议,互联网的实质就是一系列的协定,总称为’互联网协议’(Internet Protocol Suite). 互联网协议的性能:定义计算机如何接入internet,以及接入internet的计算机通信的规范。 二、网络协议介绍互联网协议依照性能不同分为osi七层或tcp/ip五层 分层模型-TCP/IP TCP/IP模型同样采纳了分层构造,层与层绝对独立然而相互之间也具备十分亲密的协作关系。 TCP/IP模型将网络分为四层。TCP/IP模型不关注底层物理介质,次要关注终端之间的逻辑数据流转发。TCP/IP模型的外围是网络层和传输层:网络层解决网络之间的逻辑转发问题,传输层保障源端到目标端之间的牢靠传输。最上层的应用层通过各种协定向终端用户提供业务利用。 每层运行常见物理设施 数据封装 利用数据须要通过TCP/IP每一层解决之后能力通过网络传输到目标端,每一层上都应用该层的协定数据单元PDU(ProtocolDataUnit)彼此替换信息。 Segment(数据段):如下层数据在传输层增加TCP报头后失去的PDU;Packet(数据包):数据段被传递给网络层,网络层增加IP报头失去的PDU;Frame(数据帧):数据包被传递到数据链路层,封装数据链路层报头失去的PDU;最初,帧被转换为比特,通过网络介质传输。这种协定栈逐层向下传递数据,并增加报头和报尾的过程称为封装。 三、五层模型解说咱们将应用层,表示层,会话层并作应用层,从tcp/ip五层协定的角度来论述每层的由来与性能,搞清楚了每层的次要协定,就了解了整个互联网通信的原理。 首先,用户感知到的只是最下面一层应用层,自上而下每层都依赖于下一层,所以咱们从最下一层开始切入,比拟好了解每层都运行特定的协定,越往上越凑近用户,越往下越凑近硬件 3.1、物理层下面提到,孤立的计算机之间要想一起玩,就必须接入internet,话中有话就是计算机之间必须实现组网 ...
Hey guys,这里是 cxuan,欢送你浏览我最新一期的文章,大家晓得,我连载计算机网络曾经有肯定工夫了,当我每理解一个新技术或者新框架的时候,我都想要先把名字概念弄懂是什么,可见概念对于咱们的帮忙十分大。计算机网络中的概念也是十分庞杂,了解起来比拟艰难,所以这里,我给大家汇总了计算机网络中 89 个常见的概念,心愿对你有所帮忙。 主机:计算机网络上任何一种可能连贯网络的设施都被称为主机或者说是端系统,比方手机、平板电脑、电视、游戏机、汽车等,随着 5G 的到来,将会有越来越多的终端设备接入网络。通信链路:通信链路是由物理链路(同轴电缆、双绞线、光纤灯)连贯到一起组成的一种物理通路。传输速率:单位是 bit/s 或者 bps ,用来度量不同链路从一个端系统到另一个端系统传输数据的速率。分组:当一台端系统向另外一台端系统发送数据时,通常会将数据进行分片,而后为每段加上首部字节,从而造成计算机网络的专业术语:分组。这些分组通过网络发送到端系统,而后再进行数据处理。路由器:它和链路层交换机一样,都是一种交换机,次要用于转发数据的目标。 门路:一个分组所经验一系列通信链路和分组交换机称为通过这个网络的门路。因特网服务商:也叫 ISP,不是 lsp。这个好了解,就是网络运营商,挪动、电信、联通。网络协议:网络协议是计算机网络中进行数据交换而建设的规定、规范或者约定。IP:网际协议,它规定了路由器和端系统之间发送和接管的分组格局。TCP/IP 协定簇:不仅仅只有 TCP 协定和 IP 协定,而是以 TCP、IP 协定为主的一系列协定,比方 ICMP 协定、ARP 协定、UDP 协定、DNS 洗衣、SMTP 协定等。分布式应用程序:多个端系统之间相互交换数据的端系统被称为分布式应用程序。套接字接口:指的就是 socket 接口,这个接口规定了端系统之间通过因特网进行数据交换的形式。协定:协定定义了两个以上通信实体之间替换报文格式和程序所听从的规范。客户端:在客户-服务器架构中表演申请方的角色,通常是 PC,智能手机等端系统。服务器:在客户-服务器架构中表演服务方的角色,通常是大型服务器集群表演服务器的角色。转发表:路由外部记录报文门路的映射关系的一种记录。时延:时延指的是一个报文或者分组从网络的一端传递到另一端所须要的工夫,时延分类有发送时延、流传时延、解决时延、排队时延,总时延 = 发送时延+流传时延+解决时延+排队时延。丢包:在计算机网络中指的是分组呈现失落的景象。吞吐量:吞吐量在计算机网络中指的是单位工夫内胜利传输数据的数量。报文:通常指的是应用层的分组。报文段:通常把运输层的分组称为报文段。数据报:通常将网络层的分组称为数据报。帧:个别把链路层的分组称为帧。客户-服务体系:它是一种面向网络应用的体系结构。把零碎中的不同端系统辨别为客户和服务器两类,客户向服务器收回服务申请,由服务器实现所申请的服务,并把处理结果回送给客户。在客户-服务器体系结构中,有一个总是关上的主机称为 服务器(Server),它提供来自于 客户(client) 的服务。咱们最常见的服务器就是 Web 服务器,Web 服务器服务于来自 浏览器 的申请。 CIDR:应用任意长度宰割 IP 地址的网络标识和主机标识P2P 体系:对等体系结构,相当于没有服务器了,大家都是客户机,每个客户既能发送申请,也能对申请作出响应。 IP 地址:IP 地址就是网际协议地址,在互联网中惟一标识主机的一种地址。每一台入网的设施都会有一个 IP 地址,这个 IP 又分为内网 IP 和公网 IP。端口号:在同一台主机内,端口号用于标识不同应用程序过程。URI:它的全称是(Uniform Resource Identifier),中文名称是对立资源标识符,应用它就可能惟一地标记互联网上资源。URL:它的全称是(Uniform Resource Locator),中文名称是对立资源定位符,它实际上是 URI 的一个子集。 HTML:HTML 称为超文本标记语言,是一种标识性的语言。它包含一系列标签.通过这些标签能够将网络上的文档格局对立,使扩散的 Internet 资源连贯为一个逻辑整体。HTML 文本是由 HTML 命令组成的描述性文本,HTML 命令能够阐明文字,图形、动画、声音、表格、链接等。Web 页面:Web 页面也叫做 Web Page,它是由对象组成,一个对象(object) 简略来说就是一个文件,这个文件能够是 HTML 文件、一个图片、一段 Java 应用程序等,它们都能够通过 URI 来找到。一个 Web 页面蕴含了很多对象,Web 页面能够说是对象的集合体。Web 服务器:Web 服务器的正式名称叫做 Web Server,Web 服务器能够向浏览器等 Web 客户端提供文档,也能够搁置网站文件,让全世界浏览;能够搁置数据文件,让全世界下载。目前最支流的三个 Web 服务器是 Apache、 Nginx 、IIS。CDN:CDN 的全称是Content Delivery Network,即内容散发网络,它利用了 HTTP 协定里的缓存和代理技术,代替源站响应客户端的申请。CDN 是构建在现有网络根底之上的网络,它依附部署在各地的边缘服务器,通过核心平台的负载平衡、内容散发、调度等功能模块,使用户就近获取所需内容,升高网络拥塞,进步用户拜访响应速度和命中率。WAF:WAF 是一种 应用程序防护系统,它是一种通过执行一系列针对 HTTP / HTTPS的安全策略来专门为 Web 利用提供爱护的一款产品,它是利用层面的防火墙,专门检测 HTTP 流量,是防护 Web 利用的平安技术。WebService :WebService 是一种 Web 应用程序,WebService 是一种跨编程语言和跨操作系统平台的近程调用技术。HTTP: TCP/IP 协定簇的一种,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和标准。Session:Session 其实就是客户端会话的缓存,次要是为了补救 HTTP 无状态的个性而设计的。服务器能够利用 Session 存储客户端在同一个会话期间的一些操作记录。当客户端申请服务端时,服务端会为这次申请开拓一块内存空间,这个对象便是 Session 对象,存储构造为 ConcurrentHashMap。Cookie:HTTP 协定中的 Cookie 包含 Web Cookie 和浏览器 Cookie,它是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的 Cookie,浏览器会进行存储,并与下一个申请一起发送到服务器。通常,它用于判断两个申请是否来自于同一个浏览器,例如用户放弃登录状态。SMTP 协定 :提供电子邮件服务的协定叫做 SMTP 协定, SMTP 在传输层也应用了 TCP 协定。SMTP 协定次要用于零碎之间的邮件信息传递,并提供无关来信的告诉。DNS 协定:因为 IP 地址是计算机可能辨认的地址,而咱们人类不不便记忆这种地址,所以为了不便人类的记忆,应用 DNS 协定,来把咱们容易记忆的网络地址映射称为主机可能辨认的 IP 地址。 ...
做后端开发的敌人遇到下图中的状况是很常见的,导致整个问题的可能性十分多,在排查问题的时候咱们首先能够通过 ping 命令查看服务器时候还活着,作为第一步查看。 既然要应用 ping 命令,天然也要相熟这个命令相干的一些知识点,能力加以分析。 ping 命令最简略的用法就是前面跟一个 ip 地址 > ping 8.8.8.8正在 Ping 8.8.8.8 具备 32 字节的数据:来自 8.8.8.8 的回复: 字节=32 工夫=34ms TTL=114来自 8.8.8.8 的回复: 字节=32 工夫=35ms TTL=114来自 8.8.8.8 的回复: 字节=32 工夫=34ms TTL=114来自 8.8.8.8 的回复: 字节=32 工夫=33ms TTL=1148.8.8.8 的 Ping 统计信息: 数据包: 已发送 = 4,已接管 = 4,失落 = 0 (0% 失落),往返行程的预计工夫(以毫秒为单位): 最短 = 33ms,最长 = 35ms,均匀 = 34ms留神在 Window 环境下应用 ping 命令会发送四次报文之后就完结,然而 Linux 下会始终继续一直的发送报文,须要终止的,请应用快捷键 ctrl + c,Mac 同理 。ping 的运作原理是向指标主机传出一个 ICMP 的申请回显数据包,并期待接管回显回应数据包。程序会按工夫和胜利响应的次数估算失落数据包率(丢包率)和数据包往返工夫(网络时延,Round-trip delay time)。 ...
文章起源 cxuan 的本人公众号:TCP 的两个细节点 公众号很多硬核文章,求大家关注下呀~ 上面开始咱们本篇文章。 TCP 超时和重传没有永远不出谬误的通信,这句话表明着不论内部条件如许齐备,永远都会有出错的可能。所以,在 TCP 的失常通信过程中,也会呈现谬误,这种谬误可能是因为数据包失落引起的,也可能是因为数据包反复引起的,甚至可能是因为数据包失序 引起的。 TCP 的通信过程中,会由 TCP 的接收端返回一系列的确认信息来判断是否呈现谬误,一旦呈现丢包等状况,TCP 就会启动重传操作,重传尚未确认的数据。 TCP 的重传有两种形式,一种是基于工夫,一种是基于确认信息,个别通过确认信息要比通过工夫更加高效。 所以从这点就能够看出,TCP 的确认和重传,都是基于数据包是否被确认为前提的。TCP 在发送数据时会设置一个定时器,如果在定时器指定的工夫内未收到确认信息,那么就会触发相应的超时或者基于计时器的重传操作,计时器超时通常被称为重传超时(RTO)。 然而有另外一种不会引起提早的形式,这就是疾速重传。 TCP 在每次重传一次报文后,其重传工夫都会加倍,这种"间隔时间加倍"被称为二进制指数弥补(binary exponential backoff) 。等到间隔时间加倍到 15.5 min 后,客户端会显示 Connection closed by foreign host.TCP 领有两个阈值来决定如何重传一个报文段,这两个阈值被定义在 RFC[RCF1122] 中,第一个阈值是 R1,它示意违心尝试重传的次数,阈值 R2 示意 TCP 应该放弃连贯的工夫。R1 和 R2 应至多设为三次重传和 100 秒放弃 TCP 连贯。 这里须要留神下,对连贯建设报文 SYN 来说,它的 R2 至多应该设置为 3 分钟,然而在不同的零碎中,R1 和 R2 值的设置形式也不同。在 Linux 零碎中,R1 和 R2 的值能够通过应用程序来设置,或者是批改 net.ipv4.tcp_retries1 和 net.ipv4.tcp_retries2 的值来设置。变量值就是重传次数。 ...
RIP协定是一种动静路由抉择协定。一个路由器,定时与和本身相邻的路由器替换路由表。路由器通过肯定的算法,依据对方发送的路由表更新本身的路由表。从而动静更新整个自治零碎内的所有路由器的路由表。 如果你只是为了实现学校的RIP协定试验但又不懂go语言,我能够简略的阐明一下,go外面的构造体相似其余语言中的类,只不过是只有成员变量的类。构造体的办法,相似类(对象)的办法。 这个试验的主函数中,我只设计了RIP调换路由表最初达到收敛的过程,并没有设计模仿某个路由器不可达的状况,当然也没有设计呈现“坏消息传得慢”的状况。 首先定义数据结构RIP报文内的路由表项,定义了,去网段号为NetId的网段,须要转发给NextHop路由器,间隔为Distance。在这个试验中,我将路由器所在网段间隔设为1。下一跳路由器为-1时,代表间接交付,也就是指标网段在以后路由器所在网段中。 // RIP 路由表项type Info struct { NetId int // 路由器所在网段间隔设为1 Distance int // NextHop 为-1代表间接交付 NextHop int}路由表,蕴含一个路由表项类型的切片。 //路由表type RouterTable []Info路由器。蕴含地址和路由表。这里因为只是个简略试验,我应用一个整形数来充当路由器地址。尽管IP地址自身也只是个32位无符号整数。 // 路由器type Router struct { Addr int Table RouterTable}定义路由器构造体的办法。 输入路由器信息办法。实现了String()接口,能够被内置的输入函数调用。 func (r Router) String() string { return fmt.Sprint("路由器地址:", r.Addr, "\n路由表", r.Table)}FindInfo办法,能够找到路由器本身的路由表内对应某个网段(netID)的路由表项的索引。如果以后路由器有这个网段的路由表项,返回其下标和True,如果没有,返回-1和False。具体有什么用,前面会说到。 func (r *Router) FindInfo(netId int) (int, bool) { for i, info := range r.Table { if netId == info.NetId { return i, true } } return -1, false}重点:接管路由表办法。以后路由器会通过这个办法,接管其余路由器的地址(Addr)和路由表(recvTable),并批改本身的路由表(r.Table) ...
数据链路层-上篇概述咱们首先来看看数据链路层在网络体系结构中的位置。 如图所示,主机H1向主机H2发送数据,两头要通过3个路由器和电话网、局域网、广域网等多种网络。 从五层协定原理体系结构的角度来看,主机应具备体系结构中的各个档次。 而路由器仅需具备体系结构中上面三层,各设施通过物理层上面的传输媒体进行互连。 当主机H1向H2发送数据时,主机H1将待发送的数据逐层封装后,通过物理层将形成数据包的各比特转换为电信号,发送到传输媒体。 数据包进入路由器后,由下往上逐层解封到网络层。路由器依据数据包的目标网络地址和本身转发表,确定数据报的转发端口。而后从网络层向下逐层封装数据包,并通过物理层将数据包发送到传输媒体。 数据包最终达到主机H2时,还要由下往上逐层解封,最终解封出主机H1所发送的数据。 主机H1到H2的通信,能够看成是在4段不同的链路上的通信组成的。 所谓链路(Link)就是从一个结点到相邻结点的一段物理线路,而两头没有任何其余的替换节点。 仅有链路还不够,还须要一些通信协议来管制这些数据的传输。 数据链路(Data Link)是指把眼帘通信协议的硬件和软件加到链路上,就形成了数据链路。 在数据链路层上传输的数据包,又称为帧。 也就是说,数据链路层是以帧为单位传输和解决数据。 数据链路层的三个重要问题数据链路层传送的协定数据单元是帧 封装成帧 封装成帧 (framing) 就是在一段数据的前后别离增加首部和尾部,而后就形成了一个帧。首部和尾部的一个重要作用就是进行帧定界。 差错控制 发送方将封装好的帧通过物理层发送到传输媒体,在传输过程中可能会产生比特过错:1 可能会变成 0, 而 0 也可能变成 1。 然而,接管方主机如何判断帧在传输过程中是否呈现误码? 这能够通过检错码来发现。发送方在发送帧之前,基于待发送的数据和检错算法计算出检错码。并将其封装在帧尾。 牢靠传输 接管方主机收到有误码的帧后,是不会承受该帧的,会将它抛弃。 如果数据链路层向其下层提供的是不牢靠服务,那么抛弃就抛弃了,不会再有更多措施。 如果数据链路层向其下层提供的是牢靠服务,那就还须要其余措施,来确保接管方主机还能够从新收到被抛弃的这个帧的正确正本。 以上三个问题都是应用点对点信道的数据链路层来举例的如果应用播送信道的数据链路层除了蕴含下面三个问题外,还有一些问题要解决 如图所示,主机A,B,C,D,E通过一根总线进行互连,主机A要给主机C发送数据,代表帧的信号会通过总线传输到总线上的其余各主机,那么主机B,D,E如何晓得所收到的帧不是发送给它们的,主机C如何晓得发送的帧是发送给本人的? 能够用编址(地址)的来解决。将帧的目标地址增加在帧中一起传输。 另外还有数据碰撞问题。 当总线上多台主机同时应用总线来传输帧时,这是采纳播送信道的共享式局域网不可避免的。 随着技术的倒退,替换技术的成熟, 在 有线(局域网)畛域 应用点对点链路和链路层交换机的交换式局域网取代了共享式局域网。 在无线局域网中依然应用的是共享信道技术。 封装成帧封装成帧是指数据链路层给下层交付的协定数据单元增加帧头和帧尾使之成为帧。 帧头和帧尾中蕴含有重要的管制信息。 发送方的数据链路层将下层交付下来的协定数据单元封装成帧后,还要通过物理层,将形成帧的各比特,转换成电信号交给传输媒体,那么接管方的数据链路层如何从物理层交付的比特流中提取出一个个的帧? 实际上,帧头和帧尾的作用之一就是帧定界。 但比不是每一种数据链路层协定的帧都蕴含有帧定界标记,例如上面例子: 前导码 前同步码:作用是使接管方的时钟同步帧开始定界符:表明其前面紧跟着的就是MAC帧另外以太网还规定了帧间距离为96比特工夫,因而,MAC帧不须要帧完结定界符。 接下来咱们介绍通明传输的问题,通明传输是指数据链路层对下层交付的传输数据没有任何限度,就如同数据链路层不存在一样。 帧界定标记也就是个特定数据值,如果在下层交付的协定数据单元中, 恰好也蕴含这个特定数值,接管方就不能正确接管。 所以数据链路层应该对下层交付的数据有限度,其内容不能蕴含帧定界符的值。解决通明传输问题 ...
物理层物理层的基本概念在计算机网络中,用来连贯各种网络设备的传输媒体品种泛滥。 大抵能够分为两类:一类是导引型传输媒体,另一类是非导引型传输媒体。 导引型传输媒体中,常见的有:双绞线、同轴电缆、光纤。 非导引型传输媒体中,常见的是微波通信(2~40GHz)。 而物理层就是要解决在各种传输媒体上传输比特和1的问题。进而给数据链路层提供通明传输比特流的服务。 所谓"通明"是指数据链路层看不见也无需看见物理层到底应用的什么办法来传输比特0和1的。它只管享受物理层提供的比特流服务即可。 物理层为了解决在各种传输媒体上传输比特0和1的问题,次要有以下四个工作: 机械个性:指明接口所用接线器的形态和尺寸、引脚数目和排列、固定和锁定安装。电气个性:指明在接口电缆的各条线上呈现的电压的范畴。性能个性:指明某条线上呈现的某一电平的电压示意何种意义。过程个性:指明对于不同性能的各种可能事件的呈现程序。物理层上面的传输媒体导引型传输媒体在导引型传输媒体中,电磁波被导引沿着固体媒体流传。 常见的导引型传输媒体有:同轴电缆、双绞线、光纤、电力线。 同轴电缆 双绞线 光纤 光纤的工作原理 电力线 非导引型传输媒体非导引型传输媒体是指自由空间。 可应用的电磁波有:无线电波,微波,红外线,可见光。 无线电波 微波 红外线 传输方式串行传输和并行传输串行传输:数据是一个比特一个比特顺次发送的,因而在发送端与接收端之间,只须要一条数据传输线路即可。 并行传输:一次发送n个比特,因而,在发送端和接收端之间须要有n条传输线路;并行传输的长处是比串行传输的速度n倍,但老本高。 数据在传输线路上的传输采纳是串行传输,计算机外部的数据传输罕用并行传输同步传输和异步传输同步传输: 数据块以稳固的比特流的模式传输。字节之间没有距离接收端在每个比特信号的两头时刻进行检测,以判断接管到的是比特0还是比特1因为不同设施的时钟频率存在肯定差别,不可能做到完全相同,在传输大量数据的过程中,所产生的判断时刻的累计误差,会导致接收端对比特信号的判断错位 所以要使收发双发时钟放弃同步。 收发单方时钟同步的办法有两种: 外同步:在收发单方之间增加一条独自的时钟信号线,接收端依照时钟同步信号的节奏来接收数据。内同步:发送端将时钟同步信号编码到发送数据中一起传输(例如曼切斯特编码)异步传输: 以字节为独立的传输单位,字节之间的工夫距离不是固定接收端仅在每个字节的起始处对字节内的比特实现同步通常在每个字节前后别离加上起始位和结束位 单向通信、双向交替通信、双向同时通信单向通信: 又称为单工通信,即只能有一个方向的通信而没有反方向的交互。无线电播送或有线电以及电视广播就属于这种类型。 双向交替通信: 又称为半双工通信,即通信的单方能够发送信息,但不能单方同时发送(当然也就不能同时接管)。这种通信形式使一方发送另一方接管,过一段时间后能够再反过来。 双向同时通信: 又称为全双工通信,即通信的双发能够同时发送和接管信息。 单向通信只须要一条信道,而双向交替通信或双向同时通信则须要两条信道(每个方向各一条) 双向同时通信的传输效率最高。 编码与调制 罕用术语 数据 (data) —— 运送音讯的实体。信号(signal) —— 数据的电气的或电磁的体现。模拟信号 (analogous signal) —— 代表音讯的参数的取值是间断的。数字信号 (digital signal) —— 代表音讯的参数的取值是离散的。码元 (code) —— 在应用工夫域(或简称为时域)的波形示意数字信号时,代表不同离散数值的根本波形。基带信号(即根本频带信号)—— 来自信源的信号。像计算机输入的代表各种文字或图像文件的数据信号都属于基带信号。基带信号往往蕴含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频重量或直流重量。因而必须对基带信号进行调制 (modulation)。在计算机网络中,常见的是将数字基带信号通过编码或调制的办法在相应信道进行传输。 ...
概述篇计算机网络在信息时代的作用计算机网络已由一种通信基础设施倒退成为一种重要的信息服务基础设施。计算机网络曾经像水、电、煤气这些基础设施一样,成为咱们生存中不可或缺的一部分。因特网概述网络、互连网(互联网)和因特网网络(Network)由若干结点(Node)和连贯这些结点的链路(Link)组成。 在如下例子中,4个节点和3段链路就形成了一个简略的网络。 多个网络还能够通过路由器互连起来,这样就形成了一个覆盖范围更大的网络,即互连网(互联网)。 因而互联网是“网络的网络(Network of Networks)”。 因特网(Internet)是世界上最大的互联网络(用户数以亿计,互连的网络数以百万计)。 internet和Internet的区别 internet(互联网或互连网)是一个通用名词,它泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协定能够是任意的。Internet(因特网)则是一个专用名词,它是指以后寰球最大的、凋谢的、由泛滥网络相互连接而成的特定计算机网络,它采纳TCP/IP协定族作为通信的规定,其前身是美国的ARPANET。因特网倒退的三个阶段 因特网服务提供者ISP(Internet Service Provider) 普通用户是如何接入到因特网的呢? 答:通过ISP接入因特网 ISP能够从因特网管理机构申请到成块的IP地址,同时领有通信线路以及路由器等联网设施。任何机构和集体只需缴纳费用,就可从ISP的失去所须要的IP地址。 因为因特网上的主机都必须有IP地址能力进行通信,这样就能够通过该ISP接入到因特网 中国的三大ISP:中国电信,中国联通和中国移动 基于ISP的三层构造的因特网 第一层ISP通常也被称为因特网主干网,个别都可能笼罩国际性区域范畴,并领有高速链路和替换设施。第一层ISP之间间接互联。 第二层的ISP和一些大公司都是第一层ISP的用户,通常具备区域性或国家性笼罩规模,与多数第一层ISP相连接。 第三层ISP又称为本地ISP,它们是第二层的用户且只领有本地范畴的网络。个别的校园网或者企业网,以及住宅用户和无线移动用户,都是第三层ISP的用户。 一旦某个用户可能接入到因特网,那么他也能够成为一个ISP,所须要做的就是购买一些如调制解调器或路由器这样的设施,让其余用户能够和他相连。因特网的标准化工作因特网的标准化工作对因特网的倒退起到了十分重要的作用。因特网在制订其规范上的一个很大的特点是面向公众。 因特网所有的RFC(Request For Comments)技术文档都能够从因特网上收费下载。任何人都能够随时用电子邮件发表对某个文档的意见或倡议。因特网协会ISOC是一个国际性组织,它负责对因特网进行全面治理,以及在世界范畴内促成倒退和作用。 因特网体系结构委员会IAB,负责管理因特网无关协定的开发。因特网工程部IETF,负责钻研中短期工程问题,次要针对协定的开发和标准化。因特网研究部IRTF,从事实践方面的钻研和开发一些须要长期思考的问题。 制订因特网的正式规范要通过以下4个阶段: 因特网草案(在这个阶段还不是RFC文档)倡议规范(从这个阶段开始就成为RFC文档)草案规范因特网规范因特网的组成因特网的拓扑构造尽管十分复杂,并且在天文上笼罩了寰球,但从性能上看,能够划分为以下两个局部。 边缘局部 由所有连贯在因特网上的主机组成。这部分是用户间接应用的,用来进行通信(传送数据、音频或视频)和资源共享。 外围局部 由大量网络和连贯这些网络的路由器组成。这部分是为边缘局部提供服务的(提供连通性和替换)。 路由器是一种专用计算机,但咱们不称它为主机,路由器是实现分组替换的要害构件,其工作是转发收到的分组,这是网络外围最重要的局部。 处在互联网边缘的局部就是连贯在互联网上的所有的主机。这些主机又称为端系统 (end system)。 端系统在性能上可能有很大的差异: 小的端系统能够是一台一般个人电脑,具备上网性能的智能手机、网络摄像头等。大的端系统则能够是一台十分低廉的大型计算机。端系统的拥有者能够是集体,也能够是单位(如学校、企业、政府机关等),当然也能够是某个ISP。端系统之间的通信形式通常可划分为两大类: 客户-服务器形式(C/S): 客户 (client) 和服务器 (server) 都是指通信中所波及的两个利用过程。客户 - 服务器形式所形容的是过程之间服务和被服务的关系。客户是服务的申请方,服务器是服务的提供方。对等连贯形式(peer-to-peer:P2P): 对等连贯是指两个主机在通信时并不辨别哪一个是服务申请方还是服务提供方。只有两个主机都运行了对等连贯软件 ( P2P 软件) ,它们就能够进行平等的、对等连贯通信。单方都能够下载对方曾经存储在硬盘中的共享文档。三种替换形式电路替换(Circuit Switching)传统两两相连的形式,当电话数量很多时,电话线就也会十分的多,这样是十分不不便的。 所以要使得每一部电话可能很不便地和另一部电话进行通信,就应该应用一个中间设备将这些电话连接起来,这个中间设备就是电话交换机。 每一部电话都连贯到电话交换机上,能够把电话交换机简略地看成是一个有多个开关的开关器,能够将须要通信的任意两部电话的电话线路按需接通,从而大大减少了连贯的电话线数量。 当电话数量增多时,就要应用很多彼此连接起来的电话交换机来实现全网的替换工作。 用这样的办法就形成了笼罩全世界的电信网。 电话交换机接通电话线的形式称为电路替换。 从通信资源的调配角度来看,替换(Switching)就是依照某种形式动静地调配传输线路的资源。 电路替换的三个步骤: 建设连贯(调配通信资源)通话(始终占用通信资源)开释连贯(偿还通信资源) ...
当你的才华不足以满足你的野心时,应该静下心来努力学习UDP的概述UDP 是User Datagram Protocol的简称, 中文名是用户数据报协定,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连贯的传输层协定,提供面向事务的简略不牢靠信息传送服务,IETF RFC 768是UDP的正式标准。UDP在IP报文的协定号是17。UDP协定全称是用户数据报协定,在网络中它与TCP协定一样用于解决数据包,是一种无连贯的协定。在OSI模型中,在第四层——传输层,处于IP协定的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的毛病,也就是说,当报文发送之后,是无奈得悉其是否平安残缺达到的。UDP用来反对那些须要在计算机之间传输数据的网络应用。包含网络视频会议零碎在内的泛滥的客户/服务器模式的网络应用都须要应用UDP协定。UDP协定从问世至今曾经被应用了很多年,尽管其最后的荣耀曾经被一些相似协定所覆盖,然而即便是在明天UDP依然不失为一项十分实用和可行的网络传输层协定。UDP次要特点UDP是一个无连贯协定,传输数据之前源端和终端不建设连贯,当它想传送时就简略地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限度;在接收端,UDP把每个音讯段放在队列中,应用程序每次从队列中读一个音讯段。因为传输数据不建设连贯,因而也就不须要保护连贯状态,包含收发状态等,因而一台服务机可同时向多个客户机传输雷同的音讯。UDP信息包的题目很短,只有8个字节,绝对于TCP的20个字节信息包而言UDP的额定开销很小。吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限度。UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在增加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因而,应用程序须要抉择适合的报文大小。尽管UDP是一个不牢靠的协定,但它是散发信息的一个现实协定。例如,在屏幕上报告股票市场、显示航空信息等等。UDP也用在路由信息协定RIP(Routing Information Protocol)中批改路由表。在这些利用场合下,如果有一个音讯失落,在几秒之后另一个新的音讯就会替换它。UDP宽泛用在多媒体利用中。 TCP和UDP区别TCP 是面向连贯的传输控制协议,而UDP 提供了无连贯的数据报服务;TCP 具备高可靠性,确保传输数据的正确性,不呈现失落或乱序,而UDP 在传输数据前不建设连贯,不对数据报进行查看与批改,毋庸期待对方的应答,所以会呈现分组失落、反复、乱序,应用程序须要负责传输可靠性方面的所有工作;UDP 具备较好的实时性,工作效率较 TCP 协定高;UDP 段构造比 TCP 的段构造简略,因而网络开销也小;TCP 协定能够保障接收端毫无过错地接管到发送端收回的字节流,为应用程序提供牢靠的通信服务。对可靠性要求高的通信零碎往往应用 TCP 传输数据。次要利用实用场合在抉择UDP作为传输协定时必须要审慎。在网络品质令人非常不称心的环境下,UDP协定数据包失落会比较严重。然而因为UDP的个性:它不属于连贯型协定,因此具备资源耗费小,处理速度快的长处,所以通常音频、视频和一般数据在传送时应用UDP较多,因为它们即便偶然失落一两个数据包,也不会对接管后果产生太大影响。比方咱们聊天用的ICQ和QQ就是应用的UDP协定。 理论利用在现场测控畛域,面向的是散布化的控制器、监测器等,其利用场合环境比拟顽劣,这样就看待传输数据提出了不同的要求,如实时、抗干扰性、安全性等。基于此,现场通信中,若某一利用要将一组数据传送给网络中的另一个节点,可由UDP过程将数据加上报头后传送给IP过程,UDP协定省去了建设连贯和拆除连贯的过程,勾销了重发测验机制,可能达到较高的通信速率。 代码演示简略的一个客户端/服务端数据收发的例子UDP客户端: public class UdpClient { public static void main(String[] args) throws IOException { //建设一个socket DatagramSocket socket = new DatagramSocket(); //创立一个数据包 String msg = "你好啊,服务器~"; InetAddress localhost = InetAddress.getByName("localhost"); int port = 9090; DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port); //发送数据包 socket.send(packet); //敞开流 socket.close(); }}UDP服务端: ...
Hey guys 各位读者姥爷们大家好,这里是程序员 cxuan 计算机网络连载系列的第 13 篇文章。 到当初为止,咱们算是把应用层、运输层、网络层和数据链路层都介绍完了,那么当初是时候把这些内容都串起来,做一个全面的回顾了。那么我这就以 Web 页面的申请历程为例,来和你聊聊计算机网络中这些协定是怎么工作的、数据包是怎么收发的,从输出 URL 、敲击会车到最终实现页面出现在你背后的这个过程。 首先,我关上了 Web Browser ,而后在 Google 浏览器 URL 地址栏中输出了 maps.google.com。 而后 ...... 查找 DNS 缓存浏览器在这个阶段会查看四个中央是否存在缓存,第一个中央是浏览器缓存,这个缓存就是 DNS 记录。 浏览器会为你拜访过的网站在固定期限内保护 DNS 记录。因而,它是第一个运行 DNS 查问的中央。 浏览器首先会查看这个网址在浏览器中是否有一条对应的 DNS 记录,用来找到指标网址的 IP 地址。 我是 chrome 浏览器,所以在 mac 中,无奈应用 chrome://net-internals/#dns 找到对应的 IP 地址,在 windows 中是能够找到的。 那么 mac 怎么查问 DNS 记录呢?你能够应用 nslookup 命令来查找,但这不是咱们探讨的重点。DNS(Domain Name System) 是一个分布式的数据库,它用于保护网址 URL 到其 IP 地址的映射关系。在互联网中,IP 地址是计算机所可能了解的一种地址,而 DNS 的这种别名地址是咱们人类可能了解和记忆的地址,DNS 就负责把人类记忆的地址映射成计算机可能了解的地址,每个 URL 都有惟一的 IP 地址进行对应。 ...
综述网络层的 IP 协定为主机之间提供了逻辑通信,而 IP 的服务模型是尽力而为提供服务。这就意味着 IP 尽力在主机之间交付报文,然而它并不做任何保障。不确保报文段的交付,不保障报文段的按序交付,也不保障报文段中数据的完整性。所以 IP 是不牢靠的服务 而运输层 (TCP 和 UDP) 将两个端系统间的 IP 的交付服务扩大为运行在端系统上的两个过程间的交付服务。而 UDP 仅提供了过程到过程的数据交付和过错查看两种服务,所以 UDP 也是一种不牢靠的服务 TCP 和 UDP 的比照“TCP 是面向连贯的,而 UDP 是无连贯的” 建设连贯指的是,为了在客户端和服务端保护连贯,而建设肯定的数据结构来保护单方交互的状态,用这样的数据结构来保障所谓的面向连贯的个性。 面向连贯的意思是,在互通之前,面向连贯的协定会先建设连贯,例如 TCP 会进行三次握手,而 UDP 不会。应用 UDP 时,在发送报文之前,发送方和接管方的运输实体之间没有握手,如此 UDP 才被称为是无连贯的。所以 TCP 和 UDP 的不同之处,次要体现在上面几个方面: 牢靠交付。通过 TCP 传输的数据,无差错、不失落、不反复、并且按序达到。而 UDP 继承了 IP 包的个性,不保障不失落,不保障按程序达到面向对象不同。TCP 是面向字节流的,发送的时候是一个流,没头没尾。而之所以发送的是流,也是 TCP 本人的状态保护做的事件。然而 UDP 继承了 IP 包的个性,是基于数据包的,一个一个地发,一个一个地收拥塞管制。TCP 有本人地拥塞管制机制,当它意识到包抛弃了或者是网络不好了,就会依据状况调整本人地行为,例如升高发送速度。而 UDP 没有拥塞管制,只会依据应用层地指令发包,即使是网络环境差,只有下层有指令发包,就会始终发有无状态。TCP 通过给数据编号,准确地记录了某个数据发送了没有,接管到没有,发送到哪个了,应该接管哪个。而 UDP 则是无状态的,不记录发送的包的信息UDP 包的构造 UDP 包是无连贯的,那么首次发送 UDP 包时,目标端口号如何得悉?服务器上的服务,应用的是 1024 以内的周知端口号,例如 DNS 服务器,那么源主机发送 UDP 时在目标端口号处填写 53 即可。(然而总感觉这个起因逻辑性不强)解析 UDP 包之前的动作:接管方收到一个包之后,会先查看目标 MAC 地址和本人的 MAC 地址是否统一。若统一就把 MAC 头部取下来,再把剩下的局部交给 IP 层。IP 层取下 IP 头部之后,若发现目标 IP 地址和本人的 IP 地址雷同,而后再查看 IP 头部里的协定类型,发现 IP 数据包的局部是 UDP 协定。于是就开始解析 UDP 包。将 UDP 包解析进去之后,查看头部的目标端口号,而后把外面的数据交给监听这个端口的某个利用解决。 ...
综述分层的概念OSI 模型的网络分为 7 层,理论的 TCP/IP 有四层,采纳二者联合的形式,将网络分为 5 层,这 5 层自上而下是:应用层、传输层、网络层、链路层、物理层。 简单的程序都要分层,所以整个网络被分为了 5 层,以下是从浏览器发送申请开始,到服务器接管申请,整个过程依照分层的形式的工作流程,以下叙述中的函数,在名称上可能并没有这样的函数,只是为了表白含意 假如在浏览器上进行领取,此时应用的就是 TCP 传输。调用 send_tcp(buffer) 函数, buffer 中的内容就是 HTTP 申请,调用这个函数时,还会增加 TCP 头部,并记录一下应用的源端口号,而后发往下一层。调用 send_layer3(buffer) 函数,往 buffer 局部增加 IP 头部,记录一下源 IP 地址和目标 IP 地址。而后持续发往下一层,调用 send_layer2(buffer) 函数,往 buffer 中增加 MAC 头,记录源 MAC 地址和目标 MAC 地址,源 MAC 地址就是本机的 MAC 地址。如果指标机器与本机在同一个网内,那么目标 MAC 地址就是对应的 MAC 地址;若指标机器在外网,那么就要通过肯定的协定找到 MAC 地址,总之是不能空着。而后就交给操作系统应用网卡发包 应用网卡发包时,须要排队,因为不止有一个程序须要发包,排队遵循的规定,下文具体阐明服务器接管包,能够开启混淆模式,意思是说网卡接管所有的包,而后判断这个包是不是发给本人的。假如服务器接管到了方才浏览器收回的申请包,那么服务器会调用 process_layer2(buffer) 函数,取下 MAC 头,发现是发给本人的,那么就将摘掉 MAC 头部残余的局部,发往上一层。上一层调用 process_layer3(buffer) 函数,取下 IP 头部,发现 IP 头部中的目标 IP 地址和本人的 IP 统一,那么阐明的确是发给本人的;如果不统一就转发进来。摘掉 IP 头部之后,查看这个包的内容。假如是 TCP 报文,就调用 process_tcp(buffer) 函数解决,UDP 就调用 process_udp(buffer) 。而后判断是一个发动,还是一个应答,又或者是一个失常的数据包,而后别离由不同的逻辑进行解决。如果是发动或者应答,接下来可能要发送一个回复包;如果是一个失常的数据包,就须要交给下层,监听某个端口的程序。 ...
OSI七层模型Open System Interconnection(开放系统互连) TCP/IP5层模型应用层、传输层、网络层、数据链路层、物理层 Http的几种申请办法是什么?GET办法:发送一个申请来获得服务器上的资源POST办法:向URL指定的资源提交数据PUT办法:跟POST办法很像,也是向服务器提交数据。put办法是幂等办法,在申请时容易造成数据冗余。HEAD办法:只申请页面的首部DELETE办法:删除服务器上的资源OPTIONS办法:它用于获取以后URL所反对的办法。如果申请胜利,会有一个Allow的头蕴含相似“GET,POST”这样的信息post与get的区别GET参数通过URL传递,POST参数放在实体中。GET申请在URL中传送的参数是有长度限度的,而POST没有。(GET参数裸露在URL上,不能用来传递敏感信息)GET产生一个TCP数据包,header与data一起发。POST产生两个,浏览器先发送header,等服务器响应后,再发送data HTTP状态码?2 结尾的示意胜利 个别就是2003 结尾的示意重定向 301永恒重定向302长期重定向4 结尾的示意客户端谬误 403 禁止拜访404 申请资源不存在5 结尾的示意服务端谬误 500 执行申请时产生谬误503 服务器处于超负荷状态或停机保护301:申请浏览器是会缓存的,例如http:// 永恒重定向到 https://302:例如未登陆的用户拜访用户核心会重定向到登录页面,redirect标识302。 Cookie和Session的作用以及区别?Cookie和Session的作用:客户端和服务器进行交互应用了HTTP协定,然而HTTP协定是无状态的。然而在有些时候是须要保留一些客户端的申请信息,辨认客户端的某些状态等。就须要用到Cooike和Session了。 区别cookie数据保留在客户端,session数据保留在服务器端。cookie放在他人那,安全性不高。为了晋升安全性,能够在客户端加密,服务端解密。当访问量增多时,session会占用服务器的性能。单个cookie在客户端的限度是3k,session没有大小限度。cookie仅反对ASICC码,中文须要转化能力传输;session反对任意格局因而,登陆信息等重要信息寄存为session;其余信息要保留寄存为cookie。分布式session原理?分布式Session的问题客户端发送一个申请,通过负载平衡后该申请会被调配到服务器中的其中一个,因为不同服务器有不同的web服务器(例如Tomcat),不同的web服务器中并不能发现之前保留的session信息,就会再次生成一个JSESSIONID,之前的状态就会隐没。 解决形式:基于redis存储session计划把我的项目中的session对立存在redis中,所有的参加集群的我的项目都在redis中取。spring为咱们封装好了spring-session,间接引入依赖即可。长连贯和短连贯?在HTTP/1.0中默认应用短连贯。即 客户端和服务器每进行一次HTTP操作,就建设一次连贯,工作完结后就中断连贯。而从HTTP/1.1起,默认应用长连贯,会在响应头退出这行代码: Connection:keep-alive在应用长连贯的状况下,当一个网页关上实现后,客户端和服务器之间用于传输HTTP数据的TCP连贯不会敞开,客户端再次拜访这个服务器时,会持续应用这一条曾经建设的连贯。Keep-Alive不会永恒放弃连贯,它有一个放弃工夫,可设定。 HTTP协定的长连贯和短连贯,本质上是TCP协定的长连贯和短连贯。HTTP1.0、1.1和2.0的区别?Http0.9 只能进行get申请Http1.0 增加了POST、PUT、DELETE等申请Http1.1 减少了长连贯keepAlive、反对断点续传。Http2.0 多路复用、新的二进制格局、头部压缩(防止了反复header的传输)HTTP和HTTPS的区别,https的实现原理?区别http无状态无连贯,而且是明文传输,不平安。https传输内容加密,身份验证,保障数据完整性。https实现原理首先客户端向服务器发动一个随机值,以及一个加密算法。服务器收到后返回一个协商好的加密算法,以及另一个随机值服务器再发送一个公钥CA客户端收到当前先验证CA是否无效,如果有效则报错弹窗,有过无效则进行下一步操作。客户端应用之前的两个随机值和一个预主密钥组成一个会话密钥,再通过服务器传来的公钥加密把会话密钥发送给服务器服务器收到后应用私钥解密,失去两个随机值和预主密钥,而后组装成会话密钥客户端在向服务器发动一条信息,这条信息应用会话秘钥加密,用来验证服务器能够收到加密的信息。服务器收到信息后返回一个会话秘钥加密的信息。都收到当前SSL层连贯建设胜利对称加密、非对称加密优缺点?对称加密:对称加密算法又称传统加密算法。 加密和解密应用同一个密钥。 长处:计算量小,加密速度快,加密效率高毛病:安全性得不到保障非对称加密: 非对称加密算法须要两个密钥:公开密钥(publickey) 和公有密钥(privatekey),公开密钥和公有密钥是一对。如果用公开密钥对数据进行加密,只有用对应的公有密钥能力解密,反之也是这样。 长处:算法强度简单,安全性高毛病:加密解密速度慢,只适宜对大量数据进行加密RSA利用场景:通常数据自身的加密解密应用对称加密算法,而用RSA算法加密并传输对称算法所须要的密钥。CA证书是什么?CA(Certification Authority),证书颁发机构,避免服务器伪造,内含公钥和私钥,应用 CA 公钥进行验证真伪。 DNS域名解析的流程?通过UDP或者TCP传输,个别采纳UDP 先浏览器缓存,再到host本地域名服务根域名服务器“.”顶级域名服务器“edu, gov, com, net”二级域名服务器“baidu, google”点对点和端对端的区别?点到点是主机到主机之间的通信。端到端是过程到过程之间的通信。一台计算机能够与很多台计算机进行通信,应用IP对不同的计算机进行辨别(点到点)。一台计算机上的一个程序(例如QQ)和很多计算机上的程序通信,须要应用IP+端口能力惟一的示意一个会话。深刻了解 TCP 协定:从原理到实战TCP概述一句话形容TCP协定:TCP是一个牢靠的、面向连贯的、基于字节流的、全双工的协定。 面向连贯面向连贯的协定要求正式发送数据之前须要通过握手建设一个逻辑连贯,完结通信时也是通过有序的四次挥手来断开连接 牢靠的IP是一种无连贯、不牢靠的协定,TCP想要在IP根底上构建牢靠的传输层协定,必须有一个简单的机制来保障。次要有: 对每个包提供校验和包的序列号解决了接收数据的乱序、反复问题超时重传流量管制、拥塞管制校验和(checksum)每个TCP包的首部中都有两字节用来示意校验和,避免在传输过程中有损坏。如果收到一个校验和有过错的保温,TCP不会发送任何确定间接抛弃它,期待发送端重传。 包的序列号保障了接收数据的乱序和反复问题 假如咱们往 TCP 套接字里写 3000 字节的数据导致 TCP发送了3 个数据包,每个数据包大小为 1000 字节。 如果因为网络起因导致第二个、第三个包先到接收端,第一个包最初才到。TCP会依据他们的序号进行从新的排列而后把后果传递给下层应用程序。 如果TCP接管到反复的数据,可能的起因是超时重传了两次但这个包并没有失落,TCP也可能依据包序号抛弃反复的数据。 超时重传、流量管制、拥塞管制 这部分内容较简单,前面专门讲述。 是面向字节流的TCP是一种字节流(byte-stream)协定,流的含意是没有固定的报文边界。 假如你调用2次write函数往socket里一次写500字节、800字节。write函数只是把字节拷贝到内核缓冲区,最终会以多少条报文发送进来是不确定的,如下图所示 下面呈现的状况取决于诸多因素:门路最大传输单元MTU、发送窗口大小、拥塞窗口大小等。 是全双工的在TCP中发送端和接收端能够是客户端/服务端,也能够是服务端/客户端,通信的单方在任意时刻既可接收数据也能够是发送数据。 ...
1、 计算机网络体系计算机网络体系结构分为3种:OSI体系结构(七层),TCP/IP体系结构(四层),五层体系结构。 OSI体系结构: 概念分明,实践也比拟残缺,然而它既简单又不实用。TCP/IP体系结构:TCP/IP是一个四层体系结构,失去了宽泛的使用。五层体系结构:为了不便学习,折中OSI体系结构和TCP/IP体系结构,综合二者的长处,这样既简洁,又能将概念讲清楚。 TCP/IP与OSI最大的不同在于:OSI是一个实践上的网络通信模型,而TCP/IP则是理论运行的网络协议。 2、五层网络体系结构概述看一下五层网络体系结构各层的次要性能: 应用层:应用层是网络协议的最高层,次要工作通过过程间的交互实现特定网络应用。应用层协定定义的是应用程序(过程)间通信和交互的规定。对于不同的网络应用须要有不同的应用层协定,在互联网中的应用层协定很多,如域名零碎DNS,反对万维网利用的HTTP协定,反对电子邮件的SMTP协定,等等。应用层交互的数据单元称为报文。 运输层:有时也译为传输层,它负责为两台主机中的过程提供通信服务。该层次要有以下两种协定: 传输控制协议 (Transmission Control Protocol,TCP):提供面向连贯的、牢靠的数据传输服务,数据传输的根本单位是报文段(segment);用户数据报协定 (User Datagram Protocol,UDP):提供无连贯的、尽最大致力的数据传输服务,但不保障数据传输的可靠性,数据传输的根本单位是用户数据报。网络层:网络层负责为分组网络中的不同主机提供通信服务,并通过抉择适合的路由将数据传递到指标主机。在发送数据时,网络层把运输层产生的报文段或用户数据封装成分组或 包进行传送。在TCP/IP体系中,因为网络层应用IP协定,因而分组也叫IP数据报。 数据链路层:数据链路层通常简称为链路层。数据链路层在两个相邻节点传输数据时,将网络层交下来的IP数据报组装成帧,在两个相邻节点之间的链路上传送帧。物理层:保数据能够在各种物理媒介上进行传输,为数据的传输提供牢靠的环境。以下是利用过程的数据在各层之间的传递过程中所经验的变动的简略示意图: 3、TCP/IP体系结构概述TCP/IP的体系结构比较简单,只有四层。 档次名称单 位功 能协 议网络接口帧负责理论数据的传输,对应OSI参考模型的下两层HDLC(高级链路控制协议)PPP(点对点协定) SLIP(串行线路接口协议)网络层数据报负责网络间的寻址数据传输,对应OSI参考模型的第三层IP(网际协议) ICMP(网际管制音讯协定)ARP(地址解析协定) RARP(反向地址解析协定)传输层报文段负责提供牢靠的传输服务,对应OSI参考模型的第四层TCP(控制传输协定) UDP(用户数据报协定)应用层 负责实现所有与应用程序相干的性能,对应OSI参考模型的上三层FTP(文件传输协定) HTTP(超文本传输协定) DNS(域名服务器协定)SMTP(简略邮件传输协定)NFS(网络文件系统协定)这种四层协定数据交换的示意图如下: 4、三种模型比照 <big>参考:</big> 【1】:谢希仁编著 《计算机网络》 【2】:网络篇(一):所谓的四层构造和七层构造 【3】:计算机网络模型(四层、五层、七层) 【4】:OSI 7层模型和TCP/IP 4层模型
应用层多端零碎通信实际上是过程通信,通过网络替换报文(应用层协定生成)过程通过套接字向网络收发报文(对应一个或多个)套接字是应用层与传输层之间的一个接口,为了建设网络程序的可编程接口利用开发者能够掌控套接字在应用层的所有,对传输层根本没有管制(能够设置协定,最大长度)过程之间进行通信须要晓得母的主机地址(IP网络层)和目标主机承受过程的标识符(端口传输层)运输层应该向应用程序提供的服务:牢靠数据传输、平安、吞吐量、定时(后两个tu都不提供)牢靠数据传输:发送过程把数据传输到套接字就认为已满足。吞吐量:保障向承受端交付的比特速率。平安:加密TCP:拥塞管制(克制发送方过程)UDP:无拥塞管制。发送端能够任何速率向上层注入数据。但接受方的吞吐量个别达不到吞吐量或定时运输层协定并没有提供应用层协定定义了运行在不同端程序如何传递报文如何传递:报文类型、语法、语义,何时如何发送报文,如何响应HTTP应用TCP,不放心数据失落。不存储任何对于用户的状态(无状态协定)HTTP提供继续链接(默认)和非继续连贯HTML根本文件.html中蕴含了对其余对象的援用(如图像)须要利用给的援用持续要数据HTTP是无状态的,但web站点通常心愿把内容与用户身份分割起来,cookiecookie容许站点对用户进行跟踪cookie:发送申请->web产生一个惟一识别码并以此为索引在后端建设一个表项web对申请进行回应并带有一个setCookie首部含有识别码再次拜访这个网站就会再申请报文首部加上Cookieweb缓存器也叫代理服务器,存储最近申请过的对象正本用户先申请缓存器,缓存有就返回信息。没有就本人发送申请要回来备份并回应web缓存器通常有ISP购买,如学校让学生都指向它。web缓存能够通过带if-modified-since的首部证实本人的对象是最新的(什么时候调用呢?)
整个过程包含两个子过程:导航和渲染 一、导航用户输出url并回车浏览器过程查看url,组装协定,形成残缺的url浏览器过程通过过程间通信(IPC)把url申请发送给网络过程网络过程接管到url申请后查看本地缓存是否缓存了该申请资源,如果有则将资源返回给浏览器过程如果没有,网络过程向服务器发动http申请(网络申请),申请过程如下: 进行DNS解析,获取服务器的ip地址,端口 本地域名服务器查看本地缓存根域名服务器顶级域名服务器权威域名服务器利用ip地址和端口构建过程间通信的接口socket套接字,后续TCP端到端的传输的端也是指的是socket套接字建设tcp连贯(三次握手)结构申请行、申请头和申请体,利用建设好的tcp连贯发送构建好的申请信息服务器收到申请信息,结构响应行、响应头和响应体,利用建设好的tcp连贯发送给客户端客户端浏览器的网络过程接管响应头和响应信息,并解析响应内容网络过程解析响应流程 查看状态码,如果是301/302,则须要重定向,从Location主动读取地址,从新进行第4步操作,如果是200,则持续解决申请200响应解决 查看响应的Content-Type,如果是字节流类型,则将该申请提交给下载管理器,该导航流程完结,不再进行后续的渲染。如果是text/html类型,则告诉浏览器过程筹备渲染过程筹备进行渲染筹备渲染过程 浏览器过程查看以后的url是否和之前关上的页面的url主域名是否雷同,如果雷同,则复用之前页面的渲染过程。如果不同,则创立新的渲染过程传输数据,更新状态 渲染过程筹备好后,浏览器过程向渲染过程发送“提交文档”信号渲染过程接管到信号后建设“管道”与网络过程进行数据的传输数据传输结束后,渲染过程发送“确认提交”信号给浏览器过程浏览器过程接管到确认信号后更新浏览器界面的状态:平安信息、地址栏url、后退后退的历史状态、更新web页面等二、渲染渲染过程将 HTML 内容转换为可能读懂的 DOM 树构造。(应用栈来实现,遇到“<p"就入栈,遇到"</p"就出栈渲染引擎将 CSS 样式表转化为浏览器能够了解的 styleSheets,计算出 DOM 节点的款式。结构渲染树。创立布局树,并计算元素的布局信息。对布局树进行分层,并生成分层树。为每个图层生成绘制列表,并将其提交到合成线程。合成线程将图层分成图块,并在光栅化线程池中将图块转换成位图。合成线程发送绘制图块命令 DrawQuad 给浏览器过程。浏览器过程依据 DrawQuad 音讯生成页面,并显示到显示器上。
套接字与套接字编程套接字在之前的文章中有说到,通过端口(Port)能够惟一的标识不同的网络过程。如果有一个过程在应用网络的话,那必定是会占用一个端口的,计算机就是通过这个端口来辨别不通的网络过程的 端口(Port)应用16比特位示意(0~65535)。由端口以及IP就能够指定网络中某一台主机的具体过程是哪一个「IP:Port」。对于IP和端口的组合,有一个名字叫:套接字(Socket) 套接字(Socket)是形象的概念,示意TCP连贯的一端(咱们晓得TCP是端到端(点到点)的通信,两个端点之间会有一个TCP连贯来进行通信,这个套接字就能够示意通信的一端) 通过套接字能够进行数据发送或接管。很多时候对网络编程的时候,实际上就是对套接字的编程,通过套接字来进行数据的发送和接管 因为TCP连贯是由两端所组成的,因而就能够示意为两个套接字,通过这两个套接字就能够指定惟一的一个TCP连贯,而套接字又能够示意为IP和端口的组合(一个IP能够有多个套接字,因为它可能会有不同的端口) TCP={Socket1:Socket2}={{IP:Port}:{IP:Port}}如果平时对套接字进行编程的话,很多时候都是将这个架构看做是C/S架构。客户端和服务端通过TCP连贯连接起来,不论是客户端还是服务端,都会应用一个Socket来进行数据的发送和接管 C/S架构的TCP通信过程(右边为服务端、左边为客户端) 网络套接字与域套接字的区别网络套接字对于网络套接字,不论是跨计算机还是在同一台计算机,如果应用网络套接字的话,数据都会通过网络中的协定栈 域套接字域套接字次要是通过域套接字文件来进行通信的。如果通过域套接字来进行通信的话,数据就不须要通过协定栈。所以,如果是单机的通信,举荐应用域套接字进行通信,因为它解决流程简略,而且不通过协定栈,对系统的耗费比拟小。如果是跨机器或跨网络的通信,就必须得应用网络套接字进行通信
本文介绍一些计算机网络的入门基本概念。 1. 辨析几种“网”1.1. 计算机网络首先来看一张一般的网——蜘蛛网: 那么该蜘蛛网有什么特点呢?从几何上看,无外乎有两个特色:点(红色局部)和线(蓝色局部)。 其实生存中你能见到的网,如渔网、铁网、绳网等等,都具备这个特色。 以此类推,计算机网络也具备这两个特色,只不过再叫点和线就不适合了,咱们换两个名词:结点和链路。 所以,计算机网络就是由若干结点和连贯这些结点的链路组成的。 结点能够是计算机、交换机、路由器等设施。链路能够临时简略了解为网线。 下图是由五个结点(四台计算机、一台集线器)和四条链路组成的计算机网络,能够简称为网络: 在钻研网络之间的关系时,咱们须要把网络当成一个整体来看,疏忽网络外部的简单状况。这时,一个网络能够用一朵云来代替: 把某个网络比作一个人,结点和链路则是心肝脾肺肾和血管。钻研网络外部就好比医生看病,关注的是你身材内的某个器官,以及这些器官之间的分割。 钻研网络和网络之间的关系就好比人际交往,关注的是人这个残缺的个体,而不关注器官,毕竟没人要和器官交朋友。 1.2. 网络的网络(互连网/internet)网络的网络就好比“人际关系网”: 智能手机把人们连贯在一起,形成了人际关系网。把人换成网络,智能手机换成路由器,“人际关系网”即是“网络的网络”。 能够临时把路由器看做一台非凡的计算机。打个比方:把结点比作市,链路比作高速公路,网络比作省,传送的数据比作客运汽车,路由器比作省际高速公路收费站,互连网比作国。 网络之间通过路由器连接起来形成一个范畴更大的计算机网络,这种网络就是“网络的网络”,可称之为互连网(internet)。 图1-4中一朵云代表了一个网络,该网络连接了多台计算机。图1-6中多朵蓝色的云(网络)连贯在一起形成了一朵更大的灰色的云(互连网)。由这两张图,咱们能够得出:计算机连贯在一起形成网络,网络通过路由器连贯在一起形成互连网。 1.3. 互联网(Internet)互联网(Internet) 是寰球最大、最重要的计算机网络。如果你真正理解了互联网,那么你也能够说本人真正理解计算机网络。 那什么是互联网呢? 咱们每天都会上网,微信聊天、王者光荣、看视频、看博客等等。咱们上的这个“网”指的就是互联网。咱们之所以可能一起聊天、玩游戏就是因为大家都被连贯在了同一张“网”上了。这是互联网给咱们用户的第一个体验:所有上网的人被有形地连在一起了,即连通。各位当初可能看到我写的博客文章,这是互联网给咱们用户的第二个体验:共享资源,如果没互联网,大家就看不到我的文章了。 互联网的两个个性:连通性、资源共享。 internet和Internet要做辨别: internet泛指多个计算机网络连贯在一起而造成的计算机网络。Internet特指互联网,即当初寰球最大、最重要的那个计算机网络,咱们平时上的那个是Internet,而不是internet。互联网倒退至今,连贯在其中的曾经不仅仅只是咱们平时应用的“电脑”了,诸如智能手机、智能手环、智能电器能都能够接入互联网中。这些设施咱们能够都称之为主机或端系统。 图1-7强调了主机接入网络中,而疏忽网络中的路由器或链路。 那主机是怎么接入互联网中的呢? 这就得先说说目前的互联网的根底构造了。当初的互联网是多层次ISP构造的互联网。 ISP即互联网服务提供商(Internet Service Provider),比方中国移动。ISP从互联网管理机构中申请到许多IP地址,同时也领有通信链路和路由器等设施。咱们普通用户只需向ISP缴纳费用,就可取得一个IP地址,而后就能够上网了(就是交网费上网,我家是交给中国移动)。 举个例子,IP地址就像车牌一样,你只买了个车,然而没车牌是上不了路的。ISP就负责发车牌、修公路、修收费站。IP地址通过了互联网管理机构、ISP、最初才到用户手中,并且互联网管理机构分给ISP的是一批IP地址。 这个模式相似于生产厂家、经销商、消费者。多层次是指依据提供服务的覆盖面积大小以及领有的IP地址数目的不同,ISP能够分为不同档次的ISP:骨干ISP、地区ISP、本地ISP。 骨干ISP服务面积最大(通常能覆盖全国),有几个专门的公司创立和维持。地区ISP次之,地区ISP之间可通过骨干ISP连接起来。地区ISP则间接给用户提供服务。 相似于国家、省、市,用户则相似于市民。2. 互联网的组成互联网是寰球最大的、笼罩寰球的计算机网络。如此之大的网络,从工作形式上看能够分为两局部:边缘局部和外围局部 2.1. 边缘局部边缘局部由连贯在互联网上的主机组成,这部分由用户间接应用,为用户提供数据通信和资源共享的服务。 边缘局部要利用外围局部提供的服务,能力为用户提供通信和资源共享的服务。比方图1-8中任意两个人都能够利用背后的电脑进行通信。 通信的形式有两种:客户-服务器形式和对等连贯形式。 一. 客户-服务器形式 这种形式是目前互联网上最罕用的形式。网上的各种信息都存储在服务器上,咱们须要某信息时就通过互联网的外围局部提供的服务向服务器发送申请,将其检索进去,而后服务器再发送给咱们的设施。 客户是服务申请方,服务器是服务提供方。 客户和服务器还具备以下特点: 客户被动向服务器发送申请,服务器被动承受申请,这就要求服务器要始终运行。客户须要晓得服务器的地址,服务器不须要晓得客户的地址。客户对硬件的要求不高(一般的电脑和智能手机即可),服务器对硬件要求较高。二. 对等连贯形式 即P2P(peer-to-peer),指两台主机在通信时并不辨别哪一个是服务申请方,哪一个是服务提供方。二者能够相互下载对方提供的内容。其实这种形式也是一种非凡的客户-服务器形式,只不过二者位置相等。 打个比方,客户-服务器形式就相当于学生向老师求教问题,而P2P形式就相当于学生之间相互求教问题。2.2. 外围局部外围局部由大量网络和连贯这些网络的路由器组成。外围局部为边缘局部提供了服务——连通性和替换,所以边缘局部中的主机才可能进行数据通信和资源共享。外围局部要比边缘局部简单的多。 外围局部中的大量网络提供了连通性,这不难理解。那替换是谁提供的?替换的是什么?分组是什么?怎么替换分组?上面就简略介绍一下这些问题。 Q1: 替换是谁提供的? A1: 路由器 ...
罕用端口 FTP 文件传送协定FTP 应用 TCP 进行连贯,它须要两个连贯来传送一个文件: 管制连贯:服务器关上端口号 21 期待客户端的连贯,客户端被动建设连贯后,应用这个连贯将客户端的命令传送给服务器,并传回服务器的应答。数据连贯:用来传送一个文件数据。依据数据连贯是否是服务器端被动建设,FTP 有被动和被动两种模式: 被动模式:服务器端被动建设数据连贯,其中服务器端的端口号为 20,客户端的端口号随机,然而必须大于 1024,因为 0~1023 是熟知端口号。被动模式:客户端被动建设数据连贯,其中客户端的端口号由客户端本人指定,服务器端的端口号随机.被动模式要求客户端凋谢端口号给服务器端,须要去配置客户端的防火墙。被动模式只须要服务器端凋谢端口号即可,无需客户端配置防火墙。然而被动模式会导致服务器端的安全性削弱,因为凋谢了过多的端口号。 DHCP 动静主机配置协定DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网形式,用户不再须要手动配置 IP 地址等信息。 DHCP 配置的内容不仅是 IP 地址,还包含子网掩码、网关 IP 地址。 DHCP 工作过程如下: 客户端发送 Discover 报文,该报文的目标地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入 UDP 中,该报文被播送到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就须要应用中继代理。DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文蕴含了客户端所须要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因而客户端须要进行抉择。如果客户端抉择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。DHCP 服务器发送 Ack 报文,示意客户端此时能够应用提供给它的信息。TELNET 近程登录协定TELNET 用于登录到近程主机上,并且近程主机上的输入也会返回。 TELNET 能够适应许多计算机和操作系统的差别,例如不同操作系统零碎的换行符定义。 电子邮件协定一个电子邮件系统由三局部组成:用户代理、邮件服务器以及邮件协定。 邮件协定蕴含发送协定和读取协定,发送协定罕用 SMTP,读取协定罕用 POP3 和 IMAP。 ...
文章内容概览 TCP的三次握手TCP标记TCP标记是TCP首部的其中一个字段。TCP标记占6个比特位,每位都有不同的含意 对于三次握手,次要关注下边三个标记 TCP三次握手过程假如有一个发送方计算机和一个接管方计算机,纵向为时间轴 第一次握手假如首先是发送方被动和接管方建设连贯,所以,发送方会第一次发送一个报文(此时SYN=1,示意这是一个连贯申请的报文,seq=x是同步发送方本人的序列号) 第二次握手接管方在接管到连贯申请后,也就关上TCP连贯,同时它也会发送一个报文,这个报文是第二次握手。报文信息中有: SYN=1:示意是一个连贯申请ACK=1:示意对序列号的确认ack=x+1:小写的ack示意的是确认号。这里的ack=x+1,示意接受方冀望收到的是x+1这个序列号的值seq=y:同时接管方发送的报文中也会携带本人的序列号,也就是seq=y第三次握手发送方接管到报文之后,会进行回应,回应中的报文内容: ACK=1:示意这个报文的确认号是无效的seq=x+1:发送方所携带的序列号,示意的是,以后发送方发送的数据序列号是x+1ack=y+1:确认号是y+1,示意发送方冀望接管到接管方的序列号是y+1的数据通过这三次的握手,TCP的连贯就建设起来了 三次握手中要害的信息 第一次和第二次握手都有SYN标记,示意这是一个连贯的申请第二次和第三次握手都有ack标记,对于ack这个标记,它其实是先对连贯单方的序列号进行同步。比如说,通过两次的ack同步,发送方曾经晓得了接管方的ack是什么了,同时,接管方也晓得了发送方的ack是什么了,通过三次握手,它们不仅仅将连贯建设起来,并且也同步了各自的序号在三次握手的时间轴中,不同的工夫,接管方和发送方有不同的状态 在接管方没有接管到数据之前,它始终处于监听状态(Listen)发送方在第一个报文发送进来,到接管到第一个报文的响应之间,属于同步已发送状态(SYNC-SENT),示意曾经将SYN发送进来了,并且期待对方的SYN信息从接管方发送第一个报文,到接管到第二个报文之间,属于同步已接管状态(SYNC-RCVD),示意发送方发送给我的SYN信息,我曾经收到了而后发送方就进入建设连贯(ESTABLISHED)的状态了对发送方来说,只有第二次握手胜利之后,发送方就建设起连贯了。然而对接管方来说,只有接管到发送方的第三次握手之后,才是建设连贯的状态(ESTABLISHED) 单方对于建设连贯状态的工夫是不一样的,发送方只有在第二次握手胜利之后,就变成了建设连贯的状态。然而对接管方来说,只有接管到发送方的第三次握手之后,才是建设连贯的状态。单方都进入建设连贯的状态之后就能够进行数据的传输了 为什么发送方要收回第三个确认报文呢?为什么两次不行?论断:防止曾经生效的连贯申请报文传送到对方,引起谬误 假如此时有一个发送方计算机和一个接管方计算机。首先发送方须要发送一个建设连贯的申请报文(第一次握手),假如第一次握手的报文在网络中传输很久才达到接管方,因为发送了很久,所以,发送方很久都没有收到接管方的确认音讯。发送方就会认为第一个报文曾经超时了,所以,发送方就会第二次发送同样的报文 假如第二次发送的报文,很快就达到了对方,接管方在收到第二次的连贯申请报文之后,就会进行回应,并且建设起它们之间的连贯。那么,对于发送方发送的第一次的申请报文,就应该是一个生效的申请报文,因为它的性能曾经被第二次的连贯申请所实现了。所以,对于第一次发送的申请连贯报文,在网络中游荡了很久,其实就是一个生效的申请报文了,没有作用了 如果发送方发送的两次连贯申请都建设起连贯了会怎么样? 首先思考第二次申请的报文,这个报文是提前达到接管方的,接管方会对它进行一个回应,回应确认之后,就建设起连贯了(因为咱们是假如两次握手就建设起连贯) 当初思考第一次发送的连贯申请,如果两次握手就建设连贯的话,对于生效的申请,它也会建设起连贯,因为只有接管方回应了,就示意连贯曾经建设了 这样就会导致,同样的申请发送了两次,就会建设两个TCP连贯的状况。这种状况是谬误的,所以说,两次握手是不正确的 三次握手是如何解决两次握手导致的问题?对于两次握手,只有接管方回应了,就示意连贯建设了。而对于三次握手来说,第一个确认报文会首先达到发送方,而后发送方再发送一个确认报文(第三次握手),此时才算建设起连贯 当初来思考那个比较慢达到接管方的连贯申请报文,这个报文,接管方也会发送一个确认报文给发送方(第二次握手)。然而发送方曾经进行第三次握手了,因而发送方对于第二次的确认音讯会疏忽掉,并不会进行任何的操作。这样,第一次比较慢达到的连贯申请就不会建设起连贯,这就防止了两次握手所导致的谬误 上边就是三次握手的作用,它防止了生效的申请达到对方,并且引发不应该有的谬误
文章内容概览 TCP的拥塞管制当网络中的数据报文过多的时候,就会造成网络的拥塞 网络拥塞的本源 一条数据链路通过十分多的设施数据链路的各个局部都可能成为网络传输的瓶颈(网络中各种路由器的性能可能不一样、或者传输媒介性能有差异)网络对一些硬件设施的性能要求,大于可用资源,因而就导致了拥塞TCP的拥塞管制和TCP的流量管制有什么区别?流量管制思考点对点的通信量管制(次要是通过窗口来管制通信量,思考接管方的接管性能)拥塞管制思考整个网络,是全局性的思考(它会感知到整个网络是否产生拥塞)拥塞管制是一个很宏大的问题,因为它思考到了整个网络,并且对于拥塞管制,很难有最优解。这里只对拥塞管制有一个简略的意识 如果要进行拥塞管制,首先须要有一个办法去判断网络是否产生拥塞。判断的办法简略粗犷,如果发送方发送的报文产生了超时,就认为网络产生了拥塞。然而,通过报文超时来判断网络是否肯定拥塞是不成立的 如果在传输的某一个阶段,把光纤给断了,这个也会导致报文超时,这时就不是因为拥塞所造成的了,而是网络故障所造成的。所以,报文超时只是判断网络拥塞的一个办法(下边的内容先不思考网络故障的状况) 拥塞管制的两个算法慢启动算法由小到大逐步减少发送的数据量每收到一个确认报文就加一(如果第一次收到了1个确认报文,下一次就发送2个报文;如果第二次收到2个确认报文,下一次就发送4个报文,顺次1、2、4、8)能够看到发送的报文是按指数增长的,指数增长的增长速率是十分快的。慢启动算法,它的指数增长会有一个阈值,称为慢启动阈值(ssthresh),增长到这个慢启动阈值之后就不再增长了。增长到这个阈值之后,它就会进行第二个算法 拥塞防止算法保护一个拥塞窗口的变量(这个变量大于慢启动阈值)只有网络不拥塞(即只有报文不超时),就试探着增大拥塞窗口(每次加一)假如慢启动达到了阈值(假如是16),此时就会启动拥塞防止算法,它会试探着将拥塞窗口调大,如果16个报文都收到了确认,它就会再发送17个报文,如果没有产生超时,下一次就会发送18个报文。始终这样一个一个的调大,直到产生拥塞。这就是拥塞防止算法 拥塞防止算法能够保障在网络不产生拥塞的状况下,更多的发送数据 这是一张慢启动算法和拥塞防止算法的图(纵坐标:每一次发送数据报文的数量;横坐标:发送的轮次) 在达到阈值之前,数据报文的数量是指数增长的。当数据报文的数量达到阈值的时候就会启动拥塞防止算法,之后数据报文的数量就是线性增长的
telnet近程终端协定:基于TCP23 端口,能够近程对终端进行操作 RDP远程桌面协定:基于TCP3389端口,能够近程操作所拜访终端的桌面。
文章内容概览 TCP协定的流量管制流量管制是TCP协定特有的性能,对于UDP或者其它的一些协定,是没有流量管制 流量管制,简略的来说就是,接管方心愿发送方将数据发送的慢一些。一般来说,咱们是心愿越快越好,然而,还是须要思考一些理论的状况。比方接管方不能那么快的去接管很大的流量,所以心愿发送方的流量慢一些。这就是流量管制 流量管制指让发送方发送速率不要太快流量管制是应用滑动窗口来实现的在TCP首部中有窗口这个字段,它占16个比特位,用来指明容许对方发送的数据量。在牢靠传输的基本原理这篇文章中有联合确认号和窗口进行了一个运算。比如说,假如确认号是501,窗口大小是1000,就示意说,发送方能够发送501~1500这个范畴的1000个字节的数据,这个就是窗口所起到的作用。那滑动窗口是怎么做到流量管制的? 假如当初有一个发送方计算机和一个接管方计算机,从上往下是它们之间交互的时间轴 假如发送方发送了一个序列号为1的数据,发送数据的大小是100个字节发送方还能够进行第二次发送,此时发送的数据的序列号就应该是101,也假如发送数据的大小是100字节此时接管方曾经接管到了200个字节的数据,假如此时接管方发送了一个确认音讯,确认号是201,201示意的就是期待接管到的下一个字节的序号,并且发送的确认音讯中还有一个窗口的大小,假如是300,示意告知发送方还能够发送300个字节的数据。确认音讯中的ACK标记为1发送方在晓得了窗口大小为300之后,它就能够持续发送300个字节的数据。首先它可能就会发送序列号为201的100个字节的数据,此时发送方还能再发200个字节的数据假如此时发送方发送了序列号为301的200个字节的数据,此时接管方就能够进行确认了,确认说,它曾经接管到了601序列号之前的所有数据了,此时窗口大小为0,也就是说发送方不能再进行数据发送了以上就是通过窗口大小管制对方发送速率 如果接管方发送了窗口为0的音讯之后,它马上对接管到的数据进行解决,解决之后交给应用层,一段时间之后,接管方就又能够接管信息的音讯了。此时,接管方就会向发送方发送一个音讯,通知它说,以后我的窗口是1000,也就是能够接管1000个字节的数据。发送方在收到这个音讯之后,发送方又会进行数据的封装,并且将数据发送给接管方。这个就是接管方通过调整窗口的大小来告知发送方能够持续的发送数据 思考一个非凡状况 假如接管方在告诉发送方,它的窗口为1000的音讯在传输过程中失落了。这种状况会导致什么样的结果? 对于发送方:发送方会始终期待,因为它还是认为接管方的窗口为0,所以它始终期待接管方的窗口调大 对于接管方:接管方曾经将窗口调大的音讯通知发送方了,实践上,发送方在收到音讯之后,会将信息的音讯发送给接管方。因而,接管方也会始终期待 所以,因为窗口数据报文的失落,导致发送方和接管方都会始终的在期待,造成死锁的场面。此时可能就会有疑难,TCP不是牢靠传输的吗?这个音讯为什么会失落呢? 其实在探讨TCP的牢靠传输时,次要是从数据的角度去思考的。也就是说,对于TCP的牢靠传输,都是对数据的确认。比方序列号、以及确认号都是对数据的字节进行确认的,对于非凡的音讯,比方窗口的大小,其实是没有超时重传机制的。因而就会呈现上边提到的死锁场面 保持定时器要解决上边呈现的死锁状况,就须要TCP中的第二个定时器,保持定时器 当发送方接管到窗口为0的音讯,则启动保持定时器保持定时器每隔一段时间发送一个窗口探测报文(用来询问窗口有没有增大,这样就能够解决因发送窗口大小的音讯失落导致的死锁场面)
文章内容概览 倡议联合我的上一篇文章来看本篇内容:牢靠传输的基本原理 TCP协定的牢靠传输TCP的牢靠传输是基于间断ARQ协定的(对于ARQ协定,能够看我的上一篇文章)ARQ协定中有两个重要的概念:滑动窗口和累计确认。这两个概念在TCP的牢靠传输中同样实用TCP的滑动窗口以字节为单位假如有一段的字节流须要传输,滑动窗口的大小为7,这里是为了不便了解,所以窗口设的很小,理论状况下的窗口是很大的。窗口中的7个字节示意都是能够传输的,窗口右边的是曾经确认的字节序号,窗口左边的是不容许发送的字节序号。图中的23示意的就是对方期待接管到的下一个字节,其实也就是TCP首部中的确认号的概念 如果在某一个时刻23~26这四个字节曾经发送进来了,然而没有收到确认信息,这个就属于已发送但未确认的字节。而窗口中剩下的三个字节就属于可用窗口,也就是后边三个字节是能够发送的。然而,因为发送进来的四个字节还没有收到确认,所以窗口还不能向后挪动。假如通过一段时间之后,收到了23、24这两个字节的确认信息,此时就能够将窗口向后挪动两个字节 假如窗口中的7个字节都曾经发送进来了,然而一个确认信息都没有收到,此时可用的窗口是0,因为窗口中所有发送的字节都没有收到确认,这个时候,滑动窗口不能向后推动。这是理论可能存在的状况 假如窗口中的7个字节都曾经发送进来了,在某一个时刻,收到了25和27这两个字节的确认信息。能够发现,这种状况,确认信息并不是按窗口中字节的程序收到的,此时该怎么办? 首先能够晓得的是,23、24这两个字节的确认信息是没有收到的,因而,窗口是不能往前推动的。假如当初超时工夫曾经到了,而23、24还没有收到确认音讯,此时会怎么办?这种状况下,即便25、27这两个字节的确认信息曾经收到了,然而,此时还是会从23开始重传音讯,因为23、24的确认信息还没有收到。因而,超时之后,会从23开始重发消息,即便收到了后边字节的确认音讯也没有用,这个就属于TCP协定的牢靠传输 从上边能够晓得,如果窗口中的字节没有按序收到确认信息,那么超时之后就会对窗口中的字节进行从新发送。由此也能够看到,TCP的这种牢靠传输,效率并不是很高,因为曾经收到了25、27这两个字节的确认信息,意思就是这两个字节是精确的达到了接管方的,然而因为23、24这两个前边的字节没有收到确认信息,超时之后,还是须要对25、27进行传输,这样就导致可重传的效率并不高。有没有方法能够进步这个效率? 抉择重传抉择重传,顾名思义,就是能够抉择一部分音讯进行重传,而不是将窗口中所有的音讯进行从新传输 抉择重传是如何进行工作的?抉择重传须要指定须要重传的字节每一个字节都有惟一的32位序号(这个在TCP首部中,抉择重传会指定这个32位序号是什么)(倡议在看后边的内容之前,回看一遍TCP头部的内容,这样了解下边内容会更加的容易) 对于TCP首部,其实咱们晓得它并没有存储抉择重传指定字节的地位。每一个字节都有一个惟一的序号,所以在存储须要抉择重传的字节的序号时,也是须要消耗很多的空间的。因而,在理论的抉择重传中,这个数据实际上是存储在TCP选项中的 在TCP协定详解的文章中有进行过简略的计算,晓得了TCP选项最多有40个字节。因为一个序号是占用4个字节,那也就是说,TCP选项中最多能够放10个序号。那是不是示意,抉择重传只能重传10个字节? 其实并不是的,在理解TCP的时候晓得,TCP的报文,一次是能够传输很多个字节的,前边的例子次要是为了不便对TCP牢靠传输进行了解,才把每次能够传输的字节数设置的很少。对于理论的TCP传输,它一次能够传输上百或上千个字节 因而,这里边的序号并不是说抉择指定某一个字节的。因为,如果产生出错了,很可能整个TCP报文都失落了,这种状况其实就间断的丢掉一段的字节,因而,这里的抉择重传,更多的状况是对一段字节来进行重传的。所以这个时候序号所表白的意思,个别都是须要重传的边界 看个例子,假如要传送1000~3500这么多字节的数据,把500个字节看做是一个TCP报文。假如1000~1500范畴字节的TCP报文失落了,这个时候就能够指定两个边界,别离是1000和1500,将他们存储到TCP首部中的TCP选项中,示意1000~1500这么多个字节,都是须要从新传输的。因而,此时TCP选项中的1000和1500并不是指重传1000和1500这两个序号的字节,而是重传1000到1500这个范畴中的所有字节 如果看完对你有帮忙,辛苦给个三连激励一下哦!
DHCP定义动静主机配置协定,能够动静或者动态为主机调配ip地址。 调配形式动态分配:调配的ip地址工夫有限度,利用于不固定地位的主机动态调配:利用于固定地位固定网段的主机。调配过程动态调配,在DHCP中创立作用域,手动增加。动态分配,在DHCP中创立作用域,当主机申请ip时,在本局域网中发送播送包,播送包中蕴含mac信息,DHCP依据mac地址调配ip地址,发送ip信息给申请的主机。如果DHCP不在本网络网段,则须要在网关路由器对应的接口中配置命令 ip-helper-address 'DHCP的IP'.2.1此过程与arp协定过程相同,主机申请mac地址时,在本局域网中播送给所有主机一个蕴含ip的包,对应ip主机的返回mac信息给主机。
文章内容概览 进行期待协定假如当初将计算机分为发送方和接管方,之前的文章中有说到TCP是全双工通道的协定,也就是同一时刻计算机能够当做发送方,也能够当做接管方。下边是发送方计算机和接管方计算机的时间轴,进行期待协定的工作原理如下: 发送方生成TCP数据(音讯1),而后将其发送进来,通过一段时间之后,达到接管方接管方在接管到之后,再发送一个确认的音讯,示意发送方发送的音讯,它收到了接管方将确认音讯发送给发送方,一段时间后,发送方接管到确认音讯。这样发送方就晓得接管方接管到了它的音讯发送方生成音讯2,而后将其发送给接管方,发送之后,发送方就会期待接管方的确认音讯,当收到接管方的确认音讯之后,它才会生成下一条要发送的音讯 这个过程就是进行期待协定的过程,首先会发现,当发送方发送一个音讯之后,它会进行生成新的音讯,它会期待接管方发送确认音讯,发送方接管到确认音讯之后,才会生成新的音讯。这整个过程就是进行---期待---进行---期待...(接管方也是一样,当没有音讯进来的时候,它也会处于期待) 当然,上边其实探讨的是很现实的状况,因为网络环境是十分复杂的,数据在传输的过程中,可能会呈现失落,上边都没有思考,所以上边探讨的就是无差错的状况 如果音讯传输过程中有过错,进行期待协定是如何解决的? 情景1:发送方将数据发送进来之后,产生了失落假如发送方将数据发送进来之后,产生了失落。也就是接管方并没有接管到音讯。咱们晓得,当发送方将音讯发送进来之后,就会期待接管方发送确认音讯,发送方期待一段时间之后发现接管方并没有发送确认音讯。对方是不是没有接管到音讯?因而,发送方在期待一段时间之后,发现并没有接管到确认音讯,就会从新发送音讯,这个就属于超时重传 超时重传是保障进行期待协定能够进行牢靠传输的一个办法 情景2:确认音讯在传输过程中产生失落假如接管方在接管到音讯之后,发送的确认音讯在传输过程中失落了。此时,发送方在期待一段时间之后还是没有收到确认音讯,因而,发送方会进行超时重传,以保障发送的音讯肯定被接管方接管到 情景3:确认音讯很久才达到发送方假如接管方发送的确认音讯经验了很久才达到发送方,此时也会产生超时重传,因为确认音讯到的太晚,发送方会认为接管方没有收到音讯 要实现超时重传,必定是须要一个定时器,这个定时器被称为:超时定时器每发送一个音讯,都须要设置一个定时器(用来计算一个音讯什么时候过期了)。TCP中有四个定时器,超时定时器是其中一个,后边的文章会提到其它的三个定时器 总结 进行期待协定是最简略的牢靠传输协定(只有音讯没正确达到,就会进行超时重传)进行期待协定对信道的利用效率不高(从上边的图中也能够看进去,发送每发送一个音讯,都须要期待确认音讯回来,只有确认音讯没有正确的达到,发送方就会始终期待,这对这个连贯来说是十分低效的)间断ARQ协定间断ARQ协定是在进行期待协定的根底上进行革新的 ARQ(Automatic Repeat reQuest:主动重传申请) 既然单个发送和确认效率低,可不可以批量发送和确认? 正是因为这个思考,就产生了ARQ协定。例如:假如有编号为1~12的报文须要发送,这里可能就不是发送一个报文就期待一个确认音讯了,而可能是间断的发送六个报文。假如发送了前六个报文之后,收到了编号为1和2的确认音讯,此时会将窗口向前挪动两个地位。接着就会发送编号为7和8的报文,等接管到其它报文的确认音讯之后,再将窗口持续向后挪动。这里的批量发送的报文大小,就被称为窗口,能够向前滑动的窗口,就被称为滑动窗口 意思就是,只有是滑动窗口中的数据,都能够进行发送,只有发送进来的数据确认号达到了,就能够将窗口往前推动。其实,如果每一个报文都须要确认的话,确认音讯的开销也是挺大的,因而,对滑动窗口来说,它并不需要对每一个报文都进行确认,而是采纳累计确认的办法 假如同时发送了编号为1~6的这六个报文,在某一个时刻,发送方接管到了编号为5的这个报文的确认音讯。如果是采纳累计确认的办法,5的这个确认音讯就示意说,1~5的确认音讯,发送方都曾经收到了,因而就会将窗口向后挪动5个地位,此时就能够发送7~11这五个报文了,这就属于累计确认。意思就是说,只有收到了某一个报文的确认音讯,就示意说这个音讯之前的所有音讯都曾经收到了确认音讯。通过累计确认,就能够大大减少确认报文的数量,以此来晋升网络的效率
文章内容概览 TCP协定简介TCP(Transmission Control Protocol:传输控制协议)TCP协定是计算机网络中非常复杂的一个协定TCP数据报所处的地位 TCP协定的特点TCP是面向连贯的协定在上一篇UDP协定详解中有对面向连贯进行了介绍,也就是在通信之前会先建设连贯 TCP的一个连贯有两端(点对点通信)A和B要进行电话通信,那么A和B就是两个端点 TCP提供牢靠的传输服务后边会对TCP实现牢靠的传输做具体的介绍 TCP协定提供全双工的通信全双工在网络概览)中有提到,指的就是一条通信线路,单方都能够同时发送和接管音讯。也就是说,如果两台计算机建设了TCP连贯,那么这两台计算机都能够同时向连贯中发送数据或接收数据 TCP是面向字节流的协定上篇文章在介绍UDP的时候晓得,UDP是面向用户数据报的协定。那么数据报和字节流的区别是什么? 流指的是流入过程或流出过程的字节序列。传输层的数据都是由应用层传输下来的,是一块残缺的数据。然而在TCP中,它不把应用层传输下来的数据看做是一块残缺的数据,而是把它看做一整串的字节流。TCP不是面向一整块数据来进行解决的,而是面向一个一个的字节来进行解决的。所以,TCP就可能取出一块数据中的某一段来进行传输,而剩下的数据,再把它放到第二个TCP报文中进行传输。所以,在应用TCP协定进行数据传输时,可能对数据进行合并,也可能进行拆分,以实现更好的传输 TCP协定头部 16为的源端口和目标端口是和UDP中的一样的 序号:序号一共占用32个比特位,所以它能够示意的范畴是0~2^32。因为TCP协定是面向字节流的,因而,每一个字节都有一个惟一的序号,这个序号就是用来标记传输的每一个字节的(一个字节一个序号)。这里的序号所代表的就是,这个TCP报文所传输的数据的第一个字节序号是什么 确认号:确认号所示意的范畴也是0~2^32,也是一个字节一个确认号。确认号示意的就是期待收到数据的首字节序号是什么 假如有一个TCP数据报,它的序号是501,数据的长度是100个字节。某个计算机收到了这个数据,确认号就会说,501到600这个范畴的数据,我都曾经收到了,而后冀望下一个传递给我的数据的确认号是601。所以确认号示意的就是,我冀望下一个数据报里数据的首字节序号。确认号是配合序号一起来应用的。 如果某一个TCP数据报的数据确认号是N,则示意N-1序号的数据都曾经收到 数据偏移: 占4个比特位(0~15),单位是32位字,也就是说,每一个偏移都能够示意4个字节的偏移它示意的就是实在的TCP数据,它偏离首部的间隔(这个次要是因为TCP选项这个块的内容所导致的,因为咱们并不知道这个选项的内容有多少,所以须要存储数据偏移)TCP头部有固定长度的20个字节(至多),那TCP首部最长有多少个字节? 此时能够对数据偏移进行一个简略的计算,以失去TCP首部最长有多少因为数据偏移最大示意的是15,每一个偏移都能够示意4个字节。所以最大偏移是15乘4等于60字节,所以TCP首部的长度范畴就是20~60字节 保留字段:保留着的,还没有应用的 TCP标记:占6个比特位,每位都有不同的含意,他们别离是:在后边理解TCP的三次握手和四次挥手,都会用到这里的标记位 窗口:占16个比特位,0~2^16-1。窗口的意思就是,指明容许对方发送的数据量。如果窗口大小为1000,则表明对方能够发送1000个字节 也能够联合窗口和确认号进行一个运算,假如确认号为501,窗口的值为1000,也就是说501~1500之间字节的数据是能够接管的 校验和:和UDP里边的校验和意思是一样的,能够看一下我上一篇介绍UDP的文章 紧急指针:这个只有以后边TCP标记位的URG=1时才启用,它示意紧急数据位于报文的地位。对于TCP报文来说,是有局部的紧急数据能够保留在数据报中的,等对方接管到的时候,就能够通过紧急指针来找到紧急数据所位于数据报的地位 TCP选项:它是可选的,从前边通过对数据偏移的计算能够晓得,TCP选项最多有40个字节。这个选项次要是为了反对协定将来的倒退所应用的(反对将来的拓展)
文章内容概览 链路状态(LS)协定链路状态协定特点特点一:向所有的路由器发送音讯(一传十,十传百,最终把消息传递到整个网络中去。在前边的文章中有说到rip协定,rip协定只和相邻的路由器替换信息) 特点二:这个音讯形容该路由器与相邻路由器的链路状态(链路状态就包含与相邻路由器的间隔、时延、带宽等,这些能够形容链路状态的一些指标,这些指标能够更加主观的形容该路由器和相邻路由器的链路状态)特点三:只有链路状态发生变化时,才发送更新音讯(这个也是和RIP协定是不一样的,RIP协定是每隔30s替换路由信息)RIP协定毛病前边文章中有提到RIP协定的毛病 轻易置信“隔壁老王”(不论是B还是C,如果说B失去了C的路由信息,它将会无条件的置信C。同样,如果是C,他也会无条件置信B,因而就会导致循环,直到跳数为16,才发现不可达)“本人不思考”、“视线不够”(对于RIP协定,每一个路由器只看到相邻路由的信息,看不到更远的信息)比照上边介绍的链路状态协定,能够发现该协定没有RIP协定的这些毛病 OSPF协定过程OSPF(Open Shortest Path First:凋谢最短门路优先)OSPF协定的外围是Dijkstra算法OSPF协定是链路状态协定的一种实现(也就是链路状态协定定义了一个规定,OSPF协定实现了这个规定)既然OSPF协定是实现了链路状态协定的规定,那么逐个看一下每个规定的具体过程 (1)向所有的路由器发送音讯 那么每个路由器就能够获取网络中的所有音讯,通过这个所有的音讯,那么每个路由器就能够失去网络的残缺拓扑。因为每个路由器都可能失去网络的残缺拓扑,因而每个路由器的音讯都是残缺的,对于网络的残缺拓扑,有一个官网的称说叫:链路状态数据库,它保留的就是网络中的每一跳的状态是什么样的。链路状态数据库是全网统一的,这个是因为每一个音讯都会播送到网络中的每一个路由器。因为每一个路由器都有残缺的网络拓扑,所以每一个路由器都能够运行迪杰斯特拉算法,通过该算法,每一个路由器本人就可能找到本身到某一个顶点的最短门路是什么。因而,链路状态协定的【向所有的路由器发送音讯】这一特点,使得Dijkstra算法能够胜利在每个路由器中运行起来 (2)音讯形容该路由器与相邻路由器的链路状态 上边也提到了,链路状态包含:与相邻路由器的间隔、时延、带宽等等,这就使得OSPF协定更加的主观、更加先进。RIP协定只能依据跳数这个指标去形容连贯的品质 (3)只有链路状态发生变化时,才发送更新音讯 这个也是使得OSPF协定能够比RIP更快的收敛,因为它缩小了数据的替换,整个过程会更加通顺 OSPF协定的五种音讯类型(1)问候音讯 问候音讯的音讯长度十分短,这个音讯次要是保护该路由到相邻路由器的可达性。在理论的运行中,每一个路由器,都会给相邻的路由器发送问候音讯,以此确认它与相邻路由器是否真正可达 (2)链路状态数据库形容信息 这个音讯是用于向相邻路由器发送本人的链路状态数据库的所有链路状态的简略音讯 (3)链路状态申请信息 该类型的音讯是为了向相邻路由器申请链路状态数据库 (4)链路状态更新信息 这个音讯是OSPF协定中十分频繁的一个音讯,对于状态更新音讯,每个路由器都会播送到整个网络中去 (5)链路状态确认音讯 对链路状态更新的确认 OSPF协定的整个过程首先路由器接入网络,接入网络之后,路由器向相邻路由器收回问候音讯,以此确认可达性。确认之后,他们就能够互相的交换以后的链路状态信息,他们首先会收回数据库链路形容信息,向隔壁路由器介绍本人的链路状态的简要音讯,而后对它们不同的链路状态进行同步,以此达到统一的状态。与相邻路由器达到统一的状态是不够的,它们还须要与网络中的其它路由器达到统一的状态。因而,此时路由器会播送更新的音讯到网络中,以及接管更新,以此来更新本地的链路状态数据库,这个就是OSPF协定的整个过程 比照RIP协定和OSPF协定
敖丙github后端知识点汇合:https://github.com/AobingJava...java3y知识点汇合:https://segmentfault.com/u/ja...https://github.com/ZhongFuChe...计算机网络https://segmentfault.com/a/11... 操作系统https://segmentfault.com/a/11... 数据结构与算法https://segmentfault.com/a/11... java根底https://segmentfault.com/a/11... mysql数据库https://segmentfault.com/a/11... 我的项目相干https://segmentfault.com/a/11...
1. 计算机网络体系结构https://www.cnblogs.com/pytho...https://www.cnblogs.com/blkne...https://blog.csdn.net/weixin_... 2. TCP通信过程,3次握手,4次挥手https://segmentfault.com/a/11...https://www.cnblogs.com/bj-mr...https://blog.csdn.net/a519640...
a. TCP报文段、数据包、帧关系一、当PC4向PC3发送文件 数据封装与数据解封过程图 二、PC4各层数据封装文件在传输层文件被分成多个数据段,每个数据段加上TCP首部(次要蕴含目标端口,源端口),变成TCP报文段。 网络层将TCP报文段加上IP数据包首部(次要蕴含目标IP,源IP),变成数据包。 数据链路层将数据包加上指标MAC与源MAC、FCS、变成MAC帧。 物理层将帧变成比特流,传递给PC3物理层。 三、PC3各层数据解封物理层承受比特流,数据链路层将比特流辨认为帧,网络层将帧解封为数据包,传输层将数据包解封为TCP报文段。多个TCP报文段最终在应用层、表示层、会话层变成文件。 b. 图解TCP报文段、数据包、帧的组成和生成一、TCP报文段TCP报文段在传输层生成,文件数据在传输层被切割为不同的数据段,每个数据段加TCP报文段首部,变成TCP报文段。 TCP报文段首部地址信息:源端口与目标端口。话不多说,见图: TCP报文段数据段加上TCP首部便成了TCP报文段。 二、数据包数据包在网络层生成,传输层的TCP报文段传送给网络层,TCP报文段加上IP首部,便成了数据包。如图: 数据包生成过程 IP数据包组成,首部格局地址信息:源地址与目标地址,即源IP与目标IP。 三、MAC帧MAC帧在数据链路层生成,由网络层传送过去的数据包加上源MAC与目标MAC、类型、FCS,变成MAC帧。 该图 地址信息:源地址与目标地址即源MAC地址与目标MAC地址 四、数据比特流最终各个帧在物理层变成数据比特流传送给指标。
a. TCP报文段、数据包、帧关系一、当PC4向PC3发送文件 数据封装与数据解封过程图 二、PC4各层数据封装文件在传输层文件被分成多个数据段,每个数据段加上TCP首部(次要蕴含目标端口,源端口),变成TCP报文段。 网络层将TCP报文段加上IP数据包首部(次要蕴含目标IP,源IP),变成数据包。 数据链路层将数据包加上指标MAC与源MAC、FCS、变成MAC帧。 物理层将帧变成比特流,传递给PC3物理层。 三、PC3各层数据解封物理层承受比特流,数据链路层将比特流辨认为帧,网络层将帧解封为数据包,传输层将数据包解封为TCP报文段。多个TCP报文段最终在应用层、表示层、会话层变成文件。 b. 图解TCP报文段、数据包、帧的组成和生成一、TCP报文段TCP报文段在传输层生成,文件数据在传输层被切割为不同的数据段,每个数据段加TCP报文段首部,变成TCP报文段。 TCP报文段首部地址信息:源端口与目标端口。话不多说,见图: TCP报文段数据段加上TCP首部便成了TCP报文段。 二、数据包数据包在网络层生成,传输层的TCP报文段传送给网络层,TCP报文段加上IP首部,便成了数据包。如图: 数据包生成过程 IP数据包组成,首部格局地址信息:源地址与目标地址,即源IP与目标IP。 三、MAC帧MAC帧在数据链路层生成,由网络层传送过去的数据包加上源MAC与目标MAC、类型、FCS,变成MAC帧。 该图 地址信息:源地址与目标地址即源MAC地址与目标MAC地址 四、数据比特流最终各个帧在物理层变成数据比特流传送给指标。
文章内容概览 迪杰斯特拉算法Dijkstra(迪杰斯特拉)算法是驰名的图论算法Dijkstra算法解决有权图从一个节点到其它节点的最短门路问题特点:“以终点为核心,向外层层扩大”最短门路问题假如有下图这样的一个网络,该网络有A、B、C、D、E、F这几个节点和若干条边,每条边都有相应的间隔。假如此时要求A到E的最短门路 下边列出由A到E的所有可能的门路以及门路长度 A->B->C->E = 13A->C->E = 11A->D->C->E =13A->D->E = 9A->F->E = 10从列出的后果来看,最短的门路是A->D->E这条,间隔是9。这是人为的去查找的,然而咱们是须要将其转换成程序语言来解决求最短门路问题 先用文字介绍一下该算法的整个过程,而后再通过例子来解释每个过程 迪杰斯特拉算法迪杰斯特拉算法过程形容 初始化两个汇合(S,U)(S为只有初始顶点点A的汇合,U为其它顶点的汇合)如果U不为空,对U汇合顶点进行间隔的排序,并取出间隔A最近的一个顶点D将顶点D放入S汇合更新通过顶点D达到U汇合所有点的间隔(如果间隔更小则更新,否则不更新)反复步骤2直到U汇合为空,整个算法过程实现通过下边的例子来了解上边的过程 因为要求A到E的最短距离,所以,首先将A纳入S汇合,且A到A的间隔为0。而后其它顶点U的汇合就是B、C、D、E、F,并计算A到这几个顶点的间隔,从图中能够看进去 因为汇合U不为空,所以对汇合U中,A到各个顶点的间隔进行排序,找到到A的间隔最短的顶点,将其放入汇合S。从图中能够看进去,A到顶点B的间隔是最小的,所以将其放入汇合S 而后应该计算:A通过B达到其余各个顶点的间隔 因为晓得B到C的间隔为5,所以A通过B达到C的间隔为:A->B->C = 6+5 = 11,因为原来汇合U中A到C的间隔为9,9 < 11,所以,不须要更新到汇合U中,而后就失去下边这样的后果 而后再对U进行判断,发现不为空。所以对U中A到各个顶点的间隔再进行排序,发现A到F的间隔是最短的,此时就把到F放入到S汇合中。而后此时计算A通过F达到各个顶点的间隔。发现A通过F达到E的间隔为10,此时,更新U中A到顶点E的间隔(原来这个间隔是不晓得的),然就失去如下后果 而后就是反复上边的步骤,发现U中距离最短的是D,那么就把D放入到汇合S,而后计算A通过D达到各个顶点的间隔,发现A通过D达到C的间隔为11,A通过D达到E的间隔是9。此时发现A通过D达到C的间隔大于U中的A到C的间隔9,所以不替换U中A到C的间隔。而后发现A通过D达到E的间隔9,小于U中A到E的间隔10,所以,替换掉U中A到E的值,那么就失去如下后果 而后汇合U中还剩两个元素(两个间隔值雷同,轻易选一个放入汇合S),接着反复上边的步骤,直到汇合U为空。最终失去如下后果 失去的S汇合中的间隔就是A达到各个顶点的最短距离,以上便是迪杰斯特拉算法的整个过程。有趣味的话也能够推一个B到各个顶点的最短距离 在疾速变动的技术中寻找不变,才是一个技术人的外围竞争力。知行合一,实践联合实际
文章内容概览 外部网关路由协定之RIP协定间隔矢量(DV)算法在介绍RIP协定之前,先理解一下DV算法,因为该协定是通过DV算法进行实现的 该算法是运行在图中的 每一个节点应用两个向量Di和SiDi形容的是以后节点到别的节点的间隔Si形容的是以后节点到别的节点的下一个节点对于该算法,它是如何运行的? 每一个节点和相邻的节点替换向量Di和Si的信息每一个节点依据替换的信息,更新本人的节点信息 Di1示意从节点i到节点1的间隔Si1示意从节点i到节点1的下一个节点n示意节点的数量对于DV算法,他其实就是计算D的间隔的最小值。比方Dij的最小值就等于:min(Dix+Dxj)。通过一个例子来了解这个DV算法 图中有A、B、C、D、E、F这六个顶点和若干条边,对于这六个节点,就有左边这样的Di和Si的间隔矢量信息。对于Di,它有六个元素,别离是Dia、Dib...到Dif,他示意的是,i这个节点到A、B、C、D、E、F这六个节点的间隔。对于Si,它也有六个元素,别离是Sia、Sib...到Sif,他示意的是,i这个节点到A、B、C、D、E、F这六个节点的下一个节点是什么 下边会以A这个节点为例来展现DV算法是如何运行的,也就是求Da和Sa这两个向量。假如A的间隔矢量信息(Da)如下 它示意的是A到其它的每个节点的间隔别离为右侧列的值。在上边介绍DV算法时有提到,该算法会与相邻的节点替换Da和Sa的信息。假如A收到了来自B、C、D、F这四个相邻节点的信息,并且在接管到间隔矢量信息的时候,晓得了A到各个相邻节点的直线间隔是多少 为了更加不便的理解DV的过程,将A的间隔矢量信息和A到其它四个相邻节点的矢量信息合在一起 图中的每一列示意的是某一个节点达到A、B、C、D、E、F节点的间隔是什么 可能大家对表中的数据有疑难,为什么A到B的间隔是11,而B到A的间隔却是9。这个是因为里边的间隔矢量信息并不是最新的。比如说,A到B的间隔可能是通过A->C->B所失去的,因而这里A到B的间隔可能是11。而B到A的间隔可能是通过B->C->D->A所失去的,所以这里A到B的间隔矢量信息能够和B到A的间隔矢量信息不一样 列出A的S向量,默认初始化为空,S向量示意的是A到其它几个节点的下一个节点是什么 假如此时A在和B这个节点替换信息,A就失去了B这个节点的信息,也就是失去了B到每一个节点的间隔 A失去这些信息之后,首先会进行运算。因为A和B是间接进行通信的,所以A晓得A到B的间隔是什么。而后会通过从B那里失去的B到其它节点的间隔,来计算A到其它节点的间隔 A->B = 6A->B->C = 6+11 = 17A->B->D = 6+7 = 13A->B->E = 6+17 = 23A->B->F = 6+11 = 17以上就是A失去B的数据之后进行的运算,而后他会把失去的这些数据和本人的间隔矢量进行比拟,如果比本人到其它节点的间隔更小,那么它就会把它填充到本人的间隔矢量中。所以拿到B的数据,通过计算之后,发现A到B的间隔6,比本人原来的11小,所以把本人原来的11,替换成6;而后发现自己原来A到F的间隔为17,和计算之后A到F的间隔17相等,那么A也会进行替换。替换为完之后,A就会把相应的下一个节点设为B。以上就是A获取到B的信息之后的整个过程,如下图 接下来A又接管到了节点C的信息,这其中就包含C到A、B、C、D、E、F的间隔。A接管到C的信息之后,也会进行和之前一样的运算 A->B->C = 9+9 = 18A->C = 9A->C->D = 9+8 =17A->C->E = 9+11 = 20A->C->F = 9+10 = 19通过计算之后,也会和本人现有的间隔矢量进行比拟。比方A->C的间隔为9,要比A之前到C的间隔12小,所以就会用9把原来的12替换掉,并且对应的S会填充为C,后边的同理,如图: A和D、F替换信息的过程也是和上边截然不同的。当A和每一个相邻的节点替换完信息之后,失去如下的后果 以上就是DV算法的整个过程,回看前边介绍的DV算法,再来了解它的定义会好明确很多 每一个节点应用两个向量Di和SiDi形容的是以后节点到别的节点的间隔Si形容的是以后节点到别的节点的下一个节点每一个节点和相邻的节点替换向量Di和Si的信息每一个节点依据替换的信息,更新本人的节点信息RIP协定的过程RIP(Routing Information ProtoCol)协定RIP协定是应用DV算法的一种路由协定RIP协定把网络的跳数(hop)作为DV算法的间隔(其实就是跳数越多,间隔就越长)RIP协定每隔30s替换一次路由信息(这里的路由信息就蕴含Di和Si)RIP协定认为跳数>15的路由则为不可达路由应用RIP协定的路由器 路由器会初始化路由信息(两个向量Di和Si)依据相邻路由器X发过来的信息,对信息的内容进行批改(下一跳地址设为X,所有间隔加1。意思就是,通过X,它能够达到X所发过来信息的每一个节点,只须要将间隔加1就能够了)批改了之后,首先检索本地路由,将信息中新的路由插入到路由表里边(因为有些目的地,本地路由表里边可能是没有的)检索本地路由,对于下一跳为X的,更新为批改后的信息检索本地路由,比照雷同目的地的间隔,如果新信息的间隔更小,则更新本地路由表如果3分钟没有收到相邻的路由信息,则把相邻的路由设置为不可达(也就是设置为16跳)通过例子来了解上边的形容。假如路由中初始化的信息如下最右边局部: 第一步:检索本地路由,将信息中新的路由插入到路由表里边 初始化路由表中的信息,示意路由到D的间隔为2,并且其下一跳地址为A。假如此时收到来自路由器X发来的信息。信息有达到A的间隔4,下一跳地址为C。达到B的间隔为2,下一跳地址为C。收到这些信息之后,路由器会对本身信息进行批改,将所有的间隔都加一,并且将下一跳地址都设为X。接下来就会检索本地的路由,发现A、B都是原来路由里边没有的,所以会把A、B的信息插入到路由表中。就失去了更新之后的路由表 第二步:检索本地路由,对于下一跳为X的,更新为批改后的信息 假如初始化的路由信息如下最右边局部: 当初始路由器,收到两头的路由信息,该路由信息首先会进行批改,批改之后,就会依据接管到的路由信息对本身进行批改,因为这是最新的信息,所以会把原来的笼罩掉 第三步:检索本地路由,比照雷同目的地的间隔,如果新信息的间隔更小,则更新本地路由表 这一步其实就是前边介绍的DV算法过程,当初始路由收到另一个路由信息之后,另一个路由的信息先进行更新,而后和初始路由进行比照,如果新信息的间隔更小,则更新本地路由表 ...
文章内容概览 前边的文章中介绍到 IP地址长度为32位,常分成4个8位IP地址罕用点分十进制来示意(0~255.0~255.0~255.0~255)32位的IP地址一共能够示意42亿个IP,如果没有一个正当的调配IP的形式,整个调配是十分麻烦的。因而须要对IP地址进行一个正当的布局和调配分类的IP地址将一个IP地址分为两个局部,别离是网络号和主机号。这两局部加起来是32位。依据网络号和主机号长度的不同,又能够将IP地址分为以下几类: 分为A、B、C这三类之后,就能够更好的去调配这42亿的IP地址了 A类地址的网络号为8位,且首位是0B类地址的网络号为16位,并且前两位是10C地址的网络号为24位,并且前三位是110晓得了每一类的IP地址网络号和主机号的位数,就能够计算出最小网络号、最大网络号以及最小主机号和最大主机号。然而这里边有一些非凡的主机号是须要排除的 非凡的主机号主机号全是0,示意以后的网络段,不可调配为特定主机(如:1.0.0.0)主机号全是1,示意播送地址,向以后网络段所有主机发消息,也不能够调配给特定的主机(如:1.255.255.255)非凡的网络号A类地址网络段全为0(0000000)示意非凡网络,这个网络段是不能间接应用的A类地址网络段后7位全为1(01111111)示意回环地址,不能间接应用B类地址网络段全为0(10000000.0000000:128.0)是不可应用的C类地址网络段全为0(192.0.0)是不可应用的晓得了非凡主机号和非凡网络号之后,就能够对上边的表进行更加精确的形容 通过这个就能够简略的进行判断一个IP地址是哪一类的地址了 125.125.3.60 转化为2进制是 01111101 因为首位是0,所以是A类IP地址163.70.31.23 转化为2进制是 10100011 前两位是10,所以是B类IP地址210.36.127.11 转化为2进制是 11010010 前三位是110,所以是C类IP地址回环地址127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何一个有类别的地址。它代表设施的本地虚构接口,所以默认被看做是永远不会宕掉的接口。在Windows操作系统中也有类似的定义,所以通常在装置网卡前就能够ping通这个本地回环地址。个别都会用来查看本地网络协议、根本数据接口等是否失常 下边其实还有两个分类的IP地址,D类和E类,因为他们个别是非凡应用的,所以不做具体理解 划分子网在理解划分子网之前,先看一个问题:某公司领有100名员工,每人装备一台计算机,请问该公司应该申请哪种网段? 看一下上边IP地址分类的表格 能够看出,申请C类是最节约IP地址的,因为C类所领有的主机号最多254个,所以应该申请C类的 那么此时假如该公司有256名员工,每人装备一台计算机,请问该公司应该申请哪种网段?这时就发现,申请C类地址曾经不够用了。所以,至多应该申请B类地址能力满足该公司的需要。然而B最多可领有2的16次方减2个主机号,这里只应用了256个,这就造成了很大的地址空间节约。因为总共有42亿个IP地址,如果每个公司都这样去节约,那么IP将会不够用。因而在IP分类的根底上,提出了子网划分的概念 在前边介绍到,一个IP由网络号和主机号两个局部组成。在子网划分这块,会将一个IP分成三个局部,别离是网络号、子网号、主机号 子网号是如何进行工作的假如在上边的例子中,调配了C类地址193.10.10.0,对于这个C类地址有254个主机号。如果对这个C类地址进行子网划分的话,就能够把第25位看做是子网号(11000001.00001010.00001010.00000000),那么就能够分成1和0这两个子网号。那么0这个子网号就能够示意:193.10.10.0 ~ 193.10.10.127这个网络段。1这个子网就能够示意:193.10.10.128 ~ 193.10.10.255这个网络段,这样就把原来的C类地址分成了两个子网 如果A、B、C类的地址都进行很多的子网划分的话,将会导致有十分多的子网,那么此时如何疾速的判断某一个IP是属于哪一个网络号的?这个时候就提出了一个新的概念:子网掩码 子网掩码子网掩码和IP地址一样,都是32位子网掩码由间断的0和间断的1组成的某一个子网的子网掩码,具备网路号位数个间断的1比方,对于A类地址,它的网络号有8位,主机号24位,那么对于A类地址,它的子网掩码就是由8个1和24个0所组成,也就是255.0.0.0。同理,B类地址的子网掩码就是由16个1和16个0所组成,也就是255.255.0.0 上边对C类地址进行了子网的划分,将其划分为0和1这两个子网,那么对于这个子网,它的子网掩码就是由25个1和7个0所组成的,那么这个子网掩码的点分十进制就是255.255.255.128 子网掩码是如何进行疾速的子网判断的假如有193.10.10.6这个IP,首先能够晓得它的子网掩码为255.255.255.128,而后将他们的二进制都示意进去,将他们的每一位进行“与”运算,会失去如下后果 能够看到,计算的后果就是193.10.10.0,这个就是该IP的子网号 再假如有193.10.10.129这个IP,它的子网掩码为255.255.255.128,而后将他们的二进制都示意进去,将他们的每一位进行“与”运算,会失去如下后果 能够看到,计算的后果就是193.10.10.128,这个就是该IP的子网号 所以,通过子网掩码和IP进行与运算,就能够疾速失去该IP所属的子网号 无分类编址CIDR因为子网的划分还是比拟的简单,先要晓得网络号,而后进行子网号的划分。咱们是心愿有更好、更简便的划分,去应用IP地址,因而就是提出了,无分类编址CIDR CIDR中没有A、B、C类网络号和子网划分的概念CIDR将网络前缀雷同的IP地址称为一个“CIDR地址块”因而,对于CIDR,它的IP地址分为两个局部:网络前缀和主机号。网络前缀并不是和前边的网络号一样,他们最大的不同就是,网络前缀的位数是任意的 斜线记法CIDR在记录的时候,通常应用斜线记法来记录相干的IP地址,如:192.10.10.129/25 示意它的网络前缀有25位,那么主机号就是七位(11000001.00001010.00001010.10000001)。除了25以外,还有很多 还是最上边的那个例子:某公司领有100名员工,每人装备一台计算机,请问该公司应该申请哪种网段?如果应用CIDR这个记法来进行调配的话,就只须要给它调配一个网络前缀为25的IP网络号就能够了(/25) 假如该公司减少了100名员工,并且拆分成两个部门,此时如何进行IP的布局?这个时候其实能够为他们调配一个24位网络前缀的IP地址,而后对于每一个部门都调配25位网络前缀的IP地址。这里就有小型网络和大型网络的概念了,在CIDR中,小型网络通常称为子网,对于那个网络前缀为24位的,在CIRDR中,称为超网 如果将该例子拓展一下,拓展为某一个城市。如果对一个城市,应用CIDR进行网络布局,可能给这个城市调配网络前缀为18的网络地址,给该城市中的公司调配网络前缀为20的网络地址,对于公司部门,则调配网络前缀为24的网络地址 在疾速变动的技术中寻找不变,才是一个技术人的外围竞争力。知行合一,实践联合实际
文章内容概览 虚构互联网络从上一篇文章最初提到的一个问题来引出虚构互联网络 对这个网络拓扑,上篇文章中提出了一个十分重要的问题:计算机A如何跨设施传输数据到计算机C? 其实能够把这个小的网络拓扑放大 在这个大型网络拓扑中,计算机A如何将数据传输给计算机B,这个的性质和上边那个简略的网络拓扑的性质是一样的。这个网络其实有很多的门路能够把计算机A的数据传输给计算机B,比方: 计算机A的数据先通过中型网络、大型网络、中型网络、小型网络,而后达到计算机B。除了上图的这条门路以外,还能够画出别的很多门路。通过这张网络拓扑能够晓得,A的传输门路有很多条。其实这些网络门路,对于使用者,是不须要关怀的,也就是说咱们不关怀网络是怎么连贯的,也不关怀数据包是怎么走的,这个是由网络层所解决的。网络层提出了一个十分重要的概念,虚构互联网络 虚构互联网络理论的计算机网络是盘根错节的不同的物理设施通过应用IP协定,就屏蔽了物理网络之间的差别当网络中的主机应用IP协定相连接时,则无需关注网络细节,只需关怀端到端的连贯也就是说,上边提到的简单的网络拓扑,其实咱们不必关怀。只须要把两头的局部看做虚构的互联网络即可。如下图,计算机A通过网络连接到一个虚构的互联网络中,计算机B也连贯到了这个虚构的互联网络中。那么计算机A只须要将数据发送到虚构的互联网络中,这个虚构的互联网络就能够解决数据传输的问题,并且将其精确的传输到计算机B。这个就是虚构互联网络的概念 IP协定对于网络层,IP协定是其中一个十分重要的协定IP协定使得简单的理论网络变为一个虚构互联的网络(也就是咱们只须要将终端设备连贯到这个网络中去即可,并不需要关怀里边理论的简单网络)IP协定使得网络层能够屏蔽底层细节而专一网络层的数据转发(如果单从网络层去看,咱们是不必关怀数据包是通过海底电缆还是通过无线WiFi传输到目标计算机的)IP协定解决了在虚构网络中数据报传输门路的问题在上一篇的概述篇中提到了MAC地址,它是每一个网络设备或网卡的身份证,在数据链路层,只有领有了这个MAC地址,就能够进行数据帧的传输了。MAC地址是48位,应用十六进制来示意。咱们能够将MAC地址开展成二进制的格局 在网络层,同样也有一个地址的概念,这个地址称之为IP地址。IP地址总共有32位,个别用点分十进制示意。也能够开展成二进制的格局 IP地址对于网络层来说,和MAC地址对于数据链路层来说,性能是相似的。这里的IP地址是每一个网络设备惟一的一个身份,也就是对于网络层来说,每一个网络设备,它都有一个惟一的IP地址,通过这个IP地址就能够标识惟一的一个设施 MAC地址和IP地址不同之处 对于MAC地址,它是惟一的,并且是不可扭转的。因为网卡从一个中央挪到另外一个中央,这个MAC地址是不变的。然而IP地址不同,如果咱们的笔记本在家连贯WiFi的时候是IP地址A,当咱们把笔记本电脑拿到公司或咖啡馆,这个IP地址将会发生变化,因而,IP地址对于网络设备来说,它是可变的。也就是说,如果网络设备的网络环境变了,IP地址就会跟着变动 IP地址IP地址长度为32位,常分成4个8位IP地址常应用点分十进制来示意(0~255.0~255.0~255.0~255,通过计算能够晓得,最多能够示意2的32次方个IP地址,大略42亿)IP协定在理解IP协定之前,先看一下IP协定所处的一个地位。在物理层,它传输的是0、1这样的比特流;在数据链路层,传输的是数据帧,数据帧包含帧首部、帧尾部和“帧”数据,“帧”数据次要就是IP数据报。当初对IP数据报进行具体的分析,它将会分成IP首部和IP数据报的数据两个局部 要学习IP协定,IP协定的首部是十分重要的内容,后边也会重点介绍IP首部的信息。下边是IP首部的具体格局 从上图能够看出,IP首部中蕴含了十分多的信息,包含版本、协定、IP地址等。上边的每一行都是32个比特位,也就是4个字节,前边五行是必须存在的内容,第六行是可有可无的,第七行是IP数据。因而对IP首部来说,至多会有20个字节的长度 IP首部中每一部分的含意 版本:占4位,指的是IP协定的版本,通信单方的版本必须统一,以后支流版本是4,即IPv4,也有IPv6首部长度:占4位,最大数值为15,示意的是IP首部的长度,单位是“32位字”(4个字节),也就是IP首部最大长度为60字节服务类型:这个个别是不须要关怀的总长度:占16位,最大数值为65535,示意的是IP数据报总长度(IP首部+IP数据) (在前边介绍数据链路层的时候,也提到过一个长度。对于数据链路层的长度,称之为MTU,个别为1500字节。而IP数据报的最大长度有65535个字节,比MTU要大。如果真正传输的时候,如果呈现这种状况,数据链路层会对IP数据报进行分片,也就是将一个较长的IP数据报拆分成多个数据帧来进行传输)标识:协定外部所应用的,无需关怀标记:标记IP报文是否能够进行分片片偏移:前边有提到,如果IP数据报的长度过长,会进行IP报文的分片,把一个IP报文拆分成多个数据帧进行数据链路层的传输。因而,如果拆分的话,就须要应用片偏移来记录以后的数据帧,保留的第几个偏移的IP数据TTL:占8位,表明IP数据报文在网络中的寿命,每通过一个设施(不论是路由器还是计算机),TTL减一,当TTL=0时,网络设备必须抛弃该报文(它解决的就是,当网络报文找不到起点的时候,防止网络报文在网络中有限的传输,以耗费带宽)协定:占8位,表明IP数据所携带的具体数据是什么协定的(如TCP、UDP等,一些协定对应的值,可参考下图)校验和:占16位,校验IP首部是否有出错(接管方接管到IP首部之后也会进行校验,如果有错,则间接抛弃)源IP地址:发送IP数据报的网络设备的IP地址目标IP地址:IP数据报要达到的目标网络设备的IP地址一些协定所对应的值 这些协定的数据,应用IP协定进行传输的时候,都会把IP首部中的协定赋不同的值。能够看到里边也有IP协定对应的值,也就是说,对于IP协定来说,IP协定的数据还能够持续封装IP数据,也就是IP数据中的IP数据,在一些非凡的场合,也有它的作用 在疾速变动的技术中寻找不变,才是一个技术人的外围竞争力。知行合一,实践联合实际
文章内容概览 理解计算机网络及其分类什么是计算机网络计算机网络次要由一些通用的、可编程的硬件互联而成,通过这些硬件,能够传送不同类型的数据,并且能够反对宽泛和日益增长的利用 计算机网络不仅仅是软件的概念,它还蕴含硬件设施(网卡、网线、路由器)计算机网络不仅仅是信息通信,还能够反对宽泛的利用计算机网络的分类1、依照网络作用的范畴,能够将计算机网络分为 广域网(WAN)城域网(MAN)局域网(LAN) 2、依照网络作用的使用者,能够将计算机网络分为 专用网络(所有违心付费、或者违心退出的,都能够退出的网络)专用网络(某些部门,或者某些人,为了满足非凡的业务需要,而建设起来的网络。如:军队、铁路局、银行、公司,他们都有本人的专用网络)计算机网络倒退简史互联网的倒退历史互联网的倒退历史有三个阶段: 第一阶段:单个网络ARPANET这个阶段次要是一些计算机通过交换机进行连贯,这个时候计算机通过连贯交换机,就能够间接实现信息的替换,并且连贯的计算机不多 第二阶段:三级构造互联网这个阶段次要连贯的是全美国次要的一些学校、研究所、实验室等领有计算机的中央 第三阶段:多层次ISP互联网ISP(Internet Service Provider):网络服务提供商(中国电信、中国联通、中国移动都是中国驰名的网络服务提供商) 顶级的是骨干ISP,这里边就蕴含了上边提到的三大网络服务提供商。中国的骨干ISP能够连贯美国、澳洲、欧洲的骨干ISP。骨干ISP下边是地区ISP,比如说挪动网络在中国叫中国移动,在北京叫北京挪动、在上海叫上海挪动,这个就属于地区ISP,地区ISP次要就是负责地区的网络服务的提供 能够通过这个网站看到国内互联网的线路:https://live.infrapedia.com 中国互联网的倒退简史中国互联网的倒退也能够分为三个阶段: 随着中国互联网的倒退,中国也建设了多个专用的计算机网络,能够进行国内的信息替换,其中有五个公用计算机网络是规模最大的 中国电信互联网(CHINANET)中国联通互联网(UNINET)中国移动互联网(CMNET)中国教育与科研计算机网(CERNET)中国科学技术网(CSTNET)咱们出国的流量,次要也是通过这五个网络来进行国外的信息拜访的。除了国家科研技术的参加,民间企业也对互联网奉献很大,其中就蕴含出名的企业家 1996年,张朝阳创立搜狐1997年,丁磊创立网易1998年,王志东创立新浪1998年,马化腾,张志东创立腾讯1999年,马云创立阿里巴巴2000年,李彦宏创立百度这些事迹也是推动了中国互联网的倒退 计算机网络的层次结构层次结构设计的根本准则在理解计算机层次结构设计的根本准则之前,先理解一下,为什么计算机网络须要应用层次结构的设计 假如有A、B两台计算机,他们通过计算机网络进行连贯。能够设想一下计算机网络在这里边次要是解决了什么问题 保障数据通路顺畅辨认目标计算机目标计算机状态数据是否谬误计算机网络须要解决的问题是繁多而简单的,因而计算机网络就采纳了分层去实现不同的性能 看一个对于古代咱们应用网络的一个层次结构的例子 层次结构设计的根本准则各层之间是互相独立的:某一层并不需要晓得它的上、上层是怎么实现的,它仅仅须要晓得,该层是怎么通过接口来进行服务的提供的。层与层之间耦合度是很低的每一层有足够的灵活性:因为计算机网络是一直倒退的,因而设计每一层的时候就要求有足够的灵活性,使得每一层能够应答将来的一些变动各层之间齐全解耦:也就是某一层的上上层发生变化,不影响以后层的稳固(尽管这是计算机档次设计的准则,其实如果咱们在设计一个比拟宏大的零碎的时候,齐全能够借鉴这些准则,这就是计算机底层的魅力吧)OSI七层模型计算机网络有七层模型,这个模型是由国际标准所定义的 OSI七层模型在制订的时候,是想成为寰球计算机都遵循的规范,而后促成寰球的计算机都能够沿用这个规范来不便的进行互联以及替换数据。而实际上,OSI在市场化过程中困难重重,因为在OSI制订规范进去的时候,TCP/IP模型在寰球范畴内胜利的运行了。因而OSI七层模型,只是取得了实践层面的研究成果,然而在市场化方面却没有胜利的推动。所以,OSI最终并没有成为广为应用的规范模型 OSI没有被市场所承受的几个起因OSI的专家不足理论教训(他们是基于实践进行设计的,不足理论生产环境的教训。知行合一,实践肯定要联合实际)OSI规范制订周期过长,按OSI规范生产的设施无奈及时进入市场OSI模型设计的并不合理一些性能在多层中反复呈现TCP/IP四层模型下边是OSI七层模型和TCP/IP四层模型的映射: 阐明:右侧为TCP/IP四层模型中,每一层所应用到的一些协定 TCP/IP四层模型的理论利用假如计算机A和B通过一个路由器连接起来了,计算机A会通过TCP/IP的四层和路由器进行通信,计算机A的数据会通过网络接口层、网络层来到路由器(在路由器中,达到的层面只有网络层和网络接口层)。路由器会将数据通过路由转发,转发给计算机B,计算机B通过由下到上的四层来接收数据。这个就是TCP/IP四层模型在进行收发数据的示例 除此之外,还能够通过分层的办法去了解不同的层面 古代互联网的网络拓扑理解网络拓扑能够帮忙咱们在脑海中造成一个形象的计算机网络,是有助于咱们往下学习的。对于古代互联网的网络拓扑次要分为两个局部 边缘局部外围局部边缘局部次要指的的是平时的用户能够间接接触的局部,比如说在家、在公司或者在商场所应用的网络,都是属于计算机网络的边缘局部(家里的手机、电脑、智能家电,通过有线或无线的形式连贯路由器,路由器连贯一个当地的网关,而后网关连贯到地区的ISP) 上边是一个家庭连网的一个网络拓扑,下边看一个企业的网络拓扑 外围局部外围局部次要是由地区ISP、骨干IS以及一些国内的路由器所组成 这些骨干ISP相互连接,并且通过国内路由器来与其它国家和地区的骨干ISP进行连贯,这些就属于互联网的外围局部。这其中有很多的海底电缆、跨地区电缆等通信设施,他们次要是由中国联通、中国电信进行铺设,他们所应用的一些设施是来自中国的华为,所以说华为在通信畛域是有肯定的位置的 上边是网络拓扑的外围局部和边缘局部的简略图例,如果将外围局部和边缘局部连接起来的话,整个网络拓扑是非常复杂的 尽管说在学习计算机网络的时候,须要对网络拓扑有肯定的理解,然而咱们在平时应用网络的时候,并不会感知到这些网络拓扑的存在。咱们不会晓得骨干ISP在哪里、也不会晓得地区ISP在哪里,甚至不晓得网关在哪里,咱们最多能够晓得的是接触较多的路由器,这个次要是因为平时咱们更多是从一个用户的角度去应用计算机网络的。如果咱们站在用户的角度去看互联网的话,更多的是一些模式,比方客户-服务器(C/S)模式 对于客户-服务器(C/S)模式,在互联网中,有很多的设施通过互联网进行连贯,然而咱们不须要感知互联网里边的细节。如果咱们要应用某一个服务时,间接从本人的PC发动申请,那么这个申请就会通过路由来到服务提供的中央,服务器收到申请之后,就会响应,本地的PC会收到应答,这个就是客户-服务器(C/S)模式。在客户寻求服务的时候,以及服务器端在提供服务的时候,都不须要感知网络里边的具体细节 计算机网络的性能指标理解网络的性能指标,有助于评估或判断网络的品质或者速度。在理解之前,先对罕用的丈量单位进行简略的理解(速率) 为什么电信拉的100M光纤,测试峰值速度只有12M每秒? 首先,因为网络罕用单位是Mbps100M/s = 100Mbps = 100Mbit/s由比特位换算到字节是有一个进制的,8个比特位等于1个字节,因而:100Mbit/s = (100/8)MB/s = 12.5MB/s时延时延能够细分为 发送时延排队时延流传时延解决时延发送时延次要是本机进行网络发送的时候,在本机所停留的工夫 发送时延 = 数据长度(bit) / 发送速率(bit/s)数据长度:是由用户所决定的,比方要下载一个100M的视频,这个100M就是数据的长度发送速率:是由网卡所决定的(性能越好的网卡,发送速率越快)流传时延流传时延 = 传输门路长度 / 流传速率(bit/s)传输门路长度:比方北京往上海发送数据,这个门路是比拟短的。如果北京往美国发送数据,这些数据必须要通过海底电缆能力达到美国,这个传输门路就很长流传速率:这个受限于传输介质(如铜线、光纤)排队时延数据包在网络设备中期待被解决的工夫 ...
自定义报头协议在学习过计算机网络的课程,我们知道刚开始计算机都是单独脱机工作的,没有联网的情况下计算机的信息共享能力、运算能力都非常有限,后来诞生了计算机网络.有了就是那几网络,计算机 A 的信息和数据可以通过网络传递到计算机 B,同样计算机 A 可以获取到来自计算机 B 的数据. 但是不同计算机之间交换数据的时候就要通过网络来传输了.传输的过程中需要不同的计算机都遵循一定的规则来组装数据、传递信息,那么这样的规则就叫做协议.1. 协议计算机网络中有非常多协议,这些协议位于 OSI 的不同层中,比如 TCP/IP、UDP、SMTP、FTP 等. 协议之所以称为协议,是因为它具有约束效应,信息在端到端的传输过程中,同等层次之间通过使用同样的协议规则,这样发送方在该层次按照协议约定处理数据,接收方在该层次按照协议约定解析数据.成对存在. 2. 自定义协议在日常开发的时候处于某些原因可能需要自定义报文协议.这个协议是建立在 TCP 连接的基础上,比如,移动端在做 APM 的时候将功能拆分为2个模块,一个是 APM 监控模块、一个为了方便可拓展单独做了一个数据上报组件,具有动态下发上报策略的配置. 所以上报组件这里涉及到和服务端高效通信,所以客户端和服务端约定了一套自定义的报文协议,如下所示. PACKET 整体结构| HEAD | META | BATCH_PAYLOAD |PACKET::HEAD 结构| META_SIZE (2bytes unsigned int) | BATCH_COUNT (1 bytes unsigned int) | PAYLOAD_SIZE (4bytes unsigned int) | PAYLOAD_SIZE (4bytes unsigned int) | ... | PACKET::META 结构换行符分割的 JSON 字符串 crypto(deflate(JSONnJSON...)) PACKET::BATCH_PAYLOAD 结构JSON 体里每个字段的值都是 BASE64 编码的 ...
GET POST 区别一般来说,GET用于从服务器读取资源,POST 用于向服务器上传数据,比如上传表单GET 一般使用 URL 向服务器传递消息,URL 长度一般会受到 浏览器、中间结点、服务器等的限制,POST 则可以通过 body 来传递数据中间这些结点一般都会记录 URL 日志,但 body 一般很少记录通过 GET 获取的资源可以做缓存,因为多次请求的结果是一样的,post 则不幂等,不能随意多次执行,不能缓存,刷新浏览器时会被告知是否要重复提交订单但是,只要 Client 和 Server 达成共识,server 也可以接受 client 的 GET 请求携带 bodyAJAX 或者 restful 接口在实现的时候,都可以定义使用 post 来做 get 的事情,get 也可以携带 json body(但在 restful 中一般不会在 get 中携带 body),只要 CS 双方约定好即可安全性,刚才提到 post 比 get 稍微安全一点,但是其实可以忽略,只要使用明文的 http,都不安全参考资料GET 和 POST 到底有什么区别?
IP地址IP地址是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位标识符。层次化IP地址将32位的IP地址分为网络ID和主机ID。 IP地址分类,分为ABCDE类地址: 二进制与十进制的关系 从上图看出128以上的数字,二进制的第一位全为1,而128以前的数字,二进制的第一位全为0。 以A类地址为例,A类地址首位为0,那么开始IP范围是00000000-01111111(即十进制的0-127)以此类推B类地址以10开头,范围是10000000-10111111(二进制的128-191) 特殊的IP地址本地环回地址:127.0.0.1 windows设置IP自动获得后,没有被分配到IP地址而临时设置的IP地址:169.254.0.0 保留的私网地址 IP地址分为5类,其中A,B,C三类中各保留了3个区域作为私网地址,也就是局域网用的,私网地址不能在公网上出现,只能用在内部网路中,所有的路由器都不能发送目标地址为私网地址的数据报。A类地址:10.0.0.0~10.255.255.255B类地址:172.16.0.0 ~172.31.255.255C类地址:192.168.0.0~192.168.255.255 除此之外,有些IP地址被保留用于某些特殊目的,网络管理员不能将这些地址分配给结点: 整个IP地址全为1(255.255.255.255)的地址,它不被路由但会被送到相同物理网段上的所有主机。节点地址全为0的地址,特指某个网段比如192.168.10.0,指的是192.168.10.0网络地址。节点地址全为1的地址网络广播会被路由,并会发送到专门网络上的每台主机,IP地址大的网络字段定义这个网络,主机字段通常全为1,如192.168.10.255子网掩码子网掩码又叫网络掩码,地址掩码,它是一种用来指明一个IP地址的哪些位标识主机所在的子网以及哪些位标识的是主机的位掩码。子网掩码不能单独使用,必须结合IP地址使用。它只有一个作用,就是将某个IP地址划分为主机部分和网络部分。 例子1:假如有上面的AB机器,A主机想与B主机进行通信:首先A主机需要判断B主机的IP地址是不是跟自己是在同一个网段如何判断?拿自己的子网掩码255.255.255.0分别与AB主机的IP地址进行二进制的与运算,主机位归0,子网掩码为255.255.255.0,得出AB主机的网段是不同,分别是192.168.80.0和192.168.90.0。因为AB主机不在一个网段,所以A主机会把数据传给网关,让路由去转发。 例2: 依旧是AB主机,不过A主机的子网掩码为255.255.0.0,这样通信时进行与运算出来的网段都是192.168.0.0,因此A主机判断得出与B主机在同一个网段,A主机会直接把数据发给B主机而不通过路由。 子网掩码和IP地址进行与运算 二进制与运算,全1才为1,其他得0。因此网络位不变,主机为归零。 划分子网1、为什么要进行子网划分 减少网络流量,减少广播域优化网络性能,减少流量的效果体现便于管理,有效利用和规划IP2、子网划分需求 (1)确定需要的网络ID数: 每个LAN子网一个;每条广域网连接一个。(2)确定每个子网所需的主机数: 每个TCPIIP主机一个;每个路由器接口一个。(3)根据上述需求,确定如下内容: 一个用于整个网络的子网掩码;每个物理网段的唯一子网ID;每个子网的主机范围。子网需求引用自:CSDN博客:子网划分详解与子网划分实例精析 作者: 逃离地球的小小呆3、子网掩码计算
1、输入网址,浏览器检查网址格式,无效网址提示出错。比如bai du.com就是格式错误。 2、没有指明用哪个协议,浏览器默认使用http协议。 3、必须知道域名的IP地址才能发送给对应服务器。 4、通过DNS查询网址,查询顺序为(1)先查浏览器缓存(浏览器会保存一段时间)(2)再查系统缓存(3)再查路由器缓存(4)都没有查到,就去查ISP(互联网服务提供商)的DNS服务器缓存(5)最后就先后从根域名服务器(root)、.com顶级域名服务器、Facebook域名服务器中查找。 5、浏览器得到IP地址之后先于其进行三次握手,连接成功后发送HTTP(s)请求。请求头如下: GET http://facebook.com/ HTTP/1.1Accept: application/x-ms-application, image/jpeg, application/xaml+xml, [...]User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; [...]Accept-Encoding: gzip, deflateConnection: Keep-AliveHost: facebook.comCookie: datr=1265876274-[...]; locale=en_US; lsd=WW[...]; c_user=2101[...](1)我要获取的页面(2)我能接受的类型(3)操作系统+浏览器(4)支持的压缩方式(5)链接类型:长/短(6)主机域名(7)发送cookies 6、web服务器接收请求,决定使用哪个请求处理程序(接受请求并生成HTML) 7、请求处理程序获取请求头的参数和cookies,并更新信息 8、生成HTML压缩并返回 9、浏览器获取并显示,遇到其他需要的资源,再向服务器请求。 注:http状态码1** : 信息,服务器收到请求,需要请求者继续执行操作2** : 成功,操作被成功接收并处理3** : 重定向,需要进一步的操作来完成请求4** : 客户端错误5** : 服务器错误
一、概述1.1大致目的进一步了解HTTP和HTTPS了解对称加密和非对称加密的工作方式对HTTPS的加密有一个大概的了解对证书有一个初步的了解1.2加密方式在学习HTTPS加密方式之前,有必要了解几种常见的加密方式,如: 对称加密非对称加密二、对称加密2.1定义需要对加密和解密使用相同密钥的加密算法。所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。注意:对称加密也叫密钥加密 2.2密钥的形式采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 2.3优缺点优点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。缺点:对称加密,密钥管理的安全性很低,因为加密和解密都使用同一个密钥,在密钥的发送过程中,密钥可能被第三方截取,导致第三方也可以破解密文。 2.4具体实现在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端。之后服务器给客户端发送真实数据的时候,会用这把密钥对数据进行加密,客户端收到加密数据之后,用刚才收到的密钥进行解密。 2.5图解我们以客户端发送请求给服务器为例:对称加密在第一部和第二部上均可被第三者拦截(实时是第二步一般均可以被拦截,但是能否解密还是要看第一步是否把密钥拦截下来)因为,对称加密的解密钥匙和加密钥匙均是同一把。 三、非对称加密3.1定义非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 3.2密钥的形式公钥与私钥是一对。传输双方均有自己的一对密钥(也就是双方每方均有:公、私密钥一把,双方加起来共4把) 例子:传输双方比如是甲乙双方,甲方有配对的公、私密钥一对,且公钥负责加密,私钥负责解对应的公钥加的密。乙方同理。 3.3优缺点非对称密钥的算法强度复杂(是优点也是缺点),安全性依赖于算法与密钥。优点:安全性较高,比对称密钥安全性高很多。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。缺点:由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。 3.4具体实现1.客户端要向服务器发送信息,客户端和服务器都要产生一对用于加密和解密的公钥和私钥。2.客户端的私钥保密,客户端的公钥告诉服务器;服务器的私钥保密,服务器的公钥告诉客户端。3.客户端要给服务器发送信息时,客户端用服务器的公钥加密信息,因为服务器的公钥是公开的,客户端可以得到。4.客户端将这个消息发给服务器(已经用服务器的公钥加密消息)。5.服务器收到这个消息后,服务器用自己的私钥解密客户端的消息。其他所有收到这个报文的人都无法解密,因为只有服务器才有服务器的私钥。 3.5图解 四、HTTPS采用的加密HTTPS采用的是处理信息的方式是:结合对称加密+非对称加密这两种方式,我们可以用非对称加密的方式来传输对称加密过程中的密钥,之后我们就可以采取对称加密的方式来传输数据了。具体是这样子的: 服务器用明文的方式给客户端发送自己的公钥,客户端收到公钥之后,会生成一把密钥(对称加密用的),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最后服务器就可以安全得到这把密钥了,而客户端也有同样一把密钥,他们就可以进行对称加密了。 五、证书5.1非对称加密的不足事实上,在没有引入证书之前,非对称加密也并非传输安全的,在此举个例子: 服务器以明文的方式给客户端传输公钥的时候,中间人截取了这把属于服务器的公钥,并且把中间人自己的公钥冒充服务器的公钥传输给了客户端。 之后客户端就会用中间人的公钥来加密自己生成的密钥。然后把被加密的密钥传输给服务器,这个时候中间人又把密钥给截取了,中间人用自己的私钥对这把被加密的密钥进行解密,解密后中间人就可以获得这把密钥了。 最后中间人再对这把密钥用刚才服务器的公钥进行加密,再发给服务器。 毫无疑问,在这个过程中,中间人获取了对称加密中的密钥,在之后服务器和客户端的对称加密传输中,这些加密的数据对中间人来说,和明文没啥区别。 5.2证书的引入非对称性加密之所以不安全,是应为客户端不知道,这把公钥是不是服务器的。因此,我们需要找到一种策略来证明这把公钥就是服务器的,而不是别人冒充的。解决这个问题的方式就是使用数字证书,具体是这样的: 1、我们需要找到一个第三方机构,它是一个拥有公信力、大家都认可的认证中心,那就是数字证书认证机构(简称CA)。2、服务器在给客户端传输公钥的过程中,会把公钥以及服务器的个人信息通过Hash算法生成信息摘要。为了防止信息摘要被人调换,客户端还会用CA提供的私钥对信息摘要进行加密来形成数字签名。并且,最后还会把原来没Hash算法之前的个人信息以及公钥和数字签名合并在一起,形成数字证书。3、当客户端拿到这份数字证书之后,就会用CA提供的公钥来对数字证书里面的数字签名进行解密来得到信息摘要,然后对数字证书里服务器的公钥以及个人信息进行Hash得到另外一份信息摘要。最后把两份信息摘要进行对比,如果一样,则证明这个人是服务器,否则就不是。这样,就可以保证服务器的公钥安全着交给客户端了。 5.3浏览器内置常用证书一个重要的问题是,如何安全转交认证机构的公钥是一件很困难的事,因此,大多数浏览器开发商发布版本时,会事先植入常用认证机关的公钥。我们可以Google Chrome为例:打开浏览器的设置选项,选择高级,可以看到隐私设置和安全性下面的一些设置,其中管理证书就可以看到谷歌浏览器一些内置证书,如图: 5.4图解下图选自图解HTTP: 5.5分析实例我们分析下下面的三种情况 1、网站是http协议的:可以看到是不安全的。2、 网站是完全的HTTPS加密的:可以看到Google网站的HTTPS前面是有一把小锁的,这表示,这个网站的连接是安全的,并且点击小锁可以看到证书信息。3、 网站前带HTTPS但是不是完全安全的:注意第三点和第一点的表达:连接不安全和连接并非完全安全这是因为:站点还有http资源,需要把所有链接换成https才可以带锁。 参考资料 :图解HTTP百度百科http加密那点事
计算机网络体系结构开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。 OSI分为7层: 应用层:网络服务与最终用户的一个接口 表示层:把应用层提供的信息变换为能够共同理解的形式 会话层:建立、管理、终止会话 传输层:定义传输数据的协议端口号,以及流控和差错校验,平衡互连系统的性能差异 网络层:路由选择和中继,在一条数据链路上复用多条网络连接(IP位于网络层,通过IP地址进行路由选择) 数据链路层:数据链路的建立,拆除,对数据的检错,纠错是数据链路层的基本任务 物理层:物理层并不是物理媒体本身,它只是开放系统中利用物理媒体实现物理连接的功能描述和执行连接的规程。物理层的媒体包括架空明线、平衡电缆、光纤、无线信道等。通信用的互连设备指DTE(Data Terminal Equipment)和DCE(Data Communications Equipment)间的互连设备。DTE即数据终端设备,又称物理设备,如计算机、终端等都包括在内。而DCE则是数据通信设备或电路连接设备,如调制解调器等。数据传输通常是经过DTE-DCE,再经过DCE-DTE的路径。互连设备指将DTE、DCE连接起来的装置,如各种插头、插座。LAN中的各种粗、细同轴电缆、T型接头、插头、接收器、发送器、中继器等都属物理层的媒体和连接器 TCP/IP协议Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。协议采用了4层的层级结构。然而在很多情况下,它是利用 IP 进行通信时所必须用到的协议群的统称。 TCP/IP中的数据包: 包是全能性术语;帧用于表示数据链路层中包的单位;片是 IP中数据的单位;段则表示 TCP 数据流中的信息;消息是指应用协议中数据的单位。TCP/IP通信过程数据的流转过程: 1.数据发送时从应用层一层层往下传并且附加首部,2.通过以太网传到对端的计算机,3.再从数据链路层一层层往上传并剥离首部,剥离后的数据往上传到应用层. 备注:计算机收到包之后会剥离首部,如在数据链路层剥离首部取出MAC地址(MAC地址是网卡的信息,是属于数据链路层),若MAC地址不匹配自己的,则丢掉包.而客户端获取服务端的MAC地址是在建立连接的时候。
咨询扣扣78/54/14/66,有很多虚拟的网站黑了一些玩家的钱,给很多网上的朋友造成很大的损失,对于这种情况,经过我长时间的接触被黑的朋友和自己的思考,总结出了一下方法:第一种,假装代理,找人去注册,注册后联系他们说能提款后你朋友就开始充值游戏,第二种,输到本金,再提款,不过本金多也有可能不给提款,运气成分很大,还是在没有说穿的情况下才能用,第3种,找人攻击网站,不给就不停攻击,一般半个月左右,半个月也没有效果就不用再攻击了,他们运营不了也许会给,具体还要看网站情况,这几个办法用的好,也是有点几率出款的,扣扣78/54/14/66还有网上说的藏分和以分,以前很多网站都能用这种办法,后来网站多少关闭bbin电子游戏,所以后期大多数网站都不能再用这个办法了,被黑本身是很麻烦的事,大部分都是没办法的,所以选择靠谱的网站很重要,更多办法和具体操作可以来找我,这种事情,毕竟是比较复杂,三言两语的说不完,也说不清楚,伽企鹅 《785//414//66 》,空间日志文章技巧方法追回!!
被黑咨询企鹅【78541466】网赌赢钱不给提款怎么办?网赌被黑如何解决?简单介绍因为你的盈利超出平台底线,或者是平台觉得你已经没有继续压榨的价值了,那么他们就会盯上你号里的最后的那些分,找各种借口不给你出,这个时候正常的方法已经是不管用了,坦然的我随便的简述一些技巧,①藏分②欺骗③威胁至于怎么去使用,可以到我的企鹅 78-54-14-66 日志上看笔记或是一对一的了解详情。 人的一生中无论在生活中还是在工作中都会遇到这样那样的困难,我觉得从以下几点着手去面对困难。 1、要保持良好的心态:要知道人的一生中遇到困难是必然的,当你遇到困难时,良好的心态是解决问题的根本,要相信没有跨不过去的坎。 2、仔细分析问题的实质:要清楚困难产生的原因,看到问题的实质而不仅仅是表面现象。 3、冷静面对积极应对:不要慌张,不要愁怅,根据分析的原因,找到应对的办法。 4、求助别人:将遇到的问题好好的和身边的人说说,总会有遇到过相同问题的人帮你找到解决的办法。 5、吸取教训:把遇到的困难当成是人生的经历,并从中举一反三,总结原因,避免再一次遇到相同的困难。 以上只是个人意见,仅供参考!最好的办法就戒掉,不再踏上这条路,也就不会有机可乘。
被黑咨询扣扣78541466,近年来,因读博而发生的家破人亡的案例不在少数。多少人因为抱着“一夜暴富”的侥幸心理迷恋上读博,最终落得妻离子散、欠了巨债的下场。随着网络时代的到来,网络上涌现了众多读博平台,这些读博平台以“低风险、高回报”的口号吸引了众多网民的追捧。因为其操作方便,只需要一个app,足不出户即可参与读博,很快,一大批人纷纷在读博平台上疯狂下注,开始做起了当富翁的美梦。殊不知,在这些光鲜亮丽的现象背后,藏着不为人知的秘密。我想说的是,当我们遇到嘿钱网站,一般都会遇到这样的过程情况:第一就是进入体验期:就是网友们刚刚进入网站的时候,心态处于体验状态,自然不会充值大额,所以这个阶段提款就是正常的,不会有什么情况。 第二就是网站考量期:这个阶段是网友们已经玩了一段时间了,网站就会通过网友们这些天的投注情况来考量这个客户的质量,假如是大客户的话,那你就算赢10个8个网站还是会给你提款的,因为你后面还可以给网站带来更大的利益。如果我们的账号还没有到网站黑钱的最后一个阶段,只是出款需要审核,总是提不了款,但账号还可以正常登录,额度可以正常转换的时候,通过一些方法技巧其实出款几率还是很大的有一位朋友跟我说,他有时候不敢看像这类的文章,因为这里说的情况太触动他了,我不觉得是这样,我觉得是你没找对能帮到你的人,所以你才会觉得这里懂你,你的那些沉浸在黑夜里的等待,你的那些仰望天空时的一片空白,你的那些期盼得到回应时的心情。解决方法:①.心平气和的和平台客服给他问清楚原因。②.就是在网站客服还回你相信的时候还有机会,套路客服让客服觉得你很有钱,尽量把自己的朋友圈说的有很有钱,网站看的你身上的利益之后就有可能把账号解冻! ③.藏分方法,这方法是可行的,通过实践过的!最后希望各位能够远离读博,珍爱家庭,没有哪个人是可以靠读博发家致富的,真正想发家致富还是要靠我们的劳动,远离读博,珍爱家庭,从我做起在这里我想真诚的对你们说几句,当你们提款平台以系统维护,注单异常,财务系统升级,暂停结算业务,平台风控诸如此类的话唐塞你们的时候你们就是已经被黑了,当你们还在半信半疑的时候去联系客服骚扰客服,客服自然会以各种理由告诉你为什么出不了款。当过了十天半个月后,你自己觉得没有希望的时候胡乱下注把分输完了平台当然会很乐意的,或者你选择与平台耗下去,所以出现这样的情况的时候千万别抱有太多幻想了这只是拖延时间的办法,当时间长了平台会认为你没有利用价值,接下来换回就是额度不能转换。账号冻结。但是当还没有到达这种地步的时候你自己就要给自己争取时间了。所谓是跟时间赛跑用在这上面还是比较恰当的,一旦过了时间那就等同于游戏币。所以这时候就该找专业的出黑人员帮你挽回损失,现在自称出黑的人员太多了无形中就会让你变得徘徊不定犹豫不决就会导致时间浪费错过最佳出款时机。那么问题来了到底该选谁这一点尤为重要,那么既然你看到这里了相信你大概也都明白了!加扣: 78-54-14-66空间日志网站技巧方法。
前言 vue是现在很火的一个前端MVVM框架,它以数据驱动和组件化的思想构建,与angular和react并称前端三大框架。相比angular和react,vue更加轻巧、高性能、也很容易上手。大家也可以移步vue官网,看一下它的介绍和核心功能介绍。简单粗暴的理解就是:用vue开发的时候,就是操作数据,然后vue就会处理,以数据驱动去改变DOM。使用vue,我们可以集中精力于如何处理数据上,数据改变后,页面显示也会随之改变。相比jquery那种操作DOM元素的开发方式,能有效提高开发效率,个人觉得有接近两三倍的提升。 一、 安装 我们可以通过npm或者直接引入script标签两种方式来安装vue。这里为了方便说明,采用第二种方式,我们只需要在html页面引入标签即可。个人测试开发可以使用bootcdn的资源。 <script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>二、核心思想 “数据绑定”是vue的核心思想,这里笔者举一个hello world例子来说明这种思想。 html代码 <div id="app"> <p>{{ message }}</p> <input v-model="message"></div>javascript代码 new Vue({ el: '#app', data: { message: 'Hello Vue!' }})页面效果 我们在html代码里面设置了一个id为“app”的div,然后在javascript里面实例化了一个属性el为“#app”的vue对象,表示这个vue对象用来处理该div的显示。 接着在vue对象的data属性里面设置了一个message字段,把这个字段和页面的p元素和input元素双向绑定起来。 这样只要message字段改变,p元素的内容就会改变。只要input的输入内容改变,message字段就会改变,从而导致p元素的内容改变。所以我们改变页面中输入框的值,p元素里面的内容也随之改变。 三、vue实例基本组成 new Vue({ el: '#app', data: { message: 'Hello Vue!', url: 'www.salasolo.com' }, methods:{ showMsg: function(){ alert(this.message) }, jumpUrl: function(){ location.href = this.url } },})可以看到,一个vue实例有三个基本的属性,el属性用来指定绑定的页面容器,data属性里面存放页面展示的数据,methods放置页面调用的一些方法。 四、数据绑定 使用下面的语法可以将页面元素的内容和vue实例的data属性里面的字段绑定起来。 1.文本 <span>消息: {{ message }}</span>2.原始html <span v-html="htmlCode"></span>3.列表 <span v-for="item in list">{{item}}</span>4.条件 ...
摘自Wiki:【谷歌机翻】在现代电信系统的发展过程中,需要将大量低速接入设备与大型电话公司的“中心局”交换机连接在一起。在第一代数字网络中,模拟信号在连接到电话交换机的线卡上数字化。为了降低本地环路成本,决定通过在客户社区部署小型转换设备,将此转换推向客户端。这些设备将单个链路上的多个数字信号组合到更大的电话交换机,这将为客户提供服务。这些设备最初被称为远程集中器或简称遥控器。 在提供三重播放服务(语音,电视,互联网)的光纤分配系统中,数字化已到达客户端,信号在源处被数字化并使用客户边缘路由器进行组合。该流量在光网络终端进入分发网络,并使用波分复用和无源光网络传送到中心局。 在电信领域,术语集中器具有以下含义: 在数据传输中,功能单元允许公共路径处理比路径中当前可用的信道更多的数据源。集中器通常在许多低速,通常是异步信道和一个或多个高速,通常是同步信道之间提供通信能力。通常可以在低速侧容纳不同的速度,代码和协议。低速信道通常在竞争中运行并需要缓冲。[1]一种连接多个链路只有一个目的地的设备,该设备的主要功能是在两个或多个连接在一起的服务器之间进行一种负载均衡,数据分配是根据服务器处理速率完成的。[1]电缆设备中的配线架或其他组件,电缆连接在一起。[需要引证]ISP使用集中器来启用调制解调器拨号;这种集中器有时被称为调制解调器集中器或远程访问集中器。术语“接入集中器”还用于描述在计算机网络中使用的类似的提供商边缘设备,其不再依赖于调制解调器,例如, FTTH。[2]
MAC、windows和Linux谁更好已经成为了一个“千古难题”,就像从前的梗,“PHP是世界上最好的语言”一样,三大操作系统的用户各执一词,谁也不能说服谁。当然Linux用户趋向和其他两种用户完全不同,对于程序员、极客、专业人士而言更为友好,但对于普通用户来说门槛太高且实用性不佳,所以Linux及其忠实用户大多数时间也都是不与世俗争长短的状态,所以今天我们就来说说剩下的两个系统,MAC和Windows。 说到这两个操作系统,想必各位看官老爷都不陌生,一个是苹果PC产品搭载的桌面操作系统,另一个则是微软出品、陪伴我们二十余年的大众桌面操作系统,二者之间的争斗也从windows诞生就开始,一直持续了二十年余之久,大多数用户都会选择Windows作为自己的主要使用系统,但也有一部分程序员和设计师在使用windows的同时也在使用MAC系统,并且使用mac的场景往往是工作的时候,也就是用MAC作为生产工具,这是为什么呢? 首先我们来普及一下MAC和Windows的软件管理机制。Windows在安装软件的时候,我们都非常清楚安装过程中要写入注册表,这个原因是Windows的软件安装模式是先将安装包解压到指定位置,然后通过注册表写入来给这些文件赋予“身份证”,也就是该软件允许在本台电脑中获得权限并使用的权利,Windows也会记住这个软件,这样的安装方式是从win98年代就有的,机制也一直没有变化,优势在于这样的方式兼容性要更好,同时单个程序能够实现的功能也更多;但换来这些的同时也因为大量的文件分布在文件夹中,运行软件时多个文件同时运作,导致线程占用和资源占用更大,而失去了绝对稳定的运行效率。 MAC的软件管理机制可以简称为“沙箱”机制。在MAC软件安装中,所有的软件都是一个独立的程序文件,安装时没有任何解压、写入的步骤,将整个文件拖入application就可以直接使用,而在需要卸载的时候把该文件直接删除就可以了,这样做带来的好处是软件运行的稳定性极佳,同时软件因为封装紧密,不会出现文件损坏等特殊情况,所以MAC作为生产工具来说是一个非常可靠的选择;但这样的做法同样也有问题,那就是由于单一文件运行软件的机制在部分多平台的软件中无法实现全部功能移植,所以相对windows 的软件功能可能会略少。 然后我们再来说一下MAC和windows的防病毒能力。这个单独拿出来说对Windows似乎有些不公平,但事实上这确实是MAC非常大的优点。Windows因为每个程序能够获得的权限几乎是纯粹看用户想不想给予它权限,从软件权限获取难度上来看Windows是非常松散的,毕竟从最开始的系统设定上就是这样,虽然从vista开始加入了管理员运行这样的通道,以保证平时状态下不给予软件重要的权限,但相比MAC来说还是不够严谨。 MAC强悍的防病毒能力有两方面,第一方面MAC系统给予软件的权限并不多,用过IOS的人应该都清楚,在IOS 8之前苹果是没有第三方输入法的,原因就是对软件的权限审核非常严格,MAC也一样,甚至在某些软件上更夸张,什么类型的软件只能获得这类软件基本的权限,所以病毒、流氓软件根本不够格拿到权限,也就没法干坏事;当然还有第二点,那就是MAC在全球市场范围内的份额太小,windows才是主流,病毒肯定会针对市场大且相对而言更好下手的windows制作,所以MAC很少受到病毒困扰,就是因为MAC这块石头“又臭又硬”。 最后是MAC的文件管理机制。相比Windows混乱的文件管理机制,MAC因为文件管理内核和格式都要成熟许多,且在多年前就已经开始使用固态硬盘,所以文件碎片要比Windows少了许多;同时MAC的文件管理模式并没有像Windows一样给用户提供一个专门的资源管理器来让用户到处翻找文件,它系统的设定在最开始就不需要用户对硬盘进行分区,而事实证明MAC的文件稳定程度、磁盘格式的出色使得MAC根本不需要分区。 其实对于MAC比Windows更适合做创作类生产工具还有许多原因,例如MAC独占专业软件更好用云云,因为篇幅限制只能够简单概括,大家还知道哪些原因可以在评论区说出来哦。**写在最后程序员小伙伴们可以关注我一波,以后带来更精彩的**
UDP 概述用户数据报协议 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及查错检测的功能UDP 的主要特点UDP 是无连接的,即发送数据之前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延UDP 使用尽最大努力交付,即不保证可靠交付,主机不需要维持复杂的连接状态表UDP 是面向报文的,发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界UDP 没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的UDP 支持一对一、一对多、多对一和多对多的交互通信UDP 的首部开销小,只有8个字节,比 TCP 的20个字节的首部要短《PHP面试问答》 https://github.com/colinlet/P…结合实际 PHP 面试,系统的汇总面试中的各种各样的问题,尝试提供简洁准确的答案。如果你在 PHP 面试中遇到问题,欢迎提 Issues 交流。包含网络协议、数据结构与算法、PHP、Web、MySQL、Redis、Linux、安全、设计模式、架构、自我介绍、离职原因、职业规划、准备问题等部分 如果觉得不错欢迎 star 关注,正在不断持续更新中~~存在问题某些实时应用需要使用没有拥塞控制的 UDP,但很多的源主机同时都向网络发送高速率的实时视频流时,网络就有可能发生拥塞,导致大家都无法正常接收。还有一些使用 UDP 的实时应用,需要对 UDP 的不可靠传输进行适当的改进,以减少数据的丢失。应用进程可以在不影响应用的实时性的前提下,增加一些提高可靠性的措施,如采用前向纠错或重传已丢失的报文UDP 的首部格式用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,由四个字段组成,每个字段都是两个字节首部字段源端口 源端口号。在需要对方回信时。不需要时可用全0目的端口 目的端口号。这在终点交付报文时必须使用长度 UDP 用户数据报的长度,其最小值是8(仅有首部)检验和 检测 UDP 用户数据报在传输中是否有错。有错就丢弃端口分用当运输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交最后的终点——应用进程如果接受方 UDP 发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用程序),就丢弃该报文,并由网际控制报文协议 ICMP 发送“端口不可达”差错报文给发送方伪首部UDP 用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部。所谓“伪首部”是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。检验和就是按照这个临时用户数据报来计算的。伪首部既不向下传也不向上递交,而仅仅是为了计算检验和本文转载自 枫叶林博客,《用户数据报协议UDP》https://blog.maplemark.cn/201…
Winter is coming相信大家近期在 php 求职中,肯定发现岗位要求越来越高了。网络也成为重点考察的技能了,如果觉得不太熟悉,这篇文章就很适合你了,新手学习、老手防身均适合在计算机网络的基本概念中,分层次的体系结构是最基本的计算机网络体系结构的形成分层相互通信的两个计算机系统必须高度协调工作才行,而这种“协调”是相当复杂的。为了设计这样复杂的计算机网络,最初提出了分层的方法。“分层”可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题比较易于研究和处理国际标准全球经济的发展使得不同网络体系结构的用户迫切要求能够互相交换信息,国际标准化组织 ISO 提出了 OSI。只要遵循 OSI 标准,一个系统就可以和位于世界上任何地方的、也遵循这同一标准的其他任何系统进行通信现今规则最大的、覆盖全球的、基于 TCP/IP 的互联网并未使用 OSI 标准。在20世纪90年代初期,虽然整套的 OSI 国际标准已制定出来,但基于 TCP/IP 的互联网已抢先在全球相当大的范围成功地运行了,而同时却几乎找不到有厂家生产出符合 OSI 标准的商业产品。OSI 只获得了一些理论研究的成果,市场化方面则彻底失败了TCP/IP 常被称为是事实上的国际标准《PHP面试问答》 https://github.com/colinlet/P… 结合实际 PHP 面试,系统的汇总面试中的各种各样的问题,尝试提供简洁准确的答案。如果你在 PHP 面试中遇到问题,欢迎提 Issues 交流。包含网络协议、数据结构与算法、PHP、Web、MySQL、Redis、Linux、安全、设计模式、架构、自我介绍、离职原因、职业规划、准备问题等部分 如果觉得不错欢迎 star 关注,正在不断持续更新中协议与划分层次网络协议在计算机网络中要做到有条不紊地交换数据,就必须准守一些事先约定好的规则。这些规则明确了所交换的数据的格式以及有关的同步问题为进行网络中的数据交换而建立的规则、标准或约定称为网络协议。网络协议也可简称为协议协议组成要素语法,即数据与控制信息的结构或格式语义,即需要发出何种控制信息,完成何种动作以及做出何种响应同步,即事件实现顺序的详细说明协议通常有两种不同的形式。一种是使用便于人来阅读和理解的文字描述。另一种是使用让计算机能够理解的程序代码。这两种不同形式的协议都必须能够对网络上的信息交换过程做出精确的解释划分层次对于非常复杂的计算机网络协议,其结构应该是层次式的分层可以带来很多好处各层之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间接口(即界面)所提供的服务灵活性好。当任何一层发送变化时(例如由于技术的变化),只要层间接口关系保持不变,则在这层以上或以下各层均不受影响结构上可分割开。各层都可以采用最合适的技术来实现易于实现和维护。这种结构使得实现和调试一个庞大而又复杂的系统变得易于处理,因为整个的系统已被分解为若干个相对独立的子系统能促进标准化工作。因为每一层的功能及其所提供的服务都已有了精确的说明各层所要完成的功能差错控制 使相应层次对等方的通信更加可靠流量控制 发送端的发送速率必须使接收端来得及接收,不要太快分段和重装 发送端将要发送的数据块划分为更小的单位,在接收端将其还原复用和分用 发送端几个高层会话复用一条逻辑连接,数据传送结束后释放连接连接建立和释放 交换数据前先建立一条逻辑连接,数据传送结束后释放连接分层缺点有些功能会在不同的层次中重复出现,因而产生了额外开销体系结构计算机网络的各层及其协议的集合就是网络的体系结构。计算机网络的体系结构就是这个计算机网络及其构件所应完成的功能的精确定义体系结构是抽象的,而实现则是具体的,是真正在运行的计算机硬件和软件具有五层协议的体系结构五层协议OSI 的七层协议体系结构的概念清楚,理论也较完整,但它既复杂又不实用。TCP/IP 体系结构则不同,但它现在却得到了非常广泛的应用。TCP/IP 是一个四层的体系结构。在学习计算机网络的原理时往往采用折中的办法,即综合 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚各层作用应用层:应用层协议定义的是应用进程间通信和交互的规则运输层:运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务网络层:把运输层产生的报文段或用户数据报封装成分组或包进行传送数据链路层:将网络层交下来的 IP 数据报组装成帧,并在两个相邻结点间的链路上传送物理层:利用物理媒体以比特形式传送数据小结把应用层交互的数据单元称为报文运输层主要协议:传输控制协议 TCP、用户数据报协议 UDP在 TCP/IP 体系中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报,或简称为数据报实体、协议、服务和服务访问点当研究开放系统中的信息交换时,往往使用实体(entity)这一较为抽象的名词表示任何可发送或接受信息的硬件或软件进程协议是控制两个对等实体(或多个实体)进行通信的规则的集合在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务协议是“水平的”,即协议是控制对等实体之间通信的规则。但服务是“垂直的”,即服务是由下层向上层通过层间接口提供的计算机网络协议特点协议必须把所有不利的条件事先都估计到,而不能假定一切都是正常的和非常理想的非常仔细地检查这个协议能否应付各种异常情况TCP/IP 的体系结构TCP/IP 的体系结构比较简单,只有四层应当指出,技术的发展并不是遵循严格的 OSI 分层概念。实际上现在的互联网使用的 TCP/IP 体系结构有时已经演变成为图1-23所示的那样,即某些应用程序可以直接使用 IP 层,或甚至直接使用最下面的网络接口层还有一种方法,就是分层次画出具体的协议表示 TCP/IP 协议族,它的特点是上下两头大而中间小:应用层和网络接口层都有多种协议,而中间的 IP 层很小,上层的各种协议都向下汇聚到一个 IP 协议中TCP/IP 协议可以为各式各样的应用提供服务,同时 TCP/IP 协议也 允许 IP 协议在各式各样的网络构成的互联网上运行。IP 协议在互联网中充当着核心的作用本文转载自 枫叶林博客 《计算机网络体系结构》,原文链接:https://blog.maplemark.cn/201… ...
小记大学里学的子网掩码的概念都已经生疏了,昨天在工作中又一次接触到了这个概念,便做个整理备忘。子网掩码概念子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。规则子网掩码的设定必须遵循一定的规则。与二进制IP地址相同,子网掩码由1和0组成,且1和0分别连续。子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。这样做的目的是为了让掩码与ip地址做按位与运算时用0遮住原主机数,而不改变原网络段数字,而且很容易通过0的位数确定子网的主机数(2的主机位数次方-2,因为主机号全为1时表示该网络广播地址,全为0时表示该网络的网络号,这是两个特殊地址)。只有通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。举例192.39.187.241/255.255.255.240,这里子网掩码是255.255.255.240,这个是我们常见的C类网络地址,对于C类地址来说默认的子网掩码是255.255.255.0。如果子网掩码是255.255.255.0,二进制表示11111111.11111111.11111111.00000000,左边24位1表示的是网络号,右边8个0表示的是主机位数。那么可算得它对应的主机数为2^8-2 = 254个。如果子网掩码是255.255.255.240,二进制表示11111111.11111111.11111111.11110000,左边28位1表示的是网络号,右边4个0表示的是主机位数。那么可算得它对应的主机数为2^4-2 = 14个。同样192.39.187.241/28 ,后面的28指的是子网掩码按二进制的形式转换过来后,网络位是28位,这与255.255.255.240表示的是同样的意思。正常的C类网络地址是24位网络号,8位主机号,但如果出现网络号数量不够用时,网络号便会向主机号借用,掩码255.255.255.240便是向主机位借了4位。网络地址IP地址二进制: 11000000.00100111.10111011.11110001掩码二进制: 11111111.11111111.11111111.11110000``与操作得到网络地址:11000000.00100111.10111011.11110000 = 192.39.187.240 广播地址广播地址,就是将二进制表示的网络地址的主机位全部换成1网络地址:11000000.00100111.10111011.11110000广播地址:11000000.00100111.10111011.11111111 = 192.39.187.255可用地址网络地址和广播地址之间的IP地址便是可用地址,即192.39.187.241到192.39.187.254。第一可用:192.39.187.241最后可用:192.39.187.254
一,计算机网络概述互联网的基本特点: <font color=#0099ff >连通性,共享</font>计算机网络:由若干结点和连接这些结点的链路组成互连网:网络的网络互联网基础结构发展的三个阶段从单个ARPANET向互连网发展的过程(TCP/IP协议族)建成了三级结构的互联网(主干网,地区网,校园网)形成了多层次的ISP结构的互联网互联网交换点IXP的主要作用:允许两个网络直接相连并交换分组互联网组成边缘部分:所有连接在互联网的主机(用户直接使用)由大量网络和连接这些网络的路由器组成(为边缘部分提供服务)网络边缘的端系统之间的通信方式客户-服务器方式(C/S,B/S)对等连接方式(P2P)注:计算机之间的通信:主机A的某个进程和主机B的某个进程进行通信互联网的核心部分(路由器起特殊作用)路由器:实现分组交换的关键构件,存储转发分组电路交换特点:建立一条专用的物理通道:建立连接->通话->释放资源在通话的全部时间内,通话的两个用户始终占用端到端的通信资源分组交换的主要特点()存储转发把较长的报文划分成更小的包(分组)注:主机是为用户进行信息处理的,路由器则是用来转发分组的,即进行分组交换,用存储转发(造成一定时延)的方式把分组交付给最终的主机计算机网络的类别按作用范围分类:广域网WAN,城域网MAN,局域网LAN,个人区域网PAN按网络使用者分类:公用网,专用网计算机网络的性能:速率:数据的传输速率,也称数据率 单位(比特每秒 bit/s或b/s(或写bps))带宽:单位时间内网络中某信道所能通过的最高数据率通信上指某个信号具有的频带宽带(bit/s 比特每秒)吞吐量:单位时间内通过某个网络(或信道,接口)的实际数据量(Gbit/s Mbit/s)时延:数据(一个报文或分组,甚至比特)从网络(链路)的一端传送到另一端所需的时间,由以下几部分组成发送时延:发送时延=数据帧长度(bit)/发送速率(bit/s)传播时延:传播时延=信道长度(m)/电磁波在信道上的传播速率(m/s)处理时延排队时延总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延时延带宽积:时延带宽积 = 传播时延 x 带宽往返时间(RTT)利用率信道利用率网络利用率:全网络的信道利用率的加权平均值D0表示网络空闲时的是时延,D表示网络当前的时延,U表示(网络)利用率计算机网络的体系结构:计算机的各层次及其协议的集合网络协议:为进行网络中的数据交换而建立的规则,标准或约定,主要由以下三要素组成语法:数据与控制信息的结构或格式语义:需要发出何种控制信息,完成何种动作以及做出何种响应同步:事件实现顺序的详细说明OSI七层模型,TCP/IP四层模型(应用层、运输层、网际层和网络接口层(网络接口层并没有具体的内容)五层协议的体系结构应用层(报文)运输层(TCP(报文段),UDP(用户数据报))网络层(包/分组/IP数据报)数据链路层(帧)物理层(比特流)对等层次之间传送的数据单位称为该层的协议数据单元PDU实体,协议,服务和服务访问点实体:任何可以发送或接收信息的硬件或软件进程协议:控制两个或多个对等实体进行通信的规则的集合使用下一层的服务实现本层协议,为上一次提供服务同一系统中相邻两层实体进行交互的地方,称为服务访问点协议是‘水平的’,服务是‘垂直的’
二,物理层2.1 物理层的基本概念物理层的主要任务为:确定传输媒体的接口的一些特性机械特性电气特性功能特性过程特性注:数据在计算机内多采用并行传输,在通信线路上一般采用串行传输(出于经济考虑),物理层还要实现传输方式的转换2.2 数据通信的基础知识数据通信系统可划分为三部分源系统(或发送端,发送方):一般包含源点,发送器(调制器)传输系统(或传输网络)目的系统(或接收端,接收方):一般包含接收器(解制器),终点常用术语介绍通信的目的是传送消息,数据是运送消息的实体,信号是数据的电气或电磁的表现信号分为:模拟信号(或连续信号),数字信号(离散信号)码元:代表不同离散数值的基本波形一个码元携带的信息不是固定的,而是由调制方式和编码方式实现的,在实用二进制编码时,0和1表示两种状态信道的几个基本概念信道一般表示向某一个方向传送信息的媒体,一条通信电路往往包含一条发送信道和一条接收信道三种基本信息交互方式:单向通信(单工通信)双向交替通信(半双工通信)双向同时通信(全双工通信)基带信号:来自源的信号如计算机输出的数据信号;往往包含较多低频成分和直流成分,信道并不能传送这些分量,需要经过调制基带调制:仅对基带信号的波形进行变换,使之与信道特性相适应,变换后仍是基带信号带通调制:调频,调幅,调相等方法,变换成带通信号信道的极限容量信道能通过的频率范围(若频带越宽,码元传输速率上限越高而不出现码间干扰)奈氏准则表明:在任何信道中,没有信号干扰时,码元的传输速率有上限信噪比(信号的平均功率与噪声的平均功率之比)信噪比(dB)= 10 log10(S/N) (dB)香农公式表明:考虑信号干扰时,若信道的带宽或信道的信噪比越大则信息的极限传输速率越高C = W log2(1+S/N) (bit/s)提高信息的传输数率的另一个方法:用编码的方法让每一个码元携带更多比特的信息量2.3 物理层下的传输媒体导引型传输媒体双绞线同轴电缆光纤(单模光纤,多模光纤)非引导型传输媒体(自由空间传播)短波通信(主要靠电离层的反射)无线电微波通信(地面微波接力通信和卫星通信)2.4 信道复用技术复用技术频分复用:所有用户占用不同的带宽资源 复用器和分用器时分复用:所有用户不同时间占用同样的频带宽度 复用器和分用器统计时分复用(异步时分复用):按需动态分配 集中器(智能复用器)波分复用(光的频分复用):光复用器,光分用器,掺铒光纤放大器码分复用(码分多址)
目的运用TCP相关原理,实现一个简单的server端和client端的数据库交互程序,可以将client端输入的指令被server端解析,将返回信息又返送给client端。之前的简单内存数据库的实现:T-Tree、T*-Tree的理解与简单内存数据库的实现TCP/IP,socket等相关计算机网络原理七层网络模型七层网络模型TCP/IPTCP/IP是互联网协议簇的统称。TCP-transmission control protocal-传输控制协议IP-Internet Protocal-因特网协议UDP 是User Datagram Protocol 是无连接类型的传输层协议,socket是什么socket是对TCP/IP协议的封装,socket翻译为套接字,socket是一个接口/插座。TCPIP 是Socket的一种实现,Socket并不只有TCP/IP。两种socket:stream sockets,datagram socketsocket其实不止两种。stream socket:串流式socket。是有连接类型的,网页浏览器所使用的 HTTP 协议是用 stream sockets 取得网页。datagram socket:讯息式socket。是无连接类型的,用于语音通信,视频传输较多。TCP serverserver端socket()函数#include <sys/types.h>#include <sys/socket.h>int socket(int domain, int type, int protocol);domain一个地址描述。目前仅支持AF_INET格式,也就是说ARPA Internet地址格式。type指定socket类型。新套接口的类型描述类型,如TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)。常用的socket类型有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。protocol指定协议。套接口所用的协议。如不想指定,可用0。常用的协议有,IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等,它们分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。bind()函数#include <sys/types.h>#include <sys/socket.h>int bind(int sockfd, struct sockaddr *my_addr, int addrlen);bind()将一本地地址与一socket捆绑.sockfdsockfd 是 socket() 传回的 socket file descriptor。my_addrmy_addr是指向包含你的地址资料丶名称及 IP address 的 struct sockaddr 之指针。addrlenaddrlen 是以 byte 为单位的地址长度。connect#include <sys/types.h>#include <sys/socket.h>int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);connect()从client端连接到server端listen(),accept()int listen(int sockfd, int backlog);—————————————————————–#include <sys/types.h>#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t addrlen);send(),recv()int send(int sockfd, const void msg, int len, int flags);————————————————————int recv(int sockfd, void buf, int len, int flags);send() 会返回实际有送出的 byte 数,可能会少与所要传送的数目。recv()若返回0,则说明远端那边已经关闭了你的连接close()close(sockfd);关闭socket。一个tcp server 的示例代码:#include <netdb.h> #include <netinet/in.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #define MAX 80 #define PORT 8080 #define SA struct sockaddr // Function designed for chat between client and server. void func(int sockfd) { char buff[MAX]; int n; // infinite loop for chat for (;;) { bzero(buff, MAX); // read the message from client and copy it in buffer read(sockfd, buff, sizeof(buff)); // print buffer which contains the client contents printf(“From client: %s\t To client : “, buff); bzero(buff, MAX); n = 0; // copy server message in the buffer while ((buff[n++] = getchar()) != ‘\n’) ; // and send that buffer to client write(sockfd, buff, sizeof(buff)); // if msg contains “Exit” then server exit and chat ended. if (strncmp(“exit”, buff, 4) == 0) { printf(“Server Exit…\n”); break; } } } // Driver function int main() { int sockfd, connfd, len; struct sockaddr_in servaddr, cli; // socket create and verification sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf(“socket creation failed…\n”); exit(0); } else printf(“Socket successfully created..\n”); bzero(&servaddr, sizeof(servaddr)); // assign IP, PORT servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(PORT); // Binding newly created socket to given IP and verification if ((bind(sockfd, (SA)&servaddr, sizeof(servaddr))) != 0) { printf(“socket bind failed…\n”); exit(0); } else printf(“Socket successfully binded..\n”); // Now server is ready to listen and verification if ((listen(sockfd, 5)) != 0) { printf(“Listen failed…\n”); exit(0); } else printf(“Server listening..\n”); len = sizeof(cli); // Accept the data packet from client and verification connfd = accept(sockfd, (SA)&cli, &len); if (connfd < 0) { printf(“server acccept failed…\n”); exit(0); } else printf(“server acccept the client…\n”); // Function for chatting between client and server func(connfd); // After chatting close the socket close(sockfd); } client端一个tcp client的示例代码:// Write CPP code here #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #define MAX 80 #define PORT 8080 #define SA struct sockaddr void func(int sockfd) { char buff[MAX]; int n; for (;;) { bzero(buff, sizeof(buff)); printf(“Enter the string : “); n = 0; while ((buff[n++] = getchar()) != ‘\n’) ; write(sockfd, buff, sizeof(buff)); bzero(buff, sizeof(buff)); read(sockfd, buff, sizeof(buff)); printf(“From Server : %s”, buff); if ((strncmp(buff, “exit”, 4)) == 0) { printf(“Client Exit…\n”); break; } } } int main() { int sockfd, connfd; struct sockaddr_in servaddr, cli; // socket create and varification sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { printf(“socket creation failed…\n”); exit(0); } else printf(“Socket successfully created..\n”); bzero(&servaddr, sizeof(servaddr)); // assign IP, PORT servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr(“127.0.0.1”); servaddr.sin_port = htons(PORT); // connect the client socket to server socket if (connect(sockfd, (SA)&servaddr, sizeof(servaddr)) != 0) { printf(“connection with the server failed…\n”); exit(0); } else printf(“connected to the server..\n”); // function for chat func(sockfd); // close the socket close(sockfd); } 通过TCP与简易内存数据库的数据交互为了让client端和server中的内存数据库,通信如果server端和client建立连接之后则进入一个大循环,大循环的退出条件是client端发去“EXIT”,client端随即断开连接。通过TCP和内存数据库通信的所以代码所有代码都在github里:slarsar/ttree_mmdb_tcp_server_client参考GeeksforGeeksBeej’s Guide to Network Programming 简体中文版 ...
前端主要关注于应用层的 HTTP 协议,传输层的 TCP 协议,断舍离一下,就主要总结这两种协议了。OSI 参考模型 与 TCP/IP 五层模型我们主要关注于 TCP/IP 五层模型 的 应用层 和 传输层 就足够了。应用层:作用:为应用程序提供服务。常见协议:HTTP、HTTPS、FTP、POP3、SMTP等。传输层:作用:实现应用程序之间的数据传输。协议:UDP、TCPUDP 与 TCPUDPUDP 是面向无连接的协议,它只会把数据传递给接收端,但不会关注接收端是否已经正确接收了数据,所以有时候 UDP 会被认为是不可靠的数据报协议。但这种特性反而适合多播,实时的视频和音频传输。优点:无需建立连接(减少了延迟)实现简单(效率高)头部开销小( 8 字节)没有拥塞控制(更好的控制发送时间和速率)缺点:没有建立连接(数据想发就发,不可靠)没有拥塞控制(网络条件不好时会导致丢包)TCPTCP 是面向有连接的协议,在使用 TCP 协议 传输数据之前一定需要在发送方和接收方之间建立连接。建立连接三次握手,断开连接四次挥手TCP 建立连接三次握手第一次握手: 客户端向服务端发送一个 SYN(Seq=X) 包,客户端进入 SYN-SENT 状态,等待服务端的 ACK(Ack=X+1)回复。ps: Seq 是序号,Ack 是确认序号。第二次握手: 服务端根据接收到客户端发来的 SYN(Seq=X) 包后返回一个 ACK(Ack=X+1) 以及 SYN(Seq=Y) 包给客户端,服务端进入 SYN-RECIVED 状态,等待客户端的 ACK(Ack=Y+1) 回复。第三次握手:客户端接收到 ACK(X+1) 后,进入 ESTABLISHED 状态。根据服务端发来的 SYN(Y) 返回一个 ACK(Y+1) 包给服务端。服务端 接收 ACK(Y+1)后进入 ESTABLISHED 状态。此时连接建立成功。这个过程可以用以下三句形象表示:(客户端):我想建立连接了,服务端你准备好没有呀?(服务端):我准备好了,你准备好没有?(客户端):我也准备好了,开始吧TCP 关闭连接四次挥手这个过程可以用以下四句句形象表示:(客户端):我想关闭连接了。(服务端):我知道了。(服务端):我现在准备关闭连接了,ok 吗?(客户端):ok,你关闭吧。UDP 与 TCP 的区别UDP 协议是面向无连接的,它不能保证数据有序且不丢失的传到对端,但是 UDP 比 TCP 更高效。TCP 协议是面向有连接的,建立和断开连接都需要握手,在传输数据的过程中,通过滑动窗口(流量控制)、拥塞处理(慢开始,拥塞避免,快速重传,快速恢复),能够正确处理丢包问题,保证接收方能够收到数据,与此同时还能够有效利用网络带宽。HTTPHTTP (HyperText Transfer Protocol) 超文本传输协议 是一个基于 TCP (传输层) 的应用层协议,是客户端与服务端之间请求和响应的标准。主要特点简单快速客户端向服务器请求服务时,只需请求方法和请求路径。无状态客户端再次向服务器请求服务时,服务器并不知道客户端之前是否请求过。无连接每次请求都会建立一个 TCP 连接,请求处理完成后连接断开。HTTP 报文请求行:GET https://www.baidu.com/ HTTP/1.1 由请求方法、URL、协议版本组成响应行:HTTP/1.1 200 OK协议版本、状态码、状态信息组成HTTP 请求方法请求方法分为很多种,最常用的也就是 GET 和 POST 了。虽然请求方法很多,但更多的是为了传达语义。更多的方法的语义描述可以阅读 文档 。GET 和 POST 的区别GET能缓存、请求长度限制、 有历史记录GET 多用于 无副作用(不修改资源)、幂等(请求次数与资源无关)的场景。POSTPOST 相对 GET 安全一点点,因为 GET 请求发送的数据包含在 URL 里。两者详细对比:状态码状态码表示了响应的状态,可以让我们知道这一次的请求是成功还是失败,如果失败,是什么原因导致的。2XX 成功200 OK ,请求成功并返回数据204 No Content ,成功但无内容206 Partial Content ,范围请求3XX 重定向301 永久重定向,表示资源已被分配了新的 URL302 临时重定向,资源临时被分配新的 URL304 资源未修改,可使用缓存4XX 客户端错误400 请求语法错误401 要求身份认证403 请求被服务器拒绝404 资源不存在5XX 服务器错误500 服务器错误503 服务器超负载或停机维护HTTPS更安全的网络传输协议需要安装证书(公钥)经过 SSL/TLS 协议 加密,传输的内容是经过加密的使用 443 端口HTTP/2多路复用在同一个 TCP 连接上传输所有的请求数据,避免 队头阻塞(浏览器限制同一个域名下的连接数)问题Header 压缩使用了 HPACK 压缩格式对传输的 header 进行编码,减少了 header 的大小。并在两端维护了索引表,用于记录出现过的 header ,避免 header 重复传输。二进制传输在之前的 HTTP 版本中,我们是通过文本的方式传输数据。在 HTTP/2 中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。服务端推送服务端可以在客户端的某个请求后,主动推送其他客户端在之后会用到的资源。省去了客户端重复请求的步骤,降低了延迟。参考资料:https://juejin.im/post/5c64d15d6fb9a049d37f9c20#heading-49https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A?http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-reading-this-is-enough/https://juejin.im/book/5bdc715fe51d454e755f75ef/section/5bdc72b151882516f039fce3 ...
计算机912考研系列笔记本笔记记录从2019年3月份到12月份,准备计算机912考研相关内容与912考研进度历程。一方面是给后人提供一些参考,一方面方便自己消化咀嚼知识。912与408区别balabalatop5学校分析balabala复习(学习)计划四大专业课:数据结构操作系统计算机组成原理计算机网络
年过30还可以去学计算机吗?武汉千硕教育如何?
内容清单Charles 的简介安装 CharlesCharles 初始化设置过滤网络请求截取HTTP/HTTPS数据模拟弱网环境修改网络请求修改服务器返回内容服务器压力测试反向代理解决与翻墙软件的冲突Charles 的简介Charles 是目前最主流的网络调试工具(Charles、Fiddler、Wireshark…)之一,对于一个开发者来说与网络打交道是日常需求,因此很多时候我们需要调试参数、返回的数据结构、查看网络请求的各种头信息、协议、响应时间等等。所以了解 Charles 并使用它Charles 通过将自己设置为系统的网络访问代理服务器,这样所有的网络请求都会通过它,从而实现了网路请求的截获和分析。Chareles 不仅可以分析电脑本机的网络请求(HTTP 和 HTTPS),还可以分析移动端设备的网络请求。Charles 是收费软件,作者开发出这样一个方便开发者使用的伟大工具,我们鼓励使用正版软件,但是对于一些囊中羞涩或者学生来说,有破解版的更好,别担心,这些我都准备好了,下一个 section 会讲解如何下载安装。安装 Charles方式1: Charles 官网地址,根据你的电脑操作系统选择合适的下载方式。此时下载下来的是需要收费的,不差钱的同学当然可以直接购买。购买链接方式2:按照方式1的方式去官网下载,然后下载相应 JAR包。这里以 MAC 为例,打 Finder,选择应用程序,选中 Charles,右击并选择“显示包内容”,看到 Contents 目录,点击进去选择 Java 文件夹,将下载下来的 JAR包 拖进去替换。至此,完成了 Charles 的破解。Charles 初始化设置Charles 的工作原理是将自身设置为系统的代理服务器来捕获所有的网络请求。所以使用 Charles ,我们必须设置 Charles 为系统的代理服务器。打开 Charles,当第一次启动的时候如果没有购买或者没有破解,会有倒计时,之后会看到软件的主界面,然后会请求你赋予它为系统代理的权限。点击授权会让你输入当前系统用户的密码。当然你也可以忽略或者拒绝该请求,然后等想要抓包的时候将它设置为系统的代理服务器。步骤:选择菜单中的“Proxy” -> “Mac OS X Proxy”。如下图:之后你的电脑上的任何网络请求都可以在 Charles 的请求面板中看到看看 Charles 的主界面图上红色圈1:这里代表所有网络请求的展示方式。分别名为 “Structure” 和 “Sequence”。Structure 将所有的网络请求按照域名划分并展示Sequence 将所有的网络请求按照时间排序并展示图上红色圈2:一些的网络请求设置比如 HTTPS 以及端口等信息都在这个菜单栏设置图上红色圈3:证书设置都在这里进行过滤网络请求由于 Charles 可以将电脑或者设置过的手机的所有网络请求捕获到,而且我们分析网络传输应该是针对某个特定的网络下的抓包分析,为了清楚明显地看到我们感兴趣的网络请求通常会用到 Charles 的“过滤网络请求的功能”。方法1:在 Charles 主面板的左侧所有网络请求的下方可以看到看到一个 ”Filter“ 输入栏,在这里你可以输入关键词来筛选出自己感兴趣的网络请求。比如我想分析的网络请求来自于”www.baidu.com" 下,你可以在下面输入"baidu"即可。方法2:在 Charles 菜单栏的顶部会看到 “Proxy” 的选项,点击菜单栏选择 “Proxy” -> “Recording Settings” 。选择 “include”。看到面板上面有一个 “Add” 按钮,点击后在弹出的面板里面设置好我们需要分析的网络请求的协议、主机名、端口、路径、参数,当然你也可以只设置一些主要的信息,比如协议和主机名的组合。方法3:一般打开 Charles 并设置好配置信息后(比如电脑本机或者设置过代理的手机)所有的网络请求都将在 Charles 的面板上显示,同时我们感兴趣的网络请求如果也在面板上显示的话,“Structure”模式下可以选中需要分析的网络请求,鼠标右击选择“Focus”。“Sequence”模式下可以在面板的网络请求显示面板的右下角看到一个Focus按钮,点击勾选后 Charles 只会显示你感兴趣的网络请求。截取HTTP/HTTPS数据截取 HTTP 请求Charles 的主要目的是抓取捕获网络请求,这里以 iPhone 的抓包为例讲解。Charles 的设置要截获 iPhone 的网络请求就需要为 Charles 开启代理功能。在菜单栏选择“Proxy” ->“Proxy Settings”。填写代理的端口号并将“Enable transparent HTTP proxying”勾选上。iPhone 上的设置在电脑“系统偏好设置”中心打开网络查看本机 IP 地址,打开手机“设置”->“无线局域网”,进入当前使用的网络,点击进入当前 WIFI 的详情页(可以看到当前 WIFI 的基本信息,包括子网掩码、端口、IP地址、路由器),在最下角可以看到“DNS”和“HTTP代理”2个section。我们点击“配置代理”,设置 HTTP 代理选中“手动”。服务器处填写电脑ip地址,端口写8888。设置好后,我们打开 iPhone 上的任意需要网络请求的应用,就可以看到 Charles 弹出请求的确认菜单,单击"Allow"按钮,即可完成设置。截取 HTTPS 请求如果你需要捕获 HTTPS 协议的网络请求,那么则需要安装 Charles 的 CA 证书。步骤如下;首先需要在 MAC 上安装证书。点击 Charles 顶部的菜单栏,选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”。在 keychain 处将新安装的证书设置为永久信任即使安装了 CA 证书,Charles 默认是不捕获 HTTPS 协议的网络请求,所以我们需要对某个主机下的网络请求抓包分析的话,选中该网络请求右击选中 “SSL Proxying Enabled”。这样就可以看到我们感兴趣的HTTPS 网络请求了。如果你需要捕获移动设备的 HTTPS 网络请求,则需要在移动设备上安装证书并作简单的设置选择 Charles 顶部菜单栏选择 “Help” ->“Install Charles Root Certificate on a Mobile Device or Remote Browser”。然后就可以看到 Charles 弹出的安装说明了。在手机设置好 Charles 代理的情况下,在手机浏览器输入 “chls.pro/ssl”。安装提示下载好CA证书。验证刚刚安装的 CA证书iPhone 打开设置 -> 通用 -> 关于本机 -> 证书信任设置 -> 开启开关在 Charles 菜单栏 Proxy -> SSL Proxying Setting -> 点击 Add 按钮 -> 在弹出的对对话框设置需要监听的 HTTPS 域(*:代表通配符)设置完毕,尽情抓取你想要的 HTTPS 网络请求吧。## 模拟弱网环境在平时开发的时候我们经常需要模拟弱网环境,并作弱网环境下的适配工作。Charles 为我们提供了这个服务。在 Charles 菜单栏选择 “Proxy” -> “Throttle Settings”。在弹出的面板上设置网络请求的参数(上行,下行带宽、利用率、可靠性等等信息)。如下图所示。如果你想对指定主机进行弱网环境下的测试,可以点击上图的“Add”按钮,在弹出的面板上设置协议、主机、端口来对指定的主机进行弱网设置。修改网络请求对于捕获的网络请求,我们经常需要修改网络请求的cookie、Headers、Url等信息。Charles 提供了对网络请求的编辑和重发功能。只需要选中需要修改编辑的网络请求,在对应的右上角看到有一个“钢笔”的按钮,点击后就可以对选中的网络请求进行编辑了,编辑好后可以在右下角看到 Execute 按钮。这样我们编辑后的网络请求就可以被执行了。修改服务器返回内容很多时候为了方便调试代码,我们会有这种需求,修改接口返回的数据节点或者内容、甚至是状态码。比如数据为空、数据异常、请求失败、多页数据的情况。 Charles 为我们提供了超实用的功能,“Map(Map Local、Map Remote)功能”、Rewrite功能、Breakpoints功能 ,都可以实现修改服务端返回数据的功能。但是有区别和适用场景:Map 功能适合长期地将某一请求重定向到另一个指定的网络地址或者本地 JSON 文件Rewrite 功能适合对网络请求进行一些正则替换Breakpoints 功能适合对网络请求进行一些临时性的修改(类似于我们开发的断点作用)Map 功能Map 功能分为 Map Local(将某个网络请求重定向到本地 JSON 文件) 和 Map Remote 功能(将网络请求重定向到另一个网络接口)。在 Charles 菜单栏选择 “Tools” -> “Map Remote” 或 “Map Local” 即可进入相应的功能模块。Map Remote 功能适合于切换线上到本地、测试服务到正式服务的场景。比如下图从正式服务切换到测试服务Map Local 功能我们需要填写重定向的原地址信息和本地目标文件。我们可以先将某个接口的响应内容保存下来(选择对应的网络请求,右击点击 Save Response )成为 data.json 文件。然后我们编辑里面的 status 、message、data 等信息为我们想要的目标映射文件。如下所示,我将一个网络请求的内容映射到我本地的一个 JSON 文件。之后这个请求的内容都从网络变为返回我本地的数据了。Map Local 可能会存在一个小缺陷,其返回的 HTTP Response Header 与正常的网络请求不一样,如果程序设置了校验 Header 信息,此时 Map Local 就会失败,解决办法是同时使用 Rewrite功能将相关的HTTP 头部信息 rewrite 成我们需要的信息Rewrite 功能Rewrite 适合对某个网络请求进行正则替换,以达到修改结果的目的。假如我的 App 的界面上的显示的功能模块及其点击事件是根据接口来完成的,我想实现替换功能模块的名称的目的。步骤:点击顶部菜单栏的“Tools” -> “Rewrite”。在弹出的面板上勾选 “Enable Rewrite”。点击左下角的 Add按钮,在右上角的 Name:处写好本次配置的名称(如果有多个 Rewrite,为了后期容易区分)。可以针对特定的网络请求进行 Rewrite。可以点击右上角 Location 面板下面的 Add按钮。在弹出的面板上设置网络请求配置信息。注意此时需要同时设置 Protocol、Port、Host、Path信息(我测试加了 Protocol、Host、Port这3个是无效的)然后对指定的 Type 和 Action 进行 Rewrite。Type 主要有 Add Header、Modify Header、Remove Header、Host、Path等等。Where 可以选择 Request 和 Response。指的是下面的修改是针对 Request 还是 Response完成设置后点击 Apply 按钮,即可生效。下次继续请求该网络,返回的内容就是我们刚刚设置的内容。比如当前的“政策法规”要变成“哈哈哈,我是假的政策法规”。这时候就可以使用 Rewrite 功能Breakpoints 功能Breakpoints 相比于其他几个修改网络请求的特点是只是针对当前的网络请求,Breakpoints 只存在于设置过的当前的网络请求,Charles 关闭后下次打开 Breakpoints 消失了。想要修改网络请求 Breakpoints 步骤最简单,跟我们调试工具里面设置的断点一样方便。对于我们设置了 Breakpoints 的网络请求, Charles 会在下次继续访问该请求的时候停止掉,就跟 debug 一样。此时我们可以 Edit Request,修改过 Request 之后点击右下角的 Execute 按钮。然后等到服务端返回的时候继续是断点状态,此时可以 Edit Response。步骤: 选中某个网络请求 -> 右击 -> 点击“Breakpoints”。如下图:对该接口设置了 Breakpoints。请求网络后 Edit Response,点击 execute 后服务端返回的结果就是我们编辑的内容了。服务器压力测试我们可以使用 Charles 的 Repeat 功能地对服务器进行并发访问进行压力测试。步骤:选中某个网络请求 -> 右击 -> Repeat Advanced -> 在弹出的面板里面设置总共的迭代次数(Iterations)、并发数(Concurrency) -> 点击“OK” 。开始执行可以看到以设置的并发数的规模,进行总共达设置的总共迭代次数的访问。(专业的压力测试工具:Load Runner)反向代理Charles 的反向代理功能允许我们将本地指定端口的请求映射到远程的另一个端口上。设置:点击顶部菜单栏 Proxy -> 点击 Reverse Proxies。如下所示,我将本地的 8080 端口映射到远程的 80 端口上,点击 OK 生效后,当我继续访问本地的 80 端口,实际返回的就是远程 80 端口的提供的内容了。解决与翻墙软件的冲突Charles 的工作原理是把自己设置为系统的代理服务器,但是我们开发者经常会利用 VPN 翻墙访问谷歌查找资料(这些翻墙软件的工作原理也是把自己设置成为系统的代理服务器),为了2者和平共处。我们可以在 Charles 的 External Proxy Settings 中将翻墙的代理端口等信息填写。同时我们需要关闭翻墙软件的自动设置,更改为“手动模式”。(使其不主动修改系统代理)总结Charles 功能强大、界面简洁,读完这篇文章并做出练习,相信你能很快掌握它,“工欲善其事,必先利其器” ,掌握了它,相信可以为你大大提高开发中调试网络的效率。Enjoy yourself ...
计算机网络 - 网络层(下)网络层(IP协议族)的内容相较于其他层显得有些多而繁杂,其中一个原因就是互联网的发展迭代实在太快,更强大更合适的协议和技术在不断的涌现。我们了解到的一些内容可能在不久的将来就会成为历史,比如接下来将要提到的IPv6,就是这“后浪”中的一员。IPv6互联网经过几十年的飞速发展,到 2011 年 2 月,IPv4 的 32 位地址已经耗尽。ISP 已经不能再申请到新的 IP 地址块了。解决 IP 地址耗尽的根本措施就是采用具有更大地址空间的新版本的 IP,即 IPv6。IPv6引进的主要变化更大的地址空间。IPv6 将地址从 IPv4 的 32 位 增大到了 128 位。扩展的地址层次结构。灵活的首部格式。 IPv6 定义了许多可选的扩展首部。改进的选项。 IPv6 允许数据报包含有选项的控制信息,其选项放在有效载荷中。IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。原来的 IPv4 首部是 4 字节对齐。支持即插即用(即自动配置)。因此 IPv6 不需要使用 DHCP。IPv6数据报格式IPv6数据报由两大部分组成:基本首部 (base header)有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。IPv6数据报的基本首部由上图可以看出,IPv6对首部的部分字段进行了更改:取消了首部长度字段,因为首部长度是固定的 40 字节;取消了服务类型字段;取消了总长度字段,改用有效载荷长度(payload length)字段;取消了协议字段,改用下一个首部字段(next header);把 TTL 字段改称为跳数限制字段(hop limit);取消了检验和字段;取消了选项字段,而用扩展首部来实现选项功能。扩展首部IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。这样就大大提高了路由器的处理效率。冒号十六进制记法在 IPv6 中,每个地址占 128 位,为了使地址再稍简洁些,IPv6 使用冒号十六进制记法(colon hexadecimal notation, 简写为 colon hex)。例如:68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF在十六进制记法中,允许把数字前面的 0 省略。例如把 0000 中的前三个 0 省略,写成 1 个 0。同时,一连串连续的零可以为一对冒号所取代,即零压缩 (zero compression)FF05:0:0:0:0:0:0:B3可压缩为: FF05::B3需要注意的是,在任一地址中只能使用一次零压缩IP多播多播(Multicast),从字面上理解就是一对多的通信 – 一个源点发送到许多个终点。下面这张图有助于理解不同通信形式的特点:在互联网上进行多播就叫做 IP 多播。互联网范围的多播要靠路由器来实现。能够运行多播协议的路由器称为多播路由器(multicast router)。当然它也可以转发普通的单播IP数据报。多播IP地址IP 多播所传送的分组需要使用多播 IP 地址。在多播数据报的目的地址写入的是多播组的标识符,即IP地址中的 D 类地址。网际组管理协议 IGMP为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP (Internet Group Management Protocol) (还记得五层协议里这个与ICMP肩并肩的兄弟吗?)IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。IGMP的工作阶段1、加入多播组当某个主机加入新的多播组时,该主机应向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器。2、探寻组成员变化情况因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。虚拟专用网 VPNVPN这三个字母近年来承受了太多它本不该承受的压力。它真的有那么“神秘”吗?我们不如先从它的名字“虚拟专用网”说起。首先,什么是“专用网”?简而言之,专用网就是仅在内部使用,不与外界通信的网络。为了和全球范围的互联网相区分开来,它们使用一种“专用地址 (private address)”,专用地址只能用作本地地址而不能用作全球地址。使用这种专用地址的互联网络就是“专用网”。并且,因为各个本地机构间是独立的,对于不同的机构,这些专用地址是可以重用的,故专用IP地址也叫做可重用地址 (reusable address)。那么为什么说是“虚拟”专用网呢?因为虚拟专用网利用公用的互联网作为本机构各专用网之间的通信载体,而并没有真正使用通信专线。故VPN只是在效果上和真正的专用网一样,所以叫“虚拟专用网”。虚拟专用网的实现(咳咳,这一部分可能没有你想象的那么一颗赛艇)如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。一个机构要构建自己的 VPN 就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。这种通信技术也称之为“隧道技术”。因为对外界来说,专用网内部之间的通信,就像在一个隧道中一样,对外界是隔绝的。远程接入VPN为了使得专用网更“灵活”,我们有了远程接入 VPN (remote access VPN)技术。如果在外地工作的员工拨号接入互联网,则驻留在员工 PC 机中的 VPN 软件可在员工的 PC 机和公司的主机之间建立 VPN 隧道。建立连接后,外地员工与公司通信的内容就是保密的,员工们便感到好像就是使用公司内部的本地网络。至于虚拟专用网的实操应用,咳咳,一般人我不告诉他。 ...
计算机网络 - 网络层(中)这篇文章是网络层介绍上篇的后续部分。网际控制报文协议 ICMP为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。虽然ICMP 报文是装在 IP 数据报中,作为其中的数据部分,但是ICMP仍然是IP层的协议,而非高层协议。ICMP 报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。 ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。详细的ICMP报文的分类可见维基百科ICMP差错报告报文ICMP差错报告报文可分为以下几种类型终点不可达 (Destination Unreachable)时间超过 (Time Exceeded)参数问题改变路由(重定向)(Redirect)我们先以“终点不可达”报文为例对于ICMP差错报告报文的组成有一个比较直观的了解。ICMP询问报文ICMP询问报文可分为以下几种类型回送请求和回答报文时间戳请求和回答报文ICMP的应用举例PINGPING (Packet InterNet Groper)用来测试两个主机之间的连通性。使用了 ICMP 回送请求与回送回答报文。PING 是应用层直接使用网络层 ICMP 的例子,它没有通过运输层的 TCP 或UDP。我们打开电脑的终端,便可以Ping自己想要访问的主机IP地址(域名),测试一下连通性。比如,我们可以ping一下segmentfault.comTracerouteTraceroute用来跟踪一个分组从源点到终点的路径。它利用 IP 数据报中的 TTL 字段和 ICMP 时间超过差错报告报文实现对从源点到终点的路径的跟踪。我们同样可以在终端测试:互连网的路由选择协议分层次的路由选择协议互联网采用分层次的路由选择协议。原因是:互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。自治系统 AS (Autonomous System)定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。尽管一个 AS 使用了多种内部路由选择协议和度量,但重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。两大类路由选择协议“路由器”和“网关”在这里可以视作同义词。内部网关协议 IGP (Interior Gateway Protocol)在一个自治系统内部使用的路由选择协议具体的协议有多种,如接下来会介绍的RIP和OSPF外部网关协议 EGP (External Gateway Protocol)用于将路由选择信息传递到另一个自治系统中目前使用的最多的是 BGP-4内部网关协议 RIP路由信息协议 RIP (Routing Information Protocol) 是内部网关协议 IGP 中最先得到广泛使用的协议。RIP 是一种分布式的、基于距离向量的路由选择协议。RIP 协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加 1。(这里的“距离”实际上就是指“最短距离”)RIP 允许一条路径最多只能包含 15 个路由器。“距离”的最大值为 16 时即相当于不可达。RIP协议的特点仅和相邻路由器交换信息交换的信息是当前本路由器所知道的全部信息,即自己的路由表按固定的时间间隔交换路由信息*“好消息传播得快,坏消息传播得慢”RIP报文以目前广泛使用的RIP version2为例,简单了解一下RIP报文的组成:路由表的建立与更新距离向量算法路由器收到相邻路由器(其地址为 X)的一个 RIP 报文:(1) 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。(2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤:若项目中的目的网络不在路由表中,则把该项目加到路由表中。 否则 若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。 否则 若收到项目中的距离小于路由表中的距离,则进行更新, 否则,什么也不做。(3) 若 3 分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。(4) 返回。文字叙述看着有点累,不过理解了“不同路径选短的,同样路径选新的”的思路就会很容易。RIP只与相邻路由交换信息不可避免会带来路由更新的一类延迟,及之前提到的“好消息传得快,坏消息传得慢”。“好消息传得快,坏消息传得慢”实际上是信息传送延迟造成路由器的“误判”例如:R1原本直接连接NET-A(可直接交付),但NET-A突然出故障,变为不可达。R1中关于NET-A不可达的更新还没有传递给连接着R1的路由R2,此时R2仍以为可以通过R1达到NET-A,便向R1发送<NET-A,2,R2>的路由表;R1收到后以为R2可以到达NET-A(其实已经不行了),便更新自己的路由表为<NET-A,3,R2>,并将更新发送出去;R2收到更新后将自己的路由表更新为<NET-A,4,R1>,并将更新发送出去;如此来来回回直到两个路由器的路由表跳数都更新至16才确定了NET-A不可达。为了克服RIP的缺点,我们便开发出了OSPF协议。内部网关协议 OSPF开放最短路径优先协议,即OSPF(Open Shortest Path First),如上所述,是为克服 RIP 的缺点在 1989 年开发出来的。OSPF协议的特点向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的“度量”(metric)。只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息OSPF 的更新过程收敛得快,这是它非常重要的一个优点,也是它弥补RIP不足的关键。链路状态数据库(link-state database)由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。同时,为了使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干个更小的范围,叫做区域。划分区域后,利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。OSPF 使用层次结构的区域划分。在上层的区域叫做主干区域 (backbone area)。主干区域的标识符规定为0.0.0.0,用来连通其他在下层的区域。 OSPF还有一点与RIP不同,即OSPF 不用 UDP 而是直接用 IP 数据报传送。OSPF 构成的数据报很短,这样做可减少路由信息的通信量。OSPF有五种分组类型下图简单说明了OSPF的五种分组类型以及它们所能完成的操作外部网关协议 BGPBGP 是不同自治系统的路由器之间交换路由信息的协议。 默认为当前较新的版本BGP-4。互联网的规模太大,使得自治系统之间路由选择非常困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。因此,边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP发言人每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” (BGP speaker)。通过它与其他自治系统(中的 BGP 发言人)交换路由信息。BGP交换路由信息一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息。使用 TCP 连接交换路由信息的两个 BGP 发言人,彼此成为对方的邻站(neighbor)或对等站(peer)。BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列 AS。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各 AS 的较好路由。在众多路由选择协议中,BGP是为数不多的使用TCP作为传输协议的路由选择协议。BGP有四种分组类型打开 (OPEN) 报文,用来与相邻的另一个BGP发言人建立关系。更新 (UPDATE) 报文,用来发送某一路由的信息,以及列出要撤消的多条路由。保活 (KEEPALIVE) 报文,用来确认打开报文和周期性地证实邻站关系。通知 (NOTIFICATION) 报文,用来发送检测到的差错。路由器的构成路由器大家肯定已经不陌生了,在概论部分便提到它是实现“分组交换”的重要工具;本章前面也花了大篇幅讨论路由路径的选择。简而言之,路由器的工作就是将某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。 也就是我们所说的“转发分组”。整个的路由器结构可划分为两大部分:路由选择部分分组转发部分路由选择部分也叫做控制部分,其核心构件是路由选择处理机路由选择处理机的任务是根据所选定的路由选择协议(即上面提到的各种网关协议)构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。分组转发部分由三部分组成:交换结构 (switching fabric):又称为交换组织,其作用是根据转发表 (forwarding table) 对分组进行处理输入端口输出端口“转发”(forwarding)与“路由选择”(routing)的区别“转发”(forwarding) 就是路由器根据转发表将用户的 IP 数据报从合适的端口转发出去。“路由选择”(routing) 则是按照分布式算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。输入端口路输入端口里面装有物理层、数据链路层和网络层的处理模块。数据链路层剥去帧首部和尾部后,将分组送到网络层的队列中排队等待处理。这会产生一定的时延。 输入端口中的查找和转发功能在路由器的交换功能中是最重要的。输出端口输出端口里面装有物理层、数据链路层和网络层的处理模块。在网络层的处理模块中设有一个缓冲区(队列)。当交换结构传送过来的分组的速率超过输出链路的发送速率时,来不及发送的分组就必须暂时存放在这个队列中。数据链路层处理模块将分组加上链路层的首部和尾部,交给物理层后发送到外部线路。交换结构交换结构负责把分组从一个输入端口转移到某个合适的输出端口。有三种常用的交换方法通过存储器通过总线通过纵横交换结构(互联网络)下一节会介绍IPv6和虚拟专用网等相关知识,later~ ...
计算机网络 - 网络层(上)两种服务在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。一种观点认为,应该让计算机网络模仿电信网络,使用面向连接的通信方式。通信之前先建立虚电路(Virtual Circuit),以保证双方通信所需的一切网络资源。 (这里的虚网络表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接;与之相对的,电路交换的电话通信是先建立一条真正的连接具体可参见概述部分介绍另一种观点认为,应该让网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。采用这种设计思路,则网络的造价大大降低,运行方式灵活,能够适应多种应用。且每个分组独立选择路由进行转发。网际协议 IP网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。与 IP 协议配套使用的还有三个协议:地址解析协议 ARP(Address Resolution Protocol)网际控制报文协议 ICMP(Internet Control Message Protocol)网际组管理协议 IGMP(Internet Group Management Protocol)虚拟互联网络所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)。分类的IP地址IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。IP地址的编址方法分类IP地址。这是最基本的编址方法,在 1981 年就通过了相应的标准协议。划分子网。这是对最基本的编址方法的改进,其标准 [RFC 950] 在 1985 年通过。构成超网。这是比较新的无分类编址方法。 1993 年提出后很快就得到推广应用。分类IP地址IP 地址 ::= { <网络号>, <主机号>}一般表示IP地址采用点分十进制记法,将每个八位二进制数(1 byte)转换为十进制数。其中D类地址为多播地址;E类地址保留为今后使用。一般不可用的特殊IP地址网络号主机号作为源地址作为目的地址代表含义00可以不可在本网络上的本主机(见 6.6 节 DHCP 协议)0host-id可以不可在本网络上的某台主机 host-id全 1全 1不可可以只在本网络上进行广播(各路由器均不转发)net-id全 1不可可以对 net-id 上的所有主机进行广播127非全 0 或全 1 的任何数可以可以用作本地软件环回测试之用IP地址的一些特点1、IP地址实际上是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址;由于一个路由器至少应当连接到两个网络,故一个路由器至少应当有两个不同的 IP 地址。2、用转发器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号。3、所有分配到网络号的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。IP地址与硬件地址路由转发过程中,路由器仅根据目的站的IP地址进行路由选择,IP数据报首部的内容不变;而MAC帧每经过一个路由,都将首部的目的地址和源地址更新为下一个路由(主机)硬件地址和这个路由(主机)硬件地址。IP层屏蔽了传输中的细节。地址解析协议(ARP)每一个主机都设有一个 ARP 高速缓存 (ARP cache),里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。< IP address;MAC address;TTL >(TTL:地址映射有效时间)当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。收到 ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存。ARP 是解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。IP数据报的格式首部前部分(20字节)是固定长度,是所有IP数据报共有的;后面是一些可选字段,其长度可变。总长度:指首部和数据之和的长度。标志:最低位MF=1 表示还有分片;中间位DF=0时允许分片。片偏移:表示较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为单位。生存时间:记为TTL(Time To Live),指示数据报在网络中可通过的路由器数的最大值。协议:指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给那个处理过程。首部检验和:只检验数据报的首部,不检验数据部分。(采用 16 位二进制反码求和算法)IP层分组转发的流程在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)根据目的网络地址就能确定下一跳路由器,这样做的结果是:IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。只有到达最后一个路由器时,才试图向目的主机进行直接交付。特定主机路由虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由。默认路由 (default route)路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。如果一个主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。“下一跳”是在下层实现的当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。划分子网和构造超网划分子网从 1985 年起在 IP 地址中又增加了一个“子网号字段”(Subnet-ID),使两级的 IP 地址变成为三级的 IP 地址。这种做法叫做划分子网 (subnetting) 。优点减少了 IP 地址的浪费使网络的组织更加灵活更便于维护和管理子网掩码子网掩码 (subnet mask)用于找出 IP 地址中的子网部分。 子网掩码长度为32位(IP地址的长度):某位 = 1:IP地址中的对应位为网络号和子网号某位 = 0:IP地址中的对应位为主机号路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。(目的网络地址,子网掩码,下一跳地址)划分子网情况下的分组转发(1) 从收到的分组的首部提取目的 IP 地址 D。(2) 先用(本网络内部)各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行 (3)。(3) 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行 (4)。(4) 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。(5) 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 (6)。(6) 报告转发分组出错。无分类编制CIDR(Classless Inter-Domain Routing)CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。IP 地址从三级编址(使用子网掩码)又回到了两级编址。IP地址 ::= {<网络前缀>, <主机号>} CIDR 使用“斜线记法”(slash notation)即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。例如: 220.78.168.0/24。CIDR 地址块CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。路由聚合 (route aggregation) 或构成超网 (supernetting)一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。可以更加有效地分配 IPv4 的地址空间,可根据客户的需要分配适当大小的 CIDR 地址块。最长前缀匹配使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配 (longest-prefix matching)。使用二叉线索查找路由表为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索 (binary trie)。IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。 ...
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由mariolu发表于云+社区专栏序言目前HTTP/2.0(简称h2)已经在广泛使用(截止2018年8月根据Alexa流行度排名的头部1千万网站中,h2占比约29%,https://w3techs.com/technolog…)。写此文章的目的是:h2作为较新的技术,并逐渐占有率广泛,虽然目前有更新的QUIC,但其实现思路类似于h2。颠覆以往的HTTP/1.x,H2的创造性的技术值得我们细细品味。此篇文章根据笔者在h2开发经验和思考,向你介绍全面的h2知识以及是非功过。本篇更注重于帮助读者理解h2的设计思路、亦可作为一篇RFC导读或者总结。第一话、追踪溯源图1、HTTP年鉴图早在1991年,伴随WWW诞生之初,HTTP/0.9协议已经提出。HTTP0.9是简单且应用受限的协议。支持去网络主机获取对应路径的资源。但是没有扩展属性。其协议之简单甚至只用下面一个访问谷歌主机的例子概括了HTTP/0.9的全部。如下所示,协议只支持GET,没有http头;响应只能是超文本。telnet google.com 80Connected to x.x.x.xGET /about(Hyper text)(Conection closed)随着人们对富媒体信息的渴望以及浏览器的普及,HTTP/1.0在1996年被提出来。HTTP/1.0的很多特性目前还被广泛使用,但是仍然像HTTP/0.9一样一次请求需要创建一次的tcp连接。随即短短几年时间内,HTTP/1.1以RFC标准形式再次展现在人们眼前。此时的HTTP协议1.1版本已经重新设计了长连接、options请求方法、cache头、upgrade头、range头、transfer-encoding头, 以及pieline(in order)等概念。而我们另一个所熟知的HTTPS的SSL/TLS技术各个版本差不多在后来的十年间逐渐被提出。出于安全考虑,互联网通信间的防火墙路由交换机等设备,这些设备一般仅会开发有限的端口(如80和443)。各种版本的通信协议只能复用这些端口。HTTP1.1的80端口设计了upgrade请求头升级到更高级的协议,而443端口为了避免多消耗个网络RTT,在tls握手过程中使用了NPN/ALPN技术直接在通信之前保持CS两端的协议一致。NPN/ALPN是是TLS协议扩展,其中NPN是Google为实现spdy提出的。由服务端提供可支持的协议,供客户端选择。ALPN则是更接近于HTTP交互的方式,由客户端先发出使用某种协议的请求,由服务端确认是否支持协议。ALPN为了HTTP2诞生做铺垫。另外一个不得不提的是spdy协议。Spdy旨在解决HTTP1.1的线头阻塞问题(后面章节有详细讨论)于2009被google提出。同时分别于2012提出了spdy3.0实现了流控制,2013-2014期间提出了流优先级,server push等概念。Spdy的存在意义更像是http2.0的体验服。它为探索HTTP继续演进道路做了铺垫。第二话、人机交互汇编是效率最高的语言之一,但是又是最晦涩难懂的语言之一。而人脑易懂的编程语言往往牺牲性能作为折衷。简单说,HTTP/1.x协议就是为了人类语言习惯所设计的协议,但是转换成机器执行协议并不是高效的。让我们在回顾下计算机执行解析HTTP1.x的流程。GET / HTTP/1.1<crlf>Host: xxx.aa.com<crlf><crlf>对应的解析伪代码是loop while(! CRLF) read bytes end while if line 1: parse line as Request-Line else if empty line: Break out and We have done else If start with non-whitespace parse header else if space continue with last heade end ifend loop在伪代码解析流程可以看到,肉眼看起来简洁的协议解析起来是这么的费劲。而且在HTTP服务器中还要考虑这种问题:字节行的长度是未知的,也不知道预先分配多大内存。HTTP/2.0使用了计算机易懂的二进制编码信息,而且得向上兼容HTTP的涵义。具体我们来看下他是如何做到的。像大多数通信协议一样,桢是传输最小单位。桢分为数据帧和控制桢。数据帧作为数据的载体,控制桢控制信道的信令。h2桢的通用格式为首部9字节+额外的字符。正如你能想到的那样,桢的第一个部分是描述长度,第二个部分描述了桢的类型,第三个部分描述了标志Flag,第四个部分是唯一序列号。这是所有桢的通用头。通用头紧接的是桢的实体。图4展示了桢的结构。图2、通用桢的格式这样设计有什么好处呢。再来看一下桢的解析流程,你就会发现对计算机来说更简洁。loop read 9 byte payload_Length=first 3 bytes read payload swith type: Take actionend loopHTTP2.0使用header桢表达HTTP header+request line,data桢表达Body。header桢和data桢使用相同的stream id组成一个完整的HTTP请求/响应包。这里的stream描述了一次请求和响应,相当于完成了一次HTTP/1.x的短连接请求和响应。第三话、并行不悖上节讲到我们用h2桢完整表达了HTTP/1.x。但是h2协议抱负远不止于此。它的真正目的是解决之前HTTP1.x的线头阻塞问题、改善网络延迟和页面加载时间。我们知道一个完整的网页包含了主页请求和数次或数十次的子请求。HTTP/1.1已经可以并行发出所有请求.但是HTTP本身是无状态的协议,它依赖于时间的顺序来识别请求和响应直接的对应关系。先来的请求必须先给响应。那么如果后面的响应资源对浏览器构建DOM或者CSSOM更重要。那它必须阻塞等待前者完成。当然这也难不倒我们,我们可以多开几条tcp连接(浏览器规定一个origin(协议+host+port)最多6个)或者合并资源来减少不必要的阻塞。这是有代价的。首先tcp建连的开销,其实合并资源带来一小块子资源过期导致整个合并资源的缓存过期。对此,h2有一揽子的解决方案,接下来一一道来。h2在一个tcp连接创建多个流。每个流可以有从属关系,比如说根据浏览器加载的优先级顺序(主请求>CSS>能改变DOM结构的JS文件>图片和字体资源文件)建立一条依赖关系链。处于同一等级的依赖关系中可以设置权重。权重用于分配传输信道资源多少。图6例子说明了有一次主页请求index.html、一次main.css,一次jq.js以及一些image文件和字体文件qq.tff图3、h2请求的依赖树HTML的优先级最高,在HTML传输完成之前,其他文件不会被传输。HTML传输完成后,JS和CSS根据其分配的权重占比分配信息传输资源。如果CSS传输完成后,TFF和PNG如果是相同权重,那么他们将占有1/4的信道资源。这里抛出3个问题和答案。如果CSS被阻塞了,那么 JS 得到本属于CSS的通信资源如果CSS传输完成但没有被移依赖树, TFF和PNG继承CSS的通信份额 (假设TFF和PNG权重一样,那么各分得1/4通信资源).如果CSS在依赖数被移除,JS, TFF, PNG平分通信资源(假设3个权重一样,那么三者各分得1/3通信资源)第四话、众星捧月HTTP2还设计了一系列方案来改善网络的性能、包括流量控制,HPack压缩,Server Push。什么你说TCP已经有流量控制了,HTTP不是多此一举吗?没错,但是在单条TCP内部,各个流可是没有流量控制。流量控制使用了Update Frame不断告知发送方更新发送的窗口大小(上限)。流量控制一个现实用途是阻塞不重要的请求,以腾出更大的通信资源给重要的请求使用。流量控制是不可以被关闭的,流量大小可以设置2的31次方-1(2GB)。不同的中间网络设备有不一样的吞吐能力。流控的另一个用途在于同步所有的中间设备交换机最小的上限。流量窗口初始大小为65535(2的16次方-1)。就像世界上的大多数财富聚集在少数人身上一样。在一份对48,452,989个请求的统计中,以下11个头占据了99%的数量,依名次递减分别是user-agent、accetp-encoding、accept-language、accept、referer、host、connection、cookie、origin、upgrade-inseure-request、content-type。http header的值也有很大相似性,比如说”/index.html“, “gzip, deflate”。Cookie也携带冗余的信息。这些都组成了http header大量可以压缩的内容。而在一份GET请求和一个304响应或者content-length很少的响应中,这些头占据了很大比例的通信资源。2016年发布的一份HTTP报告中,请求头大约在460bytes,对一个通常的网页,平均会有140个请求对象。这些头总共需要63KB。这些量很有可能会是首屏和页面加载时间优化的瓶颈。可能你会说用gzip等压缩算法这些请求头,不就完了吗?的确spdy就这样干过,直到2013年BREACH攻击暴露了gzip压缩在https应用的安全性,这种攻击让攻击者很容易获得session cookie等数据。于是才有了HPACK。HPACK简单来说就是索引表,包括静态表和动态表。静态表由RFC定义,从不改变,静态表预留了62个表项。每个连接的通信双方维护着动态表。H2协议使用索引号代表http中的name、value或者name-value。假设被索引的是name,value没有索引,那么value还可以用霍夫曼编码压缩。在预定的头字段静态映射表 中已经有预定义的 Header Name 和 Header Value值,这时候的二进制数据格式如图4, 第一位固定为1, 后面7位为映射的索引值。图8的83就是这样的,83的二进制字节标示1000 0011,抹掉首位就是 3 , 对应的静态映射表中的method:POST。图4、index索引name和value图5、抓包示意预定的头字段静态映射表中有 name,需要设置新值。图6所示例子,一个指定 path的Header,首字符 为 44 ,对应的二进制位0100 0100。前两个字符为 01 ,Index 为 4 ,即对应静态映射表中的 path 头。第二个字符为 95对应的二进制位 1001 0101,排除首字符对应的 Value Length 为 十进制的21。即 算上 44,一共23个字符来记录这个信息。图6、index索引name和自定义value图7、抓包示意预定的头字段静态映射表中没有 name,需要设置新name和新值。40 的二进制是0100 0000,02 的二进制是0000 0010,后七位的十进制值是 2,86 的二进制是1000 0110,后7位的十进制值是6。图8、index索引自定义name和自定义value图9、抓包示意明确要求该请求头不做hpack的indexHTTP2.0还有个大杀器是Server Push,Server Push利用闲置的带宽资源可以向浏览器预推送页面展示的关键资源,Server push有效得降低了页面加载时间。具体详情参考笔者的另一篇文章https://cloud.tencent.com/dev…。第五话、庖丁解牛HTTP2相比HTTP1更适合计算机执行。但是其二进制特性不易于人脑理解。这一话我们专门来讲讲关于http2的调试工具。Chrome(qq浏览器)可以按住F12查看h2协议。图13所示为浏览器网络时序图,列出了具体协议名称。chrome还可以在地址栏敲入chrome://net-internals/#http2查看到h2协议细节,如图11所示。点击相应的host就可以看到h2协商过程,如图12所示。图10、浏览器的网络时序图chrome://net-internals/#http2图11、chrome调试h2图12、h2协商过程wireshark(需和chrome或firefox搭配使用)。设置环境变量SSLKEYLOGFILE=c:tempsslkeylog.log。然后在Wireshark->Preferences->Protocols->SSL配置key所在路径。图13、wireshark配置图14、wireshark抓h2包Nghttp2是一个完整的http2协议实现的组件。作者也参与过spdy实现。目前nghttp2库被很多知名软件作为h2协议实现库使用。另外nghttp2也自带了h2协议的分析工具。图18展示了在明文状态使用upgrade头升级到h2c。图19展示了在https基础上升级到h2。图15、明文状态使用upgrade头升级到h2c图16、展示了在https基础上升级到h2Curl的—http2选项(需要和nghttp2一起编译)图17、支持h2的curl客户端调试Github还有些实用的http2工具组件,诸如chrome-http2-log-parser、http2-push-manifest等组件,笔者后续会专门开篇文章介绍这些工具。对于移动端的调试,ios可以用charles proxy做代理,android需要开发者模式使用移动端的chrome,笔者在移动端使用较少,这里就不做展开。第六话、雕栏玉砌H2怎么部署呢,目前主流服务端像nginx、apache都已经支持http2,主流的客户端curl和各种浏览器(包括移动端safari和chrome-android)基本也支持http2。代理服务器如ATS、Varnish,Akamai、腾讯云等CDN服务也支持http2。那么怎么把一套网站部署到h2。或者说部署h2网站和之前h1网站有什么不一样?如果是自己的源站,那么请确保服务器支持TLS1.2已经RFC7540所要求的加密套件,h2需要保证支持alpn。你可以使用ssllabs等网站检查。对于h2服务器的要求是h2必须了解如何设置流的优先级,h2服务器需要支持server push。h2客户端需要尽量多的发送请求。如果你的网站是从http1.x迁移过来的,那么之前对于http1.x所做的优化可能无任何帮助甚至更差。合并小文件不在需要,因为额外的小文件请求在h2看来只是开销很少。并且如果大文件的局部更改使得整个大文件缓存失效。在http1.0时代使用多个域名来并发http连接,在http2也毫无必要,因为http2天生就是并发的。http1.x做的优化比如说图片资源文件不使用cookie来减少请求大小,http2的header压缩功能也减少了这种影响。即使不做这种优化也亦可。像合并css、小图片带来的增益在http2.0也是可忽略的。如果网页使用第三方网站组件,那么请尽可能减少使用第三方网站组件。第三方网站不能保证支持h2,所以它可能成为木桶理论的最大短板。谨慎使用2.0-1.x的部署方案,h2流转化成h1请求。因为这样无法发挥h2性能。图18、2.0-1.x的部署方案CDN代理服务器的h2支持,可以屏蔽h2强制走tls的代理服务器。如图19,代理可以在与各种协议客户端的网络环境下,切断和客户端的tls连接,和服务器新建连接。也可以作为load balancer,相当于HTTP2.0用户和HTTP2.x服务器直接通信。图19、带tls客户端功能的代理图20列举如果绕过proxy到达h2服务器。此时的proxy相当于tcp转发的load balance功能的设备。如果该proxy支持tls的alpn协议,那么它也可以选择HTTP代理功能,和h2服务器可以建立加密连接。如果即不支持alpn,也不支持tcp转发。那么proxy只能用upgrade升级成h2协议。图20、经过代理服务器的H2部署方案第七话、十全九美HTTP2.0是建立在TCP之上,所以TCP的所有缺点他都有,所以H2能发挥最大性能得益于调优的tcp协议栈。TCP的慢启动特性,决定h2一开始的并发流量不会太大,TCP以及SSL的握手连接也会拖慢h2的首包网络耗时。QUIC则完全地抛弃TCP,在UDP基础上实现了HTTP2的一系列特性。同时做了应用层的如TCP的可靠性保障。同时这些TLS1.3传输更快更简洁。这些都为HTTP2.0进化到HTTP3.0提供了一些思路。总结以上内容都来源于笔者的实践经验和理论总结。篇幅所限不能涵盖各个细节。具体可以继续参考RFC7540和RFC7541协议。问答没有“http | https”的网址怎么实现?相关阅读我是怎么一步步用go找出压测性能瓶颈HTTP/2之服务器推送(Server Push)最佳实践低于0.01%的极致Crash率是怎么做到的? 【每日课程推荐】新加坡南洋理工大学博士,带你深度学习NLP技术 ...