个人觉得如果要达到计算机大牛,无论主攻那个技术领域,计算机网络中一些解决问题的思想都能够让你受益颇深。
下层向上层提供服务。
TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为:
应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet),HTTP等。
传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
互连网层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如IP,ICMP。整个网络体系结构贯穿在一起的关键层。。
链路层:如何两台直接相连的计算机之间发送有限长度的消息,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。主机与传输线路的一个接口。
OSI 七层模型是一种框架性的设计方法,建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
应用层:APDU。应用网关。包含用户通常需要的几种协议:HTTP,SMTP,RTP,DNS协议。
表示层:PPDU。定义传递信息的语法和语义,不同计算机内部有不同的数据表示法,让他们能够进行通信,定义交换的数据结构。
会话层:SPDU。用于不同机器的用户建立会话。
传输层:报文。传输网关。必要时把从上层接收的数据分割成更小的单元,并传递给网络层。是真正的端到端的层。传输层服务的对象通常是应用层的进程,完成传输层功能的称为传输实体,既可以是软件也可以是硬件,比如主机的一个位置或者操作系统内核等。(TCP,UDP协议)。
网络层:数据包,路由器。向从传输层获取的报文添加一个网络层头封装成数据包。IPv4数据包的地址是32位,IPv6数据包的地址128位。在大多数网络中,数据包需要经过多跳才能到达目的地,所以网络层使用路由算法解决。路由器必须针对每一个数据包选择最佳路由,因为自上一次选择路径之后,最佳路径可能已经改变。包括最短路径算法,泛洪算法等。(IP,ICMP协议)。网络中如果存在太多数据包将导致数据包被延迟或者丢失,这种情况成为拥塞。控制拥塞最好的办法是减少传输层注入网络层的负载。如果源主机和目的主机所在的网络类型完全相同,但他们中间却隔着一个不同类型的网络,解决的办法就是隧道技术。隧道常用于连接因使用其他网络而被隔离的主机和网络,生成一个新的网络覆盖在基础网络上层。
数据链路层:帧。网卡,网桥,交换机(现代网桥)。关注如何把原始的传输设施变成没有漏检传输错误的线路连接两台机器。从网络层接收数据包,添加帧头、帧尾和有效载荷,封装成帧。为网络层提供服务,主要就是将数据从源机器的网络层发送到目的机器的网络层。如果信道上存在噪声,物理层传给数据链路层的某些比特可能已经发生了变化,数据链路层就需要进行差错检测和纠正(海明码,奇偶校验码,校验和等),因为数据链路层向物理层提供的是帧,他同样要把物理层接收的比特流拆分成帧,中间涉及到帧头帧尾的识别(字节填充的标志字节法,比特填充的标志字节法。。。)。识别成帧之后还需要保证顺序无差错的传递给网络层。为了保证发送方发送帧的速度没有超过接收方接收的速度,还需要进行流量控制(一种是向发送发发送信息允许发送,一种是限制发送方发送速率,前者的方案可以出现在更高层次)。相关协议:单工停-等协议(发送发发送一帧,等待对方确认到达之后才能继续发送);滑动窗口协议(包括一位滑动窗口协议,回退N帧协议和选择重传协议);滑动窗口协议:发送方始终维持一组序号,对应于允许他发送的帧,把这些帧放到发送窗口内;接收方也维持一组序号,对应等待他接收的帧。对发送方而言,当有新的数据包从网络层到来,窗口的上边界前移一格,当收到一个确认时,下边界也前移一格,这样窗口始终维持的是未被确认的帧。发送方必须在内存中保存所有的帧,以便满足重传的需要。回退N帧协议保证数据链路层递交给网络层帧的顺序是准确无误的,所以接收方的数据链路层只会接收要发送给网络层的下一帧,当发送方发送了N个帧后,若发现该N帧的前一个帧在计时器超时后仍未返回其确认信息,则该帧被判为出错或丢失,此时发送方重新发送出错帧及其后的N帧,其他帧接收方都会拒绝。并且对于这些丢弃的帧不返回确认。选择重传ARQ协议:为了进一步提高信道的利用率,可设法只重传出现差错的数据帧或者是定时器超时的数据帧。但这时必须加大接收窗口,以便先收下发送序号不连续但仍处在接收窗口中的那些数据帧。等到所缺序号的数据帧收到后再一并送交主机。这就是选择重传ARQ协议。使用选择重传ARQ协议可以避免重复传送那些本来已经正确到达接收端的数据帧。但我们付出的代价是在接收端要设置具有相当容量的缓存空间,这在许多情况下是不够经济的。他还有一个介质访问控制子层(MAC)介质访问控制子层:多方竞争单个信道使用权时如何分配的协议就在MAC层。多路复用:把单个信道的容量拆分给多个用户使用比如(频分多路复用,每个用户有专用的频段)。载波侦听协议:站监听是否存在载波(是否有传输),并据此采取相应的动作。1-坚持载波检测多路党文(CMSA):当有一个站需要发送数据时他首先监听信道,如果信道空闲他就发送数据,否者如果信道忙,该站等待直到信道空闲,然后站发送一帧,如果发生冲突,该站等待一段随机时间在从头重复上述过程。因为该站发现信道空闲时传输数据的概率为1,所以叫1-坚持。非坚持CMSA是如果需要发送数据先侦听信道,如果监听到信道忙,该站并不对信道持续监听,而是等待一段时间重复以上步骤。带冲突检测的CMSA(CMSA/CD):前面两种CMSA如果两个站同时开始传输,他们的信号会产生冲突,通过CMSA/CD协议,站快速检测到发生了冲突并立即停止传输帧。信道分配解决后就是实际应用了:以太网(802.3)和无线局域网(802.11)。以太网分为经典以太网和交换式以太网(以太网的以太网,高速率)。现在只有后者。帧的长度最大1518字节长,最小64字节长。因为无线电是半双工的,不能在同一频率上传输的同时侦听该频率上的突发噪声,为了避免冲突,802.11使用带有冲突避免的CSMA(CSMA/CA):在发送前侦听信道和检测到冲突后指数回退。许多组织有多个局域网,通过网桥就可以将这些局域网连接起来。即网桥工作在数据链路层。每个网桥配备一个大的哈希表,表里面列出每个可能的目的地以及他隶属的输出端口。网桥第一次接入网络的时候使用泛洪算法填充哈希表。
物理层:比特。中继器,集线器。双绞线,同轴电缆,光纤。。。如何在不同的介质上以电气信号传输比特。
TCP(Transmission ControlProtocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接(三次握手)。一个TCP连接必须要经过三次“对话”才能建立起来。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
tcp协议和udp协议的差别
TCP UDP
是否连接面向连接 面向非连接
传输可靠性可靠 不可靠
应用场合传输大量数据 少量数据
速度 慢 快
TCP报文中有几个字段需要重点介绍下:
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgentpointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
需要注意的是:
(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认方Ack=发起方Req+1,两端配对。
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack (number)=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了
需要客户端和服务端总共发送4个包以确认连接的断开
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
当提供给任何网络的负载超过他的处理能力时,拥塞便会产生。当路由器上的队列增长到很大时网络层检测到拥塞,网络层会通过丢弃数据包来缓解拥塞,传输层会受到网络层返回回来的拥塞信息并减慢他发送到网络的流量速率。TCP的拥塞控制会维持一个拥塞窗口,窗口大小是任何时候发送端可以往网络发送的字节数。那速率就是窗口大小除以连接的往返时间了。除了一个拥塞窗口还要维护一个流量控制窗口,流量控制窗口指出了接收端可以缓冲的字节数,要并发跟踪这两个窗口,可能发送的字节数是这两个窗口中较小的那个。
慢速启动算法:该算法是一个线性增长和乘法增长相混合的方法。当建立连接时,发送端初始化一个很小的拥塞窗口,然后发送方发送初始窗口大小的数据,如果有一个段在计时器超时前得到确认,那么窗口就增加一个段的字节量,每经过一个往返时间窗口就增加一倍。虽然叫慢速启动算法,但是他以指数增长,可以说并不慢。由于慢速启动导致拥塞窗口按指数增长,最终会出现他将太多的数据包以过快的速度发到网络,在路由器上产生队列,因为他们传递到接收端的速度不够快所以会发生丢包和拥塞。所以发送端为了控制慢启动算法会为每个连接维持一个慢启动阈值,拥塞窗口会不断增大直到拥塞窗口大小超过阈值或者接收端窗口满。当拥塞窗口到达阈值,TCP就从慢速启动(指数增大)切换到线性增大,即每经过一个往返时间拥塞窗口只增加一段,但是增长的结果仍然是拥塞窗口过大导致丢包,每当检测到丢包(超时),慢启动阈值就会设置为当前拥塞窗口的一半,整个过程在重新启动。
发送端如何发现丢包了呢?当一个数据包的后续包在该数据包之前达到接收端时,接收端就会被触发发送一些具有相同确认号的确认段,称为重复确认。因为包会选择网络中不同的路径,所以他们确实可能没按一定顺序到达接收端,不过仍然会发送重复确认。当收到三个重复确认即使计时器没有超时,被认为丢弃的包也会被重传。这种启发机制称为快速重传。重传就像丢包一样,阈值设为当前拥塞窗口的一半,拥塞窗口大小设为一个包,慢启动重头开始。如下所示:
但这是88年发布的4.2BSD TCP Tahoe。
90年发布的4.3BSD TCP Tahoe加入了快速恢复机制。把拥塞窗口快速重传时窗口大小减半,而不是变为1。丢包后每个往返时间拥塞窗口减半,每收到一个重复确认都会发送一个新的包,快速重传一个往返时间后丢失的包将被确认,快速回复结束,拥塞窗口设置带一个新的慢启动阈值,并开始按线性增长,避免了慢速启动。后来发生丢包再快速恢复。
当接收端窗口满了的时候,发送端停止发送,等待接收主机上的应用进程从缓冲区取走一些数据。到那时候TCP实体可以向发送端宣告一个更大的窗口,发送端才可以继续发送数据。但这里有两种特殊情况:1.紧急数据仍可以发送比如允许用户杀死远程主机的一个进程。2.发送端可以发送一个字节的段以便强制接收端告知下一个期望的字节和窗口大小,这种数据包称为窗口探测。
http://www.cnblogs.com/Yiaos/p/6279058.html
HTTP协议中共定义了八种方法或者叫“动作”来表明对请求URI指定的资源的不同操作方式,具体介绍如下:
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以向Web服务器发送'*'的请求来测试服务器的功能性。
HEAD:得到和GET请求一样的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,获取包含在响应消息头中的元信息。
GET:向特定的资源发出请求。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
虽然HTTP的请求方式有8种,但是我们在实际应用中常用的也就是get和post,其他请求方式也都可以通过这两种方式间接的来实现。
http://www.cnblogs.com/0201zcr/p/4694945.html
cookie指的就是浏览器里面能永久存储的一种数据。仅仅是浏览器实现的一种数据存储功能。HTTP1.0协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。要跟踪该会话,必须引入一种机制。Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,以便给每个客户端分配不同的“身份标识”。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态,送出特定的网页内容给你。服务器还可以根据需要修改Cookie的内容。
session就是会话。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时,仍然能够把session id传递回服务器。
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。
http://blog.csdn.net/xiaotian15/article/details/8625302
网络层四个主要的协议:
网际协议IP:负责在主机和网络之间寻址和路由数据包。
地址解析协议ARP:已经知道了一个主机的IP地址,需要找到其对应的物理地址。因为将IP数据报封装到MAC帧里面的时候需要知道目的地址的MAC地址。地址解析协议ARP的作用就是根据主机的IP地址来获得物理地址。每个主机都设有一个ARP高速缓存(ARP cache),这里面放着的是主机已经知道的IP地址和MAC地址的映射表,并且这个映射表还是经常动态更新的。也有可能在ARP高速缓存中查不到主机B的IP地址(主机A缓存为空,或主机B刚加入局域网),这样也就无法知道主机B的MAC地址,这时候就需要使用到ARP了,按以下步骤来获得主机B的硬件地址。
①主机A的ARP进程在本局域网上广播发送一个ARP请求分组,以广播的形式
②在本局域网上的所有主机上运行的ARP进程都受到了这个ARP请求分组。
③主机B在ARP请求分组中发现了自己的IP地址,就向A主机发送ARP响应分组,以单播的形式直接发给A。同时主机B知道了A的IP地址和MAC地址,就将主机A的IP地址和MAC地址写入ARP高速缓存中。其他主机在对比IP地址之后,发现与自己的IP地址不同,就丢掉分组。
④主机A收到主机B的ARP响应分组之后,这样就知道了主机B的MAC地址,同时把主机B的IP地址和MAC地址写入ARP高速缓存。
如果主机A和主机B进行不在同一个局域网。首先主机A将主机B的IP地址同自己的子网掩码进行比对,发现不在同一局域网内,则利用ARP请求分组,根本局域网上的路由器的IP地址来获取路由器的MAC地址,然后将剩下的工作交给路由器去做即可。
2)ARP的四种典型情况
①发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时利用ARP找到目的主机的硬件地址。
②发送方是主机,要把IP数据报发送到另一个网络上的一个主机。这时利用ARP找到本网速上的一个路由器的硬件地址,然后把剩下的工作交给路由器去完成。
③发送方是路由器,要把IP数据报发送到另一个网络上的一个主机。这时利用ARP找到本网络上的另一个路由器的硬件地址,然后把剩下的工作交个这个路由器去完成。
④发送方是路由器,要把IP数据报发送到本网络上的一个主机。这时利用ARP找到目的主机的硬件地址。
网际控制消息协议ICMP:ICMP是TCP/IP协议族的一个子协议,工作在网络互联层(网络层)。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP的一个重要应用就是分组网间探测PING(Packe InterNet Groper),用来测试主机之间的连通性。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子,没有经过传输层的TCP或UDP。
互联组管理协议IGMP:被IP主机拿来向本地多路广播路由器报告主机组成员。
该层设备有三层交换机,路由器。
http://blog.csdn.net/guoweimelon/article/details/50865642
ping某个域名相对于ping IP地址来说,多了一些步骤,主要用来获取域名对应的IP地址,整个过程如下:
1、主机查找本地系统Hosts文件的DNS缓存,如果存在该域名对应的IP,则获取IP,跳转到第8步;如果不存在,则继续。
2、主机向本网络路由器发起请求,查找路由DNS缓存,如果存在该域名对于的IP,则获取IP,跳转到第8步;如果不存在,则继续。
3、路由器向本地ISP(互联网提供商)的DNS服务器发起请求,查找DNS服务器的缓存,如果存在该域名对应的IP,则跳转到第7步;如果不存在,则继续。
4、本地DNS服务器向根域名服务器发起请求,根域名服务器告诉本地服务器,下一次应查询的顶级域名服务器dns.com的IP地址。
5、本地域名服务器向顶级域名服务器dns.com进行查询,顶级域名服务器dns.com告诉本地域名服务器,下一步应查询的权限服务器dns.abc.com的IP地址。
6、本地域名服务器向权限域名服务器dns.abc.com进行查询,权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的IP地址。
7、本地域名服务器最后把查询结果——该域名对应的IP地址告诉给主机。
8、至此,主机知道了该域名的IP地址。
----------------------------------(以上部分主要是根据域名获取对应的IP地址,涉及DNS)-----------------------------------
9、主机通过子网掩码判断该IP地址是本网段还是跨网段,由于本网段比较简单,我们以跨网段进行讲解。
10、主机先查看本地ARP高速缓存,查看表中是否有本网络路由器(网关)的MAC地址,如果有,则获取MAC地址,跳转到第12步;如果没有,则继续。
11、主机使用ARP解析协议获取到本网段路由的MAC地址。
12、至此,主机知道本网络一个路由的MAC地址。
---------------------------------(以上部分主要是获取本网络一个路由的MAC地址,涉及ARP)-----------------------------
13、主机将ICMP报文封装成IP数据报,IP数据报的源地址为主机的IP地址,目的地址是域名对应的IP地址;
14、主机将IP数据报封装成MAC帧,MAC帧的源地址为主机的MAC地址,目的地址是路由器的MAC地址;
12、路由器接收到ICMP报文之后,发现MAC帧的目的地址是自己,IP地址是主机想要访问的IP地址,则将MAC帧的源地址改为自己的MAC地址,目的地址改为本网段另一个路由的MAC地址(也要通过ARP协议获取),转发下去...
13、直到最后一个路由根据ARP协议,找到了主机想要访问的IP地址对应的主机的MAC地址,然后将ICMP报文封装成MAC帧发送给该域名主机。
14、由于ARP协议具有相互学习性,域名主机接收到主机发送的ICMP回送请求报文之后,将向本网络路由发送ICMP回送回答报文,该路由又会转发下去...
15、当主机收到域名主机发送的ICMP回送回答报文之后,这样就表明该主机到域名主机是连通可达的。
见博客
http://blog.csdn.net/panjunnn/article/details/5653388/
路由器和交换机,二者区别如下:
1,路由器工作于网络层,能够识别IP地址,并根据IP地址转发数据包,并维护着路由表,能够基于路由表进行最佳路线选择;
2,路由器上还能开启ACL访问控制列表、NAT地址转换等功能,扩展网络应用,;
3,传统交换机工作于数据链路层,能够识别MAC地址,根据MAC地址转发数据帧,并维护着一张桥表,根据桥表上MAC地址和端口的对应关系进行数据帧转发。
4,交换机能够隔离冲突域,并划分VLAN。