概念
网络层是介于传输层和数据链路层之间,传输层提供端到端的进程间通信服务,数据链路层的功能则是实现物理链路直接相连的两个节点之间的数据帧传输服务, 网络层则关注的是如何将承载传输层报文段的网络层数据报从源主机送达到目的主机。
因为在大部分的网路环境下,绝大部分的数据报都要经过多个路由器才能从源主机送达到目的主机。因此网络层需要实现两项重要的功能:
1**.转 发:**当通过一条输入链路接收到一个分组后,路由器需要决策通过哪条输出链路将分组发送出去,并将分组从输入端口转发到输出端口。
2.**路由选择:**当分组从源主机流向目的主机是,必须通过某种方式决定分组经过的路由或者路径,计算分组所经过的路径的算法称为路由选择或者是路由选择算法。
TCP的基础是Socket,在TCP的链接中我们会使用到ServerSocket和Socket,那么,
2.Socket是什么?
Socket是应用层与TCP/IP协议簇通讯的中间抽象层,Socket是一组接口,在设计模式中,Socket的设计都类似于黑盒子,实现者无需关心内部代码实现,只需使用Socket提供的API即可。
socket通讯流程简介
接下来我们用JAVA来实现基于TCP/IP协议的网络通讯:
既然是通讯,至少存在两个对象。我们在这里建立一个Server端,一个user端。
我们先来实现Server端代码:
务端代码1
服务端代码2
user端代码:(user端我们需要知道服务器端的IP地址)
user端1
user端2
代码实现很简单。下面我们说说几个注意事项:
第一:运行前,先运行服务器端,然后确定server端IP地址,user端根据IP才能找到对应的主机。
第二:端口号一定要相同。
第三:不管是Server端还是user端,用完资源一定要记得释放,养成良好的习惯。
第四:实现多人通讯,一般使用的方法就是建立线程池,或者服务器端添加多线程。
学习TCP协议的三次握手以及四次挥手,重点了解为什么要三次握手,为什么要四次挥手,在整个过程中状态是如何变迁的。(经典的状态图以及握手挥手图)
a.为什么要三次握手?不是一次,两次或者四次。我们来论证一下,如果只有一次会发生什么情况,a向b发起连接请求,假设b没收到,则b其实完全不知道a发起了请求,而a也完全不知道b收没收到,所以一次握手是不可靠的;如果两次握手呢,a向b发起连接请求,b收到a的请求给a回复一个请求,假设此时a收到了b的回复,a知道了b已经ready了,可b完全不知道a是否ready,有可能a并没有收到b的请求,也有可能收到了,但这些b都完全不知道,所以只是单向的建立了连接;如果是四次握手呢,其实第2次让a知道b ready了,第三次让b知道a也ready了,第四次完全就是多余了,会浪费网络资源。
b.为什么要四次挥手?不是3次?实际上两边连接完全可以分开看,用2次挥手断开其中一边连接,用另外2次挥手断开另一边的连接,最终完成整个连接关闭。之所以这样设计,是因为有可能某一边数据还未传输完,连接还未关闭。因为TCP被设计为全双工协议,可以任何一边单向发送数据。
3握手及挥手过程
3.1 三次握手(重点)
TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。
下面来看看三次握手的流程:
三次握手
第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
3.2 四次挥手(重点)
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
下面来看看四次挥手的流程:
四次挥手
中断连接端可以是客户端,也可以是服务器端。第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。
第二节 数据报网络和虚电路网络
数据报网络
按照目的主机进行路由选择的网络称为数据报网络。
用数据报方式发送数据时,将每个分组作为一个独立的数据报进行发送。
每个分组交换机上有一个把目的主机映射到某个输出链路上的转发表,每当有一个分组到达分组交换机时,该分组交换机就会检查分组的目的地址,并以改地址检索自己的转发表,决策合适的输出链路,然后将该分组发送到这个输出链路之上。
虚电路网络
虚电路网络在网络层提供面向连接的分组交换服务。
通信之前双方需要先建立虚电路,通信结束后再拆除虚电路。虚电路是在源主机和目的主机一条路径上建立的一条网络层逻辑连接,为区别于电路交换,我们称之为虚电路。
每条虚电路上都有虚电路号,称之为虚电路标识(VCID)
一条虚电路(VC)由3个要素构成:
1.从源主机到目的主机之间的一条路径;
2.该路径上每条链路各有一个虚电路标识(VCID);
3.该链路上每台分组交换机的转发表中记录着虚电路标识的关系。
第三节 网络互连与网络设备互连
异构网络互连
异构网络是指两个网络的通信技术和运行协议不同。异构网络互连的基本策略主要包括协议转换和构建虚拟互连网络。
路由器
路由器是一种具有多个输入端口和多个输出端口的专用计算机。
输入端口
输入端口负责从物理接口接收信号,还原数据链路层帧,提取IP数据报,根据IP数据报的目的IP地址检索路由表,决策需要将该IP数据报交换到哪个输出端口
交换结构
基于内存交换、基于总线交换、基于网络交换
输出端口
输出端口首先提供一个缓存排队的功能,排队交换到该端口的代发分组,并从队列中不断取出分组进行数据链路层数据帧封装,通过物理线路端发送出去
处理器
处理器就是路由器的CPU,负责执行一系列的指令
第四节 网络层拥塞控制
1.网络层拥塞
拥塞是一种持续过载的网路状态,此时用户对网络资源的总需求超过了固定带宽的总容量。
拥塞控制就是端系统或者路由器,通过采取某些措施来避免拥堵的发生,或者对已知的拥塞做出反应,以便尽快消除拥堵。
发生拥堵的原因主要有一下四种:
缓冲区容量有限 传输线路带宽有限 网络节点的处理能力有限 网路中的某一部分发生故障
2、流量感知路由
流量感知路由是一种预防网络拥塞的预防措施,可以再一定的程度上缓解和预防拥堵情况。
根据网络负载动态的调整,将网络流量引入不同的链路,均衡网络负载,从而降低延迟和避免拥塞的情况发生。
3、准入控制的基本原理
准入控制是一种广泛用于虚电路网络的拥塞预防技术。准入控制的基本思想是对新建电路的审核,如果新建的电路会导致网络变得拥塞,那么网络将拒绝信电路的建立。
准入控制实现的关键是在于新建一条虚拟电路会不会导致整个网络发生拥塞,应该如何反应。常用的控制方法是基于平均流量和瞬时流量,来判断是否有能力接收一个新的虚拟电路而不发生拥塞。
4、流量调节的基本原理
在网络发生拥塞是,可以通过调整发送方向网络发送数据时的速率来消除拥塞。
当某个网络节点感知到当前网络发生拥塞时,可以通知其上游网络来减缓发送速率,从而逐渐消除拥塞。
第一个问题网络节点如何能感知道已经发生拥塞?
对于路由器而言,就是通过输入输出端口排队延迟,来对网络的拥塞情况进行感知。
第二个问题是网络节点感知到当前网络发生拥塞,如何通知上游节点来,从而使发送速率降低?
解决这个问题方法有抑制分组和背压两种。
抑制分组
感知到拥塞的路由器选择一个拥塞的数据报,给该数据报的源主机发送一个抑制分组,抑制分组的目的地址就是从数据报的源主机地址得到的。同时对被拥塞的数据报的头部添加一个标志,从而使该数据报在后续传送的过程中,不会被后续的路由器再次选择来发送分组。
背压
如果因为发送速率过快而导致网络拥塞的网络结点,与感知到拥塞的网络节点的距离过远,没在抑制分组到达源主机的过程中,又有很多新的分组进入了网络,从而进一步加重了网络的拥塞**。就是让抑制分组从拥塞结点到源主机结点每一跳都发挥抑制的作用,知道抑制分组到达源主机**,才能使造成网络拥塞的过快发送的速率真正的降下来。
5、负载脱落
通过有选择的主动丢弃一些数据报来减轻网络的负载,从而缓解或消除拥塞。
第五节 Internet网络层
1、IP数据报结构
Internet是典型的数据报结构
什么是虚拟专用网络?有什么特点和优缺点?有几种类别?
见书or百度~~~~、有几种类别?
答:按实用技术不同又分为以下类别
pptp vpn ,l2tp vpn ,ipsec vpn, ssl vpn ,mpls vpn 等等
intranet vpn:
用于内部网络,常为用户到用户的,使用传输模式。
也可使用隧道模式用于连接不同地点的连接,如专用的帧中继在两个办公场所之间的连接。
internet vpn:通过公网的L2L,远程访问 。
extranet vpn:一般是合作伙伴之间的L2L连接。
什么是NAT?NAPT有哪些特点?NAT的优点和缺点有哪些?NAT的优点和缺点有哪些?
见书or百度~~~~~~~~
NAT全称Network Address Translation即网络地址转换。 NAPT全称Network Address and Port Translation即网络地址与端口号转换其特点是: (1)在路由器转发IP数据报时NAPT对IP地址和端口号都进行转换转换过程如下对于出专用网的数据把专用网内不同的源IP地址转换为同样的全球IP地址把源主机端口号转换为不同的新的端口号;对于入专用网的应答NAPT根据不同的目的端口号从NAPT转换表中找到正确的目的主机。(2)NAPT工作在网络层和传输层。 NAT优点:(1)通过NAT专用网内部主机可使用专用地址与因特网上的主机通信。(2)通过NAT一个全球合法IP地址可被多台专用网内部主机分享使用节省全球IP地址资源。 NAT缺点:通信必须由专用网内的主机发起专用网内部的主机不能充当服务器。
计算机 B 收到数据后会读取数据包的源端口号和目的端口号,B 返回的数据后就把原来数据包中的原端口号作为目的端口号,而把自己的端口号作为原端口号再送回 A。
内网穿透原理解析小知识
在互联网信息时代的今天,经常会听到外网连接。而与外网所相对应的,是一种内部网络,很多的家庭或者公司利用内部网络来进行多台电脑之间的资源共享,其中所用到的技术就是内网穿透技术,但却有很多的人对这种技术并不了解。下面小编为大家介绍一下内网穿透的工作原理是怎样的?
什么是内网穿透?
在了解原理之前我们先来了解一下什么是内网穿透。之前提到的内网,其是就是在公司或者是家庭内部,建立的一种局域网络或者是办公网络,从而实现多台电脑之间可以进行资源的共享,包括设备、资料、数据等。而外网则是由一个网关与其它的网络系统连接,相对于内网而言,这种网络系统称之为外部网络,也就是我们经常说到的互联网。
内网穿透的原理
内网穿透是我们在进行网络连接时的一种术语,也叫做NAT穿透,即在计算机是局域网内的时候,外网与内网的计算机的节点进行连接时所需要的连接通信,有时候就会出现内网穿透不支的情况。内网穿透的功能就是,当我们在端口映射时设置时,内网穿透起到了地址转换的功能,也就是把公网的地址进行翻译,转成为一种私有的地址,然后再采用路由的方式ADSL的宽带路由器,具有一个动态或者是固定的公网IP,最后ADSL直接在交换机上,这样所有的电脑都可以共享上网。内网穿透除了可以实现内网之间机器的网络通信功通之外,还可以解决UDP中出现的数据传输不稳定问题。
内网穿透如何实现
内网穿透可以通过开放的第三方端口来实现。我们可以安装花生壳端口映射内网穿透软件,然后再添加映射,并且配置出映射端口的信息,外网的地址是映射之后访问的域名,同时也可以是自己或者是默认的域名。通过内网穿透,可以用域名进行对应的内网应用。如果是外网地址使用的是自己的域名,可以把域名的解析指向提示目标地址来进行使用。