引:
计算机网络是个非常复杂的系统,例如,要想实现最简单的网络连接的两台计算机之间互相传送文件,首先就必须要有传送数据的通路,但这远远不够,还必须要经过一系列复杂的过程,其中就有一下几点:
发起通信的计算机必须将数据通信的通路激活;要告诉网络如何识别接收数据的计算机;发起通信的计算机必须查明对方计算机是否已开机,并且与网络连接正常;发起通信的计算机中的应用程序必须搞清楚在对方计算机的文件管理程序是否已做好接收和存储文件的准备工作;若计算机的文件格式不兼容,则其中的一台计算机必须完成文件格式的转换功能;对出现的各种差错和意外事故,应当有可靠地措施保证对方计算机最终能收到正确的文件......
以上几点只是复杂过程中的一部分,还有很多很多,说这些只是想说明相互通信的两个计算机系统必须高度协调工作才行,而这种“协调”是相当复杂的。为了设计这样复杂的计算机网络,早在最初ARPANTE设计时就提出了分层的方法。在1974年,IBM公司就宣布了系统网络体系结构SNA,而现今的IBM大型机构建的专用网络仍在使用SNA。其他公司也研发出了自己公司的具有不同名称的体系结构。如此多的结构又优点也有缺点,不同体系之间的计算机无法实现互联互通,于是乎,ISO于1977年推出了开放系统互连基本参考模型,也就是我们常说的OSI七层模型。但理想与现实的差距就在于,你可以达到全球所有计算机的互联互通,但是由于因特网早于OSI七层模型全球商用标准普及之前就已覆盖全世界,因此最终出现了TCP/IP协议,四层模型不仅可以完全普及化,同时也利于商业市场化,从商业层面而言,四层模型才是成功的。
为了使不同计算机厂家生产的技术机能够相互通信,以便在更大的范围内建立技术机网络,国际化标准组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型。它将计算机网络系结构的通信协议化为七层,自下而上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
分层的好处:1、通过每一层实现一种相对独立的功能来简化问题;2、每一层的设计是独立的,它不必关心下一层是如何实现的,只需知道下一层为我提供的服务,和我必须为上一层提供哪些服务;3当由于技术的变化使某层的实现需要变化时,不影响其他的层次。
TCP/IP四层模型
TCP/IP是一个四层的体系结构,主要包括:应用层、运输层、网际层和网络接口层。从实质上讲,只有上边三层,网络接口层没有什么具体的内容。
五层体系结构
五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。
五层协议只是OSI和TCP/IP的综合,实际应用还是TCP/IP的四层结构。为了方便可以把下两层称为网络接口层。
每一层的协议
物理层:RJ45、CLOCK、IEEE802.3(中继器、集线器),ISO2110,光导纤维,双绞线
数据链路层:wi-fi, ATM, DTM,令牌环,以太网,PPPoE ,PPP、FR、HDLC、VLAN、MAC(网桥、交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(交换机)
传输层:TCP(T/TCP · Fast Open) UDP DCCP SCTP RSVP PPTP TLS/SSL
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:DHCP(v6) DNS FTP Gopher HTTP(SPDY、HTTP/2) IMAP4 IRC NNTP XMPP POP3 SIP SMTP SNMP SSH TELNET RPC RTCP RTP RTSP SDP SOAP GTP STUN NTP SSDP
物理层:
提供为建立、维护、和拆除物理链路所需要的机械的、电气的、功能的和规程的特性;有关的物理链路上传输非结构的位流以及故障检测指示。
物理层实现在物理媒体上透明地传送原始比特流。定义了激活、维护、和关闭终端用户之间机械的、电气的、过程的和功能的特性
数据终端设备DTE(用于处理用户数据的设备。如计算机路由器)
数据通信设备DCE(用于把DTE发出的数字信号转换成适用于传输介质上传输的形式。)
机械特性(物理连接器的尺寸、形状、规格)
电气特性(信号电平,脉冲宽度,频率,数据传送速率,最大传送距离等)
功能特性(接口引脚的功能作用)
规格特性(信号时序,应答关系,操作过程)
物理层的任务就是透明地传输比特流。
实现最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。
比特流(由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是数模转换与模数转换)。这一层的数据叫做比特。
例:快递寄送过程中的交通工具,就相当于我们的物理层,例如:汽车,火车,飞机,船。
数据链路层:
在网络层实体间提供数据发送和接收的功能和过程;提供数据链路的流控。
定义:将比特组合成字节,再将字节合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。
数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。
MAC子层处理CSMA/CD算法、数据出错效验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。在实际使用中,LLC子层并非必需的。
数据链路层是在物理线路上提供可靠的数据传输,使之对网络层呈现为一条无错的线路,同时将比特流转变为逻辑传输线路。
例:数据链路层的功能相当于快递准备发送前,需要装箱分类检查,去往相同目的地的放在一块,检查是否有违禁品。而且因为一卡车只能装2T的东西,所以要分开装载。
网络层:
控制分组传送系统的操作、路由选择、拥护控制、网络互连等功能,它的作用是将具体的物理传送对高层透明。
网络层通过IP地址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是最通常说的IP层。这一层就是我们常说的IP协议层。IP协议是Internet的基础
网络层的功能和服务(1、最佳路由选择和数据包中转2、流量控制和拥塞控制3、差错检测与恢复4、流量统计和记账)
例:网络层就相当于快递公司庞大的快递网络,全国不同的集散中心。比如说,从四川发往北京的顺丰快递,首先要到顺丰的成都集散中心,从成都集散中心再寄到北京顺丰集散中心。每个集散中心,就相当于网络中的一个IP节点。
传输层:
提供建立、维护、和拆除传送连接的功能;选择网络层提供最合适的服务;在系统之间提供可靠的透明的数据传送,提供端到端的错误恢复和流量控制。
传输层建立了主机端到端的连接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层 用户看到的只是在两个传输实体间的一条主线到主机的、可由用户控制和设定的、可靠的数据线路。
TCP(传输控制协议):面向连接、可靠传输、流控及窗口机制; 属于面向连接的网络协议
使用TCP的应用:web、电子邮件、文件传输程序
如何实现TCP的面向连接、可靠传输、流控及窗口机制?
---使用TCP的三次握手
UDP(用户数据报协议):无连接、不可靠传输、尽可能快的传输;属于无连接的网络协议
使用UDP的应用:域名系统(DNS)、视频流、IP语音(VoIP)
TCP的三次握手:
1、client向server发送SYN请求包
2、server收到client请求报文后,向client发送一个ACK确认报文的同时,会向client发送一个SYN请求包
3、client在收到server的SYN后,向server发送一个ACK确认报文
TCP的四次挥手:
1、client向server发送一个FIN拒绝包
2、server收到clinet的拒绝包之后,向client回复ACK确认包,确认关闭通信
3、server在发送完FIN的ACK的确认包后(此时是clnet单方面的通信关闭),向client发送一个FIN拒绝包
4、client在收到server的FIN拒绝包后,向server发送一个ACK确认包,确认关闭通信
5、server在收到client的ACK确认包,确认关闭通信
SYN是什么?ACK是什么?FIN是什么?SEQ是什么?
SYN(连接请求报文--SYNchronization):在连接建立时用来同步序号。当SYN=1而ACK=0时,表面这个是一个连接请求报文。对方若同意建立连接,则应在响应报文中使 SYN=1和ACK=1,因此,SYN置1就表示这是一个连接请求或者连接接受报文
ACK(请求确认报文):已成功接受序列号到ACK-1的数据,期望接收的下一个字节的数据为ACK
FIN(服务拒绝报文-finis):即完结、终结的意思,用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接
SEQ:发送的这个包中的第一个字节(如果由payload的话)的序号
三次握手的详细过程:
第一次握手:由client发送请求连接,SYN=1 ACK=0,TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是SEQ=X
第二次握手:server进行回复确认,SYN=1 ACK=1 SEQ=Y,ACK=X+1
第三次握手:client再进行一次确认,但是不用SYN,则ACK=1,SEQ=X+1,ACK=Y+1
4、三次握手完成,连接建立(三次握手、两次确认)
四次挥手的详细过程:
由于TCP连接时全双工,因此,每个方向必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到FIN只是意味着这一方向上没有数据流动了,也不会再收到数据,但是在这个TCP连接上仍能发送数据,直到另一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭
第一次挥手:client发送一个FIN,用来关闭clinet到server的数据传输,client进入FIN_WAIT_1状态
第二次挥手:server收到FIN后,发送一个ACK给client,确认序号为收到序号的+1(与SYN相同,一个FIN占用一个序号),server进入CLOSE_WAIT状态
第三次挥手:server发送一个FIN,用来关闭server到client的数据传输,seerver进入LAST_ACK状态
第四次挥手:client收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给server,确认序号为收到序号+1,server进入CLOSED状态,完成四次挥手
为什么建立连接是三次握手,而关闭连接却是四次挥手呢?
这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了,但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即CLOSE,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
TCP头部最小多少字节,最大多少字节?
TCP头部最少20字节,最大60字节
TCP头部
源端口(Source port):16bit 目的端口(Destination port):16bit
序列号(Sequence number):32bit
--------------------- 确认号(Acknowledgement number):32bit -------------------------
----------------------------------------------------------------------------------------
数据偏倚 保留(reserved):6bit URG ACK PSH RST SYN FIN 窗口(window):16bit
校验和(checksum):16bit 紧急指针(urgent):16bit
----------------------------------- 任选项----------------------------------------- --填充--
--- ---
-----------------------------------------信息数据区 ---------------------------------------------
** control bits:URG、ACK、PSH、RST、SYN、FIN**
URG(紧急位):设置为1时,首部中的紧急指针有效;为0时,紧急指针没有意义。
PSH(推位):当设置为1时,要求把数据尽快的交给应用层,不做处理
RST(复位):能把建立好的链接或者正在建立的连接打断(中断TCP连接,不需要ACK确认)
SYN(连接请求报文):请求建立连接
ACK (连接确认报文):确认一个连接的建立
FIN(连接结束报文):请求结束连接
通常的数据中都会带有PSH但URG只在紧急数据的时设置,也称“带外数据”,解释如下:
紧急数据:URG标志设置为1时,紧急指针才有效,紧急方式是向对方发送紧急数据的一种方式,表示数据要优先处理。他是一个正的偏移量,与TCP收不中序号字段的值相加表示紧急数据后面的字节,即紧急指针是指向紧急数据最后一个字节的下一个字节。这是协议编写上的错误,RFC1122中对此给出了更正说明,紧急指针是数据最后一个字节,不是最后字节的下一位置,TCP首部中只有紧急指针指出紧急数据的位置,他所指的字节为紧急数据,但没有办法指定紧急数据的长度。
URG=1,表示紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指向字节就是紧急数据)不进入缓冲区(一般不都是待发送的数据要先进入发送缓存吗?就直接交个上层进程,余下的数据都是要进入接收缓冲的;一般来说TCP是要等到整个缓存都填满了后在向上交付,但是如果PSH=1的话,就不用等到整个缓存都填满,直接交付,但是这里的交付仍然是从缓冲区交付的,URG是不要经过缓冲区的
TCP连接中出现RST的情况:
1、端口未打开/不存在:
服务器程序端口未打开而客户端来连接。这种情况是最为常见和好理解的一种。去Telnet一个未打开TCP的端口可能会出现这种错误。这个和操作系统的实现有关。在某些情况下,操作系统也会完全不理会这些发到未打开端口请求
其实客户端向服务器的某个端口发起连接,如果端口被处于TIME_WAIT状态状态的连接占用时,客户端也会收到RST
2、请求超时
3、提前关闭
关于TCP,我想我们在教科书里都读到过一句话,“TCP是一种可靠的连接”。而这可靠有这样一种含义,那就是操作系统接收到来自TCP连接中的每一个字节,我都会让应用程序接收到。如果应用程序不接收怎么办?那么就RST
4、异常中止连接
一方直接发送RST报文,表示异常中止连接。一但发送方发送复位报文字段,发送端所有排队等待发送的数据都被丢弃。应用程序可以通过socket选项SO_LINGER来发送RST复位报文
5、处理半打开状态
一方关闭了连接,另一方却没有收到结束报文(如网络故障),此时另一方还维持着原来的连接。而一方即使重启,也没有该连接的任何信息。这种状态叫做半打开状态。而此时另一方往处于半打开状态的连接写数据,则对方回应RST复位报文
checksum(数据校验):检测数据在传输的过程中是否出错,如果处出错则立马校验一下
Urgent(紧急指针):和URG相关联
滑动窗口具有流控功能(window):
窗口大小:决定了在收到确认之前可以发送的字节数
确认号:是期望接收到的下一个TCP segment的序列号
滑动窗口越大,可发送/接收的报文就越大
UDP头部
源端口(Source prot):16bit 目的端口(Destination prot):16bit
长度(Length):16bit 校验(Checksum):16bit
DATE DATE
总共有多少个端口?端口范围是多少?
端口号只有16位,而端口号为2^16=65536 个,而端口范围是0-65535
在传输的过程中,端口是如何进行选择的?
传输层在做数据分割的时候,有源端口,也有目的端口,发起访问的时候,源端口是随机的,目的端口是固定的
例:传输层相当于快递公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。
会话层:
提供两进程之间建立、维护和结束会话连接的功能;提供交互会话的管理功能,如三种数据流方向的控制,即一路交互、两路交替和两路同时会话模式。
会话层还利用在数据中插入校验点来实现数据的同步。负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
例:会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。当接收到表示层数据后,会话层将建立并记录本次会话,他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式。准备将资料寄出。等到确认公司B接收到此份报价表后,此次会话就算结束了,外联部的同事就会终止此次会话。
表示层:
表示应用进程协商数据表示;完成数据转换、格式化和文本压缩。
表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
例:由于公司A和公司B是不同国家的公司,他们之间的商定统一用英文作为交流语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英文。同时为了防止其他公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。
应用层:
提供OSI用户服务,例如事物处理程序、文件传送协议和网络管理等。
应用层也是OSI参考模型中最靠近用户的一层,是为计算机用户提供应用端口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP、HTTPS、FTP、POP3、SMTP等。
协议:
HTTP(80):超文本传输协议,提供浏览网页服务
Telnet(23):远程登录协议,提供远程管理服务
FTP(20、21):文件传输协议,提供互联网文件资源共享服务
SMTP(25):简单邮件传输协议,提供互联网电子邮件服务
POP3(110):邮局协议,提供互联网电子邮件服务
TFTP(UDP:69):简单文件传输协议,提供简单的文件传输服务
例:实际公司A的老板就是我们讲述的用户,而他要发送的商品报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商品合同,发一份询价单,等等。
对等通信:为了使数据分组从源传送到目的地,源端OSI模型的每一层都必须与目的端的对等层进行通信,这种通信方式称为对等层通信。在每一层通信过程中,使用本层自己协议进行通信。
广域网在OSI模型中的运作
WAN在OSI模型中。
WAN操作主要集中在物理层(OSI层1)和数据链接层(OSI层2)。WAN访问标准通常描述物理层的交付方式和数据链接层的要求。数据链接层的要求包括物理位置、流量控制和包装。
WAN访问标准由许多公认的组织定义和管理:
1.电信行业协会(TIA)
2.电子工业联盟(EIA)
3.国际标准化组织(ISO)
4.电子工程师学习(IEEE)
第一层协议描述了如何为通信服务提供商提供电气、机械、操作和功能连接服务。
第二层协议定义了如何将数据封装到远程位置和传输结果帧的机制。使用了各种技术,如点对点协议、帧中继和异步传输模式。这些协议中的一些协议使用相同的基本框架或高级数据链控制的子集。
大部分WAN链接都是点对点的。所以一般不使用第二层帧中的地址字段。
通用WAN术语。
WAN和LAN的主要区别在于,公司或组织必须订阅外部WAN服务提供商才能使用WAN运营商的网络服务。WAN使用运营商服务提供的数据链接访问互联网,并连接组织的不同位置。这些数据链接也连接到其他组织、外部服务和远程用户。
WAN的物理层描述了公司网络和服务提供商网络之间的物理连接。图1-13描述了通常用于描述WAN连接的术语:
1.客户驻地设备(CPE):
CPE由企业边缘的设备和内部布线构成,连接到运营商的链接。订户(即客户)拥有CPE或向服务提供商租赁CPE。在这种情况下,订户是安排服务提供商提供WAN服务的公司。
2.数据通信设备(DCE):这是EIA术语。ITU也称为数据电路终端设备。DCE由将数据放入本地电路的设备构成。DCE主要提供连接到WAN云的通信链接的接口。
3.数据终端设备(DTE):这些客户设备通过WAN传输来自客户网络或主机的数据。DTE通过DCE连接到本地电路。
四、分界点:这一点建在建筑物或综合建筑物上,以便将客户设备与服务提供商设备分开。从物理上讲,分界点是电缆接线盒,它把CPE接线盒连接到本地环路上。通常放在技术人员容易访问的地方。边界点是连接责任由用户改为服务提供商的场所。当出现问题时,有必要确定用户或服务提供商是否负责故障排除或维护。
5.本地环路:该环路是将CPE连接到服务提供商CO的实际铜缆或光缆。局部环路有时也叫最后一英里。
6.中心局(CO):CO是将CPE连接到供应商网络的当地服务供应商设施和建筑物。
7.收费网络:该网络由WAN供应商网络中的长途全数字光纤通信线路、开关、路由器等设备组成。