计算机网络知识总结

来源:互联网 发布:搜狗五笔输入法 mac 编辑:程序博客网 时间:2024/06/10 20:07

网络协议(完成数据交换所定义的规则):
1)语法。数据与控制信息的格式
2)语义。需要发出何种信息和完成何种动作和响应
3)同步。时间实现顺序的详细说明

网络的体系结构:
tcp/ip四层结构:网络接口层,网际层,运输层,应用层
osi的七层结构:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
五层协议:物理层,数据链路层,网络层,传输层,应用层

五层协议的基本知识点:
物理层:传输单位是比特,这里的单双工(收音机),半双工(对讲机),全双工(电话)应该知道,共享信道的方式有:频分复用,时分复用,统计时分复用,波分复用,码分复用(CDM)

数据链路层协议:CSMA/CD协议(广播信道)和PPP协议(点对点信道), 传输单位是帧,三个基本问题:封装成帧,透明传输,差错检测。

网络层协议:IP,ICMP,IGMP,ARP,传输单位是ip数据报

传输层协议:TCP,UDP,SPX 传输单位是报文

应用层协议:TELENT,SMTP,POP,FTP,DNS,HTTP,RTP,TFTP 传输单位是报文。

数据链路层的三个主要问题:

封装成帧:在一段数据的前后加上首部和尾部,进行帧定界。为了提高传输效率,规定了帧的数据部分的最大上限(MTU最大传送单元),帧的开始符SOH结束符EOT

透明传输:某一个实际存在的事物看起来好像不存在,透明传输问题是什么呢,
是当我们在传送文本文件(文本文件的字符都是键盘输入)的帧时,不管从键盘输入什么文字都可以传送,当然不可能出现帧的界定符,
但是当我们传输二进制文件的时候,如果某个字节的二进制代码刚好和控制符的一样,我们就会错误地找到帧的边界,把剩下的丢弃。这时候出现错误
为了解决透明传输问题,采用字节填充方法,在发送端的数据控制字符前插入ESC转义字符。

差错检测:比特在传输的过程中可能会出现差错,1变0,0变1,差错检测的方法是:循环冗余检验(CRC)。但是这只是保证了无比特差错的传输,还不是可靠的传输,因为还可能出现帧丢失,帧重复,帧失序。

PPP点对点协议:就是用户计算机和ISP进行通信时所使用的数据链路层协议。

PPP协议的三个组成部分:
1)将ip报封装到串行链路
2)LCP,建立,配置,测试数据链路连接
3)NCP,每个协议支持不同的网络协议

PPP协议的帧格式:帧开始符(7E)+地址字段+未定义+协议+ip数据报+FCS(冗余码)+帧结束符(7E)。

当PPP协议采用异步传输(逐个字符传送)时
当信息字段中出现和帧开始或结束符一样的比特组合时,这个时候采用字节填充,把信息字段中的0x7E变为0x7D,0x5E,把0x7D变为0x7D,0x5D

当PPP协议采用同步传输(一连串的比特连续传送)时
采用零比特填充方法来实现传输,在发送端发现有5个连续的1即加入0,在接收端碰到5个连续的1删除一个0即可,保证不会出现6个1,否则会被认为是标志字段F.

PPP协议的工作状态:用户接入ISP-路由器的调制解调器确认-建立物理连接—建立数据链路层的LCP连接。

适配器的作用是把帧发送到局域网,从局域网接收帧。

CSMA/CD协议(载波监听多点接入、碰撞检测协议)
1.许多计算机以多点接入的方式连接在一根总线上,适配器从网络层接收一个获得一个分组,
加上以太网的首部和尾部,组成以太网帧,放入适配器的缓存中,但在发送之前,必须先检测信道。
2.若检测到信道忙,则应不停地检测,一直等待信道转化为空闲,
若检测信道空闲,并在96比特时间内信道保持空闲,就发送这个帧.
3.在发送的过程中要不停地检测信道,即网络适配器要边发送边监听,
在边发送边监听的时候,可能会出现如下情况:
1)发送成功。在争用期内一直未检测到碰撞,这个帧肯定能够发送成功。
2)发送失败。在争用期内检测到碰撞,停止发送数据,并按规定发送人为干扰信号,适配器接着执行指数退避算法,等待r倍512比特时间后,继续监测信道,但若重传16次不能成功,则停止重传而向上报错。
4.以太网每发送完一帧,一定要把已发送完的暂时保留一下,如果在争用期之间检测到了碰撞,还要再推迟一段时间后把这个暂时保留的帧重传一下。
集线器:集线器工作在物理层,主要功能是对接收到的信号进行再放大,*以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。在物理层扩展以太网,是多接口的转发器,并不缓存帧。*
若一个网段的数据率是10Mb/s,另外两个网段是100Mb/s,那么三个网段合起来最大吞吐量即变成10Mb/s.

网桥:网桥工作在数据链路层,在数据链路层扩展以太网。依靠转发表来转发帧,没有流量控制功能,适合用户量不多,通信量不大的以太网。可以互联不同MAC层,不同物理层,不同速率以太网。
若每个网段的数据率是10Mb/s,那么三个网段合起来最大吞吐量即变成30Mb/s.

网络层:

网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。网络层不提供服务质量的承诺。

由于用户的需求是多种多样的,没有一种单一的网络能够适应所有用户的需求。因此需要将这些不同的网络进行连接,因此我们就需要路由器。
由于物理层的集线器或转发器和数据链路层的网桥只是对一个网络进行了扩展,但还是同一个网络,而网络层的路由器则是将不同的网络进行互联。

当互联网(多种异构网络互连组成)中的源主机H1要给目的主机H2发送消息的时候,H1先查找自己的路由表,看目的主机是否在本网络上,如果是则直接交付,如果不是则转发给另一个路由器进行间接交付,直到找到目的主机所在路由器。

分类的IP地址:
IP地址就是给因特网上的每个主机的每一个接口分配一个全世界范围是唯一的32位的标识符IP地址不仅指明一个主机,而且指明一个主机连接到的网络。

IP地址的三个阶段:
1.分类的IP地址
为什么要对IP地址进行划分呢?
1)各种网络的差异很大,有的网络拥有的主机很多,有的则很少。
2)在分配IP地址的时候只分配网络号,剩下的主机号由得到网络号的单位自行分配,方便IP地址管理。
3)路由器只根据目的主机连接的网络号来转发分组,因此使得路由表中的项目数大幅度减少,因此这样可以减少路由表所占的存储空间和查找路由表的时间。
A类IP地址:0开头,网络号:8位,范围是:1-126 最大可指派的网络数:2^8-2 最大可指派的主机数:2^24-2
B类IP地址:10开头,网络号:16位,范围是:128.1-191.255 最大可指派的网络数:2^16-1 最大可指派的主机数:2^16-2
C类IP地址:110开头,网络号:24位,范围是:192.0.1-223.255.255 最大可指派的网络数:2^24-1 最大可指派的主机数:2^8-2
D类IP地址:1110开头,多播地址。范围是:224.0.0.0-239.255.255.255
E类IP地址:1111开头,保留为今后使用。

IP地址是网络层和以上各层使用的地址,是一种逻辑地址,而物理地址是物理层和数据链路层使用的地址。IP地址放在IP数据报的首部,硬件地址放在MAC帧的首部。

路由器:路由器工作在网络层,用来连接局域网或广域网,即不同网络的互联,它总是具有两个或两个以上的IP地址,即路由器的每个接口都有一个不同网络号的IP地址。

这里还有两个问题没有解决:
1)主机或路由器怎么知道在MAC帧的首部添加什么硬件地址?即如何根据IP地址得到物理地址?
ARP地址解析协议,将IP地址转化为物理地址。在主机的ARP高速缓存中应存放从IP地址到硬件地址的映射表,并且这个映射表经常动态更新。
(新增,超时,删除)。每一个主机都设有一个ARP高速缓存。ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。
从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
也有可能查不到目的主机的IP地址的项目。可能是目的主机刚入网或源主机刚通电,其高速缓存还是空的,在这种情况下,源主机自动运行ARP,
按以下步骤找出目的主机的硬件地址。
ARP进程在本局域网上广播发送一个ARP请求分组。请求分组的主要内容是:我的ip地址是,物理地址是,我想知道ip为*的硬件地址。
在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组,当目的主机IP地址与ARP请求分组中要查找的IP地址一致,就收下这个ARP
请求分组,并向源主机发送ARP响应分组,并在这个响应分组中写上自己的IP地址和硬件地址。由于其余的所有主机的IP地址与ARP请求分组要查询的IP地址
不一致,因此都不理睬该ARP请求分组。虽然ARP请求分组是广播的,但是响应请求是单播。源主机在收到目的主机的响应分组后,就在其ARP高速缓存中写入
目的主机IP地址到物理地址的映射。ARP的高速缓存十分有用,如果没有,那任何一个主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求分组,
这将使得通信量大大增加,因此使用ARP高速缓存时,可以减少通信量。ARP把保存在高速缓存中的每一个映射地址项目都设置生存时间,凡超过生存时间的项目就从
高速缓存中删除,(当某一个主机的网络适配器突然坏了,更换了之后,则该主机的硬件地址变了,在生存时间之后,就会删除这个硬件地址在高速缓存中)

当主机A要向本局域网上的某个主机B发送IP数据报时,就先在其高速缓存查看有无有无主机B的IP地址,如有,就在ARP高速缓存中查出其对应的硬件地址,
再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。主机B在收到主机A的请求分组之后,B会在自己的高速缓存中记录下
A的IP地址到硬件地址的映射,以便于B向A发送请求的时候,减少通信量。如果要找的目的主机和源主机不在同一个局域网内。则源主机无法解析出另一局域网上的目的主机的硬件地址。
那么可能有人要提出疑问了,既然最终传输的帧是按照最终是按硬件地址到达目的主机的,那为什么不直接采用硬件地址进行通信?
由于全世界存在各种各样的网路,他们使用不同的硬件地址,要使这些不同的网络进行相互通信,就必须进行非常复杂的硬件地址转换工作。因此由用户主机来完成这项工作几乎是不可能的,
但统一的IP地址解决了这个问题,连接到因特网的主机只需拥有统一的IP地址,他们之间的通信就像是连接在同一个网络一样方便。ARP的复杂过程都是由计算机软件自动进行的,对用户来说,这种调用是看不见的。

IP数据报的格式:IP数据报可以说明IP协议具有什么功能。组成:IP数据报的首部(20字节)+数据部分。
首部组成:协议(IP协议的版本,IPv4)+首部长度(32位)+区分服务(一般不用)+总长度(MTU)+标识(保证分片后正确地重装)
+标志(MF,DF,当MF=0表示这是若干数据片中最后一个,当MF=1,表示后面还有分片,标志字段中间的一位记为DF,表示不能分片,DF=0表示可以分片)+片偏移(某片在原分组中的相对位置)
+生存时间(TTL,表示数据报在网络中的寿命,防止无法交付的数据报无限制地在因特网中兜圈子,随技术的进步,TTL表明数据报在因特网中至多可以经过多少路由器,单位为跳数,经过的路由器的最大值是255,在数据报被转发之前TTL就会减1)
+协议(指明数据部分使用的是何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程)+首部检验和(只检验首部)+源地址(32位IP地址)+目的地址(32位IP地址)+可变部分(选项字段,用来排错,测量,以及安全等措施)
2)IP层转发分区流程?
每一条路由主要是这两个信息:目的网络地址和下一跳地址。因此我们可以根据目的网络地址确定下一跳路由器,只有到达最后一个路由器时,尝试向目的主机交付。
因特网所有的分组转发都是基于目的主机所在的网络,但也允许这样的特例,就是针对特定的目的主机指定一个路由,这种路由叫特定主机路由。这种使得网络管理人员 更方便地控制网络和测试网络。
在对网络的连接或者路由表排错时,指明到某一个主机的特殊路由就十分有用。路由器也可以采用默认路由,适合于一个网络只有很少的对外连接的时候。但是IP数据报的首部并没有指明下一跳路由器IP地址。
那怎么找到下一跳路由器呢?路由器从路由表中得到下一跳的路由器的IP地址之后,将该IP地址送交数据链路层的网络接口软件,网络接口软件ARp将其转化为硬件地址,写入MAC帧,并发送到下一跳路由器。
当发送一连串的数据报的时候,这些查找路由表,计算硬件地址,写入MAC帧首部等过程,将不断地重复进行,造成一定开销。
分组转发算法总结:
1)从IP数据报首部得到目的IP地址,得出目的网络地址
2)若目的网络地址与此路由器知己相连,则直接交付目的主机(目的主机IP地址转化到物理地址,把数据报封装成帧,发送此帧),不需要再经过其他路由器。
3)若路由表中有目的地址的特定主机路由。则发送数据报给路由表中指定的下一跳路由,否则,执行(4)
4)若路由表中有到达目的网络的路由。则发送数据报给路由表中指定的下一跳路由,否则,执行(5)
5)若路由表中有一个默认路由。则发送数据报给路由表中指定的默认路由,否则,执行(6)
6)报告转发分组出错。
那么路由表是如何建立和更新的呢?

2.子网的划分

由于IP地址空间的利用率有时很低,给每一个物理网络分配一个网络号会使得路由表变大,两级IP地址不灵活等因素,因此划分子网。
子网划分是从网络的主机号借用若干位作为子网号,主机号当然就减少了相应位数,于是两级IP地址在本单位就变成三级IP地址.
IP地址::={<网络号>,<子网号>,<主机号>};

那么当一个数据报已经到了路由器,那么是怎么转发到子网呢?因为从IP数据报的首部无法判断出是否进行了子网划分,这时子网掩码应运而生。
网络号和子网号对应的子网掩码为1,主机号对应的子网掩码为0.
将子网掩码和目的IP地址进行与运算即可得到所要找的子网的网络地址。划分为多个子网的网络,对外仍然表现一个网络。
不管有没有划分子网,进行与运算之后,都可得到目的网络地址。
那既然没有划分子网为什么还需要子网掩码呢?便于查找路由表。
所有的网络必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏,如果一个网络不划分子网,那么该网络的子网掩码使用默认子网掩码。
A类地址的默认子网掩码:255.0.0.0
B类地址的默认子网掩码:255.255.0.0
C类地址的默认子网掩码:255.255.255.0

子网掩码是一个网络或子网的重要属性,路由器和相邻路由器交换路由信息时,必须把自己所在的网络的子网掩码告诉相邻路由器,路由表中不仅要给出目的网络地址还要有子网掩码。

已知子网掩码和IP地址,求子网数和每个子网的主机数?通过IP地址可知属于哪一类地址,再根据判断子网号的位数,即就是除网络号之外多余的位为1的有n位,则子网数为2^n-2,位为0的有m位,则子网的主机数为2^m-2
即B类地址的某一个子网掩码为255.255.255.0.可知网络号16位,子网号8位,主机号8位,即子网数2^8-2,子网主机数2^8-2

划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
使用子网时分组转发算法总结:,使用子网之后,路由表必须包含:目的网络地址,子网掩码,下一跳地址。

划分子网的分组转发算法总结:
1)从IP数据报首部得到目的IP地址
2)先判断是否为直接交付,对路由器直接相连的网络逐个进行检查,各网络的子网掩码和IP地址与运算,如果网络地址相匹配,则直接交付目的主机(目的主机IP地址转化到物理地址,把数据报封装成帧,发送此帧),不需要再经过其他路由器。
3)若路由表中有目的地址的特定主机路由。则发送数据报给路由表中指定的下一跳路由,否则,执行(4)
4)对路由表中的每一行用其中的子网掩码和IP地址进行与运算,若网络地址匹配。则发送数据报给该行的指定的下一跳路由,否则,执行(5)
5)若路由表中有一个默认路由。则发送数据报给路由表中指定的默认路由,否则,执行(6)
6)报告转发分组出错。
3.构成超网(无分类编址CIDR)

为了解决IP地址即将耗尽和因特网主干路由表的项目数急剧增长。采用CIDR。
CIDR特点:
1)CIDR消除了传统地址分类的A,B,C以及划分子网的概念。它的记法是:IP地址::={<网络前缀>,<主机号>};
还采用斜线记法,在IP地址后面加上斜线,然后写上网络前缀所占的位数。
CIDR还可以将地址块10.0.0.0/10记为10/10.另一种简化表示方法是网络前缀的后面加一个表示主机号
2)CIDR把网络前缀都相同的连续的IP地址组成一个CIDR地址块,只要知道任意一个地址即可知道地址块的最小地址和最大地址。以及地址块中的地址数。
最小地址即就是将该IP地址的主机号全设为0.最小地址即就是将该IP地址的主机号全设为1.地址块的个数为2^主机数。
为了方便进行路由选择,CIDR采用32位的地址掩码。地址掩码为1的对应的是网络号,地址掩码为0对应的是主机号。
由于一个CIDR有很多的地址,所以在路由表中就利用CIDR地址块来查找目的网络,这种地址的聚合常称为路由聚合。路由聚合也称为构成超网。

路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高整个因特网的性能。

CIDR是将网络前缀缩短,网络前缀越短,其地址块所包含的地址数就越多,而在三级结构的IP地址中,划分子网是是网络前缀变长。

最长前缀匹配:
当采用CIDR时,路由表中的信息就是网络前缀和下一跳地址组成了。但是在查找路由表的时候,网络前缀可能会得到多个匹配结果。那么选择哪一条路由呢?
正确的答案是:选择网络前缀最长的路由。网络前缀越长,地址块就越小,路由就越具体。最长前缀匹配又称最佳匹配。
使用二叉线索树查找路由表。为提高二叉线索树的查找速度,广泛使用了各种压缩技术。

4.网际控制报文协议ICMP
为了更有效的转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP。
ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP作为IP数据报的数据加上IP数据报的首部,组成IP数据报发送出去。
ICMP分为:ICMP差错报告报文和ICMP询问报文。
ICMP报文组成:类型+代码+检验和
ICMP差错报文有五种:
1)终点不可达
2)源点抑制
3)时间超过
4)参数问题
5)改变路由(重定向)
不应发送ICMP差错报文的情况:
1)出错后不再发送
2)对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
3)对具有多播地址的数据报都不发送ICMP差错报文。
4)对具有特殊地址(127.0.0.1或0.0.0.0)的数据报不发送ICMP差错报文。

ICMP请求报文有两种:
1)回送请求和回答:主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机或者路由器必须给源主机或路由器回送回答报文
2)时间戳请求和回答:ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。

ICMP的应用举例:
分组网间探测PING:是应用层直接使用网络层的一个例子,没有通过运输层的TCP和UDP。使用了ICMP的请求与回送回答报文。用来测试两个主机之间的连通性。
tracert命令:跟踪一个分组从源点到终点的路径。

路由器:路由器是一种具有多个输入输出端口的专用计算机,其任务是转发分组。从某个输入端口收到的分组,按照分组要去的地方,把该分组从路由器的某个合适输出端口,转发给下一跳路由器,下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
整个路由器的结构可分为:路由选择部分(根据路由选择协议(RIP,OSPF)构造出路由表,更新和维护路由表)和分组转发部分(根据转发表对分组进行处理,从合适输出端口转发出去)。
若路由器的输入或输出队列产生溢出的时候和设备或线路出现故障的时候可能会使分组丢失。

5.IP多播
在一对多的通信中,IP多播可大大节约网络资源。
IP多播分为两种:在本局域网上进行硬件多播,另一种是在因特网的范围进行多播。
多播只能用于目的地址不能用于源地址,多播数据报也是尽最大努力交付,不保证能够交付多播组内的所有成员
多播地址和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议(IGMP)。
在局域网上进行硬件多播:
由于多播地址与以太网硬件地址的映射关系不是唯一的,因此受到多播数据报的主机还要在IP层利用软件进行过滤,把不是本机要接收的数据报丢弃。
IP多播需要的协议:IGMP协议(使得连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出某个多播组)和多播路由选择协议(找到以源主机为根节点的多播转发树,动态适应多播组成员变化,使用最小代价传送给所有的组成员)。
转发多播数据报时使用了以下三种方法:1)洪泛与剪除2)隧道技术3)基于核心的发现技术

6.虚拟专用网VPN
当有的很大机构有许多部分分布在相距很远的地方,而且每一个地点都有自己的专用网,假定这些分布在不同地点的需要经常通信,
为了节约成本,这时可以利用公用的因特网作为本机构各专用网之间的通信载体,采用隧道连接,这样的专用网又称为虚拟专用网VPN。并且所有通过
因特网传送的数据都必须加密。一个机构要构建自己的VPN,就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的VPN系统都知道其他场所的地址。
内联网VPN和外联网VPN(有外部机构参与)都是基于TCP/IP协议,还有远程接入VPN(视频会议)

7.网络地址转换NAT
专用网内部的主机已经分配到本地IP地址,但现在又想和因特网上的主机通信,这时可采取网络地址转换。
需要在专用网连接到因特网的路由器上安装NAT软件,装有NAT软件的路由器叫做NAT路由器,它至少有一个外部全球IP地址。
这样所有使用本地的主机在和外部通信时,都要在NAT路由器上将本地地址转化为全球IP地址,才能和因特网连接。
当NAT路由器具有N个全球IP地址时,专用网内最多可以同时有N个主机接入到因特网。专用网内较多数量的主机可以轮流使用NAT路由器有限数量的全球IP地址
为了更加有效地利用NAT路由器上的全球IP地址,现在常用的NAT转换表吧运输层的端口也利用上,这样就可以使多个拥有本地地址的主机,共用一个NAT路由器上的全球IP地址,
因而可以同时和因特网上的不同主机进行通信。

运输层:
端到端的通信是应用进程之间的通信。运输层有一个很重要的功能就是复用和分用。
复用:在发送方不同的应用进程都可以使用同一个运输层协议传送数据,前提是加上适当的首部。
分用:接收方的运输层在剥去报文的首部后能将这些数据正确交付目的应用进程。
网络层是为主机之间提供逻辑通信,运输层提供的是应用进程之间的逻辑通信。
在网络层,IP数据报首部中的检验和只检查首部是否出现差错而不检查数据部分。但是运输层还要对收到的报文进行差错检测。
当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信的铣刀相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,依旧是不可靠信道。
运输层的两个主要协议:
1)用户数据报协议(UDP)
传送数据之前不需建立连接,收到之后不用确认的不可靠交付,即就是无连接的,尽最大努力交付,面向报文的,没有拥塞控制的,支持一对一,一对多,多对多的交互通信,首部开销小只有8个字节。
对于有一些使用UDP的实时应用,需要对UDP的不可靠传输进行改进,以减少数据的丢失。如采用纠错或者重传已丢失的报文。
UDP的首部格式:源端口+目的端口+长度+检验和(把首部和数据部分一起检验)。
当IP层->运输层传送数据报时,运输层根据首部中的目的端口,将UDP数据报通过相应的端口上交最后的终点-应用进程。
如果端口号不正确,就丢弃该报文,并由网际控制报文协议ICMP发送端口不可达差错报文给发送方。
UDP的发送报文长度是应用进程给出的。
2)传输控制协议(TCP)
面向连接的,可靠的,全双工的,面向字节流的运输服务。支持一对一,每一条TCP连接只能有两个端点,TCP并不关心应用进程一次将多长的报文发送给TCP缓存中,而是根据对方给出的窗口值和当前的网络拥塞程度来决定报文段应该包含多少字节,若TCP缓存太长,则划分短点,若太短,则可等待累积足够多再发送。
同一个IP地址有多个不同的TCP连接,而同一个端口也可以出现在多个不同的TCP连接中。

端口号可以用来标识主机上的某一个应用进程。这种在协议栈层间的抽象的协议端口是软件端口。
硬件端口是不同的硬件设备进行交互的接口,而软件端口是各种协议进程和运输实体进行层间交互的一种地址。
1)服务器使用的端口号
熟知端口号或系统端口号:0-1023 登记端口号:1024-49151
常用的熟知的端口号: FTP-21,TELENT-23,SMTP-25,DNS-53,TFTP-69,HTTP-80,SNMP-161,SNMP(trap)-162.
2)客户端使用的端口号
49152-65535.这类端口仅在客户进程运行时才动态选择,因此又叫做短暂端口号。通信结束后,使用过的端口号就不存在。

可靠传输的工作原理:

1)停止等待协议(在不可靠的网络上实现可靠的通信)
每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。
这里有三种情况:
a**)无差错情况**。发送方发完后暂停发送,收到确认后再发送。
b)有差错情况。可能是收到有差错的分组或传输过程中丢失。超时重传。发送完之后暂时保留已发送分组副本,分组和确认分组进行编号。重传时间比分组传输平均时间更长些。
c)确认丢失和确认迟到。丢弃重复的分组,向发送方恢复确认。
如果不断重传分组并且总是收不到确认,说明通信吸纳路太差,不能进行通信。
为了提高传输效率,发送方可以不使用低效的停止等待协议,而是采用流水线传输。即发送方连续发送多个分组,不必发完一个分组就停下来等待对方的确认。当使用流水线传输时,即可使用连续ARQ协议和滑动窗口协议。
2)连续ARQ协议
接收方采用累积确认的方式。对按序到达的最后一个分组发送确认。表示到这个分组为止的所有分组都已经正确收到了。
滑动窗口的分组发送是按照序号从小到大。
TCP报文首部格式:
源端口+目的端口+序号(报文段序号)+确认号+数据偏移(TCP首部长度)+保留+紧急URG(URG=1有效,表示有紧急数据)+确认ACK(ACK=1有效)+推送PSH(使其尽快交付接收应用进程)+复位RST(RST=1表示TCP连接出现严重差错)
+同步SYN(建立连接时同步序号)+终止FIN(FIN=1释放链接)+窗口(接收窗口)+检验和+紧急指针(URG=1有效,表名紧急数据大小)+选项
TCP可靠传输的实现:
1.以字节为单位的滑动窗口
发送窗口=已发送未收到确认+允许发送但尚未发送
发送窗口通常是不断向前移动,但也有可能不动:1)未收到新的确认2)收到确认但是对方通知的接收窗口变小
接收方只能对按序收到的数据的最高序号给予确认。
当发送窗口已经发送完,但是还没有再收到确认,这时可用窗口为0,必须停止发送。
TCP存在发送缓存和接收缓存。
发送缓存用来存放:1)发送方准备发送的数据 2)已经发送尚未收到确认的数据
接收缓存用来存放:1)按序到达,但尚未被应用程序读取的数据 2)未按序到达的数据
要注意的几点:
a)发送窗口并不总是和接受窗口一样大
b)对于不按序到达的数据,通常临时存放在接收窗口,等收到所缺的字节流后,再交付上层应用进程。
c)TCP要求接收方必须有累积确认的功能,减少传输开销。
2.超时重传的时间的选择
TCP发送方在规定的时间内没收到确认就要重传已发送的报文段。虽然重传概念是简单的,但是重传时间的选择是较为复杂的事。
TCP采用了一种自适应算法,记录报文的发送时间和收到确认的时间。时间之差就是报文段的往返时间RTT。TCP保留了RTT的加权平均往返时间RTTs.
当进行重传之后,怎么判断是对先发送的报文段的确认还是对后来重传的报文段的确认呢?
正确的方法是:报文段每重传一次,就把超时重传时间RTO增大一些,取新的重传时间为2倍的旧的重传时间。当不再发生报文段的重传时,才计算RTO。
3.选择确认SACK
只传送缺少的数据而不重传已经正确到达接收方的数据。使得TCP首部选项加上允许SACK选项,指明字节块边界信息。
TCP的流量控制(发送方的发送速率不要太快,要让接收方来得及接收)
1)利用滑动窗口实现
发送窗口不超过接收方给出的接收窗口的数值。
设置持续计时器,只要一方收到对方的零窗口通知就启动持续计时器。若设置计时器的时间到期,就发送零窗口探测报文,在确认该报文时给出窗口值,若窗口值仍为0,则重新设置计时器。
2)传输效率
如何控制TCP发送报文段的时机?
a)Nagle算法。当发送应用进程将发送数据逐个字节送到TCP缓存中,发送方先把第一个数据字节发出,把后面到达的数据字节缓存起来。当收到第一个确认的时候,再把发送缓存中的所有数据段组装成一个报文发送出去。
当到达的数据已经达到发送窗口大小的一般或已经达到报文段的最大长度时,就立即发送一个报文段。这样有利于提高网络吞吐量。
b)糊涂窗口综合症
当接收缓存已有足够的空间容纳一个最长的报文或者等到接收缓存有一半空闲的空间。满足其一,接收方就发出确认报文,并向发送方通知当前窗口大小。发送方将数据累积成足够大报文或达到对方接收缓存一般大小。
上述两种方法可配合使用,使得发送方不发送很小的报文段的同时,接收方也不要在缓存刚有了一点小的空间就急忙把这个很小的窗口大小信息通知给发送方。
3)拥塞控制(对网络中某一资源的需求超过当前可用资源数目)
几种拥塞控制方法:
1)慢开始和拥塞避免
当主机开始发送数据的时候,如果发送大量字节到网络会引起拥塞,即要从小到大逐渐增大发送窗口,每收到一个对新的报文段的确认之后,
将拥塞窗口增加至多一个MMS的值,用这样的方法增大发送方的拥塞窗口。每经过一个传输轮次,拥塞窗口加倍。为了防止拥塞窗口增长过大引起网络拥塞,
还需要设置一个慢开始门限,拥塞避免的思路是让拥塞窗口缓慢的增长,每经过一个RRT,就把对方的拥塞窗口加1.而不是加倍。
无论是在慢开始阶段阶段还是拥塞避免阶段,只要发送方判断网络出现拥塞(没按时收到确认),就要把慢开始门限(ssthresh)设置为出现拥塞时发送窗口值的一半。
然后把拥塞窗口cwnd拥塞窗口置为1,执行慢开始算法。
这里写图片描述
2)快重传和快恢复
快重传要求接收方每收到一个失序的报文段后就立即发出重复确认,而不要等待自己发送数据时才进行捎带确认。使得发送方及早知道有报文段未达到。
当发送方一连收到三个重复确认就应该立即重传对方尚未收到的报文段,而不必继续等待设置的计时器到期,由于发送方能尽早重传未被确认的报文段,因此可提高网络吞吐量。
当发送方一连收到三个重复确认就执行乘法减小,将cwnd的值设置为慢开始门限减半后的数值,然后开始执行拥塞避免。
发送方的窗口值取接收窗口和拥塞窗口的最小值。
这里写图片描述
3)随机早期检测(网络层)
由于路由器的队列是先进先出,由于队列是有限的,当队列已满时,以后再到达的分组将被丢弃。即尾部丢弃策略。路由器的尾部丢弃往往会导致一连串分组的丢失,这就使发送方出现超时重传,
使TCP进入拥塞控制的慢开始状态,更为严重的是,有时会影响很多TCP连接,使得他们在同一时间都进入慢开始状态。为了避免发生全局同步现象,可以在路由器采用随机早期检测RED措施。
使得路由器维持两个参数,最小门限和最大门限,当平均队列长度小于最小门限,则放入队列排队。若平均队列长度大于最大门限,则丢弃。
如果平均队列长度在两者之间,则按照某一概率p将新到达的分组丢弃。一般情况下,最大门限等于最小门限值的2倍。

TCP的三次握手四次挥手:
为什么客户端还要再发送一次确认呢?为了防止已经失效的连接请求报文突然又重传送到了服务器端,因此产生了错误。
三次握手:
这里写图片描述
四次挥手:
这里写图片描述
当被动关闭的一方收到连接释放请求发出确认之后,这时的TCP处于半关闭状态。若此时该端向主动关闭的一方发送数据,仍要进行接收。

当主动关闭的一方,在收到对方的连接释放请求报文的时候,必须对此发出确认,然后进入TIME_WAIT状态,这时TCP连接还未释放掉,必须等待2MSL,主动关闭的一方才进入closed状态。

为什么要发送完确认之后要等待2MSL?
1)保证主动关闭一方发送的最后一个ACK报文段能够到达被动关闭一方
2)防止已经失效的连接请求报文段出现在本链接中。等待时间2MSL,可使本次连接中产生的所有报文段从网络中消失。

TCP还设有一个保活计时器,假设客户端已经和服务器端建立了TCP连接,但后来客户端的主机突然出现故障,显然服务器不能白白等下去。
因此,服务器端每收到一次客户端的数据,重新设置保活计时器,时间设置通常是两小时。若两小时没收到客户端的数据,服务器端就发送探测报文。
每75分钟发送一次,若一连发送10个报文段后仍无客户端的响应,则服务器端认为客户端出现故障,关闭这个连接。

应用层:

1.HTTP和HTTPS区别
1)http协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
https运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。
2)http的端口号是80,https的端口号是443.
3)https是安全的http.
4)采用https 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 该证书只有用于对应的server 的时候,
客户度才信任次主机. 有些要求有客户端证书,其实就类似表示个人信息的时候,除了用户名/密码, 还有一个CA 认证过的身份.
应为个人证书一般来说上别人无法模拟的,所有这样能够更深的确认自己的身份

2.用户输入网址按下回车会发生什么?
当我们按下回车键之后,DNS开始域名解析。应用进程调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS请求报文中。
以UDP的用户数据报方式发送给本地域名服务器,使用UDP是为了减少开销,当本地域名服务器在查找域名之后,把对应的IP地址放在
回答报文中返回。若本地域名服务器不能回答请求,则此域名服务器就暂时成为DNS的另一个客户,并向其他域名服务器发出查询请求,
这种过程直至找到能够回答该请求的域名服务器为止。在将域名解析为IP地址之后,该进程建立TCP连接,将IP数据报发送到网络层,
然后查找相应路由表,根据ARP协议将物理地址封装在帧中,并将该帧发送给相应服务器,若中途报文丢失出现差错等,会回送ICMP差错报文,
至此,完成三次握手,建立连接。浏览器发送获取资源的方法,服务器给予响应报文,并将要获取的文件回送给本地主机。
然后通过四次挥手,双方断开TCP连接。得到文件后的本地主机,通过浏览器去解析这个文件,在浏览器上呈现出来。
推荐链接:http://www.nowcoder.com/discuss/2025

3.HTTP常见状态码?(推荐链接:http://www.cnblogs.com/loveyakamoz/archive/2011/09/03/2165266.html)
这里写图片描述
1**
100初始的请求已经接受,客户应当继续发送请求的其余部分
101服务器将遵从客户的请求转换到另外一种协议
2**
200请求成功。一般用于GET与POST请求
3**
301永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI.
304客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
305客户请求的文档应该通过Location头所指明的代理服务器提取
4**
403资源不可用。
404服务器无法根据客户端的请求找到资源.
5**
500服务器内部错误,无法完成请求
503服务器由于维护或者负载过重未能应答。

2 0