0.互联网的组成
边缘部分:所有连接在互联网上的主机(主机指的是所有与网络直接相连的计算机)组成,用户可以直接使用,用来进行主机之间的通信和资源共享。
核心部分:大量的网络与连接这些网络所使用的路由器构成,为边缘部分提供服务。
边缘部分总结:边缘部分主要使用核心部分所提供的服务,使得许多主机之间能够互相通信并进行交换或共享信息。计算机之间的通信指的是主机A上的一个进程与主机B上的另一个进程之间进行通信。通信的方式主要有两种:
a.客户-服务器方式:即C /S方式。客户端发送服务的请求,服务器是服务的提供方。
b.对等连接方式(P2P):两台通信的主机之间不区分哪个是客户,哪个是服务端,只要两台主机都运行了对等连接软件就可以进行平等、对等的连接通信。
核心部分总结:核心部分起到特殊作用的是路由器,它是一个专用的计算机,主要作用是分组交换和存储转发的功能。
电路交换:使用在电话机之间的通信,使用电话交换机解决了多个电话机之间通信需要大量的电线的问题。电路交换的过程是:建立连接(开始占用通信资源)---通话(一直占用通信资源)----释放连接(归还通信资源)。电路交换的特点是:通话期间,通话的两个用户会始终占用通信资源。使用电路交换传输计算机数据时,传输效率往往会很低。因为计算机数据具有突变式的特点,线路上真正用来传输数据的时间往往不到10%,大部分通信线路资源绝大部分时间都被浪费了。整个报文的比特流连续的从源点直达终点。
分组交换:采用存储转发的技术,把一个报文(需要发生出去的整块数据)划分成几组分组后再进行传输。将报文划分成更小的等长数据段,然后加上首部(包含一些控制信息),构成了一个分组,分组的首部称为一个包头。单个分组(只是整个报文的一部分)传送到相邻结点,存储下来后查找转发表,转发到下一个结点。
报文交换:整个报文先传送到相邻结点,全部存储下来后查找转发表,转发到下一个结点。
路由器的工作流程:路由器接收到一个分组后,暂存数据到路由器自己的缓存中即自身的存储器中,然后检查其首部,查找转发表。按照首部中的目的地址,找到合适的接口转发除去,把分组交给下一个路由器。这样一步一步以存储转发的方式,把分组交给最终的目的主机。路由器只是暂存一个分组,不是整个报文。分组在哪段链路上传送时才会占用此段链路上的通信资源,在各分组传输之间的空闲时间,此链路也是可以被其他主机发送的分组使用。
1.计算机网络中的常见硬件设备介绍
物理层:实现网络互连的主要设备有中继器和HUB(集线器)。中继器的主要功能是对接收到的信号进行再生整形放大以扩大网络的传输距离;集线器在此基础上将所有的节点集中在以它为中心的节点中,可组成星型拓扑结构。
数据链路层:实现网络互联的主要设备有二层交换机和网桥。交换机是一种基于MAC识别,能完成封装转发数据包功能的网络设备。它可以“学习”MAC地址,并把其存放在内部地址表中,当一个数据帧的目的地址在MAC地址表中有映射时,它被转发到连接目的节点的端口而不是所有端口。 交换机将局域网分为多个冲突域,每个冲突域都是有独立的宽带,因此大大提高了局域网的带宽。网桥是数据链路层互联的设备,在网络互联中可起到数据接收、地址过滤与数据转发的作用,可用来实现多个不同网络系统之间的数据交换。
网络层:实现网络互连的主要设备有三层交换机和路由器。路由器用于连接多个逻辑上分开的网络,具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网。
传输层(包括传输层)以上:实现网络互连的设备有网关。网关在网络层以上实现网络互连,用于两个高层协议不同的网络互连。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
2.计算机网络体系结构
应用层:应用层是体系结构中的最高层。应用层直接为用户的应用进程程序提供服务。这里的进程就是指正在运行的程序。在因特网中的应用层协议很多,如支持万维网应用的http协议支持电子邮件的SMTP协议,支持文件传送的FTP协议等。运输层:运输层的任务就是负责向两个主机中进程之间的通信提供服务。由于一个主机可以同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程可以同时使用下面运输层的服务,分用就是运输层把收到的信息分别交付给上面应用层中的相应进程。运输层主要使用下面两个协议: a.传输控制协议TCP:面向连接的,数据传输的基本单位是报文段,能够提供可靠的交付。
b.用户数据包协议UDP:无连接的,数据传输的基本单位是用户数据报,不能保证提供可靠的交付,只能提供尽最大努力交付。
网络层: 负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫作IP数据报。数据链路层:两个主机之间的数据传输,总是在一段一段的链路上传送的。在两个相邻结点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻结点间的链路上透明地传送帧中的数据,每一帧包括数据和必要的控制信息。物理层:在物理层上传送的数据单位是比特。物理层的任务就是透明地传送比特流。3.各层的作用和支持的协议
4.物理层
传输数据的基本单位:比特流0和1。数据传输系统:源系统(源点、发送器) --> 传输系统 --> 目的系统(接收器、终点)。通道:
单工通道:只有一个方向通信,没有反方向交互,如广播半双工通信:通信双方都可发消息,但不能同时发送或接收
全双工通信:通信双方可以同时发送和接收信息
通道复用技术: 频分复用(FDM):不同用户在不同频带,所用用户在同样时间占用不同带宽资源。时分复用(TDM):不同用户在同一时间段的不同时间片,所有用户在不同时间占用同样的频带宽度。
波分复用(WDM):光的频分复用。
码分复用(CDM):不同用户使用不同的码,可以在同样时间使用同样频带通信。
5.数据链路层
主要信道:
a.点对点信道b.广播信道点对点信道:a.数据单元:帧
b.三个基本问题:
封装成帧:把网络层的 IP 数据报封装成帧,SOH - 数据部分 - EOT
透明传输:不管数据部分什么字符,都能传输出去;可以通过字节填充方法解决(冲突字符前加转义字符)
差错检测:降低误码率(BER,Bit Error Rate),广泛使用循环冗余检测(CRC,Cyclic Redundancy Check)
c.点对点协议(Point-to-Point Protocol):用户计算机和 ISP 通信时所使用的协议。广播信道:a.硬件地址(物理地址、MAC 地址)b.单播(一对一):收到的帧的 MAC 地址与本站的硬件地址相同c.广播(一对全体):发送给本局域网上所有站点的帧d.多播(一对多):发送给本局域网上一部分站点的帧6.网络层
IP(Internet Protocol,网际协议)是为计算机网络相互连接进行通信而设计的协议。
ARP(Address Resolution Protocol,地址解析协议)
ICMP(Internet Control Message Protocol,网际控制报文协议)
IGMP(Internet Group Management Protocol,网际组管理协议)
6.1 IP网际协议
IP地址:Internet上每台主机都必须有一个唯一的地址以区别于其他主机,这个地址就是Internet地址,也称作IP地址;IPv4(第四版本的IP协议)是构成现今互联网技术的基石协议;IP地址的构成:IP地址由32位二进制构成,共约40亿个,由网络地址和主机地址构成;一个IP地址分为四段:a.b.c.d ,段与段之间用原点分开。IP地址表示方法:二进制形式和点分十进制形式;IPv6(第六版IP协议):一个IP地址由128位二进制组成,采用冒分16进制。特殊的IP地址:a.专用IP地址:三类网络号,这些地址不会被Internet分配因此也不能被路由。
A类:10.0.0.0~10.255.255.255 (长度相当于1个A类IP地址)
B类:172.16.0.0~172.31.255.255 (长度相当于16个连续的B类IP地址)
C类:192.168.0.0~192.168.255.255(长度相当于256个连续的C类IP地址)
b. 特殊IP地址:
0.0.0.0 是全零网络代表默认网络,帮助路由器发送路由表中无法查询的包。如果设置了全零网络路由,路由器中无法查询的包都会被送到全零网络的路由中去;
127.0.0.1 称回送地址,属于环回地址,IP从127.0.0.0到127.255.255.255都将环回到本地主机中;
255.255.255.255 限制广播地址,对本机来说,这个地址指本网段内(同一广播域)所有主机;
子网掩码:
子网掩码:是一个32位二进制的值,可以将IP地址分离出网络地址和主机地址,采用点分十进制的形式。子网掩码不能单独存在它必须结合IP地址一起使用。子网掩码的作用:子网掩码可以判断两台计算机是否属于同一网段,将计算机10进制的IP地址和子网掩码转换为2进制的形式,然后进行‘与’运算,如果网络地址是相同的,那么两台计算机就属于同一网段;子网掩码可分为缺省子网掩码和自定义子网掩码(1).缺省(默认)子网掩码:即为划分子网,对应的网络号都是1,主机号位都是0;
a.A类网络缺省(默认)子网掩码:255.0.0.0
b.B类网络缺省(默认)子网掩码:255.255.0.0
c.C类网络缺省(默认)子网掩码:255.255.255.0
(2).自定义子网掩码是将一个网络划分为几个子网,需要每一段使用不同的网络号或者子网号,实际上我们可以认为是将主机号分为两个部分:子网号和子网主机号。形式如下:
a.未做子网划分的IP地址:网络号+主机号
b.做子网划分的IP地址:网络号+子网号+子网主机号。也就是说,IP地址在子网划分后,以前的主机号一部分给了子网号,剩下的是子网主机号;
子网掩码通常有两种格式的表示方式:
(1).IP地址后面加上‘/’符号以及1-32位的数字,其中1-32的数字表示子网掩码中网络标识位的长度;例如:192.168.1.1/24的子网掩码也可以表示为255.255.255.0。(2).IP地址后面加上‘/’符号以及1-32位的数字,其中1-32的数字表示子网掩码中网络标识位的长度;例如:192.168.1.1/24的子网掩码也可以表示为255.255.255.0IP数据报格式:
6.2 ICMP网际控制报文协议
ICMP报文格式:
ICMP的应用:
a.PING(Packet InterNet Groper,分组网间探测)测试两个主机之间的连通性
b.TTL(Time To Live,生存时间)该字段指定 IP 包被路由器丢弃之前允许通过的最大网段数量
6.3 内部网关协议
RIP(Routing Information Protocol,路由信息协议)OSPF(Open Sortest Path First,开放最短路径优先)6.4 外部网关协议
BGP(Border Gateway Protocol,边界网关协议)
6.5 IP多播
IGMP(Internet Group Management Protocol,网际组管理协议)
多播路由选择协议6.6 VPN和NAT
VPN(Virtual Private Network,虚拟专用网)NAT(Network Address Translation,网络地址转换)6.7 路由表包含什么?
(1) 网络 ID(Network ID, Network number):就是目标地址的网络 ID。(2) 子网掩码(subnet mask):用来判断 IP 所属哪个子网络。(3) 下一跳地址/接口(Next hop / interface):就是数据在发送到目标地址的旅途中下一站的地址。其中 interface 指向 next hop(即为下一个 route)。一个自治系统(AS, Autonomous system)中的 route 应该包含区域内所有的子网络,而默认网关(Network id: 0.0.0.0, Netmask: 0.0.0.0)指向自治系统的出口。根据应用和执行的不同,路由表可能含有如下附加信息:a.花费(Cost):就是数据发送过程中通过路径所需要的花费
b.路由的服务质量
c.路由中需要过滤的出/入连接列表
7.传输层
传输层协议:TCP(Transmission Control Protocol,传输控制协议)
UDP(User Datagram Protocol,用户数据报协议)
端口号:7.1 TCP
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,其传输的单位是报文段。
TCP特点:a.面向连接b.只能点对点(一对一)通信c.可靠交互d.全双工通信e.面向字节流TCP如何保证可靠传输?
a.确认和超时重传
b.数据合理分片和排序
c.流量控制
d.拥塞控制
e.数据校验
TCP报文结构TCP首部
TCP:状态控制码(Code,Control Flag),占 6 比特,含义如下:
URG:紧急比特(Urgent),当 URG=1 时,表明紧急指针字段有效,代表该封包为紧急封包。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据), 且上图中的 Urgent Pointer 字段也会被启用。
ACK:确认比特(Acknowledge)。只有当 ACK=1 时确认号字段才有效,代表这个封包为确认封包。当 ACK=0 时,确认号无效。
PSH:(Push function)若为 1 时,代表要求对方立即传送缓冲区内的其他对应封包,而无需等缓冲满了才送。
RST:复位比特(Reset),当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
SYN:同步比特(Synchronous),SYN 置为 1,就表示这是一个连接请求或连接接受报文,通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。
FIN:终止比特(Final),用来释放一个连接。当 FIN=1 时,表明此报文段的发送端的数据已发送完毕,并要求释放传输连接。
7.2 UDPUDP是 OSI(Open System Interconnection 开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,其传输的单位是用户数据报。
UDP特点:a.无连接b.尽最大努力交付c.面向报文d.没有拥塞控制e.支持一对一、一对多、多对多的交互通信e.首部开销小UDP报文结构:
UDP首部:
7.3 TCP与UDP的区别
(1).TCP面向连接、UDP是无连接的;(2).TCP提供可靠的服务、也就是说,通过TCP连接传输的数据是无差错、不丢失、不重复且按序到达;UDP尽最大努力交付,即不保证可靠交付(3).TCP的逻辑通信信息是全双工的可靠信息;UDP则是不可靠信息(4).每一条TCP连接只能是点对点的;UDP支持一对多、多对一、多对多的交互通信(5).TCP面向字节流(可能会出现黏包问题),实际上是TCP白数据看成一连串无结构的字节流;UDP是面向报文的(不会出现黏包问题)(6).UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)(7).TCP首部开销20字节;UDP的首部开销小,只有8字节7.4 TCP的黏包问题
出现黏包问题的原因:TCP 是一个基于字节流的传输服务(UDP 基于报文的),“流” 意味着 TCP 所传输的数据是没有边界的,所以可能会出现两个数据包黏在一起的情况。
解决方法:a.发送定长包。如果每个消息的大小都是一样的,那么在接收对等方只要累计接收数据,直到数据等于一个定长的数值就将它作为一个消息。
b.包头加上包体长度。包头是定长的 4 个字节,说明了包体的长度。接收对等方先接收包头长度,依据包头长度来接收包体。
c.在数据包之间设置边界,如添加特殊符号 \r\n 标记。FTP 协议正是这么做的。但问题在于如果数据正文中也含有 \r\n,则会误判为消息的边界。
d.使用更加复杂的应用层协议
7.5 TCP流量控制
流量控制的概念:让发送方的发送速率不要太快,要让接收方来得及接收。
具体方法:利用可变窗口方法对流量进行控制。如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。设A向B发送数据,在连接建立时,B告诉了A:“我的接收窗口是rwnd=400 ”(这里的 rwnd 表示 receiver window) 。因此,发送方的发送窗口不能超过接收方给出的接收窗口的数值。请注意,TCP的窗口单位是字节,不是报文段。TCP连接建立时的窗口协商过程在图中没有显示出来。再设每一个报文段为100字节长,而数据报文段序号的初始值设为1。大写ACK表示首部中的确认位ACK,小写ack表示确认字段的值ack。
从图中可以看出,B进行了三次流量控制。第一次把窗口减少到rwnd=300 ,第二次又减到了rwnd=100 ,最后减到rwnd=0 ,即不允许发送方再发送数据了。这种使发送方暂停发送的状态将持续到主机B重新发出一个新的窗口值为止。B向A发送的三个报文段都设置了ACK=1 ,只有在ACK=1时确认号字段才有意义。TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口控测报文段(携1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。
7.6 TCP拥塞控制
拥塞控制的概念:拥塞控制就是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载。
解决方法:发送方维持一个拥塞窗口 cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。(1).慢启动(slow-start):当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口cwnd ,可以使分组注入到网络的速率更加合理。每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。另外,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(如何设置ssthresh)。慢开始门限ssthresh的用法如下:
a.当 cwnd < ssthresh 时,使用上述的慢开始算法。
b.当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
c.当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
(2).拥塞避免(congestion avoidance ):让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。如下图,用具体数值说明了上述拥塞控制的过程。现在发送窗口的大小和拥塞窗口一样大。
a.当TCP连接进行初始化时,把拥塞窗口cwnd置为1。前面已说过,为了便于理解,图中的窗口单位不使用字节而使用报文段的个数。慢开始门限的初始值设置为16个报文段,即 cwnd = 16 。
b.在执行慢开始算法时,拥塞窗口 cwnd 的初始值为1。以后发送方每收到一个对新报文段的确认ACK,就把拥塞窗口值另1,然后开始下一轮的传输(图中横坐标为传输轮次)。因此拥塞窗口cwnd随着传输轮次按指数规律增长。当拥塞窗口cwnd增长到慢开始门限值ssthresh时(即当cwnd=16时),就改为执行拥塞控制算法,拥塞窗口按线性规律增长。
c.假定拥塞窗口的数值增长到24时,网络出现超时(这很可能就是网络发生拥塞了)。更新后的ssthresh值变为12(即变为出现超时时的拥塞窗口数值24的一半),拥塞窗口再重新设置为1,并执行慢开始算法。当cwnd=ssthresh=12时改为执行拥塞避免算法,拥塞窗口按线性规律增长,每经过一个往返时间增加一个MSS的大小。强调:“拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。
(3).快重传(fast retransmit):如果发送方设置的超时计时器时限已到但还没有收到确认,那么很可能是网络出现了拥塞,致使报文段在网络中的某处被丢弃。这时,TCP马上把拥塞窗口 cwnd 减小到1,并执行慢开始算法,同时把慢开始门限值ssthresh减半。这是不使用快重传的情况。快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。显然,接收方不能确认M4,因为M4是收到的失序报文段。根据可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了接收方的四个对M2的确认,其中后三个都是重复确认。快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必继续等待M3设置的重传计时器到期。由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。
(4).快恢复(fast recovery):
a.当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意:接下去不执行慢开始算法。
b.由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
7.7 TCP传输连接管理[重点]
(1).TCP建立连接:三次握手
TCP建立连接全过程详细过程:
a.B的TCP服务器进程首先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。如有,就作出响应。b.A的TCP客户进程也是首先创建传输控制模块TCB,然后向B发出连接请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x。TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但是要消耗一个序号。这时,TCP客户进程进入SYN-SENT(同步已发送)状态。c.B收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应把SYN和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始序号seq=y。注意:这个报文段也不能携带数据,但同样要消耗一个序号。这时TCP服务器进程进入SYN-RECV(同步收到)状态。d.TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。TCP标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号。在这种情况下,下一个数据报文段的序号仍然是seq=x+1。这时,TCP的连接已经建立,A进入ESTABLISHED(已建立连接)状态。当B接收到A的确认后,B也进入ESTABLISHED(已建立连接)状态。Q1:TCP为什么要进行三次握手?
a.因为信道不可靠,而 TCP 想在不可靠信道上建立可靠地传输,那么三次通信是理论上的最小值。(而 UDP 则不需建立可靠传输,因此 UDP 不需要三次握手)
b.因为双方都需要确认对方收到了自己发送的序列号,确认过程最少要进行三次通信;
c.为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
(2).TCP断开连接:四次挥手
TCP 断开连接全过程详细解释:
a.A和B都处于ESTABLISHED状态,A的应用进程首先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的FIN置1,其序列号seq=u,它等于前面已经传送过的数据的最后一个字节的序号加1。这时,A进入FIN-WAIT-1(终止等待1)状态,等待B的确认。注意:TCP规定:FIN报文段即使不携带数据,它也会消耗一个序号。b.B收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等待B前面已经传送过的数据的最后一个字节的序号加1。然后B就进入CLOSE-WAIT(关闭等待)状态。TCP服务器进程这时应通知高层应用进程,因而从A到B这个方向的连接就释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍要接收。也就是说,从B到A这个方向的连接并没有关闭,这个连接可能会持续一段时间。c.A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。如果B已经没有要向A发送的数据,其应用进程就会通知TCP释放连接。这时B发出的连接释放报文段必须使FIN=1。现假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须重复上次已经发送过的确认号ack=u+1。这时,B就进入LAST-ACK(最后确认状态),等待A的确认。d.A在收到B的释放连接报文段后,必须对此发出一个确认。在确认报文段中把ACK置1,确认号ack=w+1,而自己的序号是seq=u+1(根据TCP标准,前面发送过的FIN报文段要消耗一个序号)。然后经过时间等待计时器(TIME-WAIT)设置的时间2MSL后,A才进入到CLOSED状态。时间MSL叫做最长报文段寿命。Q2:TCP 为什么要进行四次挥手?因为 TCP 是全双工模式,客户端请求关闭连接后,客户端向服务端的连接关闭(第一和第二次挥手),服务端继续传输之前没传完的数据给客户端(数据传输),服务端向客户端的连接关闭(第三和第四次挥手)。所以 TCP 释放连接时服务器的 ACK 和 FIN 是分开发送的(中间隔着数据传输),而 TCP 建立连接时服务器的 ACK 和 SYN 是一起发送的(第二次握手),所以 TCP 建立连接需要三次,而释放连接则需要四次。
Q3:为什么 TCP 建立连接时可以 ACK 和 SYN 一起发送,而断开连接时则 ACK 和 FIN 分开发送呢?(ACK 和 FIN 分开是指第二次和第三次挥手)
因为客户端请求释放时,服务器可能还有数据需要传输给客户端,因此服务端要先响应客户端 FIN 请求(服务端发送 ACK),然后数据传输,传输完成后,服务端再提出 FIN 请求(服务端发送 FIN);而连接时则没有中间的数据传输,因此连接时可以 ACK 和 SYN 一起发送。Q4:为什么客户端断开连接时,最后需要 TIME-WAIT 等待 2MSL 呢?a.为了保证客户端发送的最后一个 ACK 报文能够到达服务端。若未成功到达,则服务端超时重传 FIN+ACK 报文段,客户端再重传 ACK,并重新计时。b.防止已失效的连接请求报文段出现在本连接中。TIME-WAIT 持续 2MSL 可使本连接持续的时间内所产生的所有报文段都从网络中消失,这样可使下次连接中不会出现旧的连接报文段。8.应用层
8.1 DNS(Domain Name System,域名系统)
域名的产生的原因:我们可以通过IP地址去访问网站,但是对大多数用户来说,访问每个网站都需要记住一串数字是不现实的,所以用户可以通过域名来访问网站。域名,其实是具有一定含义的字符组合。域名系统是因特网上作为域名和IP地址相互映射的一个分布式数据库,能让用户更方便使用互联网。
DNS劫持:指用户访问一个被标记的地址时,DNS服务器故意将此地址指向一个错误的IP地址的行为。范例:收到各种推送广告等网站。
DNS污染:指的是用户访问一个地址,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址的行为。比如不能访问Google、YouTube等。
DNS是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 使用 TCP 和 UDP 端口 53。当前,对于每一级域名长度的限制是 63 个字符,域名总长度则不能超过 253 个字符。域名 ::= {<三级域名>.<二级域名>.<顶级域名>},如:blog.huihut.com8.2 FTP(File Transfer Protocol,文件传输协议)
FTP是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式,使用 TCP 数据报,提供交互式访问,双向传输。TFTP(Trivial File Transfer Protocol,简单文件传输协议)一个小且易实现的文件传输协议,也使用客户-服务器方式,使用UDP数据报,只支持文件传输而不支持交互,没有列目录,不能对用户进行身份鉴定。8.3 TELNET
TELNET 协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
8.4 HTTP(HyperText Transfer Protocol,超文本传输协议)
概念:HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。
请求方法:状态码:
1xx:表示通知信息,如请求收到了或正在进行处理
100 Continue:继续,客户端应继续其请求
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议。
2xx:表示成功,如接收或知道了
200 OK: 请求成功
3xx:表示重定向,如要完成请求还必须采取进一步的行动
301: 永久重定向。请求的资源已被永久的移动到新 URL,返回信息会包括新的 URL,浏览器会自动定向到新 URL。今后任何新的请求都应使用新的 URL 代替。
302:临性重定向,即以后还可能有变化。
4xx:表示客户的差错,如请求中有错误的语法或不能完成。
400 Bad Request: 客户端请求的语法错误,服务器无法理解。
401 Unauthorized: 请求要求用户的身份认证。
403 Forbidden: 服务器理解请求客户端的请求,但是拒绝执行此请求。
404 Not Found: 服务器无法根据客户端的请求找到资源(网页)。
408 Request Timeout: 服务器等待客户端发送的请求时间过长,超时。
5xx:表示服务器的差错,如服务器失效无法完成请求。
500 Internal Server Error: 服务器内部错误,无法完成请求。
503 Service Unavailable: 由于超载或系统维护,服务器暂时的无法处理客户端的请求。
504 Gateway Timeout: 充当网关或代理的服务器,未及时从远端服务器获取请求。
GET方法与POST方法的区别:
a.get重点在从服务器上获取资源,post重点在向服务器发送数据;b.get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?"连接,多个请求数据间用"&"连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,这个过程用户是可见的;post传输数据通过Http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的;c.get传输的数据量小,因为受URL长度限制,但效率较高;post可以传输大量数据,所以上传文件时只能用post方式;d.get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;post较get安全性较高;e.get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。post支持标准字符集,可以正确传递中文字符。Http2.0与Http1.0的区别:(1).Http2.0采用二进制格式非文本格式;
(2).Http2.0是完全多路复用的,非有序并阻塞的只需要一个连接即可实现并行;
(3).使用报头压缩,降低了开销;
(4).Http2.0让服务器可以将响应主动推送到客户端缓存中。
8.5 SMTP(简单邮件传输协议)SMTP是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。它是在 Internet 传输 Email 的标准,是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过 Telnet 程序来测试一个 SMTP 服务器,SMTP 使用 TCP 端口 25。
8.6 DHCP(Dynamic Host Configuration Protocol,动态主机设置协议)
DHCP是一个局域网的网络协议,使用 UDP 协议工作,主要有两个用途:
a.用于内部网络或网络服务供应商自动分配 IP 地址给用户。
b.用于内部网络管理员作为对所有电脑作中央管理的手段
9.当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)
(1).点击网址后,应用层的DNS协议会将网址解析为IP地址;
DNS查找过程:浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存(hosts文件)中是否有这个域名对应的DNS解析结果。若还没有,此时会发送一个数据包给DNS服务器,DNS服务器找到后将解析所得IP地址返回给用户。
(2).在应用层,浏览器会给web服务器发送一个HTTP请求。请求头为:GET http://www.baidu.com/HTTP/1.1;
(3).在传输层,(上层的传输数据流分段)HTTP数据包会嵌入在TCP报文段中;
TCP报文段需要设置端口,接收方(百度)的HTTP端口默认是80,本机的端口是一个1024-65535之间的随机整数,这里假设为1025,这样TCP报文段由TCP首部(包含发送方和接收方的端口信息)+ HTTP数据包组。(4).在网络层中,TCP报文段再嵌入IP数据包中;IP数据包需要知道双方的IP地址,本机IP地址假定为192.168.1.5,接受方IP地址为220.181.111.147(百度),这样IP数据包由IP头部(IP地址信息)+TCP报文段组成。(5).在网络接口层,IP数据包嵌入到数据帧(以太网数据包)中在网络上传送;数据帧中包含源MAC地址和目的MAC地址(通过ARP地址解析协议得到的)。这样数据帧由头部(MAC地址)+IP数据包组成。
(6).数据包经过多个网关的转发到达百度服务器,请求对应端口的服务;
服务接收到发送过来的以太网数据包开始解析请求信息,从以太网数据包中提取IP数据包—>TCP报文段—>HTTP数据包,并组装为有效数据交与对应线程池中分配的线程进行处理,在这个过程中,生成相应request、response。(7).请求处理完成之后,服务器发回一个HTTP响应;请求处理程序会阅读请求及它的参数和cookies。它会读取也可能更新一些数据,并将数据存储在服务器上。处理完毕后,数据通过response对象给客户输出信息,输出信息也需要拼接HTTP协议头部分,关闭后断开连接。断开后,服务器端自动注销request、response对象,并将释放对应线程的使用标识(一般一个请求单独由一个线程处理,部分特殊情况有一个线程处理多个请求的情况)。响应头为:HTTP/1.1200 OK。
(8).浏览器以同样的过程读取到HTTP响应的内容(HTTP响应数据包),然后浏览器对接收到的HTML页面进行解析,把网页显示出来呈现给用户。
客户端接收到返回数据,去掉对应头信息,形成也可以被浏览器认识的页面HTML字符串信息,交与浏览器翻译为对应页面规则信息展示为页面内容。10.MAC地址(物理地址、硬件地址)的概念和作用
概念:MAC地址就是在媒体接入层上使用的地址,也叫物理地址、硬件地址或链路地址,其被固化在适配器的ROM中。可见,MAC地址实际上就是适配器地址或适配器标识符。当某台计算机使用某块适配器后,适配器上的标识符就成为该计算机的MAC地址。MAC地址长度为6字节(48比特),由IEEE的注册管理结构RA进行管理分配。
作用:MAC地址是计算机的唯一标识,在数据链路层中,交换机通过识别MAC地址进行数据包的传输。